Skip to content

Commit 75c0985

Browse files
committed
inferClassRenameBasedOnFilePaths() utilizes rename hints if available
junit-team/junit-framework@89a0201
1 parent 8a204f4 commit 75c0985

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

src/main/java/gr/uom/java/xmi/diff/UMLModelDiff.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1269,22 +1269,56 @@ public void inferClassRenameBasedOnFilePaths(UMLClassMatcher matcher) throws Ref
12691269
UMLClass removedClass = removedClassIterator.next();
12701270
String removedClassFilePath = removedClass.getSourceFile();
12711271
TreeSet<UMLClassRenameDiff> diffSet = new TreeSet<UMLClassRenameDiff>(new ClassRenameComparator());
1272+
UMLClassRenameDiff promotedDiff = null;
12721273
for(Iterator<UMLClass> addedClassIterator = addedClasses.iterator(); addedClassIterator.hasNext();) {
12731274
UMLClass addedClass = addedClassIterator.next();
12741275
String addedClassFilePath = addedClass.getSourceFile();
12751276
for(UMLClassRenameDiff classRenameDiff : classRenameDiffList) {
1277+
Map<String, String> renameHint = new LinkedHashMap<String, String>();
1278+
if(!classRenameDiff.getOriginalClass().isTopLevel() && !classRenameDiff.getNextClass().isTopLevel()) {
1279+
String outerClassName = classRenameDiff.getNextClassName().substring(0, classRenameDiff.getNextClassName().lastIndexOf("."));
1280+
UMLClassBaseDiff outerClassDiff = getUMLClassDiff(outerClassName);
1281+
if(outerClassDiff != null) {
1282+
for(Refactoring r : outerClassDiff.getRefactoringsBeforePostProcessing()) {
1283+
if(r instanceof ExtractOperationRefactoring) {
1284+
ExtractOperationRefactoring extract = (ExtractOperationRefactoring)r;
1285+
for(String key : extract.getParameterToArgumentMap().keySet()) {
1286+
String value = extract.getParameterToArgumentMap().get(key);
1287+
if(value.endsWith(".class")) {
1288+
for(Replacement replacement : extract.getReplacements()) {
1289+
if(replacement.getAfter().equals(value)) {
1290+
String before = replacement.getBefore();
1291+
if(replacement.getBefore().endsWith(".class")) {
1292+
before = replacement.getBefore().substring(0, replacement.getBefore().length()-6);
1293+
}
1294+
String after = value.substring(0, value.length()-6);
1295+
renameHint.put(before, after);
1296+
}
1297+
}
1298+
}
1299+
}
1300+
}
1301+
}
1302+
}
1303+
}
12761304
if(classRenameDiff.getOriginalClass().getSourceFile().equals(removedClassFilePath) &&
12771305
classRenameDiff.getNextClass().getSourceFile().equals(addedClassFilePath)) {
12781306
MatchResult matchResult = matcher.match(removedClass, addedClass);
12791307
if(matchResult.getMatchedOperations() > 0 || matchResult.getMatchedAttributes() > 0) {
12801308
UMLClassRenameDiff newClassRenameDiff = new UMLClassRenameDiff(removedClass, addedClass, this, matchResult);
12811309
diffSet.add(newClassRenameDiff);
1310+
for(String key : renameHint.keySet()) {
1311+
if(removedClass.getName().endsWith(key) && addedClass.getName().endsWith(renameHint.get(key))) {
1312+
promotedDiff = newClassRenameDiff;
1313+
break;
1314+
}
1315+
}
12821316
}
12831317
}
12841318
}
12851319
}
12861320
if(diffSet.size() > 0) {
1287-
UMLClassRenameDiff first = diffSet.first();
1321+
UMLClassRenameDiff first = promotedDiff != null ? promotedDiff : diffSet.first();
12881322
diffsToBeAdded.add(first);
12891323
first.process();
12901324
addedClassesToBeRemoved.add(first.getNextClass());

0 commit comments

Comments
 (0)