From 8a204f49e6e898b465ebce232d461f8034383a8a Mon Sep 17 00:00:00 2001 From: tsantalis Date: Wed, 15 Jan 2025 12:31:18 -0500 Subject: [PATCH] Handle multiple matches in inferClassRenameBasedOnFilePaths() https://github.com/junit-team/junit5/commit/89a0201073efd12b0732ceaeba52c6d7d7029f3a --- .../java/gr/uom/java/xmi/UMLAbstractClass.java | 3 --- .../java/gr/uom/java/xmi/diff/UMLModelDiff.java | 17 ++++++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/gr/uom/java/xmi/UMLAbstractClass.java b/src/main/java/gr/uom/java/xmi/UMLAbstractClass.java index e7b5d54f0..43647ac9f 100644 --- a/src/main/java/gr/uom/java/xmi/UMLAbstractClass.java +++ b/src/main/java/gr/uom/java/xmi/UMLAbstractClass.java @@ -820,9 +820,6 @@ 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 97c1c8d2c..8d4ce47bd 100644 --- a/src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java +++ b/src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java @@ -1268,25 +1268,28 @@ public void inferClassRenameBasedOnFilePaths(UMLClassMatcher matcher) throws Ref for(Iterator removedClassIterator = removedClasses.iterator(); removedClassIterator.hasNext();) { UMLClass removedClass = removedClassIterator.next(); String removedClassFilePath = removedClass.getSourceFile(); + TreeSet diffSet = new TreeSet(new ClassRenameComparator()); for(Iterator addedClassIterator = addedClasses.iterator(); addedClassIterator.hasNext();) { UMLClass addedClass = addedClassIterator.next(); String addedClassFilePath = addedClass.getSourceFile(); for(UMLClassRenameDiff classRenameDiff : classRenameDiffList) { - if(classRenameDiff.getOriginalClass().isTopLevel() && classRenameDiff.getNextClass().isTopLevel() && - classRenameDiff.getOriginalClass().getSourceFile().equals(removedClassFilePath) && + if(classRenameDiff.getOriginalClass().getSourceFile().equals(removedClassFilePath) && classRenameDiff.getNextClass().getSourceFile().equals(addedClassFilePath)) { MatchResult matchResult = matcher.match(removedClass, addedClass); if(matchResult.getMatchedOperations() > 0 || matchResult.getMatchedAttributes() > 0) { UMLClassRenameDiff newClassRenameDiff = new UMLClassRenameDiff(removedClass, addedClass, this, matchResult); - newClassRenameDiff.process(); - diffsToBeAdded.add(newClassRenameDiff); - addedClassesToBeRemoved.add(addedClass); - removedClassesToBeRemoved.add(removedClass); - break; + diffSet.add(newClassRenameDiff); } } } } + if(diffSet.size() > 0) { + UMLClassRenameDiff first = diffSet.first(); + diffsToBeAdded.add(first); + first.process(); + addedClassesToBeRemoved.add(first.getNextClass()); + removedClassesToBeRemoved.add(first.getOriginalClass()); + } } classRenameDiffList.addAll(diffsToBeAdded); removedClasses.removeAll(removedClassesToBeRemoved);