From 66f2733bdb1b859d9b43ab88b8b2418afcb31fa4 Mon Sep 17 00:00:00 2001 From: tsantalis Date: Wed, 15 Jan 2025 10:32:49 -0500 Subject: [PATCH] Fix false positives in inferClassRenameBasedOnFilePaths() when the UMLClassRenameDiff used for inference corresponds to inner classes https://github.com/junit-team/junit5/commit/89a0201073efd12b0732ceaeba52c6d7d7029f3a --- src/main/java/gr/uom/java/xmi/UMLAbstractClass.java | 3 +++ src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/gr/uom/java/xmi/UMLAbstractClass.java b/src/main/java/gr/uom/java/xmi/UMLAbstractClass.java index 43647ac9f..e7b5d54f0 100644 --- a/src/main/java/gr/uom/java/xmi/UMLAbstractClass.java +++ b/src/main/java/gr/uom/java/xmi/UMLAbstractClass.java @@ -820,6 +820,9 @@ else if(operation.isConstructor() && commonTokens >= Math.max(tokens1.length, to if(commonOperations.size() > Math.floor(totalOperations/2.0) || commonOperations.containsAll(this.operations)) { return new MatchResult(commonOperations.size(), commonAttributes.size(), identicalOperations.size(), totalOperations, totalAttributes, true); } + else if(commonAttributes.size() == totalAttributes && totalAttributes > 0 && commonOperations.size() > 0) { + return new MatchResult(commonOperations.size(), commonAttributes.size(), identicalOperations.size(), totalOperations, totalAttributes, true); + } else { return new MatchResult(commonOperations.size(), commonAttributes.size(), identicalOperations.size(), totalOperations, totalAttributes, false); } 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 5e83fefe2..97c1c8d2c 100644 --- a/src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java +++ b/src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java @@ -1272,7 +1272,8 @@ public void inferClassRenameBasedOnFilePaths(UMLClassMatcher matcher) throws Ref UMLClass addedClass = addedClassIterator.next(); String addedClassFilePath = addedClass.getSourceFile(); for(UMLClassRenameDiff classRenameDiff : classRenameDiffList) { - if(classRenameDiff.getOriginalClass().getSourceFile().equals(removedClassFilePath) && + if(classRenameDiff.getOriginalClass().isTopLevel() && classRenameDiff.getNextClass().isTopLevel() && + classRenameDiff.getOriginalClass().getSourceFile().equals(removedClassFilePath) && classRenameDiff.getNextClass().getSourceFile().equals(addedClassFilePath)) { MatchResult matchResult = matcher.match(removedClass, addedClass); if(matchResult.getMatchedOperations() > 0 || matchResult.getMatchedAttributes() > 0) {