Skip to content

Commit 59f2e8e

Browse files
authored
Merge pull request #48 from VariantSync/benjamin/renames
Adopt the naming convention of the ESEC/FSE 2022 paper
2 parents 0c9105a + 2b4a44c commit 59f2e8e

101 files changed

Lines changed: 4705 additions & 4726 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

STATUS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ The `proofs` Haskell project provides an extended formal specification of our th
2828
The library is accompanied by a small demo application that shows an example test case for our proof for completeness, by creating a variation tree diff from two variation trees and re-projecting them.
2929

3030
## Claims
31-
We claim the _Artifacts Available_ badge as we made our artefacts publicly available on [Github][ddgithub] and [Zenodo][ddzenodo].
31+
We claim the _Artifacts Available_ badge as we made our artifacts publicly available on [Github][ddgithub] and [Zenodo][ddzenodo].
3232

3333
We claim the _Artifacts Evaluated Reusable_ badge as we implemented DiffDetective as a reusable library (see above).
3434
Furthermore, both DiffDetective and our Haskell formalization serve as reference implementations if researchers or practitioners want to reimplement our theory in other programming languages.

src/main/java/org/variantsync/diffdetective/analysis/AnalysisResult.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import org.variantsync.diffdetective.diff.difftree.serialize.DiffTreeSerializeDebugData;
44
import org.variantsync.diffdetective.diff.result.DiffError;
5-
import org.variantsync.diffdetective.metadata.ElementaryPatternCount;
5+
import org.variantsync.diffdetective.metadata.EditClassCount;
66
import org.variantsync.diffdetective.metadata.ExplainedFilterSummary;
77
import org.variantsync.diffdetective.metadata.Metadata;
8-
import org.variantsync.diffdetective.pattern.elementary.proposed.ProposedElementaryPatterns;
8+
import org.variantsync.diffdetective.editclass.proposed.ProposedEditClasses;
99
import org.variantsync.functjonal.Functjonal;
1010
import org.variantsync.functjonal.category.InplaceMonoid;
1111
import org.variantsync.functjonal.category.InplaceSemigroup;
@@ -55,7 +55,7 @@ public class AnalysisResult implements Metadata<AnalysisResult> {
5555
a.max.set(CommitProcessTime.max(a.max, b.max));
5656
a.debugData.append(b.debugData);
5757
a.filterHits.append(b.filterHits);
58-
a.elementaryPatternCounts.append(b.elementaryPatternCounts);
58+
a.editClassCounts.append(b.editClassCounts);
5959
MergeMap.putAllValues(a.customInfo, b.customInfo, Semigroup.assertEquals());
6060
a.diffErrors.append(b.diffErrors);
6161
};
@@ -80,7 +80,7 @@ public class AnalysisResult implements Metadata<AnalysisResult> {
8080
public final CommitProcessTime min, max;
8181
public final DiffTreeSerializeDebugData debugData;
8282
public ExplainedFilterSummary filterHits;
83-
public ElementaryPatternCount elementaryPatternCounts;
83+
public EditClassCount editClassCounts;
8484
private final LinkedHashMap<String, String> customInfo = new LinkedHashMap<>();
8585
private final MergeMap<DiffError, Integer> diffErrors = new MergeMap<>(new HashMap<>(), Integer::sum);
8686

@@ -152,7 +152,7 @@ public AnalysisResult(
152152
this.runtimeWithMultithreadingInSeconds = runtimeWithMultithreadingInSeconds;
153153
this.debugData = debugData;
154154
this.filterHits = filterHits;
155-
this.elementaryPatternCounts = new ElementaryPatternCount();
155+
this.editClassCounts = new EditClassCount();
156156
this.min = min;
157157
this.max = max;
158158
}
@@ -189,7 +189,7 @@ public static AnalysisResult importFrom(final Path p, final Map<String, BiConsum
189189
AnalysisResult result = new AnalysisResult();
190190

191191
final List<String> filterHitsLines = new ArrayList<>();
192-
final List<String> elementaryPatternCountsLines = new ArrayList<>();
192+
final List<String> editClassCountsLines = new ArrayList<>();
193193

194194
try (BufferedReader input = Files.newBufferedReader(p)) {
195195
// examine each line of the metadata file separately
@@ -229,13 +229,13 @@ public static AnalysisResult importFrom(final Path p, final Map<String, BiConsum
229229
// temporary fix for renaming from Unchanged to Untouched
230230
final String unchanged = "Unchanged";
231231
if (key.startsWith(unchanged)) {
232-
key = ProposedElementaryPatterns.Untouched.getName();
232+
key = ProposedEditClasses.Untouched.getName();
233233
line = key + line.substring(unchanged.length());
234234
}
235235

236236
final String finalKey = key;
237-
if (ProposedElementaryPatterns.All.stream().anyMatch(pattern -> pattern.getName().equals(finalKey))) {
238-
elementaryPatternCountsLines.add(line);
237+
if (ProposedEditClasses.All.stream().anyMatch(editClass -> editClass.getName().equals(finalKey))) {
238+
editClassCountsLines.add(line);
239239
} else if (key.startsWith(ExplainedFilterSummary.FILTERED_MESSAGE_BEGIN)) {
240240
filterHitsLines.add(line);
241241
} else if (key.startsWith(ERROR_BEGIN)) {
@@ -257,7 +257,7 @@ public static AnalysisResult importFrom(final Path p, final Map<String, BiConsum
257257
}
258258

259259
result.filterHits = ExplainedFilterSummary.parse(filterHitsLines);
260-
result.elementaryPatternCounts = ElementaryPatternCount.parse(elementaryPatternCountsLines, p.toString());
260+
result.editClassCounts = EditClassCount.parse(editClassCountsLines, p.toString());
261261

262262
return result;
263263
}
@@ -289,7 +289,7 @@ public LinkedHashMap<String, Object> snapshot() {
289289
snap.putAll(customInfo);
290290
snap.putAll(debugData.snapshot());
291291
snap.putAll(filterHits.snapshot());
292-
snap.putAll(elementaryPatternCounts.snapshot());
292+
snap.putAll(editClassCounts.snapshot());
293293
snap.putAll(Functjonal.bimap(diffErrors, error -> ERROR_BEGIN + error + ERROR_END, Object::toString));
294294
return snap;
295295
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.variantsync.diffdetective.analysis;
2+
3+
import org.variantsync.diffdetective.editclass.EditClass;
4+
import org.variantsync.diffdetective.editclass.EditClassCatalogue;
5+
import org.variantsync.diffdetective.util.CSV;
6+
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
import java.util.stream.Collectors;
10+
11+
/**
12+
* Gathers statistics about matching edit classes.
13+
* @author Paul Bittner
14+
*/
15+
public class EditClassCount implements CSV {
16+
private final EditClassCatalogue catalogue;
17+
private final Map<EditClass, Integer> editClassCounts;
18+
19+
/**
20+
* Creates a new counter object for the given catalogue of edit classes.
21+
* @param catalogue The catalogue whose edit classes to match and count.
22+
*/
23+
public EditClassCount(final EditClassCatalogue catalogue) {
24+
this.catalogue = catalogue;
25+
this.editClassCounts = new HashMap<>();
26+
catalogue.all().forEach(e -> editClassCounts.put(e, 0));
27+
}
28+
29+
/**
30+
* Increment the count for the given edit class.
31+
* The given edit class is assumed to be part of this counts catalog.
32+
* @see EditClassCount#EditClassCount(EditClassCatalogue)
33+
* @param editClass The edit class whose count to increase by one.
34+
*/
35+
public void increment(final EditClass editClass) {
36+
editClassCounts.computeIfPresent(editClass, (p, i) -> i + 1);
37+
}
38+
39+
@Override
40+
public String toCSV(final String delimiter) {
41+
return catalogue.all().stream()
42+
.map(editClassCounts::get)
43+
.map(Object::toString)
44+
.collect(Collectors.joining(delimiter));
45+
}
46+
}

src/main/java/org/variantsync/diffdetective/analysis/ElementaryPatternCount.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

src/main/java/org/variantsync/diffdetective/analysis/HistoryAnalysis.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.function.Consumer;
2424

2525
/**
26-
* An analyses that is performed for the entire commit histories of each given git repositoy.
26+
* An analyses that is performed for the entire commit histories of each given git repository.
2727
* @param repositoriesToAnalyze The repositories whose commit history should be analyzed.
2828
* @param outputDir The directory to which any produced results should be written.
2929
* @param commitsToProcessPerThread Number of commits that should be processed by each single thread if multithreading is used.
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
package org.variantsync.diffdetective.analysis;
22

33
import org.variantsync.diffdetective.diff.PatchDiff;
4-
import org.variantsync.diffdetective.pattern.elementary.ElementaryPatternCatalogue;
4+
import org.variantsync.diffdetective.editclass.EditClassCatalogue;
55
import org.variantsync.diffdetective.util.CSV;
66

77
/**
88
* Statistics for processing a patch in a commit.
99
* @param patchDiff The diff of the processed patch.
10-
* @param elementaryPatternCount Count statistics for the elementary edit patterns matched to the edits in the patch.
10+
* @param editClassCount Count statistics for the edit class matched to the edits in the patch.
1111
* @author Paul Bittner
1212
*/
1313
public record PatchStatistics(
1414
PatchDiff patchDiff,
15-
ElementaryPatternCount elementaryPatternCount) implements CSV {
15+
EditClassCount editClassCount) implements CSV {
1616
/**
17-
* Creates empty patch statistics for the given catalogue of edit patterns.
17+
* Creates empty patch statistics for the given catalogue of edit classes.
1818
* @param patch The patch to gather statistics for.
19-
* @param catalogue A catalogue of elementary edit patterns which should be used for classifying edits.
19+
* @param catalogue A catalogue of edit classes which should be used for classifying edits.
2020
*/
21-
public PatchStatistics(final PatchDiff patch, final ElementaryPatternCatalogue catalogue) {
22-
this(patch, new ElementaryPatternCount(catalogue));
21+
public PatchStatistics(final PatchDiff patch, final EditClassCatalogue catalogue) {
22+
this(patch, new EditClassCount(catalogue));
2323
}
2424

2525
@Override
2626
public String toCSV(final String delimiter) {
27-
return patchDiff.getCommitHash() + delimiter + patchDiff.getFileName() + delimiter + elementaryPatternCount.toCSV(delimiter);
27+
return patchDiff.getCommitHash() + delimiter + patchDiff.getFileName() + delimiter + editClassCount.toCSV(delimiter);
2828
}
2929
}

src/main/java/org/variantsync/diffdetective/diff/difftree/CodeType.java

Lines changed: 0 additions & 89 deletions
This file was deleted.

src/main/java/org/variantsync/diffdetective/diff/difftree/DiffGraph.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@ public final class DiffGraph {
1212

1313
private DiffGraph() {}
1414

15-
/**
16-
* Returns true iff the given node has no parents (i.e., is a root candidate).
17-
*/
18-
public static boolean hasNoParents(final DiffNode node) {
19-
return node.getBeforeParent() == null && node.getAfterParent() == null;
20-
}
21-
2215
/**
2316
* Invokes {@link DiffGraph#fromNodes(Collection, DiffTreeSource)} )} with an unknown DiffTreeSource.
2417
*/
@@ -37,7 +30,7 @@ public static DiffTree fromNodes(final Collection<DiffNode> nodes, final DiffTre
3730
final DiffNode newRoot = DiffNode.createRoot();
3831
newRoot.setLabel(DIFFGRAPH_LABEL);
3932
nodes.stream()
40-
.filter(DiffGraph::hasNoParents)
33+
.filter(DiffNode::isRoot)
4134
.forEach(n ->
4235
n.diffType.matchBeforeAfter(
4336
() -> newRoot.addBeforeChild(n),

0 commit comments

Comments
 (0)