Loading sdg-core/src/main/java/es/upv/mist/slicing/slicing/ClassFileLineCriterion.java 0 → 100644 +34 −0 Original line number Diff line number Diff line package es.upv.mist.slicing.slicing; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.body.TypeDeclaration; import java.util.Objects; import java.util.Optional; public class ClassFileLineCriterion extends LineNumberCriterion { private final String fullyQualifiedClassName; public ClassFileLineCriterion(final String fullyQualifiedClassName, int lineNumber, String variable) { super(lineNumber, variable); this.fullyQualifiedClassName = fullyQualifiedClassName; } /** Locates the compilation unit that corresponds to this criterion's file. */ protected Optional<CompilationUnit> findCompilationUnit(NodeList<CompilationUnit> cus) { for (CompilationUnit cu : cus) { if (cu.getTypes().stream() .map(TypeDeclaration::getFullyQualifiedName) .map(o -> o.orElse(null)) .anyMatch(type -> Objects.equals(type, fullyQualifiedClassName))) return Optional.of(cu); } return Optional.empty(); } @Override public String toString() { return fullyQualifiedClassName + "#" + lineNumber + ":" + variable; } } sdg-core/src/main/java/es/upv/mist/slicing/slicing/FileLineSlicingCriterion.java +6 −14 Original line number Diff line number Diff line Loading @@ -2,9 +2,6 @@ package es.upv.mist.slicing.slicing; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.stmt.Statement; import es.upv.mist.slicing.graphs.sdg.SDG; import es.upv.mist.slicing.nodes.GraphNode; import java.io.File; import java.util.Optional; Loading @@ -18,20 +15,15 @@ public class FileLineSlicingCriterion extends LineNumberCriterion { this.file = file; } @Override public Optional<GraphNode<?>> findNode(SDG graph) { Optional<CompilationUnit> optCu = findCompilationUnit(graph.getCompilationUnits()); if (optCu.isEmpty()) return Optional.empty(); return optCu.get().findFirst(Statement.class, this::matchesLine).flatMap(graph::findNodeByASTNode); } /** Locates the compilation unit that corresponds to this criterion's file. */ @Override protected Optional<CompilationUnit> findCompilationUnit(NodeList<CompilationUnit> cus) { for (CompilationUnit cu : cus) { Optional<CompilationUnit.Storage> optStorage = cu.getStorage(); if (optStorage.isPresent() && optStorage.get().getFileName().equals(file.getName()) && optStorage.get().getDirectory().toAbsolutePath().equals(file.toPath().toAbsolutePath().getParent())) if (cu.getStorage().isEmpty()) continue; CompilationUnit.Storage storage = cu.getStorage().get(); if (storage.getDirectory().toAbsolutePath().equals(file.toPath().toAbsolutePath().getParent()) && storage.getFileName().equals(file.getName())) return Optional.of(cu); } return Optional.empty(); Loading sdg-core/src/main/java/es/upv/mist/slicing/slicing/LineNumberCriterion.java +12 −1 Original line number Diff line number Diff line package es.upv.mist.slicing.slicing; import com.github.javaparser.Position; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.stmt.Statement; import es.upv.mist.slicing.graphs.cfg.CFG; import es.upv.mist.slicing.graphs.pdg.PDG; import es.upv.mist.slicing.graphs.sdg.SDG; Loading Loading @@ -46,7 +49,15 @@ public class LineNumberCriterion extends SlicingCriterion { @Override public Optional<GraphNode<?>> findNode(SDG graph) { Optional<CompilationUnit> optCu = findCompilationUnit(graph.getCompilationUnits()); if (optCu.isEmpty()) return Optional.empty(); return optCu.get().findFirst(Statement.class, this::matchesLine).flatMap(graph::findNodeByASTNode); } /** Locates the compilation unit that corresponds to this criterion's file. */ protected Optional<CompilationUnit> findCompilationUnit(NodeList<CompilationUnit> cus) { return cus.getFirst(); } /** Check if a node matches the criterion's line. */ Loading sdg-core/src/main/java/es/upv/mist/slicing/slicing/Slice.java +3 −2 Original line number Diff line number Diff line Loading @@ -73,8 +73,9 @@ public class Slice { CloneVisitor cloneVisitor = new CloneVisitor(); for (Map.Entry<CompilationUnit, Set<Node>> entry : cuMap.entrySet()) { CompilationUnit clone = (CompilationUnit) entry.getKey().accept(cloneVisitor, null); assert entry.getKey().getStorage().isPresent(); clone.setStorage(entry.getKey().getStorage().get().getPath()); if (entry.getKey().getStorage().isPresent()) clone.setStorage(entry.getKey().getStorage().get().getPath(), entry.getKey().getStorage().get().getEncoding()); clone.accept(sliceVisitor, entry.getValue()); cus.add(clone); } Loading Loading
sdg-core/src/main/java/es/upv/mist/slicing/slicing/ClassFileLineCriterion.java 0 → 100644 +34 −0 Original line number Diff line number Diff line package es.upv.mist.slicing.slicing; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.body.TypeDeclaration; import java.util.Objects; import java.util.Optional; public class ClassFileLineCriterion extends LineNumberCriterion { private final String fullyQualifiedClassName; public ClassFileLineCriterion(final String fullyQualifiedClassName, int lineNumber, String variable) { super(lineNumber, variable); this.fullyQualifiedClassName = fullyQualifiedClassName; } /** Locates the compilation unit that corresponds to this criterion's file. */ protected Optional<CompilationUnit> findCompilationUnit(NodeList<CompilationUnit> cus) { for (CompilationUnit cu : cus) { if (cu.getTypes().stream() .map(TypeDeclaration::getFullyQualifiedName) .map(o -> o.orElse(null)) .anyMatch(type -> Objects.equals(type, fullyQualifiedClassName))) return Optional.of(cu); } return Optional.empty(); } @Override public String toString() { return fullyQualifiedClassName + "#" + lineNumber + ":" + variable; } }
sdg-core/src/main/java/es/upv/mist/slicing/slicing/FileLineSlicingCriterion.java +6 −14 Original line number Diff line number Diff line Loading @@ -2,9 +2,6 @@ package es.upv.mist.slicing.slicing; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.stmt.Statement; import es.upv.mist.slicing.graphs.sdg.SDG; import es.upv.mist.slicing.nodes.GraphNode; import java.io.File; import java.util.Optional; Loading @@ -18,20 +15,15 @@ public class FileLineSlicingCriterion extends LineNumberCriterion { this.file = file; } @Override public Optional<GraphNode<?>> findNode(SDG graph) { Optional<CompilationUnit> optCu = findCompilationUnit(graph.getCompilationUnits()); if (optCu.isEmpty()) return Optional.empty(); return optCu.get().findFirst(Statement.class, this::matchesLine).flatMap(graph::findNodeByASTNode); } /** Locates the compilation unit that corresponds to this criterion's file. */ @Override protected Optional<CompilationUnit> findCompilationUnit(NodeList<CompilationUnit> cus) { for (CompilationUnit cu : cus) { Optional<CompilationUnit.Storage> optStorage = cu.getStorage(); if (optStorage.isPresent() && optStorage.get().getFileName().equals(file.getName()) && optStorage.get().getDirectory().toAbsolutePath().equals(file.toPath().toAbsolutePath().getParent())) if (cu.getStorage().isEmpty()) continue; CompilationUnit.Storage storage = cu.getStorage().get(); if (storage.getDirectory().toAbsolutePath().equals(file.toPath().toAbsolutePath().getParent()) && storage.getFileName().equals(file.getName())) return Optional.of(cu); } return Optional.empty(); Loading
sdg-core/src/main/java/es/upv/mist/slicing/slicing/LineNumberCriterion.java +12 −1 Original line number Diff line number Diff line package es.upv.mist.slicing.slicing; import com.github.javaparser.Position; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.stmt.Statement; import es.upv.mist.slicing.graphs.cfg.CFG; import es.upv.mist.slicing.graphs.pdg.PDG; import es.upv.mist.slicing.graphs.sdg.SDG; Loading Loading @@ -46,7 +49,15 @@ public class LineNumberCriterion extends SlicingCriterion { @Override public Optional<GraphNode<?>> findNode(SDG graph) { Optional<CompilationUnit> optCu = findCompilationUnit(graph.getCompilationUnits()); if (optCu.isEmpty()) return Optional.empty(); return optCu.get().findFirst(Statement.class, this::matchesLine).flatMap(graph::findNodeByASTNode); } /** Locates the compilation unit that corresponds to this criterion's file. */ protected Optional<CompilationUnit> findCompilationUnit(NodeList<CompilationUnit> cus) { return cus.getFirst(); } /** Check if a node matches the criterion's line. */ Loading
sdg-core/src/main/java/es/upv/mist/slicing/slicing/Slice.java +3 −2 Original line number Diff line number Diff line Loading @@ -73,8 +73,9 @@ public class Slice { CloneVisitor cloneVisitor = new CloneVisitor(); for (Map.Entry<CompilationUnit, Set<Node>> entry : cuMap.entrySet()) { CompilationUnit clone = (CompilationUnit) entry.getKey().accept(cloneVisitor, null); assert entry.getKey().getStorage().isPresent(); clone.setStorage(entry.getKey().getStorage().get().getPath()); if (entry.getKey().getStorage().isPresent()) clone.setStorage(entry.getKey().getStorage().get().getPath(), entry.getKey().getStorage().get().getEncoding()); clone.accept(sliceVisitor, entry.getValue()); cus.add(clone); } Loading