@@ -1269,22 +1269,56 @@ public void inferClassRenameBasedOnFilePaths(UMLClassMatcher matcher) throws Ref
1269
1269
UMLClass removedClass = removedClassIterator .next ();
1270
1270
String removedClassFilePath = removedClass .getSourceFile ();
1271
1271
TreeSet <UMLClassRenameDiff > diffSet = new TreeSet <UMLClassRenameDiff >(new ClassRenameComparator ());
1272
+ UMLClassRenameDiff promotedDiff = null ;
1272
1273
for (Iterator <UMLClass > addedClassIterator = addedClasses .iterator (); addedClassIterator .hasNext ();) {
1273
1274
UMLClass addedClass = addedClassIterator .next ();
1274
1275
String addedClassFilePath = addedClass .getSourceFile ();
1275
1276
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
+ }
1276
1304
if (classRenameDiff .getOriginalClass ().getSourceFile ().equals (removedClassFilePath ) &&
1277
1305
classRenameDiff .getNextClass ().getSourceFile ().equals (addedClassFilePath )) {
1278
1306
MatchResult matchResult = matcher .match (removedClass , addedClass );
1279
1307
if (matchResult .getMatchedOperations () > 0 || matchResult .getMatchedAttributes () > 0 ) {
1280
1308
UMLClassRenameDiff newClassRenameDiff = new UMLClassRenameDiff (removedClass , addedClass , this , matchResult );
1281
1309
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
+ }
1282
1316
}
1283
1317
}
1284
1318
}
1285
1319
}
1286
1320
if (diffSet .size () > 0 ) {
1287
- UMLClassRenameDiff first = diffSet .first ();
1321
+ UMLClassRenameDiff first = promotedDiff != null ? promotedDiff : diffSet .first ();
1288
1322
diffsToBeAdded .add (first );
1289
1323
first .process ();
1290
1324
addedClassesToBeRemoved .add (first .getNextClass ());
0 commit comments