From 23698b8cfacf779fc3a419dd70bfef413e31ca1c Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Thu, 23 Oct 2025 12:16:57 +0200 Subject: [PATCH 1/7] refactor: improve the source tracing mechanism The new mechanism is more flexible and provides more introspection capabilities. Furthermore, it provides more documentation about the intent of our source tracking. --- .../diffdetective/diff/git/GitPatch.java | 16 +- .../diffdetective/diff/git/PatchDiff.java | 5 + .../examplesearch/ExampleFinder.java | 16 +- .../thesis_es/UnparseAnalysis.java | 4 +- .../views/result/ViewEvaluation.java | 4 +- .../mining/RWCompositePatternTreeFormat.java | 19 +- .../variantsync/diffdetective/show/Show.java | 7 +- .../diffdetective/util/CompositeSource.java | 36 +++ .../diffdetective/util/FileSource.java | 19 ++ .../diffdetective/util/Source.java | 275 ++++++++++++++++++ .../variation/diff/DiffGraph.java | 8 +- .../variation/diff/ProjectionSource.java | 20 +- .../variation/diff/VariationDiff.java | 36 ++- .../variation/diff/bad/BadVDiff.java | 11 +- .../bad/BadVDiffFromVariationDiffSource.java | 11 - .../diff/construction/GumTreeDiff.java | 4 +- .../diff/render/VariationDiffRenderer.java | 4 +- .../diff/serialize/LineGraphExport.java | 8 +- .../diff/serialize/LineGraphImport.java | 6 +- .../nodeformat/DiffNodeLabelFormat.java | 3 +- .../CommitDiffVariationDiffLabelFormat.java | 18 +- .../treeformat/IndexedTreeFormat.java | 10 +- .../treeformat/VariationDiffLabelFormat.java | 30 +- .../source/CommitDiffVariationDiffSource.java | 39 +-- .../diff/source/FromVariationTreeSource.java | 10 - .../diff/source/LineGraphFileSource.java | 14 +- .../variation/diff/source/PatchFile.java | 10 - .../variation/diff/source/PatchString.java | 10 +- .../diff/source/VariationDiffSource.java | 23 -- .../diff/source/VariationTreeDiffSource.java | 18 -- .../variation/diff/view/ViewSource.java | 24 +- .../variation/tree/VariationTree.java | 47 ++- .../variation/tree/source/GitSource.java | 15 +- .../tree/source/LocalFileSource.java | 13 - .../tree/source/VariationTreeSource.java | 19 -- .../tree/view/relevance/Configure.java | 7 +- .../tree/view/relevance/Relevance.java | 17 +- .../variation/tree/view/relevance/Search.java | 8 +- .../variation/tree/view/relevance/Trace.java | 8 +- .../tree/view/relevance/TraceSup.java | 8 +- src/test/java/TreeDiffingTest.java | 8 +- 41 files changed, 593 insertions(+), 275 deletions(-) create mode 100644 src/main/java/org/variantsync/diffdetective/util/CompositeSource.java create mode 100644 src/main/java/org/variantsync/diffdetective/util/FileSource.java create mode 100644 src/main/java/org/variantsync/diffdetective/util/Source.java delete mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/bad/BadVDiffFromVariationDiffSource.java delete mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/source/FromVariationTreeSource.java delete mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/source/PatchFile.java delete mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/source/VariationDiffSource.java delete mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/source/VariationTreeDiffSource.java delete mode 100644 src/main/java/org/variantsync/diffdetective/variation/tree/source/LocalFileSource.java delete mode 100644 src/main/java/org/variantsync/diffdetective/variation/tree/source/VariationTreeSource.java diff --git a/src/main/java/org/variantsync/diffdetective/diff/git/GitPatch.java b/src/main/java/org/variantsync/diffdetective/diff/git/GitPatch.java index 6bdef202e..e0ca5d9b8 100644 --- a/src/main/java/org/variantsync/diffdetective/diff/git/GitPatch.java +++ b/src/main/java/org/variantsync/diffdetective/diff/git/GitPatch.java @@ -1,17 +1,19 @@ package org.variantsync.diffdetective.diff.git; +import java.util.List; + import org.eclipse.jgit.diff.DiffEntry; import org.variantsync.diffdetective.diff.text.TextBasedDiff; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.VariationDiff; // For Javadoc -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; /** * Interface for patches from a git repository. * A git patch is a {@link TextBasedDiff} from which {@link VariationDiff}s can be created. * */ -public interface GitPatch extends VariationDiffSource, TextBasedDiff { +public interface GitPatch extends Source, TextBasedDiff { /** * Minimal default implementation of {@link GitPatch} * @param getDiff The diff in text form. @@ -41,6 +43,16 @@ public GitPatch shallowClone() { public String toString() { return oldFileName + "@ " + getParentCommitHash + " (parent) to " + newFileName + " @ " + getCommitHash + " (child)"; } + + @Override + public String getSourceExplanation() { + return "SimpleGitPatch"; + } + + @Override + public List getSourceArguments() { + return List.of(getChangeType(), oldFileName(), newFileName(), getCommitHash(), getParentCommitHash()); + } } /** diff --git a/src/main/java/org/variantsync/diffdetective/diff/git/PatchDiff.java b/src/main/java/org/variantsync/diffdetective/diff/git/PatchDiff.java index f6e03b0c7..d4232509e 100644 --- a/src/main/java/org/variantsync/diffdetective/diff/git/PatchDiff.java +++ b/src/main/java/org/variantsync/diffdetective/diff/git/PatchDiff.java @@ -123,4 +123,9 @@ public String toString() { public GitPatch shallowClone() { return new GitPatch.SimpleGitPatch(getDiff(), getChangeType(), getFileName(Time.BEFORE), getFileName(Time.AFTER), getCommitHash(), getParentCommitHash()); } + + @Override + public String getSourceExplanation() { + return "PatchDiff"; + } } diff --git a/src/main/java/org/variantsync/diffdetective/examplesearch/ExampleFinder.java b/src/main/java/org/variantsync/diffdetective/examplesearch/ExampleFinder.java index ebe8d1a11..d445a013f 100644 --- a/src/main/java/org/variantsync/diffdetective/examplesearch/ExampleFinder.java +++ b/src/main/java/org/variantsync/diffdetective/examplesearch/ExampleFinder.java @@ -11,6 +11,7 @@ import org.variantsync.diffdetective.show.Show; import org.variantsync.diffdetective.util.Assert; import org.variantsync.diffdetective.util.IO; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.util.StringUtils; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.diff.Time; @@ -24,7 +25,6 @@ import org.variantsync.diffdetective.variation.diff.serialize.edgeformat.DefaultEdgeLabelFormat; import org.variantsync.diffdetective.variation.diff.serialize.nodeformat.MappingsDiffNodeFormat; import org.variantsync.diffdetective.variation.diff.serialize.treeformat.CommitDiffVariationDiffLabelFormat; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import java.io.IOException; import java.nio.file.Path; @@ -110,8 +110,8 @@ private boolean checkIfExample(Analysis analysis, String localDiff) { // Not every local diff can be parsed to a VariationDiff because diffs are unaware of the underlying language (i.e., CPP). // We want only running examples whose diffs describe entire diff trees for easier understanding. if (isGoodExample.test(localTree)) { - Assert.assertTrue(variationDiff.getSource() instanceof GitPatch); - final GitPatch variationDiffSource = (GitPatch) variationDiff.getSource(); + GitPatch variationDiffSource = Source.findFirst(variationDiff, GitPatch.class); + Assert.assertNotNull(variationDiffSource); localTree.setSource(variationDiffSource.shallowClone()); } else { return false; @@ -149,9 +149,9 @@ public boolean analyzeVariationDiff(Analysis analysis) { } private void exportExample(final Analysis analysis, final String tdiff, final VariationDiff vdiff, Path outputDir) { - Assert.assertTrue(vdiff.getSource() instanceof GitPatch); final Repository repo = analysis.getRepository(); - final GitPatch patch = (GitPatch) vdiff.getSource(); + final GitPatch patch = Source.findFirst(vdiff, GitPatch.class); + Assert.assertNotNull(patch); outputDir = outputDir.resolve(Path.of(repo.getRepositoryName() + "_" + patch.getCommitHash())); final String filename = patch.getFileName(Time.AFTER); @@ -185,8 +185,8 @@ private void exportExample(final Analysis analysis, final String tdiff, final Va } static String getDiff(final VariationDiff tree) { - final VariationDiffSource source = tree.getSource(); - Assert.assertTrue(source instanceof TextBasedDiff); - return ((TextBasedDiff) source).getDiff(); + TextBasedDiff textBasedDiff = Source.findFirst(tree, TextBasedDiff.class); + Assert.assertNotNull(textBasedDiff); + return textBasedDiff.getDiff(); } } diff --git a/src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseAnalysis.java b/src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseAnalysis.java index ab18674fb..685342fc2 100644 --- a/src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseAnalysis.java +++ b/src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseAnalysis.java @@ -9,6 +9,7 @@ import org.variantsync.diffdetective.util.CSV; import org.variantsync.diffdetective.util.FileUtils; import org.variantsync.diffdetective.util.IO; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.util.StringUtils; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.VariationUnparser; @@ -17,7 +18,6 @@ import org.variantsync.diffdetective.variation.diff.construction.JGitDiff; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; import org.variantsync.diffdetective.variation.tree.VariationTree; -import org.variantsync.diffdetective.variation.tree.source.VariationTreeSource; public class UnparseAnalysis implements Analysis.Hooks { @@ -215,7 +215,7 @@ public static String removeWhitespace(String string, boolean diff) { public static String parseUnparseTree(String text, VariationDiffParseOptions option) { String temp = "b"; try { - VariationTree tree = VariationTree.fromText(text, VariationTreeSource.Unknown, option); + VariationTree tree = VariationTree.fromText(text, Source.Unknown, option); temp = VariationUnparser.unparseTree(tree); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/org/variantsync/diffdetective/experiments/views/result/ViewEvaluation.java b/src/main/java/org/variantsync/diffdetective/experiments/views/result/ViewEvaluation.java index 8211574bb..e1916925d 100644 --- a/src/main/java/org/variantsync/diffdetective/experiments/views/result/ViewEvaluation.java +++ b/src/main/java/org/variantsync/diffdetective/experiments/views/result/ViewEvaluation.java @@ -85,8 +85,8 @@ public String toCSV(String delimiter) { // repo.getRepositoryName(), commit, file, - relevance.getFunctionName(), -// getQueryArguments(), + relevance.getSourceExplanation(), +// relevance.getSourceArguments(), msNaive, msOptimized, diffStatistics.nodeCount, diff --git a/src/main/java/org/variantsync/diffdetective/mining/RWCompositePatternTreeFormat.java b/src/main/java/org/variantsync/diffdetective/mining/RWCompositePatternTreeFormat.java index 0305528d3..e0a2d551c 100644 --- a/src/main/java/org/variantsync/diffdetective/mining/RWCompositePatternTreeFormat.java +++ b/src/main/java/org/variantsync/diffdetective/mining/RWCompositePatternTreeFormat.java @@ -1,22 +1,25 @@ package org.variantsync.diffdetective.mining; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; +import java.util.List; + +import org.variantsync.diffdetective.util.FileSource; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.diff.serialize.treeformat.VariationDiffLabelFormat; -import org.variantsync.diffdetective.variation.diff.source.PatchFile; public class RWCompositePatternTreeFormat implements VariationDiffLabelFormat { @Override - public VariationDiffSource fromLabel(String label) { + public Source fromLabel(String label) { throw new UnsupportedOperationException("Cannot read"); } @Override - public String toLabel(VariationDiffSource variationDiffSource) { - if (variationDiffSource instanceof PatchFile p) { - final String fileName = p.path().getFileName().toString(); - return fileName.substring(0, fileName.indexOf('.')).replaceAll("_", " "); + public String toLabel(Source variationDiffSource) { + List pathSources = Source.findAll(variationDiffSource, FileSource.class); + if (pathSources.size() != 1) { + throw new IllegalArgumentException("Expected a single path source but got:\n" + Source.fullExplanation(variationDiffSource)); } - throw new IllegalArgumentException("Expected a PatchFile but got " + variationDiffSource); + final String fileName = pathSources.get(0).getPath().getFileName().toString(); + return fileName.substring(0, fileName.indexOf('.')).replaceAll("_", " "); } } diff --git a/src/main/java/org/variantsync/diffdetective/show/Show.java b/src/main/java/org/variantsync/diffdetective/show/Show.java index f6383de47..9f2018951 100644 --- a/src/main/java/org/variantsync/diffdetective/show/Show.java +++ b/src/main/java/org/variantsync/diffdetective/show/Show.java @@ -6,6 +6,7 @@ import org.variantsync.diffdetective.show.engine.GameEngine; import org.variantsync.diffdetective.show.engine.geom.Vec2; import org.variantsync.diffdetective.show.variation.VariationDiffApp; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.diff.DiffNode; import org.variantsync.diffdetective.variation.diff.VariationDiff; @@ -30,7 +31,7 @@ public static GameEngine diff(final VariationDiff d, final String title) { } public static GameEngine diff(final VariationDiff d) { - return diff(d, d.getSource().toString()); + return diff(d, Source.shortExplanation(d)); } public static GameEngine tree(final VariationTree t, final String title, List> availableFormats) { @@ -47,7 +48,7 @@ public static GameEngine tree(final VariationTree t, final String title) { } public static GameEngine tree(final VariationTree t) { - return tree(t, t.source().toString()); + return tree(t, Source.shortExplanation(t)); } public static GameEngine baddiff(final BadVDiff badVDiff, final String title, List> availableFormats) { @@ -80,6 +81,6 @@ public static GameEngine baddiff(final BadVDiff badVDiff, final String title) } public static GameEngine baddiff(final BadVDiff badVDiff) { - return baddiff(badVDiff, badVDiff.diff().source().toString()); + return baddiff(badVDiff, Source.shortExplanation(badVDiff.diff())); } } diff --git a/src/main/java/org/variantsync/diffdetective/util/CompositeSource.java b/src/main/java/org/variantsync/diffdetective/util/CompositeSource.java new file mode 100644 index 000000000..aa4e6e3da --- /dev/null +++ b/src/main/java/org/variantsync/diffdetective/util/CompositeSource.java @@ -0,0 +1,36 @@ +package org.variantsync.diffdetective.util; + +import java.util.Arrays; +import java.util.List; + +/** + * Represents a {@link Source} without arguments. + */ +public class CompositeSource implements Source { + private final String sourceExplanation; + private final List sources; + + /** + * @param sourceExplanation is returned verbatim by {@link getSourceExplanation} + * @param sources is returned as immutable list by {@link getSources} + */ + public CompositeSource(String sourceExplanation, Source... sources) { + this.sourceExplanation = sourceExplanation; + this.sources = Arrays.asList(sources); + } + + @Override + public String getSourceExplanation() { + return sourceExplanation; + } + + @Override + public List getSources() { + return sources; + } + + @Override + public String toString() { + return Source.shallowExplanation(this); + } +} diff --git a/src/main/java/org/variantsync/diffdetective/util/FileSource.java b/src/main/java/org/variantsync/diffdetective/util/FileSource.java new file mode 100644 index 000000000..84458a0de --- /dev/null +++ b/src/main/java/org/variantsync/diffdetective/util/FileSource.java @@ -0,0 +1,19 @@ +package org.variantsync.diffdetective.util; + +import java.nio.file.Path; +import java.util.List; + +/** + * Represents a file input in a {@link Source} hierarchy. + */ +public record FileSource(Path getPath) implements Source { + @Override + public String getSourceExplanation() { + return "File"; + } + + @Override + public List getSourceArguments() { + return List.of(getPath()); + } +} diff --git a/src/main/java/org/variantsync/diffdetective/util/Source.java b/src/main/java/org/variantsync/diffdetective/util/Source.java new file mode 100644 index 000000000..a2141ec1c --- /dev/null +++ b/src/main/java/org/variantsync/diffdetective/util/Source.java @@ -0,0 +1,275 @@ +package org.variantsync.diffdetective.util; + +import java.nio.file.Path; // For Javadoc +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import org.variantsync.diffdetective.diff.git.PatchDiff; // For Javadoc +import org.variantsync.diffdetective.variation.diff.ProjectionSource; +import org.variantsync.diffdetective.variation.diff.VariationDiff; // For Javadoc +import org.variantsync.functjonal.Cast; + +/** + * An interface for source traceability. + * For testing and debugging, it can be really useful to know where some value originated from. For + * example, imagine an error during you analysis of a {@link VariationDiff}. Now you want to know + * where the variation diff came from. The solution: DiffDetectice tracks the source and + * transformations of important data structures like {@link VariationDiff#getSource()} and allows + * you to inspect them using this interface. + *

