From 6ed9c2c7304d07ff2d082c1483ab2e61dcffdc18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Lars=C3=A9n?= Date: Wed, 15 Apr 2020 10:05:08 +0200 Subject: [PATCH] [fact] Refactor project layout --- .../java/se/kth/spork/base3dm/ChangeSet.java | 5 +- src/main/java/se/kth/spork/cli/Cli.java | 1 + .../se/kth/spork/spoon/ContentConflict.java | 1 + .../se/kth/spork/spoon/ContentResolver.java | 3 + .../se/kth/spork/spoon/MappingRemover.java | 48 ---------- src/main/java/se/kth/spork/spoon/Parser.java | 4 +- .../java/se/kth/spork/spoon/PcsBuilder.java | 2 + .../se/kth/spork/spoon/Spoon3dmMerge.java | 71 +++------------ .../kth/spork/spoon/StructuralConflict.java | 24 ++++- .../{ => matching}/ClassRepresentatives.java | 8 +- .../spork/spoon/matching/MappingRemover.java | 87 +++++++++++++++++++ .../spoon/{ => matching}/SpoonMapping.java | 4 +- .../{ => pcsinterpreter}/ContentMerger.java | 6 +- .../{ => pcsinterpreter}/PcsInterpreter.java | 6 +- .../SpoonTreeBuilder.java | 7 +- .../spoon/{ => pcsinterpreter}/SporkTree.java | 7 +- .../SporkTreeBuilder.java | 6 +- .../printer}/OperatorHelper.java | 2 +- .../printer}/PrinterPreprocessor.java | 6 +- .../printer}/SourceExtractor.java | 2 +- .../printer}/SporkPrettyPrinter.java | 4 +- .../spoon/{ => wrappers}/NodeFactory.java | 2 +- .../spoon/{ => wrappers}/RoledValue.java | 2 +- .../spoon/{ => wrappers}/RoledValues.java | 4 +- .../spork/spoon/{ => wrappers}/SpoonNode.java | 2 +- .../se/kth/spork/util/LineBasedMerge.java | 2 +- src/test/java/se/kth/spork/Util.java | 9 +- 27 files changed, 182 insertions(+), 143 deletions(-) delete mode 100644 src/main/java/se/kth/spork/spoon/MappingRemover.java rename src/main/java/se/kth/spork/spoon/{ => matching}/ClassRepresentatives.java (97%) create mode 100644 src/main/java/se/kth/spork/spoon/matching/MappingRemover.java rename src/main/java/se/kth/spork/spoon/{ => matching}/SpoonMapping.java (98%) rename src/main/java/se/kth/spork/spoon/{ => pcsinterpreter}/ContentMerger.java (98%) rename src/main/java/se/kth/spork/spoon/{ => pcsinterpreter}/PcsInterpreter.java (83%) rename src/main/java/se/kth/spork/spoon/{ => pcsinterpreter}/SpoonTreeBuilder.java (97%) rename src/main/java/se/kth/spork/spoon/{ => pcsinterpreter}/SporkTree.java (91%) rename src/main/java/se/kth/spork/spoon/{ => pcsinterpreter}/SporkTreeBuilder.java (97%) rename src/main/java/se/kth/spork/{cli => spoon/printer}/OperatorHelper.java (99%) rename src/main/java/se/kth/spork/{cli => spoon/printer}/PrinterPreprocessor.java (98%) rename src/main/java/se/kth/spork/{cli => spoon/printer}/SourceExtractor.java (99%) rename src/main/java/se/kth/spork/{cli => spoon/printer}/SporkPrettyPrinter.java (98%) rename src/main/java/se/kth/spork/spoon/{ => wrappers}/NodeFactory.java (99%) rename src/main/java/se/kth/spork/spoon/{ => wrappers}/RoledValue.java (96%) rename src/main/java/se/kth/spork/spoon/{ => wrappers}/RoledValues.java (89%) rename src/main/java/se/kth/spork/spoon/{ => wrappers}/SpoonNode.java (87%) diff --git a/src/main/java/se/kth/spork/base3dm/ChangeSet.java b/src/main/java/se/kth/spork/base3dm/ChangeSet.java index 10d2061c..e3c28af0 100644 --- a/src/main/java/se/kth/spork/base3dm/ChangeSet.java +++ b/src/main/java/se/kth/spork/base3dm/ChangeSet.java @@ -67,8 +67,9 @@ public List> getOtherRoots(Pcs pcs) { return Stream.of(pcs.getPredecessor(), pcs.getSuccessor()).flatMap( node -> Stream.of(predecessors.get(node), successors.get(node)) .filter(Objects::nonNull) - .flatMap(Set::stream) - ).filter(p -> !p.getRoot().equals(pcs.getRoot())).collect(Collectors.toList()); + .flatMap(Set::stream)) + .filter(p -> !p.getRoot().equals(pcs.getRoot())) + .collect(Collectors.toList()); } /** diff --git a/src/main/java/se/kth/spork/cli/Cli.java b/src/main/java/se/kth/spork/cli/Cli.java index 6e7a548e..f07e4eb4 100644 --- a/src/main/java/se/kth/spork/cli/Cli.java +++ b/src/main/java/se/kth/spork/cli/Cli.java @@ -8,6 +8,7 @@ import se.kth.spork.spoon.Compare; import se.kth.spork.spoon.Parser; import se.kth.spork.spoon.Spoon3dmMerge; +import se.kth.spork.spoon.printer.PrinterPreprocessor; import se.kth.spork.util.LineBasedMerge; import se.kth.spork.util.Pair; import spoon.reflect.declaration.*; diff --git a/src/main/java/se/kth/spork/spoon/ContentConflict.java b/src/main/java/se/kth/spork/spoon/ContentConflict.java index cb231f4a..42494bf1 100644 --- a/src/main/java/se/kth/spork/spoon/ContentConflict.java +++ b/src/main/java/se/kth/spork/spoon/ContentConflict.java @@ -1,5 +1,6 @@ package se.kth.spork.spoon; +import se.kth.spork.spoon.wrappers.RoledValue; import spoon.reflect.path.CtRole; import java.util.Optional; diff --git a/src/main/java/se/kth/spork/spoon/ContentResolver.java b/src/main/java/se/kth/spork/spoon/ContentResolver.java index 92e46e5d..27230ed8 100644 --- a/src/main/java/se/kth/spork/spoon/ContentResolver.java +++ b/src/main/java/se/kth/spork/spoon/ContentResolver.java @@ -1,5 +1,8 @@ package se.kth.spork.spoon; +import se.kth.spork.spoon.wrappers.RoledValue; +import se.kth.spork.spoon.wrappers.RoledValues; +import se.kth.spork.spoon.wrappers.SpoonNode; import spoon.reflect.code.*; import spoon.reflect.declaration.*; import spoon.reflect.path.CtRole; diff --git a/src/main/java/se/kth/spork/spoon/MappingRemover.java b/src/main/java/se/kth/spork/spoon/MappingRemover.java deleted file mode 100644 index c7be5bf4..00000000 --- a/src/main/java/se/kth/spork/spoon/MappingRemover.java +++ /dev/null @@ -1,48 +0,0 @@ -package se.kth.spork.spoon; - -import spoon.reflect.declaration.CtElement; -import spoon.reflect.visitor.CtScanner; - -/** - * Utility class for removing a node, along with all of its descendants, from a {@link SpoonMapping} instance. - * - * @author Simon Larsén - */ -class MappingRemover extends CtScanner { - private final SpoonMapping mapping; - - /** - * Create a mapping remover for the provided mapping. - * - * @param mapping A mapping that this remover will operate on. - */ - public MappingRemover(SpoonMapping mapping) { - this.mapping = mapping; - } - - /** - * Remove this node and its associated virtual nodes from the mapping, and recursively remove all of its - * descendants in the same way. - * - * @param node A node to remove from the mapping. - */ - public void removeRelatedMappings(SpoonNode node) { - CtElement elem = node.getElement(); - scan(elem); - } - - @Override - public void scan(CtElement element) { - if (element == null) { - return; - } - - SpoonNode node = NodeFactory.wrap(element); - - mapping.remove(node); - mapping.remove(NodeFactory.startOfChildList(node)); - mapping.remove(NodeFactory.startOfChildList(node)); - - super.scan(element); - } -} diff --git a/src/main/java/se/kth/spork/spoon/Parser.java b/src/main/java/se/kth/spork/spoon/Parser.java index 058648b4..a93b1153 100644 --- a/src/main/java/se/kth/spork/spoon/Parser.java +++ b/src/main/java/se/kth/spork/spoon/Parser.java @@ -2,8 +2,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import se.kth.spork.cli.SourceExtractor; -import se.kth.spork.cli.SporkPrettyPrinter; +import se.kth.spork.spoon.printer.SourceExtractor; +import se.kth.spork.spoon.printer.SporkPrettyPrinter; import se.kth.spork.util.Pair; import spoon.Launcher; import spoon.compiler.Environment; diff --git a/src/main/java/se/kth/spork/spoon/PcsBuilder.java b/src/main/java/se/kth/spork/spoon/PcsBuilder.java index e4b31697..794ee800 100644 --- a/src/main/java/se/kth/spork/spoon/PcsBuilder.java +++ b/src/main/java/se/kth/spork/spoon/PcsBuilder.java @@ -2,6 +2,8 @@ import se.kth.spork.base3dm.Pcs; import se.kth.spork.base3dm.Revision; +import se.kth.spork.spoon.wrappers.NodeFactory; +import se.kth.spork.spoon.wrappers.SpoonNode; import spoon.reflect.declaration.CtElement; import spoon.reflect.visitor.CtScanner; diff --git a/src/main/java/se/kth/spork/spoon/Spoon3dmMerge.java b/src/main/java/se/kth/spork/spoon/Spoon3dmMerge.java index bba2fd8f..0e523356 100644 --- a/src/main/java/se/kth/spork/spoon/Spoon3dmMerge.java +++ b/src/main/java/se/kth/spork/spoon/Spoon3dmMerge.java @@ -7,6 +7,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import se.kth.spork.base3dm.*; +import se.kth.spork.spoon.matching.ClassRepresentatives; +import se.kth.spork.spoon.matching.MappingRemover; +import se.kth.spork.spoon.matching.SpoonMapping; +import se.kth.spork.spoon.pcsinterpreter.PcsInterpreter; +import se.kth.spork.spoon.wrappers.RoledValues; +import se.kth.spork.spoon.wrappers.SpoonNode; import se.kth.spork.util.Pair; import spoon.reflect.declaration.*; @@ -31,8 +37,9 @@ public class Spoon3dmMerge { */ public static Pair merge(Path base, Path left, Path right) { long start = System.nanoTime(); - LOGGER.info("Parsing files to Spoon trees"); + // PARSING PHASE + LOGGER.info("Parsing files to Spoon trees"); CtModule baseTree = Parser.parse(base); CtModule leftTree = Parser.parse(left); CtModule rightTree = Parser.parse(right); @@ -56,6 +63,7 @@ public static Pair merge(Path base, Path left, Path right) { public static Pair merge(T base, T left, T right) { long start = System.nanoTime(); + // MATCHING PHASE LOGGER.info("Converting to GumTree trees"); ITree baseGumtree = new SpoonGumTreeBuilder().getTree(base); ITree leftGumtree = new SpoonGumTreeBuilder().getTree(left); @@ -71,6 +79,7 @@ public static Pair merge(T base, T left, T rig SpoonMapping baseRight = SpoonMapping.fromGumTreeMapping(baseRightGumtreeMatch.getMappings()); SpoonMapping leftRight = SpoonMapping.fromGumTreeMapping(leftRightGumtreeMatch.getMappings()); + // 3DM PHASE LOGGER.info("Mapping nodes to class representatives"); Map classRepMap = ClassRepresentatives.createClassRepresentativesMapping( base, left, right, baseLeft, baseRight, leftRight); @@ -87,11 +96,11 @@ public static Pair merge(T base, T left, T rig LOGGER.info("Resolving final PCS merge"); TdmMerge.resolveRawMerge(t0Star, delta); - Set rootConflictingNodes = extractRootConflictingNodes(delta.getStructuralConflicts()); + Set rootConflictingNodes = StructuralConflict.extractRootConflictingNodes(delta.getStructuralConflicts()); if (!rootConflictingNodes.isEmpty()) { LOGGER.info("Root conflicts detected, restarting merge"); LOGGER.info("Removing root conflicting nodes from tree matchings"); - removeFromMappings(rootConflictingNodes, baseLeft, baseRight, leftRight); + MappingRemover.removeFromMappings(rootConflictingNodes, baseLeft, baseRight, leftRight); LOGGER.info("Mapping nodes to class representatives"); classRepMap = ClassRepresentatives.createClassRepresentativesMapping( @@ -104,6 +113,7 @@ public static Pair merge(T base, T left, T rig TdmMerge.resolveRawMerge(t0Star, delta); } + // INTERPRETER PHASE LOGGER.info("Interpreting resolved PCS merge"); Pair merge = PcsInterpreter.fromMergedPcs(delta, baseLeft, baseRight); // we can be certain that the merge tree has the same root type as the three constituents, so this cast is safe @@ -120,61 +130,6 @@ public static Pair merge(T base, T left, T rig return Pair.of(mergeTree, hasConflicts); } - /** - * Remove the provided nodes from the mappings, along with all of their descendants and any associated virtual - * nodes. This is a method of allowing certain forms of conflicts to pass by, such as root conflicts. By removing - * the mapping, problems with duplicated nodes is removed. - */ - private static void - removeFromMappings(Set nodes, SpoonMapping baseLeft, SpoonMapping baseRight, SpoonMapping leftRight) { - MappingRemover baseLeftMappingRemover = new MappingRemover(baseLeft); - MappingRemover baseRightMappingRemover = new MappingRemover(baseRight); - MappingRemover leftRightMappingRemover = new MappingRemover(leftRight); - - for (SpoonNode node : nodes) { - switch (node.getRevision()) { - case BASE: - baseLeftMappingRemover.removeRelatedMappings(node); - baseRightMappingRemover.removeRelatedMappings(node); - break; - case LEFT: - baseLeftMappingRemover.removeRelatedMappings(node); - leftRightMappingRemover.removeRelatedMappings(node); - break; - case RIGHT: - baseRightMappingRemover.removeRelatedMappings(node); - leftRightMappingRemover.removeRelatedMappings(node); - break; - } - } - } - - private static Set - extractRootConflictingNodes(Map, Set>> structuralConflicts) { - Set toIgnore = new HashSet<>(); - - for (Map.Entry, Set>> entry : structuralConflicts.entrySet()) { - Pcs pcs = entry.getKey(); - for (Pcs other : entry.getValue()) { - if (isRootConflict(pcs, other)) { - if (pcs.getPredecessor().equals(other.getPredecessor())) { - toIgnore.add(other.getPredecessor()); - } - if (pcs.getSuccessor().equals(other.getSuccessor())) { - toIgnore.add(other.getSuccessor()); - } - } - } - } - return toIgnore; - } - - private static boolean isRootConflict(Pcs left, Pcs right) { - return !Objects.equals(left.getRoot(), right.getRoot()) && - (Objects.equals(left.getPredecessor(), right.getPredecessor()) || - Objects.equals(left.getSuccessor(), right.getSuccessor())); - } - /** * Merge import statements from base, left and right. Import statements are expected to be attached * to each tree's root node metadata with the {@link Parser#IMPORT_STATEMENTS} key. diff --git a/src/main/java/se/kth/spork/spoon/StructuralConflict.java b/src/main/java/se/kth/spork/spoon/StructuralConflict.java index 7c6870f0..92cde751 100644 --- a/src/main/java/se/kth/spork/spoon/StructuralConflict.java +++ b/src/main/java/se/kth/spork/spoon/StructuralConflict.java @@ -1,10 +1,10 @@ package se.kth.spork.spoon; import se.kth.spork.base3dm.Pcs; +import se.kth.spork.spoon.wrappers.SpoonNode; import spoon.reflect.declaration.CtElement; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * A simple class that provides some information on a structural conflict. Meant to be put as metadata on a conflict @@ -43,4 +43,24 @@ public static boolean isSuccessorConflict(Pcs left, Pcs right) { Objects.equals(left.getPredecessor(), right.getPredecessor()) && Objects.equals(left.getRoot(), right.getRoot()); } + + public static Set + extractRootConflictingNodes(Map, Set>> structuralConflicts) { + Set toIgnore = new HashSet<>(); + + for (Map.Entry, Set>> entry : structuralConflicts.entrySet()) { + Pcs pcs = entry.getKey(); + for (Pcs other : entry.getValue()) { + if (isRootConflict(pcs, other)) { + if (pcs.getPredecessor().equals(other.getPredecessor())) { + toIgnore.add(other.getPredecessor()); + } + if (pcs.getSuccessor().equals(other.getSuccessor())) { + toIgnore.add(other.getSuccessor()); + } + } + } + } + return toIgnore; + } } diff --git a/src/main/java/se/kth/spork/spoon/ClassRepresentatives.java b/src/main/java/se/kth/spork/spoon/matching/ClassRepresentatives.java similarity index 97% rename from src/main/java/se/kth/spork/spoon/ClassRepresentatives.java rename to src/main/java/se/kth/spork/spoon/matching/ClassRepresentatives.java index 33eee951..c5659176 100644 --- a/src/main/java/se/kth/spork/spoon/ClassRepresentatives.java +++ b/src/main/java/se/kth/spork/spoon/matching/ClassRepresentatives.java @@ -1,7 +1,9 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.matching; import se.kth.spork.base3dm.Revision; import se.kth.spork.base3dm.TdmMerge; +import se.kth.spork.spoon.wrappers.SpoonNode; +import se.kth.spork.spoon.wrappers.NodeFactory; import spoon.reflect.declaration.CtElement; import spoon.reflect.visitor.CtScanner; @@ -16,7 +18,7 @@ * * @author Simon Larsén */ -class ClassRepresentatives { +public class ClassRepresentatives { /** * Create the class representatives mapping. The class representatives for the different revisions are defined as: * @@ -40,7 +42,7 @@ class ClassRepresentatives { * @param leftRight A matching from left to right. * @return The class representatives map. */ - static Map createClassRepresentativesMapping( + public static Map createClassRepresentativesMapping( CtElement base, CtElement left, CtElement right, diff --git a/src/main/java/se/kth/spork/spoon/matching/MappingRemover.java b/src/main/java/se/kth/spork/spoon/matching/MappingRemover.java new file mode 100644 index 00000000..3a78624d --- /dev/null +++ b/src/main/java/se/kth/spork/spoon/matching/MappingRemover.java @@ -0,0 +1,87 @@ +package se.kth.spork.spoon.matching; + +import se.kth.spork.spoon.wrappers.SpoonNode; +import se.kth.spork.spoon.wrappers.NodeFactory; +import spoon.reflect.declaration.CtElement; +import spoon.reflect.visitor.CtScanner; + +import java.util.Set; + +/** + * Utility class for removing a node, along with all of its descendants, from a {@link SpoonMapping} instance. + * + * @author Simon Larsén + */ +public class MappingRemover extends CtScanner { + private final SpoonMapping mapping; + + /** + * Create a mapping remover for the provided mapping. + * + * @param mapping A mapping that this remover will operate on. + */ + public MappingRemover(SpoonMapping mapping) { + this.mapping = mapping; + } + + /** + * Remove the provided nodes from the mappings, along with all of their descendants and any associated virtual + * nodes. This is a method of allowing certain forms of conflicts to pass by, such as root conflicts. By removing + * the mapping, problems with duplicated nodes is removed. + * + * @param nodes A set of nodes to remove from the mappings. + * @param baseLeft A base-to-left mapping. + * @param baseRight A base-to-right mapping. + * @param leftRight A left-to-right mapping. + */ + public static void + removeFromMappings(Set nodes, SpoonMapping baseLeft, SpoonMapping baseRight, SpoonMapping leftRight) { + MappingRemover baseLeftMappingRemover = new MappingRemover(baseLeft); + MappingRemover baseRightMappingRemover = new MappingRemover(baseRight); + MappingRemover leftRightMappingRemover = new MappingRemover(leftRight); + + for (SpoonNode node : nodes) { + switch (node.getRevision()) { + case BASE: + leftRightMappingRemover.removeRelatedMappings(baseLeft.getDst(node)); + baseLeftMappingRemover.removeRelatedMappings(node); + baseRightMappingRemover.removeRelatedMappings(node); + break; + case LEFT: + baseLeftMappingRemover.removeRelatedMappings(node); + leftRightMappingRemover.removeRelatedMappings(node); + break; + case RIGHT: + baseRightMappingRemover.removeRelatedMappings(node); + leftRightMappingRemover.removeRelatedMappings(node); + break; + } + } + } + + /** + * Remove this node and its associated virtual nodes from the mapping, and recursively remove all of its + * descendants in the same way. + * + * @param node A node to remove from the mapping. + */ + public void removeRelatedMappings(SpoonNode node) { + CtElement elem = node.getElement(); + scan(elem); + } + + @Override + public void scan(CtElement element) { + if (element == null) { + return; + } + + SpoonNode node = NodeFactory.wrap(element); + + mapping.remove(node); + mapping.remove(NodeFactory.startOfChildList(node)); + mapping.remove(NodeFactory.startOfChildList(node)); + + super.scan(element); + } +} diff --git a/src/main/java/se/kth/spork/spoon/SpoonMapping.java b/src/main/java/se/kth/spork/spoon/matching/SpoonMapping.java similarity index 98% rename from src/main/java/se/kth/spork/spoon/SpoonMapping.java rename to src/main/java/se/kth/spork/spoon/matching/SpoonMapping.java index d515781c..7947da5a 100644 --- a/src/main/java/se/kth/spork/spoon/SpoonMapping.java +++ b/src/main/java/se/kth/spork/spoon/matching/SpoonMapping.java @@ -1,10 +1,12 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.matching; import com.github.gumtreediff.matchers.Mapping; import com.github.gumtreediff.matchers.MappingStore; import com.github.gumtreediff.tree.ITree; import com.github.gumtreediff.utils.Pair; import gumtree.spoon.builder.SpoonGumTreeBuilder; +import se.kth.spork.spoon.wrappers.SpoonNode; +import se.kth.spork.spoon.wrappers.NodeFactory; import se.kth.spork.util.GumTreeSpoonAstDiff; import spoon.reflect.declaration.CtAnnotation; import spoon.reflect.declaration.CtElement; diff --git a/src/main/java/se/kth/spork/spoon/ContentMerger.java b/src/main/java/se/kth/spork/spoon/pcsinterpreter/ContentMerger.java similarity index 98% rename from src/main/java/se/kth/spork/spoon/ContentMerger.java rename to src/main/java/se/kth/spork/spoon/pcsinterpreter/ContentMerger.java index 34c9e625..a9f8d74e 100644 --- a/src/main/java/se/kth/spork/spoon/ContentMerger.java +++ b/src/main/java/se/kth/spork/spoon/pcsinterpreter/ContentMerger.java @@ -1,6 +1,10 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.pcsinterpreter; import se.kth.spork.base3dm.Content; +import se.kth.spork.spoon.ContentConflict; +import se.kth.spork.spoon.wrappers.RoledValue; +import se.kth.spork.spoon.wrappers.RoledValues; +import se.kth.spork.spoon.wrappers.SpoonNode; import se.kth.spork.util.LineBasedMerge; import se.kth.spork.util.Pair; import se.kth.spork.util.Triple; diff --git a/src/main/java/se/kth/spork/spoon/PcsInterpreter.java b/src/main/java/se/kth/spork/spoon/pcsinterpreter/PcsInterpreter.java similarity index 83% rename from src/main/java/se/kth/spork/spoon/PcsInterpreter.java rename to src/main/java/se/kth/spork/spoon/pcsinterpreter/PcsInterpreter.java index 775d1bcf..a579ab2b 100644 --- a/src/main/java/se/kth/spork/spoon/PcsInterpreter.java +++ b/src/main/java/se/kth/spork/spoon/pcsinterpreter/PcsInterpreter.java @@ -1,6 +1,10 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.pcsinterpreter; import se.kth.spork.base3dm.ChangeSet; +import se.kth.spork.spoon.wrappers.NodeFactory; +import se.kth.spork.spoon.wrappers.RoledValues; +import se.kth.spork.spoon.matching.SpoonMapping; +import se.kth.spork.spoon.wrappers.SpoonNode; import se.kth.spork.util.Pair; import spoon.reflect.declaration.CtElement; diff --git a/src/main/java/se/kth/spork/spoon/SpoonTreeBuilder.java b/src/main/java/se/kth/spork/spoon/pcsinterpreter/SpoonTreeBuilder.java similarity index 97% rename from src/main/java/se/kth/spork/spoon/SpoonTreeBuilder.java rename to src/main/java/se/kth/spork/spoon/pcsinterpreter/SpoonTreeBuilder.java index 05410064..2008b769 100644 --- a/src/main/java/se/kth/spork/spoon/SpoonTreeBuilder.java +++ b/src/main/java/se/kth/spork/spoon/pcsinterpreter/SpoonTreeBuilder.java @@ -1,7 +1,12 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.pcsinterpreter; import se.kth.spork.base3dm.Revision; import se.kth.spork.base3dm.TdmMerge; +import se.kth.spork.spoon.*; +import se.kth.spork.spoon.matching.SpoonMapping; +import se.kth.spork.spoon.wrappers.NodeFactory; +import se.kth.spork.spoon.wrappers.RoledValues; +import se.kth.spork.spoon.wrappers.SpoonNode; import se.kth.spork.util.Pair; import spoon.reflect.code.CtExpression; import spoon.reflect.declaration.CtAnnotation; diff --git a/src/main/java/se/kth/spork/spoon/SporkTree.java b/src/main/java/se/kth/spork/spoon/pcsinterpreter/SporkTree.java similarity index 91% rename from src/main/java/se/kth/spork/spoon/SporkTree.java rename to src/main/java/se/kth/spork/spoon/pcsinterpreter/SporkTree.java index 30f5f81a..3e7c6fd8 100644 --- a/src/main/java/se/kth/spork/spoon/SporkTree.java +++ b/src/main/java/se/kth/spork/spoon/pcsinterpreter/SporkTree.java @@ -1,11 +1,14 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.pcsinterpreter; import se.kth.spork.base3dm.Content; import se.kth.spork.base3dm.Pcs; import se.kth.spork.base3dm.Revision; +import se.kth.spork.spoon.wrappers.NodeFactory; +import se.kth.spork.spoon.wrappers.RoledValues; +import se.kth.spork.spoon.wrappers.SpoonNode; +import se.kth.spork.spoon.StructuralConflict; import java.util.*; -import java.util.stream.Collectors; /** diff --git a/src/main/java/se/kth/spork/spoon/SporkTreeBuilder.java b/src/main/java/se/kth/spork/spoon/pcsinterpreter/SporkTreeBuilder.java similarity index 97% rename from src/main/java/se/kth/spork/spoon/SporkTreeBuilder.java rename to src/main/java/se/kth/spork/spoon/pcsinterpreter/SporkTreeBuilder.java index 08c6c708..9b7e2149 100644 --- a/src/main/java/se/kth/spork/spoon/SporkTreeBuilder.java +++ b/src/main/java/se/kth/spork/spoon/pcsinterpreter/SporkTreeBuilder.java @@ -1,6 +1,10 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.pcsinterpreter; import se.kth.spork.base3dm.*; +import se.kth.spork.spoon.wrappers.NodeFactory; +import se.kth.spork.spoon.wrappers.RoledValues; +import se.kth.spork.spoon.wrappers.SpoonNode; +import se.kth.spork.spoon.StructuralConflict; import spoon.reflect.path.CtRole; import java.util.*; diff --git a/src/main/java/se/kth/spork/cli/OperatorHelper.java b/src/main/java/se/kth/spork/spoon/printer/OperatorHelper.java similarity index 99% rename from src/main/java/se/kth/spork/cli/OperatorHelper.java rename to src/main/java/se/kth/spork/spoon/printer/OperatorHelper.java index 257769cb..b591bc91 100644 --- a/src/main/java/se/kth/spork/cli/OperatorHelper.java +++ b/src/main/java/se/kth/spork/spoon/printer/OperatorHelper.java @@ -19,7 +19,7 @@ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package se.kth.spork.cli; +package se.kth.spork.spoon.printer; import spoon.SpoonException; import spoon.reflect.code.BinaryOperatorKind; diff --git a/src/main/java/se/kth/spork/cli/PrinterPreprocessor.java b/src/main/java/se/kth/spork/spoon/printer/PrinterPreprocessor.java similarity index 98% rename from src/main/java/se/kth/spork/cli/PrinterPreprocessor.java rename to src/main/java/se/kth/spork/spoon/printer/PrinterPreprocessor.java index c255b93f..60f30bb1 100644 --- a/src/main/java/se/kth/spork/cli/PrinterPreprocessor.java +++ b/src/main/java/se/kth/spork/spoon/printer/PrinterPreprocessor.java @@ -1,9 +1,9 @@ -package se.kth.spork.cli; +package se.kth.spork.spoon.printer; import se.kth.spork.base3dm.Revision; import se.kth.spork.spoon.ContentConflict; -import se.kth.spork.spoon.ContentMerger; -import se.kth.spork.spoon.RoledValue; +import se.kth.spork.spoon.pcsinterpreter.ContentMerger; +import se.kth.spork.spoon.wrappers.RoledValue; import se.kth.spork.util.LineBasedMerge; import se.kth.spork.util.Pair; import spoon.reflect.code.CtOperatorAssignment; diff --git a/src/main/java/se/kth/spork/cli/SourceExtractor.java b/src/main/java/se/kth/spork/spoon/printer/SourceExtractor.java similarity index 99% rename from src/main/java/se/kth/spork/cli/SourceExtractor.java rename to src/main/java/se/kth/spork/spoon/printer/SourceExtractor.java index 41024178..d49be2fc 100644 --- a/src/main/java/se/kth/spork/cli/SourceExtractor.java +++ b/src/main/java/se/kth/spork/spoon/printer/SourceExtractor.java @@ -1,4 +1,4 @@ -package se.kth.spork.cli; +package se.kth.spork.spoon.printer; import se.kth.spork.util.Pair; import spoon.reflect.CtModel; diff --git a/src/main/java/se/kth/spork/cli/SporkPrettyPrinter.java b/src/main/java/se/kth/spork/spoon/printer/SporkPrettyPrinter.java similarity index 98% rename from src/main/java/se/kth/spork/cli/SporkPrettyPrinter.java rename to src/main/java/se/kth/spork/spoon/printer/SporkPrettyPrinter.java index de705c83..1d15a2b6 100644 --- a/src/main/java/se/kth/spork/cli/SporkPrettyPrinter.java +++ b/src/main/java/se/kth/spork/spoon/printer/SporkPrettyPrinter.java @@ -1,7 +1,7 @@ -package se.kth.spork.cli; +package se.kth.spork.spoon.printer; import se.kth.spork.base3dm.Revision; -import se.kth.spork.spoon.SpoonTreeBuilder; +import se.kth.spork.spoon.pcsinterpreter.SpoonTreeBuilder; import se.kth.spork.spoon.StructuralConflict; import se.kth.spork.util.Pair; import spoon.compiler.Environment; diff --git a/src/main/java/se/kth/spork/spoon/NodeFactory.java b/src/main/java/se/kth/spork/spoon/wrappers/NodeFactory.java similarity index 99% rename from src/main/java/se/kth/spork/spoon/NodeFactory.java rename to src/main/java/se/kth/spork/spoon/wrappers/NodeFactory.java index a6d97f27..752cfd53 100644 --- a/src/main/java/se/kth/spork/spoon/NodeFactory.java +++ b/src/main/java/se/kth/spork/spoon/wrappers/NodeFactory.java @@ -1,4 +1,4 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.wrappers; import se.kth.spork.base3dm.Revision; import se.kth.spork.base3dm.TdmMerge; diff --git a/src/main/java/se/kth/spork/spoon/RoledValue.java b/src/main/java/se/kth/spork/spoon/wrappers/RoledValue.java similarity index 96% rename from src/main/java/se/kth/spork/spoon/RoledValue.java rename to src/main/java/se/kth/spork/spoon/wrappers/RoledValue.java index 01928f80..65a15710 100644 --- a/src/main/java/se/kth/spork/spoon/RoledValue.java +++ b/src/main/java/se/kth/spork/spoon/wrappers/RoledValue.java @@ -1,4 +1,4 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.wrappers; import spoon.reflect.path.CtRole; diff --git a/src/main/java/se/kth/spork/spoon/RoledValues.java b/src/main/java/se/kth/spork/spoon/wrappers/RoledValues.java similarity index 89% rename from src/main/java/se/kth/spork/spoon/RoledValues.java rename to src/main/java/se/kth/spork/spoon/wrappers/RoledValues.java index d52b7d72..93b2e387 100644 --- a/src/main/java/se/kth/spork/spoon/RoledValues.java +++ b/src/main/java/se/kth/spork/spoon/wrappers/RoledValues.java @@ -1,4 +1,4 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.wrappers; import spoon.reflect.declaration.CtElement; import spoon.reflect.path.CtRole; @@ -11,7 +11,7 @@ * * @author Simon Larsén */ -class RoledValues extends ArrayList { +public class RoledValues extends ArrayList { private final CtElement element; public RoledValues(CtElement element) { diff --git a/src/main/java/se/kth/spork/spoon/SpoonNode.java b/src/main/java/se/kth/spork/spoon/wrappers/SpoonNode.java similarity index 87% rename from src/main/java/se/kth/spork/spoon/SpoonNode.java rename to src/main/java/se/kth/spork/spoon/wrappers/SpoonNode.java index 03e22e9c..a42ec72d 100644 --- a/src/main/java/se/kth/spork/spoon/SpoonNode.java +++ b/src/main/java/se/kth/spork/spoon/wrappers/SpoonNode.java @@ -1,4 +1,4 @@ -package se.kth.spork.spoon; +package se.kth.spork.spoon.wrappers; import se.kth.spork.base3dm.ListNode; import se.kth.spork.base3dm.Revision; diff --git a/src/main/java/se/kth/spork/util/LineBasedMerge.java b/src/main/java/se/kth/spork/util/LineBasedMerge.java index 33cb14ea..98e7ffaf 100644 --- a/src/main/java/se/kth/spork/util/LineBasedMerge.java +++ b/src/main/java/se/kth/spork/util/LineBasedMerge.java @@ -1,6 +1,6 @@ package se.kth.spork.util; -import se.kth.spork.cli.SporkPrettyPrinter; +import se.kth.spork.spoon.printer.SporkPrettyPrinter; import java.util.ArrayList; import java.util.Iterator; diff --git a/src/test/java/se/kth/spork/Util.java b/src/test/java/se/kth/spork/Util.java index af858d04..ec41a3af 100644 --- a/src/test/java/se/kth/spork/Util.java +++ b/src/test/java/se/kth/spork/Util.java @@ -5,19 +5,12 @@ import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; -import se.kth.spork.cli.SporkPrettyPrinter; +import se.kth.spork.spoon.printer.SporkPrettyPrinter; import spoon.Launcher; -import spoon.compiler.Environment; -import spoon.reflect.CtModel; import spoon.reflect.declaration.CtClass; -import spoon.reflect.declaration.CtCompilationUnit; -import spoon.reflect.declaration.CtModule; -import spoon.support.compiler.FileSystemFile; -import spoon.support.sniper.SniperJavaPrettyPrinter; import java.io.File; import java.io.IOException; -import java.lang.reflect.Array; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;