From f1387823015f67d92659e1f1df93c8fd47636d9a Mon Sep 17 00:00:00 2001 From: tsantalis Date: Sat, 1 Feb 2025 19:44:17 -0500 Subject: [PATCH] Improve optimize() for correctly detecting Rename Class in commit https://github.com/junit-team/junit4/commit/f7d4f2835ec7dde25356d923ade0eb93f11cf1c9 --- .../gr/uom/java/xmi/diff/UMLModelDiff.java | 24 +++++++++++++++++++ .../test/TestNewDatasetRefactorings.java | 2 +- .../resources/oracle/tse-dataset/junit4.json | 10 ++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java b/src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java index dc81f7fb5..b328a7c63 100644 --- a/src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java +++ b/src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java @@ -24,6 +24,7 @@ import gr.uom.java.xmi.decomposition.AbstractCodeMapping; import gr.uom.java.xmi.decomposition.AbstractExpression; import gr.uom.java.xmi.decomposition.AbstractStatement; +import gr.uom.java.xmi.decomposition.AnonymousClassDeclarationObject; import gr.uom.java.xmi.decomposition.CompositeStatementObject; import gr.uom.java.xmi.decomposition.CompositeStatementObjectMapping; import gr.uom.java.xmi.decomposition.LeafExpression; @@ -1134,6 +1135,7 @@ private TreeSet findRenameMatchesForAddedClass(UMLClass adde private TreeSet optimize(TreeSet diffSet) { if(diffSet.size() > 1) { TreeSet identicalBodyDiffSet = new TreeSet(new ClassRenameComparator()); + TreeSet identicalAnonymousDeclarationDiffSet = new TreeSet(new ClassRenameComparator()); TreeSet identicalStatementDiffSet = new TreeSet(new ClassRenameComparator()); TreeSet identicalSignatureDiffSet = new TreeSet(new ClassRenameComparator()); TreeSet identicalPackageDeclarationDocDiffSet = new TreeSet(new ClassRenameComparator()); @@ -1157,6 +1159,7 @@ private TreeSet optimize(TreeSet diffSet int identicalStatementSignatures = 0; int totalStatements = 0; int matchingStatements = 0; + int operationsWithIdenticalAnonymousDeclarations = 0; if(operations1.size() == operations2.size()) { for(int i=0; i anonymousList1 = op1.getBody().getAllAnonymousClassDeclarations(); + List anonymousList2 = op2.getBody().getAllAnonymousClassDeclarations(); + int identicalAnonymousDeclarations = 0; + if(anonymousList1.size() == anonymousList2.size() && anonymousList1.size() > 0) { + for(int j=0; j 0) { + operationsWithIdenticalAnonymousDeclarations++; + } } String actualSignature1 = op1.getActualSignature(); String actualSignature2 = op2.getActualSignature(); @@ -1222,6 +1240,9 @@ else if(op1.getBody() != null && op2.getBody() != null) { if(identicalSignatures == operations1.size()) { identicalSignatureDiffSet.add(diff); } + if(operationsWithIdenticalAnonymousDeclarations == operations1.size()) { + identicalAnonymousDeclarationDiffSet.add(diff); + } } if(identicalBodyDiffSet.size() == 1) { return identicalBodyDiffSet; @@ -1235,6 +1256,9 @@ else if(identicalBodyDiffSet.size() < diffSet.size() && identicalStatementDiffSe if(identicalPackageDeclarationDocDiffSet.size() == 1) { return identicalPackageDeclarationDocDiffSet; } + if(identicalAnonymousDeclarationDiffSet.size() == 1) { + return identicalAnonymousDeclarationDiffSet; + } Map.Entry> entry = matchingStatementMap.lastEntry(); if(entry != null && entry.getKey() > 0 && entry.getValue().size() == 1) { return entry.getValue(); diff --git a/src/test/java/org/refactoringminer/test/TestNewDatasetRefactorings.java b/src/test/java/org/refactoringminer/test/TestNewDatasetRefactorings.java index 35d07d596..db4fb89fd 100644 --- a/src/test/java/org/refactoringminer/test/TestNewDatasetRefactorings.java +++ b/src/test/java/org/refactoringminer/test/TestNewDatasetRefactorings.java @@ -44,6 +44,6 @@ public void testAllRefactorings() throws Exception { .or(Refactorings.SplitMethod.getValue()); TestBuilder test = new TestBuilder(detector, REPOS, types); RefactoringPopulator.feedTSERefactoringInstances(test); - test.assertExpectationsWithGitHubAPI(2965, 275, 412); + test.assertExpectationsWithGitHubAPI(2971, 274, 406); } } diff --git a/src/test/resources/oracle/tse-dataset/junit4.json b/src/test/resources/oracle/tse-dataset/junit4.json index bd72be872..db23806e8 100644 --- a/src/test/resources/oracle/tse-dataset/junit4.json +++ b/src/test/resources/oracle/tse-dataset/junit4.json @@ -642,7 +642,7 @@ { "type": "RENAME_CLASS", "description": "Rename Class\torg.junit.rules.ErrorCollectorTest.UsesErrorCollectorCheckThat renamed to org.junit.rules.ErrorCollectorTest.CheckTwoMatchersThatFail", - "validation": true + "validation": false }, { "type": "RENAME_CLASS", @@ -695,7 +695,13 @@ "validation": true } ], - "baseline": [] + "baseline": [ + { + "type": "RENAME_CLASS", + "description": "Rename Class\torg.junit.rules.ErrorCollectorTest.UsesErrorCollectorCheckThat renamed to org.junit.rules.ErrorCollectorTest.CheckMatcherThatFailsWithoutProvidedReason", + "validation": true + } + ] }, { "repository": "https://github.com/junit-team/junit4.git",