+ * {@link Source} represents a hierarchy of inputs, processing steps, and results (the distinction + * between these types is not directly reflected in the API and only serve as explanation of the + * interface). + *

    + *
  • An input (e.g., {@link FileSource}) is a {@link Source} that has no {@link getSources + * children}. Inputs are the leafs of the {@link Source} hierarchy and contain the {@link + * getSourceExplanation name of the input} (e.g., {@code "file"} or {@code "URL"}) and {@link + * getSourceArguments some arguments} (e.g., the file name or URL). + *
  • A step (e.g., {@link ProjectionSource}) processed {@link getSources one or more sources}, has + * a {@link getSourceExplanation name} and may be configurable by some {@link getSourceArguments + * arguments}. Unconfigurable processing steps (or steps whose configurability should not be + * tracked) are most commonly represented by {@link CompositeSource}. Note that a step might also + * include (interim) results and might thus be considered a result too. + *
  • A result (e.g., {@link VariationDiff}) contains some data and the {@link getSources source of + * that data}. The contained data is not directly accessible by {@link Source this interface} but + * can be obtained by looking up the subclass representing that result with {@link findFirst} or + * {@link findAll}. Results are not necessary to trace the source of some data (and it might thus be + * omitted from the {@link Source} hierarchy) but can help to identify a buggy processing step. + *
+ *

+ * In summary, each {@link Source} in the {@link getSources hierarchy} has a {@link + * getSourceExplanation short explanation} and a number of {@link getSourceArguments arguments}. A + * source may contain additional data (e.g., the diff a variation diff originated from) that is too + * big to be printed by the standard formatting functions ({@link shallowExplanation}, {@link + * shortExplanation}, {@link fullExplanation}) of this interface. To access such data, or the + * arguments of specific subclasses, you can use {@link findFirst} and {@link findAll}. + *

+ * For dealing with generic sources, it is recommended to use the static methods of this interface. + * They provide a more readable interface (e.g., {@code variationDiff.shallowExplanation()} vs. + * {@code Source.shallowExplanation(variationDiff)}) and correctly deal with {@code null} sources + * (treated as {@link Unknown}). + * + * @see CompositeSource + * @see FileSource + */ +public interface Source { + /** + * Returns a short, one line explanation or identifier of this source. + * The result is used by {@link shallowExplanation} and is formatted together with {@link + * getSourceArguments} like {@code "sourceExplanation(argument1, argument2)"}. + */ + String getSourceExplanation(); + + /** + * Returns a list of arguments required to understand this source. + * Each argument in the result list should represent a {@link Object#toString string} without + * newlines and will be formatted together with {@link getSourceExplanation} like {@code + * "sourceExplanation(argument1, argument2)"} by {@link shallowExplanation}. This method is only + * intended to access the arguments for {@link Object#toString printing}. In case access to the + * well-typed object is required, use {@link findFirst} or {@link findAll} and use the accessors + * of the underlying type. + *

+ * For ease of implementing {@code Source}, the return value is a list of {@link Object}s + * instead of a list of {@link String}s to allow code like {@code List.of(arg0, arg1, arg2)} + * instead of {@code List.of(arg0.toString(), arg1.toString(), arg2.toString())}. Users of this + * function should assume nothing from the returned objects except that {@link Object#toString} + * is well behaved. + * + * @return an empty list by default + * @see shallowExplanation + */ + default List getSourceArguments() { + return Collections.emptyList(); + } + + /** + * Returns a list of sources that influenced this source. + * Noteworthy processing steps and incorporation of multiple sources are implemented as a tree + * of sources. This functions returns the children of this source. + *

+ * By default, the first child source is treated specially in {@link getRootSource}. + * + * @return an empty list by default + */ + default List getSources() { + return Collections.emptyList(); + } + + /** + * An explanation of this source disregarding all {@link getSources child sources}. + * The resulting string should not contain any newlines. + * + * @return {@code "sourceExplanation(argument1, argument2, ...)"} by default + * @see getSourceExplanation + * @see getSourceArguments + */ + default String shallowExplanation() { + return getSourceArguments() + .stream() + .map(Object::toString) + .collect(Collectors.joining(", ", getSourceExplanation() + "(", ")")); + } + + /** + * Calls {@link shallowExplanation} on {@code source} but handles {@code null} like {@link + * Unknown}. + */ + static String shallowExplanation(Source source) { + return (source == null ? Unknown : source).shallowExplanation(); + } + + /** + * Returns one representative {@link Source} that identifies the initial data. + * A good root source should help humans to understand at what data they are looking at. Good + * examples is a filename or a commit and repository combination. Note that sometimes this is an + * arbitrary decision (e.g., the state before or after a diff) and might depend on the problem + * that is currently worked on. Hence, there is might not be one correct result in all + * circumstances. + * + * @return the {@link getSources first child} or {@code this} if there are no {@link getSources children} + */ + default Source getRootSource() { + for (var source : getSources()) { + if (source != null) { + return source.getRootSource(); + } + } + + return this; + } + + /** + * Returns a {@link shallowExplanation} of {@link getRootSource the root source} of {@code source}. + */ + static String rootExplanation(Source source) { + return (source == null ? Unknown : source.getRootSource()) + .shallowExplanation(); + } + + /** + * Returns a short one line explanation of {@code source} by pairing {@link shortExplanation} + * with {@link rootExplanation}. + */ + static String shortExplanation(Source source) { + if (source == null) { + return Unknown.shallowExplanation(); + } + + Source root = source.getRootSource(); + if (root == source) { + return source.shallowExplanation(); + } else { + return source.shallowExplanation() + " of " + root.shallowExplanation(); + } + } + + /** + * Explains {@code this} source hierarchy in detail. + * The {@code result} will contain at least one line per {@link Source} in the {@link getSources + * hierarchy} (by default in the {@link shallowExplanation} format). The state of {@code result} + * must be in a new line before and after a call to this method. + * + * @param level the current indentation level (two spaces per level) that needs to be added + * before each line + * @param result the string containing the result of this method + */ + default void fullExplanation(int level, StringBuilder result) { + for (int i = 0; i < level; ++i) { + result.append(" "); + } + result.append(shallowExplanation(this)); + result.append("\n"); + + for (var child : getSources()) { + if (child == null) { + Unknown.fullExplanation(level + 1, result); + } else { + child.fullExplanation(level + 1, result); + } + } + } + + /** + * Calls {@link fullExplanation(int, StringBuilder)} on {@code source} but handles {@code null} + * like {@link Unknown} and returns the resulting string. + */ + static String fullExplanation(Source source) { + if (source == null) { + return fullExplanation(Unknown); + } + + var result = new StringBuilder(); + source.fullExplanation(0, result); + return result.toString(); + } + + /** + * Uses a depth first traversal of the {@link Source} {@link getSources hierarchy} to find and + * return all instances of {@code clazz}. + * This method is intended to provide access to the data contained in the source hierarchy. For + * example, {@code Source.findAll(src, File.class)} finds all source files. Note that arguments + * are not inspected. In case an implementation {@link Source} contains a {@link Path file} as + * {@link getSourceArguments argument} it is not included in the result. + * + * @see findFirst + */ + static List findAll(Source source, Class clazz) { + var result = new ArrayList(); + findAll(result, source, clazz); + return result; + } + + /** + * Implementation of {@link findAll(Source, Class)} using an {@code result} accumulator. + */ + private static void findAll(List result, Source source, Class clazz) { + if (source == null) { + return; + } + + if (source.getClass() == clazz) { + result.add(Cast.unchecked(source)); + } + + for (var child : source.getSources()) { + findAll(result, child, clazz); + } + } + + /** + * Uses a depth first traversal of the {@link Source} {@link getSources hierarchy} to find and + * return the first instances of {@code clazz}. + * This method is intended to provide access to the data contained in the source hierarchy. For + * example, {@code Source.findFirst(src, PatchDiff.class)} finds the first {@link PatchDiff}. + * This allows access to data and arguments like {@link PatchDiff#getDiff} but it does not + * traverse the {@link getSourceArguments} directly. + * + * @see findAll + */ + static T findFirst(Source source, Class clazz) { + if (source == null) { + return null; + } + + if (source.getClass() == clazz) { + return Cast.unchecked(source); + } + + for (var child : source.getSources()) { + var result = findFirst(child, clazz); + if (result != null) { + return result; + } + } + + return null; + } + + /** + * A placeholder for an unknown source without any explanation. + * Should be preferred to a {@code null} {@link Source} to make it easily grepable. + */ + public static Source Unknown = new CompositeSource("Unknown"); +} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffGraph.java b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffGraph.java index df1d7e6e6..24da64f76 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffGraph.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffGraph.java @@ -1,7 +1,7 @@ package org.variantsync.diffdetective.variation.diff; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.DiffLinesLabel; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import java.util.Collection; @@ -20,10 +20,10 @@ public final class DiffGraph { private DiffGraph() {} /** - * Invokes {@link DiffGraph#fromNodes(Collection, VariationDiffSource)} )} with an unknown VariationDiffSource. + * Invokes {@link DiffGraph#fromNodes(Collection, Source)} )} with an unknown source. */ public static VariationDiff fromNodes(final Collection> nodes) { - return fromNodes(nodes, VariationDiffSource.Unknown); + return fromNodes(nodes, Source.Unknown); } /** @@ -33,7 +33,7 @@ public static VariationDiff fromNodes(final Collection fromNodes(final Collection> nodes, final VariationDiffSource source) { + public static VariationDiff fromNodes(final Collection> nodes, final Source source) { final DiffNode newRoot = DiffNode.createRoot(DiffLinesLabel.ofCodeBlock(DIFFGRAPH_LABEL)); nodes.stream() .filter(DiffNode::isRoot) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/ProjectionSource.java b/src/main/java/org/variantsync/diffdetective/variation/diff/ProjectionSource.java index 7f277b69c..5f6225af1 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/ProjectionSource.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/ProjectionSource.java @@ -1,7 +1,23 @@ package org.variantsync.diffdetective.variation.diff; +import java.util.List; + +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.Label; -import org.variantsync.diffdetective.variation.tree.source.VariationTreeSource; -public record ProjectionSource(VariationDiff origin, Time time) implements VariationTreeSource { +public record ProjectionSource(VariationDiff origin, Time time) implements Source { + @Override + public String getSourceExplanation() { + return "Projection"; + } + + @Override + public List getSources() { + return List.of(origin); + } + + @Override + public List getSourceArguments() { + return List.of(time); + } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/VariationDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/VariationDiff.java index 0d6c365bb..2004bbcda 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/VariationDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/VariationDiff.java @@ -12,19 +12,19 @@ import org.variantsync.diffdetective.diff.result.DiffError; import org.variantsync.diffdetective.diff.result.DiffParseException; import org.variantsync.diffdetective.util.Assert; +import org.variantsync.diffdetective.util.FileSource; +import org.variantsync.diffdetective.util.fide.FixTrueFalse; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.diff.construction.GumTreeDiff; import org.variantsync.diffdetective.variation.diff.construction.JGitDiff; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParser; -import org.variantsync.diffdetective.variation.diff.source.PatchFile; import org.variantsync.diffdetective.variation.diff.source.PatchString; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import org.variantsync.diffdetective.variation.diff.traverse.VariationDiffTraversal; import org.variantsync.diffdetective.variation.diff.traverse.VariationDiffVisitor; import org.variantsync.diffdetective.variation.tree.VariationTree; -import org.variantsync.diffdetective.util.fide.FixTrueFalse; +import org.variantsync.diffdetective.util.Source; import org.variantsync.functjonal.Cast; import org.variantsync.functjonal.Result; @@ -50,23 +50,23 @@ /** * Implementation of variation tree diffs from our ESEC/FSE'22 paper. * An instance of this class represents a variation tree diff. It stores the root of the graph as a {@link DiffNode}. - * It optionally holds a {@link VariationDiffSource} that describes how the variation tree diff was obtained. + * It optionally holds a {@link Source} that describes how the variation tree diff was obtained. * The graph structure is implemented by the {@link DiffNode} class. * * @param The type of label stored in this tree. * * @author Paul Bittner, Sören Viegener */ -public class VariationDiff { +public class VariationDiff implements Source { private final DiffNode root; - private VariationDiffSource source; + private Source source; /** * Creates a VariationDiff that only consists of the single given root node. * @param root The root of this tree. */ public VariationDiff(DiffNode root) { - this(root, VariationDiffSource.Unknown); + this(root, Source.Unknown); } /** @@ -75,7 +75,7 @@ public VariationDiff(DiffNode root) { * @param root The root of this tree. * @param source The data from which the VariationDiff was created. */ - public VariationDiff(DiffNode root, VariationDiffSource source) { + public VariationDiff(DiffNode root, Source source) { this.root = root; this.source = source; } @@ -92,7 +92,7 @@ public VariationDiff(DiffNode root, VariationDiffSource source) { public static VariationDiff fromFile(final Path p, VariationDiffParseOptions parseOptions) throws IOException, DiffParseException { try (BufferedReader file = Files.newBufferedReader(p)) { final VariationDiff tree = VariationDiffParser.createVariationDiff(file, parseOptions); - tree.setSource(new PatchFile(p)); + tree.setSource(new FileSource(p)); return tree; } } @@ -396,20 +396,30 @@ public LinkedHashSet computeAllFeatureNames() { /** * Sets the source of this VariationDiff. - * @see VariationDiffSource + * @see Source */ - public void setSource(final VariationDiffSource source) { + public void setSource(final Source source) { this.source = source; } /** * Returns the source of this VariationDiff (i.e., the data this VariationDiff was created from). - * @see VariationDiffSource + * @see Source */ - public VariationDiffSource getSource() { + public Source getSource() { return source; } + @Override + public List getSources() { + return List.of(source); + } + + @Override + public String getSourceExplanation() { + return "VariationDiff"; + } + /** * Returns the number of nodes in this VariationDiff. */ diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/bad/BadVDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/bad/BadVDiff.java index f7508ee41..f565ce20a 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/bad/BadVDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/bad/BadVDiff.java @@ -2,13 +2,13 @@ import org.variantsync.diffdetective.diff.text.DiffLineNumberRange; import org.variantsync.diffdetective.util.Assert; +import org.variantsync.diffdetective.util.CompositeSource; import org.variantsync.diffdetective.util.StringUtils; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.diff.DiffNode; import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.DiffType; import org.variantsync.diffdetective.variation.diff.Time; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import org.variantsync.diffdetective.variation.tree.VariationTree; import org.variantsync.diffdetective.variation.tree.VariationTreeNode; import org.variantsync.functjonal.Cast; @@ -309,7 +309,7 @@ public EdgeToConstruct( } return new BadVDiff<>( - new VariationTree<>(root, new BadVDiffFromVariationDiffSource(d.getSource())), + new VariationTree<>(root, new CompositeSource("BadVDiff.fromGood", d.getSource())), matching, coloring, lines @@ -403,12 +403,7 @@ public EdgeToConstruct( nodeTranslation.get(e.parent()).addChild(e.child(), e.time()); } - VariationDiffSource source = VariationDiffSource.Unknown; - if (diff.source() instanceof BadVDiffFromVariationDiffSource s) { - source = s.initialVariationDiff(); - } - - return new VariationDiff<>(root, source); + return new VariationDiff<>(root, new CompositeSource("BadVDiff.toGood", diff.getSource())); } public BadVDiff deepCopy() { diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/bad/BadVDiffFromVariationDiffSource.java b/src/main/java/org/variantsync/diffdetective/variation/diff/bad/BadVDiffFromVariationDiffSource.java deleted file mode 100644 index ceb69d515..000000000 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/bad/BadVDiffFromVariationDiffSource.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.variantsync.diffdetective.variation.diff.bad; - -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; -import org.variantsync.diffdetective.variation.tree.source.VariationTreeSource; - -public record BadVDiffFromVariationDiffSource(VariationDiffSource initialVariationDiff) implements VariationTreeSource { - @Override - public String toString() { - return initialVariationDiff.toString(); - } -} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java index bb0d37309..83273dce3 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java @@ -9,11 +9,11 @@ import org.variantsync.diffdetective.gumtree.VariationDiffAdapter; import org.variantsync.diffdetective.gumtree.VariationTreeAdapter; import org.variantsync.diffdetective.util.Assert; +import org.variantsync.diffdetective.util.CompositeSource; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.diff.DiffNode; import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.VariationDiff; -import org.variantsync.diffdetective.variation.diff.source.VariationTreeDiffSource; import org.variantsync.diffdetective.variation.diff.traverse.VariationDiffTraversal; import org.variantsync.diffdetective.variation.tree.VariationNode; import org.variantsync.diffdetective.variation.tree.VariationTree; @@ -48,7 +48,7 @@ public static VariationDiff diffUsingMatching(VariationTree matcher ); - return new VariationDiff<>(root, new VariationTreeDiffSource(before.source(), after.source())); + return new VariationDiff<>(root, new CompositeSource("diffUsingMatching", before.source(), after.source())); } /** diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/render/VariationDiffRenderer.java b/src/main/java/org/variantsync/diffdetective/variation/diff/render/VariationDiffRenderer.java index 91b03e0b9..a6dacc622 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/render/VariationDiffRenderer.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/render/VariationDiffRenderer.java @@ -8,6 +8,7 @@ import org.variantsync.diffdetective.shell.ShellExecutor; import org.variantsync.diffdetective.util.Assert; import org.variantsync.diffdetective.util.IO; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.util.StringUtils; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.Label; @@ -17,7 +18,6 @@ import org.variantsync.diffdetective.variation.diff.serialize.LineGraphConstants; import org.variantsync.diffdetective.variation.diff.serialize.LineGraphExport; import org.variantsync.diffdetective.variation.diff.serialize.LineGraphExportOptions; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import java.io.IOException; import java.nio.file.Files; @@ -193,7 +193,7 @@ public boolean renderWithTreeFormat(final VariationDiff boolean render(final VariationDiff tree, final String treeAndFileName, final Path directory, RenderOptions options, LineGraphExportOptions exportOptions, BiFunction treeHeader) { + private boolean render(final VariationDiff tree, final String treeAndFileName, final Path directory, RenderOptions options, LineGraphExportOptions exportOptions, BiFunction treeHeader) { final Path tempFile = directory.resolve(treeAndFileName + ".lg"); try (var destination = IO.newBufferedOutputStream(tempFile)) { diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphExport.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphExport.java index d1483b202..fe9b8319a 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphExport.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphExport.java @@ -10,12 +10,12 @@ import org.variantsync.diffdetective.diff.git.CommitDiff; import org.variantsync.diffdetective.diff.git.PatchDiff; import org.variantsync.diffdetective.metadata.Metadata; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.util.StringUtils; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.VariationDiff; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import org.variantsync.functjonal.category.InplaceSemigroup; /** @@ -154,12 +154,12 @@ public static Statistic toLineGraphFormat(final PatchDiff patch, final LineGraph /** * Produces the final linegraph file content. - * Creates a linegraph header from the given VariationDiffSource using the {@link LineGraphExportOptions#treeFormat()} in the given options. + * Creates a linegraph header from the given Source using the {@link LineGraphExportOptions#treeFormat()} in the given options. * Then appends the already created file content for nodes and edges. - * @param source The {@link VariationDiffSource} that describes where the VariationDiff whose content is written to the file originated from. + * @param source The {@link Source} that describes where the VariationDiff whose content is written to the file originated from. * @param options {@link LineGraphExportOptions} used to determine the treeFormat for the header. */ - private static String lineGraphHeader(final VariationDiffSource source, final LineGraphExportOptions options) { + private static String lineGraphHeader(final Source source, final LineGraphExportOptions options) { return options.treeFormat().toLineGraphLine(source) + StringUtils.LINEBREAK; } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java index 3d9750b98..dcb323eb3 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java @@ -2,10 +2,10 @@ import org.variantsync.diffdetective.util.Assert; import org.variantsync.diffdetective.util.FileUtils; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.diff.DiffGraph; import org.variantsync.diffdetective.variation.diff.DiffNode; import org.variantsync.diffdetective.variation.diff.VariationDiff; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import org.variantsync.diffdetective.variation.diff.source.LineGraphFileSource; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.NodeType; @@ -128,9 +128,9 @@ public static List> fromLineGraph(final BufferedRe * @return {@link VariationDiff} generated from the given, already parsed parameters. */ private static VariationDiff parseVariationDiff(final String lineGraph, final Path inFile, final List> diffNodeList, final LineGraphImportOptions options) { - VariationDiffSource variationDiffSource = options.treeFormat().fromLineGraphLine(lineGraph); + Source variationDiffSource = options.treeFormat().fromLineGraphLine(lineGraph); - if (variationDiffSource == null || VariationDiffSource.Unknown.equals(variationDiffSource)) { + if (variationDiffSource == null || Source.Unknown.equals(variationDiffSource)) { variationDiffSource = new LineGraphFileSource( lineGraph, inFile diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/nodeformat/DiffNodeLabelFormat.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/nodeformat/DiffNodeLabelFormat.java index 378497db9..49a26b641 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/nodeformat/DiffNodeLabelFormat.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/nodeformat/DiffNodeLabelFormat.java @@ -7,7 +7,6 @@ import org.variantsync.diffdetective.variation.diff.DiffNode; import org.variantsync.diffdetective.variation.diff.serialize.LineGraphConstants; import org.variantsync.diffdetective.variation.diff.serialize.LinegraphFormat; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import org.variantsync.functjonal.Pair; /** @@ -49,7 +48,7 @@ default List toMultilineLabel(DiffNode node) { } /** - * Converts a line describing a graph (starting with "t # ") in line graph format into a {@link VariationDiffSource}. + * Converts a line describing a graph (starting with "t # ") in line graph format into a {@link DiffNode}. * * @param lineGraphLine A line from a line graph file starting with "t #" * @return A pair with the first element being the id of the node specified in the given lineGrapLine. diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/CommitDiffVariationDiffLabelFormat.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/CommitDiffVariationDiffLabelFormat.java index c4d19637e..dad73a7bc 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/CommitDiffVariationDiffLabelFormat.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/CommitDiffVariationDiffLabelFormat.java @@ -3,10 +3,10 @@ import org.apache.commons.io.FilenameUtils; import org.variantsync.diffdetective.diff.git.CommitDiff; import org.variantsync.diffdetective.diff.git.PatchDiff; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.serialize.LineGraphConstants; import org.variantsync.diffdetective.variation.diff.source.CommitDiffVariationDiffSource; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import java.nio.file.InvalidPathException; import java.nio.file.Path; @@ -19,7 +19,7 @@ */ public class CommitDiffVariationDiffLabelFormat implements VariationDiffLabelFormat { @Override - public VariationDiffSource fromLabel(final String label) { + public Source fromLabel(final String label) { String[] commit = label.split(LineGraphConstants.TREE_NAME_SEPARATOR_REGEX); try { Path filePath = Paths.get(commit[0]); @@ -31,15 +31,19 @@ public VariationDiffSource fromLabel(final String label) { } @Override - public String toLabel(final VariationDiffSource variationDiffSource) { - if (variationDiffSource instanceof CommitDiffVariationDiffSource commitDiffVariationDiffSource) { + public String toLabel(final Source variationDiffSource) { + CommitDiffVariationDiffSource commitDiffVariationDiffSource = Source.findFirst(variationDiffSource, CommitDiffVariationDiffSource.class); + if (commitDiffVariationDiffSource != null) { // write for instances of CommitDiffVariationDiffSources return FilenameUtils.separatorsToUnix(commitDiffVariationDiffSource.getFileName().toString()) + LineGraphConstants.TREE_NAME_SEPARATOR + commitDiffVariationDiffSource.getCommitHash(); - } else if (variationDiffSource instanceof PatchDiff patchDiff) { + } + + PatchDiff patchDiff = Source.findFirst(variationDiffSource, PatchDiff.class); + if (patchDiff != null) { // write for instances of PatchDiffs return FilenameUtils.separatorsToUnix(patchDiff.getFileName(Time.AFTER)) + LineGraphConstants.TREE_NAME_SEPARATOR + patchDiff.getCommitDiff().getCommitHash(); - } else { - throw new UnsupportedOperationException("There is no implementation for this VariationDiffSource type: " + variationDiffSource); } + + throw new UnsupportedOperationException("There is no implementation for this Source type: " + variationDiffSource); } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/IndexedTreeFormat.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/IndexedTreeFormat.java index 45a44a64d..67f7d351e 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/IndexedTreeFormat.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/IndexedTreeFormat.java @@ -1,10 +1,10 @@ package org.variantsync.diffdetective.variation.diff.serialize.treeformat; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; +import org.variantsync.diffdetective.util.Source; /** * Exports tree by indexing them. - * This format keeps an internal counter that is incremented on each call of {@link #toLabel(VariationDiffSource)}. + * This format keeps an internal counter that is incremented on each call of {@link #toLabel(Source)}. * Thus, every produced label will have the successive index of the previously produced label. */ public class IndexedTreeFormat implements VariationDiffLabelFormat { @@ -25,12 +25,12 @@ public void reset() { } @Override - public VariationDiffSource fromLabel(String label) { - return VariationDiffSource.Unknown; + public Source fromLabel(String label) { + return Source.Unknown; } @Override - public String toLabel(VariationDiffSource variationDiffSource) { + public String toLabel(Source variationDiffSource) { final String result = "" + nextId; ++nextId; return result; diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/VariationDiffLabelFormat.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/VariationDiffLabelFormat.java index f9c5d5ebb..7d2456eb7 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/VariationDiffLabelFormat.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/VariationDiffLabelFormat.java @@ -1,47 +1,47 @@ package org.variantsync.diffdetective.variation.diff.serialize.treeformat; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.diff.serialize.LineGraphConstants; import org.variantsync.diffdetective.variation.diff.serialize.LinegraphFormat; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; /** - * Reads and writes {@link VariationDiffSource} from and to line graph. + * Reads and writes {@link Source} from and to line graph. * @author Paul Bittner, Kevin Jedelhauser */ public interface VariationDiffLabelFormat extends LinegraphFormat { /** - * Converts a label of line graph into a {@link VariationDiffSource}. + * Converts a label of line graph into a {@link Source}. * - * @param label A string containing the label of the {@link VariationDiffSource} - * @return The {@link VariationDiffSource} descibed by this label. + * @param label A string containing the label of the {@link Source} + * @return The {@link Source} descibed by this label. */ - VariationDiffSource fromLabel(final String label); + Source fromLabel(final String label); /** - * Converts a {@link VariationDiffSource} label of line graph. + * Converts a {@link Source} label of line graph. * - * @param variationDiffSource The {@link VariationDiffSource} to be converted + * @param variationDiffSource The {@link Source} to be converted * @return The corresponding line graph line */ - String toLabel(final VariationDiffSource variationDiffSource); + String toLabel(final Source variationDiffSource); /** - * Converts a line describing a graph (starting with "t # ") in line graph format into a {@link VariationDiffSource}. + * Converts a line describing a graph (starting with "t # ") in line graph format into a {@link Source}. * * @param lineGraphLine A line from a line graph file starting with "t #" - * @return The {@link VariationDiffSource} descibed by the label of this line. + * @return The {@link Source} descibed by the label of this line. */ - default VariationDiffSource fromLineGraphLine(final String lineGraphLine) { + default Source fromLineGraphLine(final String lineGraphLine) { return fromLabel(lineGraphLine.substring((LineGraphConstants.LG_TREE_HEADER + " ").length())); } /** * Prepends the {@link LineGraphConstants#LG_TREE_HEADER tree declaration} to a label and return an entire line graph line. * - * @param variationDiffSource The {@link VariationDiffSource} to be converted - * @return The entire line graph line of a {@link VariationDiffSource}. + * @param variationDiffSource The {@link Source} to be converted + * @return The entire line graph line of a {@link Source}. */ - default String toLineGraphLine(final VariationDiffSource variationDiffSource) { + default String toLineGraphLine(final Source variationDiffSource) { return LineGraphConstants.LG_TREE_HEADER + " " + toLabel(variationDiffSource); } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/source/CommitDiffVariationDiffSource.java b/src/main/java/org/variantsync/diffdetective/variation/diff/source/CommitDiffVariationDiffSource.java index 7b12106b7..b41b07397 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/source/CommitDiffVariationDiffSource.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/source/CommitDiffVariationDiffSource.java @@ -1,42 +1,29 @@ package org.variantsync.diffdetective.variation.diff.source; import java.nio.file.Path; +import java.util.List; import org.variantsync.diffdetective.diff.git.CommitDiff; // For Javadoc +import org.variantsync.diffdetective.util.Source; /** * Describes that a VariationDiff was created from a patch in a {@link CommitDiff}. + * @param getFileName Name of the modified file from whose changes the VariationDiff was parsed. + * @param getCommitHash Hash of the commit in which the edit occurred. */ -public class CommitDiffVariationDiffSource implements VariationDiffSource { - private final Path fileName; - private final String commitHash; - - /** - * Create a source that refers to changes to the given file in the given commit. - * @param fileName Name of the modified file from whose changes the VariationDiff was parsed. - * @param commitHash Hash of the commit in which the edit occurred. - */ - public CommitDiffVariationDiffSource(final Path fileName, final String commitHash) { - this.fileName = fileName; - this.commitHash = commitHash; - } - - /** - * Returns the name of the modified file from whose changes the VariationDiff was parsed. - */ - public Path getFileName() { - return fileName; +public record CommitDiffVariationDiffSource(Path getFileName, String getCommitHash) implements Source { + @Override + public String toString() { + return getFileName() + "@" + getCommitHash(); } - /** - * Returns the hash of the commit in which the edit occurred. - */ - public String getCommitHash() { - return commitHash; + @Override + public String getSourceExplanation() { + return "CommitDiff"; } @Override - public String toString() { - return fileName + "@" + commitHash; + public List getSourceArguments() { + return List.of(getFileName(), getCommitHash()); } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/source/FromVariationTreeSource.java b/src/main/java/org/variantsync/diffdetective/variation/diff/source/FromVariationTreeSource.java deleted file mode 100644 index 29ee2a23c..000000000 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/source/FromVariationTreeSource.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.variantsync.diffdetective.variation.diff.source; - -import org.variantsync.diffdetective.variation.tree.source.VariationTreeSource; - -public record FromVariationTreeSource(VariationTreeSource inner) implements VariationDiffSource { - @Override - public String toString() { - return inner.toString(); - } -} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/source/LineGraphFileSource.java b/src/main/java/org/variantsync/diffdetective/variation/diff/source/LineGraphFileSource.java index 4b2d73e9d..7b25f2a39 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/source/LineGraphFileSource.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/source/LineGraphFileSource.java @@ -1,6 +1,9 @@ package org.variantsync.diffdetective.variation.diff.source; import java.nio.file.Path; +import java.util.List; + +import org.variantsync.diffdetective.util.Source; /** * A source for VariationDiffs that were parsed from a linegraph file. @@ -10,5 +13,14 @@ public record LineGraphFileSource( String graphHeader, Path file -) implements VariationDiffSource { +) implements Source { + @Override + public String getSourceExplanation() { + return "LineGraphFile"; + } + + @Override + public List getSourceArguments() { + return List.of(graphHeader, file); + } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/source/PatchFile.java b/src/main/java/org/variantsync/diffdetective/variation/diff/source/PatchFile.java deleted file mode 100644 index 060b909c6..000000000 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/source/PatchFile.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.variantsync.diffdetective.variation.diff.source; - -import java.nio.file.Path; - -/** - * A source for VariationDiff's that were created from patch files on disk. - * @param path Path to the patch file that was parsed to a VariationDiff. - */ -public record PatchFile(Path path) implements VariationDiffSource { -} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/source/PatchString.java b/src/main/java/org/variantsync/diffdetective/variation/diff/source/PatchString.java index 610029183..99feb00ca 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/source/PatchString.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/source/PatchString.java @@ -1,14 +1,20 @@ package org.variantsync.diffdetective.variation.diff.source; import org.variantsync.diffdetective.diff.text.TextBasedDiff; +import org.variantsync.diffdetective.util.Source; /** * Source for VariationDiffs that were created from a patch given as a String. * @param getDiff The patch as a String. */ -public record PatchString(String getDiff) implements TextBasedDiff, VariationDiffSource { +public record PatchString(String getDiff) implements TextBasedDiff, Source { + @Override + public String getSourceExplanation() { + return "Patch"; + } + @Override public String toString() { - return "from line-based diff " + getDiff; + return getSourceExplanation() + getDiff; } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/source/VariationDiffSource.java b/src/main/java/org/variantsync/diffdetective/variation/diff/source/VariationDiffSource.java deleted file mode 100644 index 01f5a944c..000000000 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/source/VariationDiffSource.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.variantsync.diffdetective.variation.diff.source; - -/** - * Describes or identifies that data a VariationDiff was created or parsed from. - * This is typically a patch. - */ -public interface VariationDiffSource { - /** - * Constant to use when the source of a VariationDiff is unknown - * or if it was created artificially. - */ - VariationDiffSource Unknown = new VariationDiffSource() { - @Override - public int hashCode() { - return 0; - } - - @Override - public String toString() { - return "Unknown VariationDiffSource"; - } - }; -} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/source/VariationTreeDiffSource.java b/src/main/java/org/variantsync/diffdetective/variation/diff/source/VariationTreeDiffSource.java deleted file mode 100644 index f5235f866..000000000 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/source/VariationTreeDiffSource.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.variantsync.diffdetective.variation.diff.source; - -import org.variantsync.diffdetective.variation.diff.VariationDiff; // For Javadoc -import org.variantsync.diffdetective.variation.tree.VariationTree; // For Javadoc -import org.variantsync.diffdetective.variation.tree.source.VariationTreeSource; - -/** - * Describes that a {@link VariationDiff} was created from two {@link VariationTree}s. - */ -public record VariationTreeDiffSource( - VariationTreeSource before, - VariationTreeSource after -) implements VariationDiffSource { - @Override - public String toString() { - return "from trees [" + before + "] and [" + after + "]"; - } -} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/view/ViewSource.java b/src/main/java/org/variantsync/diffdetective/variation/diff/view/ViewSource.java index 6e1f0fabf..090f758ac 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/view/ViewSource.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/view/ViewSource.java @@ -1,15 +1,31 @@ package org.variantsync.diffdetective.variation.diff.view; +import java.util.List; + +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.diff.VariationDiff; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import org.variantsync.diffdetective.variation.tree.view.relevance.Relevance; /** - * A {@link VariationDiffSource} that remembers that a variation diff represents a view on - * another variation diff. + * A {@link Source} that remembers that a variation diff represents a view on another variation + * diff. * @param diff The original variation diff on which the variation diff with this source is a view on. * @param relevance The relevance predicate that was used to create the view. */ -public record ViewSource(VariationDiff diff, Relevance relevance) implements VariationDiffSource { +public record ViewSource(VariationDiff diff, Relevance relevance) implements Source { + @Override + public String getSourceExplanation() { + return "View"; + } + + @Override + public List getSources() { + return List.of(diff); + } + + @Override + public List getSourceArguments() { + return List.of(relevance); + } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/VariationTree.java b/src/main/java/org/variantsync/diffdetective/variation/tree/VariationTree.java index 9920b3e6a..bdb9b2b37 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/VariationTree.java +++ b/src/main/java/org/variantsync/diffdetective/variation/tree/VariationTree.java @@ -3,17 +3,17 @@ import org.variantsync.diffdetective.datasets.PatchDiffParseOptions; import org.variantsync.diffdetective.diff.result.DiffParseException; import org.variantsync.diffdetective.util.Assert; +import org.variantsync.diffdetective.util.CompositeSource; +import org.variantsync.diffdetective.util.FileSource; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.NodeType; // For Javadoc import org.variantsync.diffdetective.variation.diff.DiffNode; -import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.Projection; +import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParser; -import org.variantsync.diffdetective.variation.diff.source.FromVariationTreeSource; -import org.variantsync.diffdetective.variation.tree.source.LocalFileSource; -import org.variantsync.diffdetective.variation.tree.source.VariationTreeSource; import java.io.BufferedReader; import java.io.IOException; @@ -22,6 +22,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; @@ -42,15 +43,15 @@ */ public record VariationTree( VariationTreeNode root, - VariationTreeSource source -) { + Source source +) implements Source { /** Creates a {@code VariationTree} with the given root and an unknown source. */ public VariationTree(VariationTreeNode root) { - this(root, VariationTreeSource.Unknown); + this(root, Source.Unknown); } /** Creates a {@code VariationTree} with the given root and source. */ - public VariationTree(VariationTreeNode root, VariationTreeSource source) { + public VariationTree(VariationTreeNode root, Source source) { this.root = root; this.source = source; @@ -66,7 +67,7 @@ public static VariationTree fromFile(final Path path) throws IOE } /** - * Same as {@link #fromFile(BufferedReader, VariationTreeSource, VariationDiffParseOptions)} + * Same as {@link #fromFile(BufferedReader, Source, VariationDiffParseOptions)} * but registers {@code path} as source. */ public static VariationTree fromFile( @@ -76,8 +77,8 @@ public static VariationTree fromFile( try (BufferedReader file = Files.newBufferedReader(path)) { return fromFile( file, - new LocalFileSource(path), - parseOptions + new FileSource(path), + parseOptions ); } } @@ -94,7 +95,7 @@ public static VariationTree fromFile( */ public static VariationTree fromFile( final BufferedReader input, - final VariationTreeSource source, + final Source source, final VariationDiffParseOptions parseOptions ) throws IOException, DiffParseException { VariationTreeNode tree = VariationDiffParser @@ -118,7 +119,7 @@ public static VariationTree fromFile( */ public static VariationTree fromText( final String input, - final VariationTreeSource source, + final Source source, final VariationDiffParseOptions parseOptions ) throws DiffParseException { try { @@ -129,11 +130,11 @@ public static VariationTree fromText( } } - public static VariationTree fromProjection(final Projection projection, final VariationTreeSource source) { + public static VariationTree fromProjection(final Projection projection, final Source source) { return fromVariationNode(projection, source); } - public static , L extends Label> VariationTree fromVariationNode(final VariationNode node, final VariationTreeSource source) { + public static , L extends Label> VariationTree fromVariationNode(final VariationNode node, final Source source) { return new VariationTree<>( node.toVariationTree(), source @@ -143,7 +144,7 @@ public static , L extends Label> VariationTree public VariationDiff toVariationDiff(final Function, DiffNode> nodeConverter) { return new VariationDiff<>( DiffNode.unchanged(nodeConverter, root()), - new FromVariationTreeSource(source()) + new CompositeSource("VariationTree.toVariationDiff", source()) ); } @@ -225,6 +226,20 @@ public void assertConsistency() { forAllPreorder(VariationTreeNode::assertConsistency); } + public Source getSource() { + return source(); + } + + @Override + public List getSources() { + return List.of(source); + } + + @Override + public String getSourceExplanation() { + return "VariationTree"; + } + @Override public String toString() { return "variation tree from " + source; diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/source/GitSource.java b/src/main/java/org/variantsync/diffdetective/variation/tree/source/GitSource.java index d79b70eec..255c54928 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/source/GitSource.java +++ b/src/main/java/org/variantsync/diffdetective/variation/tree/source/GitSource.java @@ -2,6 +2,9 @@ import java.net.URL; import java.nio.file.Path; +import java.util.List; + +import org.variantsync.diffdetective.util.Source; /** * A file at a specific commit in a Git repository. @@ -19,9 +22,19 @@ public record GitSource( URL repository, String commitHash, Path path -) implements VariationTreeSource { +) implements Source { @Override public String toString() { return path.toString() + " at " + commitHash + " of " + repository; } + + @Override + public String getSourceExplanation() { + return "GitCommit"; + } + + @Override + public List getSourceArguments() { + return List.of(repository, commitHash, path); + } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/source/LocalFileSource.java b/src/main/java/org/variantsync/diffdetective/variation/tree/source/LocalFileSource.java deleted file mode 100644 index c9c60fbb9..000000000 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/source/LocalFileSource.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.variantsync.diffdetective.variation.tree.source; - -import java.nio.file.Path; - -/** - * A reference to a file with path {@code path} in the local file system. - */ -public record LocalFileSource(Path path) implements VariationTreeSource { - @Override - public String toString() { - return "file://" + path.toString(); - } -} diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/source/VariationTreeSource.java b/src/main/java/org/variantsync/diffdetective/variation/tree/source/VariationTreeSource.java deleted file mode 100644 index 448ac1511..000000000 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/source/VariationTreeSource.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.variantsync.diffdetective.variation.tree.source; - -/** - * A reference to the source of the variation tree. - */ -public interface VariationTreeSource { - /** - * The source of the variation tree is unknown. - * Should be avoided if possible. - */ - VariationTreeSource Unknown = new VariationTreeSource() { - @Override - public String toString() { - return "unknown"; - } - }; - - String toString(); -} diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Configure.java b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Configure.java index 2b571b3f7..177007b5e 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Configure.java +++ b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Configure.java @@ -7,6 +7,7 @@ import org.variantsync.diffdetective.util.fide.FixTrueFalse.Formula; import org.variantsync.diffdetective.variation.tree.VariationNode; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.function.Consumer; @@ -94,12 +95,12 @@ public boolean test(VariationNode v) { } @Override - public String parametersToString() { - return configuration.get().toString(NodeWriter.logicalSymbols); + public List getSourceArguments() { + return List.of(configuration.get().toString(NodeWriter.logicalSymbols)); } @Override - public String getFunctionName() { + public String getSourceExplanation() { return "configure"; } diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Relevance.java b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Relevance.java index 8bc06b5e6..cd8097767 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Relevance.java +++ b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Relevance.java @@ -1,5 +1,6 @@ package org.variantsync.diffdetective.variation.tree.view.relevance; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.tree.VariationNode; import java.util.function.Consumer; @@ -13,17 +14,7 @@ * Moreover, this interface provides methods to access a predicates metadata for debugging * and (de-)serialization. */ -public interface Relevance extends Predicate> { - /** - * @return The name of this relevance predicate's type. - */ - String getFunctionName(); - - /** - * @return The parameters set for this particular relevance predicate, as a comma-separated string (without braces). - */ - String parametersToString(); - +public interface Relevance extends Predicate>, Source { /** * Delegates to {@link Relevance#computeViewNodesCheckAll(Relevance, VariationNode, Consumer)} with this relevance * as the first parameter. @@ -57,9 +48,9 @@ public interface Relevance extends Predicate> { * Default implementation for {@link Object#toString()} that can be reused by implementing classes. * The produced string will look like a function call. * @param relevance The relevance predicate to turn into a string. - * @return {@link Relevance#getFunctionName()} + "(" + {@link Relevance#parametersToString()} + ")" + * @return {@link #getSourceArguments()} + "(" + {@link #getSourceExplanation()} + ")" */ static String toString(Relevance relevance) { - return relevance.getFunctionName() + "(" + relevance.parametersToString() + ")"; + return relevance.shallowExplanation(); } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Search.java b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Search.java index 0f557e7c2..14448078a 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Search.java +++ b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Search.java @@ -1,5 +1,7 @@ package org.variantsync.diffdetective.variation.tree.view.relevance; +import java.util.List; + import org.variantsync.diffdetective.variation.tree.VariationNode; /** @@ -17,12 +19,12 @@ public boolean test(VariationNode v) { } @Override - public String parametersToString() { - return artifact(); + public List getSourceArguments() { + return List.of(artifact()); } @Override - public String getFunctionName() { + public String getSourceExplanation() { return "is"; } diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Trace.java b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Trace.java index d559605a4..ed0d33c35 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Trace.java +++ b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/Trace.java @@ -1,5 +1,7 @@ package org.variantsync.diffdetective.variation.tree.view.relevance; +import java.util.List; + import org.variantsync.diffdetective.variation.tree.VariationNode; /** @@ -15,12 +17,12 @@ public boolean test(VariationNode v) { } @Override - public String parametersToString() { - return featureName(); + public List getSourceArguments() { + return List.of(featureName()); } @Override - public String getFunctionName() { + public String getSourceExplanation() { return "traceall"; } diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/TraceSup.java b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/TraceSup.java index d990256c1..bae357331 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/TraceSup.java +++ b/src/main/java/org/variantsync/diffdetective/variation/tree/view/relevance/TraceSup.java @@ -1,5 +1,7 @@ package org.variantsync.diffdetective.variation.tree.view.relevance; +import java.util.List; + import org.prop4j.Node; import org.prop4j.NodeWriter; import org.variantsync.diffdetective.analysis.logic.SAT; @@ -16,12 +18,12 @@ public boolean test(VariationNode variationNode) { } @Override - public String parametersToString() { - return configuration.toString(NodeWriter.logicalSymbols); + public List getSourceArguments() { + return List.of(configuration.toString(NodeWriter.logicalSymbols)); } @Override - public String getFunctionName() { + public String getSourceExplanation() { return "traceyes"; } diff --git a/src/test/java/TreeDiffingTest.java b/src/test/java/TreeDiffingTest.java index 1d3dd395d..d9876a28b 100644 --- a/src/test/java/TreeDiffingTest.java +++ b/src/test/java/TreeDiffingTest.java @@ -5,7 +5,9 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.variantsync.diffdetective.diff.result.DiffParseException; +import org.variantsync.diffdetective.util.FileSource; import org.variantsync.diffdetective.util.IO; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.diff.DiffNode; import org.variantsync.diffdetective.variation.diff.VariationDiff; @@ -18,9 +20,7 @@ import org.variantsync.diffdetective.variation.diff.serialize.edgeformat.ChildOrderEdgeFormat; import org.variantsync.diffdetective.variation.diff.serialize.edgeformat.DefaultEdgeLabelFormat; import org.variantsync.diffdetective.variation.diff.serialize.nodeformat.FullNodeFormat; -import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import org.variantsync.diffdetective.variation.tree.VariationTree; -import org.variantsync.diffdetective.variation.tree.source.LocalFileSource; import java.io.IOException; import java.nio.file.Files; @@ -104,7 +104,7 @@ public void improveMatchingTestCase(TestCase testCase) throws IOException, DiffP ); DiffNode improvedDiffNode = GumTreeDiff.improveMatching(variationDiff.getRoot(), testCase.matcher()); - VariationDiff improvedVariationDiff = new VariationDiff<>(improvedDiffNode, VariationDiffSource.Unknown); + VariationDiff improvedVariationDiff = new VariationDiff<>(improvedDiffNode, Source.Unknown); assertExpectedVariationDiffs(testCase, improvedVariationDiff); } @@ -147,7 +147,7 @@ private static VariationTree parseVariationTree(Path filename) t file, VariationDiffParseOptions.Default ).getRoot().projection(BEFORE).toVariationTree(), - new LocalFileSource(filename) + new FileSource(filename) ); } } From 952464fb82f93f5520c3337e137044e2167f49d2 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Fri, 24 Oct 2025 14:13:44 +0200 Subject: [PATCH 2/7] feat: improve the source tracking to reduce `Source.Unknown` --- .../diffdetective/diff/git/GitDiffer.java | 3 +++ .../examplesearch/ExampleFinder.java | 8 ++----- .../thesis_bm/ConstructionValidation.java | 11 +++++++-- .../thesis_es/UnparseAnalysis.java | 2 +- .../variation/diff/VariationDiff.java | 23 ++++++++----------- .../variation/diff/construction/JGitDiff.java | 14 +++++++++-- .../diff/parse/VariationDiffParser.java | 22 ++++++++++++------ .../variation/diff/view/DiffView.java | 15 +++++++++--- .../variation/diff/view/ViewSource.java | 4 ++-- .../variation/tree/VariationTree.java | 13 +++++------ .../variation/tree/source/GitSource.java | 6 ++--- src/test/java/JPPParserTest.java | 2 ++ src/test/java/TreeDiffingTest.java | 18 ++------------- src/test/java/VariationDiffParserTest.java | 17 ++++++-------- 14 files changed, 86 insertions(+), 72 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/diff/git/GitDiffer.java b/src/main/java/org/variantsync/diffdetective/diff/git/GitDiffer.java index 600519c76..d1b2523fe 100644 --- a/src/main/java/org/variantsync/diffdetective/diff/git/GitDiffer.java +++ b/src/main/java/org/variantsync/diffdetective/diff/git/GitDiffer.java @@ -21,9 +21,11 @@ import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParser; +import org.variantsync.diffdetective.variation.tree.source.GitSource; import java.io.*; import java.nio.charset.StandardCharsets; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -252,6 +254,7 @@ private static CommitDiffResult getPatchDiffs( final VariationDiff variationDiff = VariationDiffParser.createVariationDiff( fullDiff, + new GitSource(repository, childCommit.getId().name(), Path.of(filename)), repository.getParseOptions().variationDiffParseOptions() ); diff --git a/src/main/java/org/variantsync/diffdetective/examplesearch/ExampleFinder.java b/src/main/java/org/variantsync/diffdetective/examplesearch/ExampleFinder.java index d445a013f..38782644b 100644 --- a/src/main/java/org/variantsync/diffdetective/examplesearch/ExampleFinder.java +++ b/src/main/java/org/variantsync/diffdetective/examplesearch/ExampleFinder.java @@ -106,14 +106,10 @@ private boolean checkIfExample(Analysis analysis, String localDiff) { // We do not want a variationDiff for the entire file but only for the local change to have a small example. final VariationDiff localTree; try { - localTree = VariationDiff.fromDiff(localDiff, new VariationDiffParseOptions(annotationParser, true, true)); + localTree = VariationDiff.fromDiff(localDiff, Source.findFirst(variationDiff, GitPatch.class), new VariationDiffParseOptions(annotationParser, true, true)); // Not every local diff can be parsed to a VariationDiff because diffs are unaware of the underlying language (i.e., CPP). // We want only running examples whose diffs describe entire diff trees for easier understanding. - if (isGoodExample.test(localTree)) { - GitPatch variationDiffSource = Source.findFirst(variationDiff, GitPatch.class); - Assert.assertNotNull(variationDiffSource); - localTree.setSource(variationDiffSource.shallowClone()); - } else { + if (!isGoodExample.test(localTree)) { return false; } } catch (DiffParseException e) { diff --git a/src/main/java/org/variantsync/diffdetective/experiments/thesis_bm/ConstructionValidation.java b/src/main/java/org/variantsync/diffdetective/experiments/thesis_bm/ConstructionValidation.java index 75c04e6a3..b90bae61d 100644 --- a/src/main/java/org/variantsync/diffdetective/experiments/thesis_bm/ConstructionValidation.java +++ b/src/main/java/org/variantsync/diffdetective/experiments/thesis_bm/ConstructionValidation.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; +import java.nio.file.Path; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -42,6 +43,7 @@ import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.filter.VariationDiffFilter; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParser; +import org.variantsync.diffdetective.variation.tree.source.GitSource; import org.variantsync.functjonal.category.InplaceSemigroup; import org.variantsync.functjonal.map.MergeMap; @@ -375,6 +377,7 @@ private void counts(VariationDiff tree, VariationDiffStatistics } private VariationDiff parseVariationTree(Analysis analysis, RevCommit commit) throws IOException, DiffParseException { + String fileName = analysis.getCurrentPatch().getFileName(AFTER); try (BufferedReader afterFile = new BufferedReader( /* @@ -386,10 +389,14 @@ private VariationDiff parseVariationTree(Analysis analysis, RevC GitDiffer.getBeforeFullFile( analysis.getRepository(), commit, - analysis.getCurrentPatch().getFileName(AFTER)), + fileName), 0xfeff)) // BOM, same as GitDiffer.BOM_PATTERN ) { - return VariationDiffParser.createVariationTree(afterFile, analysis.getRepository().getParseOptions().variationDiffParseOptions()); + return VariationDiffParser.createVariationTree( + afterFile, + new GitSource(analysis.getRepository(), commit.getId().name(), Path.of(fileName)), + analysis.getRepository().getParseOptions().variationDiffParseOptions() + ); } } diff --git a/src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseAnalysis.java b/src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseAnalysis.java index 685342fc2..278dc0d20 100644 --- a/src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseAnalysis.java +++ b/src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseAnalysis.java @@ -226,7 +226,7 @@ public static String parseUnparseTree(String text, VariationDiffParseOptions opt public static String parseUnparseDiff(String textDiff, VariationDiffParseOptions option) { String temp = "b"; try { - VariationDiff diff = VariationDiff.fromDiff(textDiff, option); + VariationDiff diff = VariationDiff.fromDiff(textDiff, Source.Unknown, option); temp = VariationUnparser.unparseDiff(diff); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/VariationDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/VariationDiff.java index 2004bbcda..fea28736f 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/VariationDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/VariationDiff.java @@ -20,7 +20,6 @@ import org.variantsync.diffdetective.variation.diff.construction.JGitDiff; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParser; -import org.variantsync.diffdetective.variation.diff.source.PatchString; import org.variantsync.diffdetective.variation.diff.traverse.VariationDiffTraversal; import org.variantsync.diffdetective.variation.diff.traverse.VariationDiffVisitor; import org.variantsync.diffdetective.variation.tree.VariationTree; @@ -91,9 +90,7 @@ public VariationDiff(DiffNode root, Source source) { */ public static VariationDiff fromFile(final Path p, VariationDiffParseOptions parseOptions) throws IOException, DiffParseException { try (BufferedReader file = Files.newBufferedReader(p)) { - final VariationDiff tree = VariationDiffParser.createVariationDiff(file, parseOptions); - tree.setSource(new FileSource(p)); - return tree; + return VariationDiffParser.createVariationDiff(file, new FileSource(p), parseOptions); } } @@ -103,13 +100,13 @@ public static VariationDiff fromFile(final Path p, VariationDiff * So just lines preceded by "+", "-", or " " are expected. * @param diff The diff as text. Lines should be separated by a newline character. Each line should be preceded by either "+", "-", or " ". * @param parseOptions {@link VariationDiffParseOptions} for the parsing process. + * @param source the {@link Source} of {@code diff} * @return A result either containing the parsed VariationDiff or an error message in case of failure. * @throws DiffParseException if {@code diff} couldn't be parsed */ - public static VariationDiff fromDiff(final String diff, final VariationDiffParseOptions parseOptions) throws DiffParseException { - final VariationDiff d; + public static VariationDiff fromDiff(final String diff, final Source source, final VariationDiffParseOptions parseOptions) throws DiffParseException { try { - d = VariationDiffParser.createVariationDiff(diff, parseOptions); + return VariationDiffParser.createVariationDiff(diff, source, parseOptions); } catch (DiffParseException e) { Logger.error(""" Could not parse diff: @@ -119,8 +116,6 @@ public static VariationDiff fromDiff(final String diff, final Va diff); throw e; } - d.setSource(new PatchString(diff)); - return d; } /** @@ -164,7 +159,7 @@ public static Result, List> fromPatch(f /** * Create a VariationDiff from two given text files. - * @see #fromLines(String, String, DiffAlgorithm.SupportedAlgorithm, VariationDiffParseOptions) + * @see #fromLines(String, String, Source, Source, DiffAlgorithm.SupportedAlgorithm, VariationDiffParseOptions) */ public static VariationDiff fromFiles( final Path beforeFile, @@ -176,22 +171,24 @@ public static VariationDiff fromFiles( try (BufferedReader b = Files.newBufferedReader(beforeFile); BufferedReader a = Files.newBufferedReader(afterFile) ) { - return fromLines(IOUtils.toString(b), IOUtils.toString(a), algorithm, options); + return fromLines(IOUtils.toString(b), IOUtils.toString(a), new FileSource(beforeFile), new FileSource(afterFile), algorithm, options); } } /** * Creates a variation diff from to line-based text inputs. * This method just forwards to: - * @see JGitDiff#diff(String, String, DiffAlgorithm.SupportedAlgorithm, VariationDiffParseOptions) + * @see JGitDiff#diff(String, String, Source, Source, DiffAlgorithm.SupportedAlgorithm, VariationDiffParseOptions) */ public static VariationDiff fromLines( String before, String after, + Source beforeSource, + Source afterSource, DiffAlgorithm.SupportedAlgorithm algorithm, VariationDiffParseOptions options) throws IOException, DiffParseException { - return JGitDiff.diff(before, after, algorithm, options); + return JGitDiff.diff(before, after, beforeSource, afterSource, algorithm, options); } /** diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/JGitDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/JGitDiff.java index 6d2920585..abd988811 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/JGitDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/JGitDiff.java @@ -4,6 +4,8 @@ import org.eclipse.jgit.diff.*; import org.variantsync.diffdetective.diff.git.GitDiffer; import org.variantsync.diffdetective.diff.result.DiffParseException; +import org.variantsync.diffdetective.util.CompositeSource; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.VariationDiff; @@ -122,9 +124,11 @@ Using our own formatter without diff headers (paired with a maximum context (?)) * Uses JGit to diff the two files using the specified {@code options}, and afterwards, creates the variation diff. * Creates a variation diff from to line-based text inputs. * First creates a line-based diff with {@link #textDiff(String, String, DiffAlgorithm.SupportedAlgorithm)} - * and then parses that diff with {@link VariationDiff#fromDiff(String, VariationDiffParseOptions)}. + * and then parses that diff with {@link VariationDiff#fromDiff(String, Source, VariationDiffParseOptions)}. * @param linesBefore State of annotated lines before the change. * @param linesAfter State of annotated lines after the change. + * @param sourceBefore the {@link Source} of {@code linesBefore} + * @param sourceAfter the {@link Source} of {@code linesAfter} * @param algorithm Specification of which algorithm to use for diffing with JGit. * @param options various options for parsing * @return A variation diff comprising the changes. @@ -134,9 +138,15 @@ Using our own formatter without diff headers (paired with a maximum context (?)) public static VariationDiff diff( String linesBefore, String linesAfter, + Source sourceBefore, + Source sourceAfter, DiffAlgorithm.SupportedAlgorithm algorithm, VariationDiffParseOptions options ) throws IOException, DiffParseException { - return VariationDiff.fromDiff(textDiff(linesBefore, linesAfter, algorithm), options); + return VariationDiff.fromDiff( + textDiff(linesBefore, linesAfter, algorithm), + new CompositeSource("JGitDiff.textDiff", sourceBefore, sourceAfter), + options + ); } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java b/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java index 9f11bc653..f8b1f2cc2 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java @@ -17,6 +17,7 @@ import org.variantsync.diffdetective.feature.Annotation; import org.variantsync.diffdetective.feature.AnnotationType; import org.variantsync.diffdetective.util.Assert; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.NodeType; import org.variantsync.diffdetective.variation.diff.DiffNode; @@ -117,17 +118,18 @@ public record DiffLine(DiffType diffType, String content) { /** - * The same as {@link VariationDiffParser#createVariationDiff(BufferedReader, VariationDiffParseOptions)} + * The same as {@link VariationDiffParser#createVariationDiff(BufferedReader, Source, VariationDiffParseOptions)} * but with the diff given as a single string with line breaks instead of a {@link BufferedReader}. * * @throws DiffParseException if {@code fullDiff} couldn't be parsed */ public static VariationDiff createVariationDiff( final String fullDiff, + final Source source, final VariationDiffParseOptions parseOptions ) throws DiffParseException { try { - return createVariationDiff(new BufferedReader(new StringReader(fullDiff)), parseOptions); + return createVariationDiff(new BufferedReader(new StringReader(fullDiff)), source, parseOptions); } catch (IOException e) { throw new AssertionError("No actual IO should be performed because only a StringReader is used"); } @@ -140,6 +142,7 @@ public static VariationDiff createVariationDiff( * This parsing algorithm is described in detail in Sören Viegener's bachelor's thesis. * * @param fullDiff The full diff of a patch obtained from a buffered reader. + * @param source the {@link Source} of {@code fullDiff} * @param options {@link VariationDiffParseOptions} for the parsing process. * @return A parsed {@link VariationDiff} upon success or an error indicating why parsing failed. * @throws IOException when reading from {@code fullDiff} fails. @@ -147,11 +150,12 @@ public static VariationDiff createVariationDiff( */ public static VariationDiff createVariationDiff( BufferedReader fullDiff, + Source source, final VariationDiffParseOptions options ) throws IOException, DiffParseException { return new VariationDiffParser( options - ).parse(() -> { + ).parse(source, () -> { String line = fullDiff.readLine(); if (line == null) { return null; @@ -162,10 +166,11 @@ public static VariationDiff createVariationDiff( /** * Parses a variation tree from a source file. - * This method is similar to {@link #createVariationDiff(BufferedReader, VariationDiffParseOptions)} + * This method is similar to {@link #createVariationDiff(BufferedReader, Source, VariationDiffParseOptions)} * but acts as if all lines where unmodified. * * @param file The source code file (not a diff) to be parsed. + * @param source the {@link Source} of {@code file} * @param options {@link VariationDiffParseOptions} for the parsing process. * @return A parsed {@link VariationDiff}. * @throws IOException iff {@code file} throws an {@code IOException} @@ -173,11 +178,12 @@ public static VariationDiff createVariationDiff( */ public static VariationDiff createVariationTree( BufferedReader file, + Source source, VariationDiffParseOptions options ) throws IOException, DiffParseException { return new VariationDiffParser( options - ).parse(() -> { + ).parse(source, () -> { String line = file.readLine(); if (line == null) { return null; @@ -198,7 +204,7 @@ public static VariationDiff createVariationTree( /** * Initializes the parse state. * - * @see #createVariationDiff(BufferedReader, VariationDiffParseOptions) + * @see #createVariationDiff(BufferedReader, Source, VariationDiffParseOptions) */ private VariationDiffParser( VariationDiffParseOptions options @@ -209,6 +215,7 @@ private VariationDiffParser( /** * Parses the line diff {@code fullDiff}. * + * @param source the {@link Source} of {@code lines} * @param lines should supply successive lines of the diff to be parsed, or {@code null} if * there are no more lines to be parsed. * @return the parsed {@code VariationDiff} @@ -217,6 +224,7 @@ private VariationDiffParser( * is detected */ private VariationDiff parse( + Source source, FailableSupplier lines ) throws IOException, DiffParseException { DiffNode root = DiffNode.createRoot(new DiffLinesLabel()); @@ -297,7 +305,7 @@ private VariationDiff parse( ); } - return new VariationDiff<>(root); + return new VariationDiff<>(root, source); } /** diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/view/DiffView.java b/src/main/java/org/variantsync/diffdetective/variation/diff/view/DiffView.java index ebf9e0238..65e097131 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/view/DiffView.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/view/DiffView.java @@ -6,6 +6,7 @@ import org.variantsync.diffdetective.experiments.views.Main; import org.variantsync.diffdetective.util.Assert; import org.variantsync.diffdetective.util.CollectionUtils; +import org.variantsync.diffdetective.util.Source; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.diff.*; @@ -72,12 +73,19 @@ public static BiPredicate> computeWhenNode private static VariationDiff naive(final VariationDiff d, final Relevance rho, final String[] projectionViewText) throws IOException, DiffParseException { final VariationDiff view; try { - view = JGitDiff.diff(projectionViewText[0], projectionViewText[1], DiffAlgorithm.SupportedAlgorithm.MYERS, Main.VARIATION_DIFF_PARSE_OPTIONS); + view = JGitDiff.diff( + projectionViewText[0], + projectionViewText[1], + Source.Unknown, // overridden below + Source.Unknown, // overridden below + DiffAlgorithm.SupportedAlgorithm.MYERS, + Main.VARIATION_DIFF_PARSE_OPTIONS + ); } catch (DiffParseException e) { Logger.error("Could not parse diff obtained with query {} at {}", d.getSource(), rho); throw e; } - view.setSource(new ViewSource<>(d, rho)); + view.setSource(new ViewSource<>(d, rho, "naive")); return view; } @@ -153,6 +161,7 @@ public static VariationDiff badgood(final VariationDiff // unify final VariationDiff goodDiff = badDiff.toGood(); + goodDiff.setSource(new ViewSource<>(d, rho, "badgood")); goodDiff.assertConsistency(); return goodDiff; } @@ -261,7 +270,7 @@ record Edge(DiffNode childCopy, DiffNode parentInD, Time // Step 4: Build return value Assert.assertNotNull(rootCopy[0]); - return new VariationDiff<>(rootCopy[0], new ViewSource<>(d, rho)); + return new VariationDiff<>(rootCopy[0], new ViewSource<>(d, rho, "optimized")); } /** diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/view/ViewSource.java b/src/main/java/org/variantsync/diffdetective/variation/diff/view/ViewSource.java index 090f758ac..78b85b0b0 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/view/ViewSource.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/view/ViewSource.java @@ -13,10 +13,10 @@ * @param diff The original variation diff on which the variation diff with this source is a view on. * @param relevance The relevance predicate that was used to create the view. */ -public record ViewSource(VariationDiff diff, Relevance relevance) implements Source { +public record ViewSource(VariationDiff diff, Relevance relevance, String method) implements Source { @Override public String getSourceExplanation() { - return "View"; + return "view"; } @Override diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/VariationTree.java b/src/main/java/org/variantsync/diffdetective/variation/tree/VariationTree.java index bdb9b2b37..24a0eb3f1 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/VariationTree.java +++ b/src/main/java/org/variantsync/diffdetective/variation/tree/VariationTree.java @@ -98,14 +98,13 @@ public static VariationTree fromFile( final Source source, final VariationDiffParseOptions parseOptions ) throws IOException, DiffParseException { - VariationTreeNode tree = VariationDiffParser - .createVariationTree(input, parseOptions) - .getRoot() - // Arbitrarily choose the BEFORE projection as both should be equal. - .projection(BEFORE) - .toVariationTree(); + VariationDiff diff = + VariationDiffParser.createVariationTree(input, source, parseOptions); - return new VariationTree<>(tree, source); + return new VariationTree<>( + // Arbitrarily choose the BEFORE projection as both should be equal. + diff.getRoot().projection(BEFORE).toVariationTree(), + diff.getSource()); } /** diff --git a/src/main/java/org/variantsync/diffdetective/variation/tree/source/GitSource.java b/src/main/java/org/variantsync/diffdetective/variation/tree/source/GitSource.java index 255c54928..9722d4418 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/tree/source/GitSource.java +++ b/src/main/java/org/variantsync/diffdetective/variation/tree/source/GitSource.java @@ -1,9 +1,9 @@ package org.variantsync.diffdetective.variation.tree.source; -import java.net.URL; import java.nio.file.Path; import java.util.List; +import org.variantsync.diffdetective.datasets.Repository; import org.variantsync.diffdetective.util.Source; /** @@ -12,14 +12,14 @@ *

The parameters of this record should be suitably chosen, so that the following commands can be * executed in a shell to obtain the referenced source code: * - * git clone "$repository" repository + * git clone "${repository.getRemoteURI()}" repository * cd repository * git switch -d "$commitHash" * cat "$path" * */ public record GitSource( - URL repository, + Repository repository, String commitHash, Path path ) implements Source { diff --git a/src/test/java/JPPParserTest.java b/src/test/java/JPPParserTest.java index a2ac2dc8f..b73ec7ff3 100644 --- a/src/test/java/JPPParserTest.java +++ b/src/test/java/JPPParserTest.java @@ -7,6 +7,7 @@ import org.variantsync.diffdetective.feature.Annotation; import org.variantsync.diffdetective.feature.AnnotationType; import org.variantsync.diffdetective.feature.jpp.JPPAnnotationParser; +import org.variantsync.diffdetective.util.FileSource; import org.variantsync.diffdetective.util.IO; import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.diff.VariationDiff; @@ -132,6 +133,7 @@ public void fullDiffTestCase(JPPParserTest.TestCase testCase) throws try (var inputFile = Files.newBufferedReader(testCase.input)) { variationDiff = VariationDiffParser.createVariationDiff( inputFile, + new FileSource(testCase.input), new VariationDiffParseOptions( false, false diff --git a/src/test/java/TreeDiffingTest.java b/src/test/java/TreeDiffingTest.java index d9876a28b..24d9130e9 100644 --- a/src/test/java/TreeDiffingTest.java +++ b/src/test/java/TreeDiffingTest.java @@ -13,7 +13,6 @@ import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.construction.GumTreeDiff; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; -import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParser; import org.variantsync.diffdetective.variation.diff.serialize.Format; import org.variantsync.diffdetective.variation.diff.serialize.LineGraphExporter; import org.variantsync.diffdetective.variation.diff.serialize.TikzExporter; @@ -29,7 +28,6 @@ import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.fail; -import static org.variantsync.diffdetective.variation.diff.Time.BEFORE; public class TreeDiffingTest { private final static Path testDir = Constants.RESOURCE_DIR.resolve("tree-diffing"); @@ -83,8 +81,8 @@ private static Stream createMatchingTestCases() throws IOException { @ParameterizedTest @MethodSource("createMatchingTestCases") public void createMatchingTestCase(TestCase testCase) throws IOException, DiffParseException { - VariationTree beforeEdit = parseVariationTree(testCase.beforeEdit()); - VariationTree afterEdit = parseVariationTree(testCase.afterEdit()); + VariationTree beforeEdit = VariationTree.fromFile(testCase.beforeEdit()); + VariationTree afterEdit = VariationTree.fromFile(testCase.afterEdit()); assertExpectedVariationDiffs(testCase, GumTreeDiff.diffUsingMatching(beforeEdit, afterEdit, testCase.matcher())); } @@ -139,16 +137,4 @@ private static void assertExpectedVariationDiffs(TestCase testCase, VariationDif } } } - - private static VariationTree parseVariationTree(Path filename) throws IOException, DiffParseException { - try (var file = Files.newBufferedReader(filename)) { - return new VariationTree<>( - VariationDiffParser.createVariationTree( - file, - VariationDiffParseOptions.Default - ).getRoot().projection(BEFORE).toVariationTree(), - new FileSource(filename) - ); - } - } } diff --git a/src/test/java/VariationDiffParserTest.java b/src/test/java/VariationDiffParserTest.java index 4c1d4e48f..7646842bf 100644 --- a/src/test/java/VariationDiffParserTest.java +++ b/src/test/java/VariationDiffParserTest.java @@ -7,7 +7,6 @@ import org.variantsync.diffdetective.variation.DiffLinesLabel; import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; -import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParser; import org.variantsync.diffdetective.variation.diff.serialize.Format; import org.variantsync.diffdetective.variation.diff.serialize.LineGraphExporter; import org.variantsync.diffdetective.variation.diff.serialize.TikzExporter; @@ -60,15 +59,13 @@ public static void testCase(Path testCasePath) throws IOException, DiffParseExce var expectedPath = testCasePath.getParent().resolve(basename + "_expected.lg"); VariationDiff variationDiff; - try (var inputFile = Files.newBufferedReader(testCasePath)) { - variationDiff = VariationDiffParser.createVariationDiff( - inputFile, - new VariationDiffParseOptions( - false, - false - ) - ); - } + variationDiff = VariationDiff.fromFile( + testCasePath, + new VariationDiffParseOptions( + false, + false + ) + ); try (var output = IO.newBufferedOutputStream(actualPath)) { new LineGraphExporter<>(new Format<>(new FullNodeFormat(), new ChildOrderEdgeFormat<>())) From d78f3e83a46913d024b48289a56496ee6666b35b Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Mon, 13 Oct 2025 10:36:32 +0200 Subject: [PATCH 3/7] feat: create an interface for and a collection of differs Note about the visual abstract image: The image is purposefully placed in the `src` folder such that it is easy to reference from the Javadoc. Furthermore, the symlink from `docs` allows easy references from `README.md` makes it more discoverable. The direction of the symlink (`docs` to `src` instead of `src` to `docs`) is important because the Javadoc is moved during the build process. A symlink would thus be incorrect in the default javadoc location (`target/reports/apidocs/`) or the final destination (`docs/javadoc`) which is used by the Nix build and thus for Github pages. --- docs/variability-aware-differencing.png | Bin 164209 -> 106 bytes .../diff/VariabilityAwareDiffer.java | 56 ++++++++ .../diff/VariabilityAwareDiffers.java | 135 ++++++++++++++++++ .../diff/VariabilityAwareTextDiffer.java | 62 ++++++++ .../diff/VariabilityAwareTreeDiffer.java | 50 +++++++ .../variability-aware-differencing.png | Bin 0 -> 164209 bytes 6 files changed, 303 insertions(+) mode change 100644 => 120000 docs/variability-aware-differencing.png create mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareDiffer.java create mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareDiffers.java create mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareTextDiffer.java create mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareTreeDiffer.java create mode 100644 src/main/java/org/variantsync/diffdetective/variation/diff/doc-files/variability-aware-differencing.png diff --git a/docs/variability-aware-differencing.png b/docs/variability-aware-differencing.png deleted file mode 100644 index eedc3fd692f3792bc2bbaec0239d69384491263f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164209 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%0DYbWl!D6tZ2}k3FUV!|Fb4> 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 Cb~7;m diff --git a/docs/variability-aware-differencing.png b/docs/variability-aware-differencing.png new file mode 120000 index 000000000..f5e28c203 --- /dev/null +++ b/docs/variability-aware-differencing.png @@ -0,0 +1 @@ +../src/main/java/org/variantsync/diffdetective/variation/diff/doc-files/variability-aware-differencing.png \ No newline at end of file diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareDiffer.java b/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareDiffer.java new file mode 100644 index 000000000..11e5a60fa --- /dev/null +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareDiffer.java @@ -0,0 +1,56 @@ +package org.variantsync.diffdetective.variation.diff; + +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.nio.file.Path; + +import org.variantsync.diffdetective.diff.result.DiffParseException; +import org.variantsync.diffdetective.util.FileSource; +import org.variantsync.diffdetective.util.Source; +import org.variantsync.diffdetective.variation.Label; +import org.variantsync.diffdetective.variation.tree.VariationTree; // For Javadoc + +/** + * A generic interface for creating variation diffs from two states represented as text. + * This interface represents a differ that can walk any of the paths present in our visual abstract + * (see below) and thus the states before and after the edit are represented as text. For each of + * the two paths, parsing a text diff and diffing variation trees, there is a specialized version of + * this interface, {@link VariabilityAwareTextDiffer} and {@link VariabilityAwareTreeDiffer} + * respectively. In particular, {@link VariabilityAwareTreeDiffer} represents the input states as + * {@link VariationTree}s. + * + * Variability-Aware Differencing Overview. Same as in the README.md. + * + * @see VariabilityAwareDiffers + */ +@FunctionalInterface +public interface VariabilityAwareDiffer { + /** + * Create a variation diff by diffing the content of two {@link Reader}s. + * For {@link VariationDiff#getSource() traceability}, both {@link Reader}s are paired with a {@link Source}. + */ + VariationDiff diff(Reader before, Reader after, Source beforeSource, Source afterSource) throws IOException, DiffParseException; + + /** + * Create a variation diff by diffing the content of two {@link String}s. + * For {@link VariationDiff#getSource() traceability}, both {@link String}s are paired with a {@link Source}. + */ + default VariationDiff diff(String before, String after, Source beforeSource, Source afterSource) throws IOException, DiffParseException { + return diff(new StringReader(before), new StringReader(after), beforeSource, afterSource); + } + + /** + * Create a variation diff by diffing the content of two {@link Path}s. + * @see diff(Reader, Reader, Source, Source) + */ + default VariationDiff diff(Path before, Path after) throws IOException, DiffParseException { + try ( + Reader beforeStream = new FileReader(before.toFile()); + Reader afterStream = new FileReader(after.toFile()) + ) { + return diff(beforeStream, afterStream, new FileSource(before), new FileSource(after)); + } + } +} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareDiffers.java b/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareDiffers.java new file mode 100644 index 000000000..ce790d696 --- /dev/null +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareDiffers.java @@ -0,0 +1,135 @@ +package org.variantsync.diffdetective.variation.diff; + +import java.io.IOException; +import java.io.Reader; + +import org.apache.commons.io.IOUtils; +import org.eclipse.jgit.diff.DiffAlgorithm; +import org.variantsync.diffdetective.diff.result.DiffParseException; +import org.variantsync.diffdetective.util.CompositeSource; +import org.variantsync.diffdetective.util.Source; +import org.variantsync.diffdetective.variation.DiffLinesLabel; +import org.variantsync.diffdetective.variation.diff.construction.GumTreeDiff; +import org.variantsync.diffdetective.variation.diff.construction.JGitDiff; +import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; +import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParser; // For Javadoc +import org.variantsync.diffdetective.variation.tree.VariationTree; + +import com.github.gumtreediff.matchers.Matcher; +import com.github.gumtreediff.matchers.Matchers; + +/** + * A collection of differs that create variation diffs. + * @see VariabilityAwareDiffer + * @see VariationDiff + */ +public class VariabilityAwareDiffers { + /** + * Returns a differ that {@link VariationDiffParser#createVariationDiff parses} a + * {@link VariationDiff} after {@link JGitDiff#textDiff diffing} with + * {@link DiffAlgorithm.SupportedAlgorithm one of JGit's differ}. + * + * @param lineDiffAlgorithm the Git diffing algorithm to use + * @param parseOptions options for parsing the {@link VariationDiff} + * @return the diffed {@link VariationDiff} + */ + public static VariabilityAwareTextDiffer JGit(DiffAlgorithm.SupportedAlgorithm lineDiffAlgorithm, VariationDiffParseOptions parseOptions) { + return new VariabilityAwareTextDiffer() { + @Override + public String diffLines(Reader before, Reader after) throws IOException { + return JGitDiff.textDiff(IOUtils.toString(before), IOUtils.toString(after), lineDiffAlgorithm); + } + + @Override + public String diffLines(String before, String after) throws IOException { + return JGitDiff.textDiff(before, after, lineDiffAlgorithm); + } + + @Override + public VariationDiffParseOptions getParseOptions() { + return parseOptions; + } + }; + } + + /** + * Calls {@link JGit(DiffAlgorithm.SupportedAlgorithm, VariationDiffParseOptions)} with + * {@link DiffAlgorithm.SupportedAlgorithm#MYERS} and {@link VariationDiffParseOptions#Default}. + */ + public static VariabilityAwareTextDiffer JGitMyers() { + return JGit(DiffAlgorithm.SupportedAlgorithm.MYERS, VariationDiffParseOptions.Default); + } + + /** + * Returns a differ that {@link VariationTree#fromFile parses} two variation trees and then + * {@link GumTreeDiff#diffUsingMatching diffs} these variation trees. + * + * @param parseOptions options for parsing the {@link VariationTree}s + * @param matcher the matcher used for diffing the {@link VariationTree}s + * @return the diffed {@link VariationDiff} + */ + public static VariabilityAwareTreeDiffer GumTree(VariationDiffParseOptions parseOptions, Matcher matcher) { + return new VariabilityAwareTreeDiffer() { + @Override + public VariationDiff diffTrees(VariationTree before, VariationTree after) { + return GumTreeDiff.diffUsingMatching(before, after, matcher); + } + + @Override + public VariationDiffParseOptions getParseOptions() { + return parseOptions; + } + }; + } + + /** + * Calls {@link GumTree(VariationDiffParseOptions, Matcher)} with {@link + * VariationDiffParseOptions#Default} and {@link Matchers#getInstance {@code + * Matchers.getInstance().getMatcher()}}. + */ + public static VariabilityAwareTreeDiffer GumTree() { + return GumTree(VariationDiffParseOptions.Default, Matchers.getInstance().getMatcher()); + } + + /** + * Returns a differ that first parses a {@link VariationDiff} like {@link JGit} and then + * {@link GumTreeDiff#improveMatching improves} the represented matching. + * + * @param lineDiffAlgorithm the Git diffing algorithm to use + * @param parseOptions options for parsing the {@link VariationDiff} + * @param matcher the matcher used for diffing the variation trees + * @return the diffed {@link VariationDiff} + */ + public static VariabilityAwareTextDiffer JGitGumTreeHybrid(DiffAlgorithm.SupportedAlgorithm lineDiffAlgorithm, VariationDiffParseOptions parseOptions, Matcher matcher) { + return new VariabilityAwareTextDiffer() { + @Override + public String diffLines(Reader before, Reader after) throws IOException { + return JGitDiff.textDiff(IOUtils.toString(before), IOUtils.toString(after), lineDiffAlgorithm); + } + + @Override + public VariationDiffParseOptions getParseOptions() { + return parseOptions; + } + + @Override + public VariationDiff diff(Reader before, Reader after, Source beforeSource, Source afterSource) throws IOException, DiffParseException { + VariationDiff vd = VariabilityAwareTextDiffer.super.diff(before, after, beforeSource, afterSource); + return new VariationDiff<>( + GumTreeDiff.improveMatching(vd.getRoot(), matcher), + new CompositeSource("GumTreeDiff.improveMatching", vd.getSource()) + ); + }; + }; + } + + /** + * Calls {@link JGitGumTreeHybrid(DiffAlgorithm.SupportedAlgorithm, VariationDiffParseOptions, + * Matcher)} with {@link DiffAlgorithm.SupportedAlgorithm#MYERS}, {@link + * VariationDiffParseOptions#Default}, and {@link Matchers#getInstance {@code + * Matchers.getInstance().getMatcher()}}. + */ + public static VariabilityAwareTextDiffer JGitMyersGumTreeHybrid() { + return JGitGumTreeHybrid(DiffAlgorithm.SupportedAlgorithm.MYERS, VariationDiffParseOptions.Default, Matchers.getInstance().getMatcher()); + } +} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareTextDiffer.java b/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareTextDiffer.java new file mode 100644 index 000000000..0fb6042c9 --- /dev/null +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareTextDiffer.java @@ -0,0 +1,62 @@ +package org.variantsync.diffdetective.variation.diff; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; + +import org.variantsync.diffdetective.diff.result.DiffParseException; +import org.variantsync.diffdetective.util.CompositeSource; +import org.variantsync.diffdetective.util.Source; +import org.variantsync.diffdetective.variation.DiffLinesLabel; +import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; +import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParser; + +/** + * A {@link VariabilityAwareDiffer} that first creates a line diff and + * {@link VariationDiffParser#createVariationDiff parses} this line diff into a + * {@link VariationDiff}. + */ +@FunctionalInterface +public interface VariabilityAwareTextDiffer extends VariabilityAwareDiffer { + /** + * Returns a line diff of {@code before} and {@code after} in the unified diff format. + */ + String diffLines(Reader before, Reader after) throws IOException; + + /** + * Returns a line diff of {@code before} and {@code after} in the unified diff format. + */ + default String diffLines(String before, String after) throws IOException { + return diffLines(new StringReader(before), new StringReader(after)); + } + + /** + * Returns the options used for {@link parseDiff parsing} the {@link VariationDiff} in {@link parseDiff}. + */ + default VariationDiffParseOptions getParseOptions() { + return VariationDiffParseOptions.Default; + } + + /** + * Parses the {@link diffLines line diff} into a {@link VariationDiff} using the options + * from {@link getParseOptions}. + */ + default VariationDiff parseDiff(String diff, Source diffSource) throws DiffParseException { + return VariationDiffParser.createVariationDiff( + diff, + new CompositeSource("VariationDiffParser.createVariationDiff", diffSource), + getParseOptions() + ); + } + + /** + * Composes {@link diffLines} and {@link parseDiff} to create a {@link VariationDiff}. + */ + @Override + default VariationDiff diff(Reader before, Reader after, Source beforeSource, Source afterSource) throws IOException, DiffParseException { + return parseDiff( + diffLines(before, after), + new CompositeSource("line diff", beforeSource, afterSource) + ); + } +} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareTreeDiffer.java b/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareTreeDiffer.java new file mode 100644 index 000000000..ec7aa0a6c --- /dev/null +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/VariabilityAwareTreeDiffer.java @@ -0,0 +1,50 @@ +package org.variantsync.diffdetective.variation.diff; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.Reader; + +import org.variantsync.diffdetective.diff.result.DiffParseException; +import org.variantsync.diffdetective.util.Source; +import org.variantsync.diffdetective.variation.DiffLinesLabel; +import org.variantsync.diffdetective.variation.Label; +import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; +import org.variantsync.diffdetective.variation.tree.VariationTree; + +/** + * A {@link VariabilityAwareDiffer} that first {@link VariationTree#fromFile parses} {@link VariationTree}s and + * diffs these trees. + */ +@FunctionalInterface +public interface VariabilityAwareTreeDiffer extends VariabilityAwareDiffer { + /** + * Creates a {@link VariationDiff} by diffing two variation trees. + */ + VariationDiff diffTrees(VariationTree before, VariationTree after); + + /** + * Returns the options used for parsing the {@link VariationTree}s in {@link parseTree}. + */ + default VariationDiffParseOptions getParseOptions() { + return VariationDiffParseOptions.Default; + } + + /** + * {@link VariationTree#fromFile Parses} {@code input} into a {@link VariationTree} using + * the options from {@code getParseOptions}. + */ + default VariationTree parseTree(Reader input, Source source) throws IOException, DiffParseException { + return VariationTree.fromFile(new BufferedReader(input), source, getParseOptions()); + } + + /** + * Composes {@link parseTree} and {@link diffTrees} to create a {@link VariationDiff}. + */ + @Override + default VariationDiff diff(Reader before, Reader after, Source beforeSource, Source afterSource) throws IOException, DiffParseException { + return diffTrees( + parseTree(before, beforeSource), + parseTree(after, afterSource) + ); + } +} diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/doc-files/variability-aware-differencing.png b/src/main/java/org/variantsync/diffdetective/variation/diff/doc-files/variability-aware-differencing.png new file mode 100644 index 0000000000000000000000000000000000000000..eedc3fd692f3792bc2bbaec0239d69384491263f GIT binary patch literal 164209 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%0DYbWl!D6tZ2}k3FUV!|Fb4> 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 Cb~7;m literal 0 HcmV?d00001 From b3aad00f779d1e56853e7773386d0cdcc43432fa Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Thu, 23 Oct 2025 23:08:33 +0200 Subject: [PATCH 4/7] fix: close `ZipFile` in `GitLoader` --- .../java/org/variantsync/diffdetective/load/GitLoader.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/load/GitLoader.java b/src/main/java/org/variantsync/diffdetective/load/GitLoader.java index 5af465f8d..16a98f6b6 100644 --- a/src/main/java/org/variantsync/diffdetective/load/GitLoader.java +++ b/src/main/java/org/variantsync/diffdetective/load/GitLoader.java @@ -1,7 +1,6 @@ package org.variantsync.diffdetective.load; import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; import org.apache.commons.io.FilenameUtils; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; @@ -86,10 +85,9 @@ public static Git fromZip(Path pathToZip) { return fromDirectory(unzippedRepoName); } - try { - ZipFile zipFile = new ZipFile(pathToZip.toFile()); + try (ZipFile zipFile = new ZipFile(pathToZip.toFile())) { zipFile.extractAll(targetDir.toString()); - } catch (ZipException e) { + } catch (IOException e) { Logger.warn("Failed to extract git repo from {} to {}", pathToZip, targetDir); return null; } From de79247b4dbe56da0c794b9b6148fdf2dda1bf20 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Thu, 23 Oct 2025 23:10:10 +0200 Subject: [PATCH 5/7] doc: fix a typo in `VariationDiffLabelFormat` --- .../diff/serialize/treeformat/VariationDiffLabelFormat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/VariationDiffLabelFormat.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/VariationDiffLabelFormat.java index 7d2456eb7..ec3c6c56f 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/VariationDiffLabelFormat.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/treeformat/VariationDiffLabelFormat.java @@ -13,7 +13,7 @@ public interface VariationDiffLabelFormat extends LinegraphFormat { * Converts a label of line graph into a {@link Source}. * * @param label A string containing the label of the {@link Source} - * @return The {@link Source} descibed by this label. + * @return The {@link Source} described by this label. */ Source fromLabel(final String label); From 574bfcb7c86c7742ffdb2e017c6d0185a92427e9 Mon Sep 17 00:00:00 2001 From: pmbittner Date: Mon, 3 Nov 2025 10:19:43 +0100 Subject: [PATCH 6/7] fix(README): path to visual abstract --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fabc3f670..7c40e9e30 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ DiffDetective is an open-source Java library for variability-aware source code differencing and the **analysis of version histories of software product lines**. This means that DiffDetective can **turn a generic differencer into a variability-aware differencer** by means of a pre- or post-processing. DiffDetective is centered around **formally verified** data structures for variability (variation trees) and variability-aware diffs (variation diffs). These data structures are **generic**, and DiffDetective currently implements **C preprocessor support** to parse respective annotations when used to implement variability. The picture below depicts the process of variability-aware differencing. -Variability-Aware Differencing Overview +Variability-Aware Differencing Overview Given two states of a C-preprocessor annotated source code file (left), for example before and after a commit, DiffDetective constructs a variability-aware diff (right) that distinguishes changes to source code from changes to variability annotations. DiffDetective can construct such a variation diff either, by first using a generic differencer, and separating the information (center path), or by first parsing both input versions to an abstract representation, a variation tree (center top and bottom), and constructing a variation diff using a tree differencing algorithm in a second step. From d728ec6d5f0310f9a24a706c01674886715a3c9c Mon Sep 17 00:00:00 2001 From: pmbittner Date: Mon, 3 Nov 2025 10:21:25 +0100 Subject: [PATCH 7/7] remove unused symlink --- docs/variability-aware-differencing.png | 1 - 1 file changed, 1 deletion(-) delete mode 120000 docs/variability-aware-differencing.png diff --git a/docs/variability-aware-differencing.png b/docs/variability-aware-differencing.png deleted file mode 120000 index f5e28c203..000000000 --- a/docs/variability-aware-differencing.png +++ /dev/null @@ -1 +0,0 @@ -../src/main/java/org/variantsync/diffdetective/variation/diff/doc-files/variability-aware-differencing.png \ No newline at end of file