diff --git a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java index 1dd625956083..f3f756fc489d 100644 --- a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java @@ -358,23 +358,23 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase { continue; } - List nonSyntheticClasses = new ArrayList<>(); - for (final PsiClass aClass : ((PsiClassOwner)createdFile).getClasses()) { - if (!isSynthetic(aClass)) { - nonSyntheticClasses.add(aClass); + Map sourceToDestination = new LinkedHashMap<>(); + for (final PsiClass destination : ((PsiClassOwner)createdFile).getClasses()) { + if (!isSynthetic(destination)) { + PsiClass source = findByName(sources, destination.getName()); + if (source == null) { + WriteAction.run(() -> destination.delete()); + } + else { + sourceToDestination.put(source, destination); + } } } - for (final PsiClass destination : nonSyntheticClasses) { - PsiClass source = findByName(sources, destination.getName()); - if (source != null) { - final PsiClass copy = copy(source, nonSyntheticClasses.size() > 1 ? null : copyClassName); - PsiElement newElement = WriteAction.compute(() -> destination.replace(copy)); - oldToNewMap.put(source, newElement); - } - else { - WriteAction.run(() -> destination.delete()); - } + for (final Map.Entry classEntry : sourceToDestination.entrySet()) { + final PsiClass copy = copy(classEntry.getKey(), sourceToDestination.size() > 1 ? null : copyClassName); + PsiElement newElement = WriteAction.compute(() -> classEntry.getValue().replace(copy)); + oldToNewMap.put(classEntry.getKey(), newElement); } createdFiles.add(createdFile); } diff --git a/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Foo.java b/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Foo.java index 385bd5c14f78..718c20dd89b3 100644 --- a/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Foo.java +++ b/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Foo.java @@ -1,3 +1,4 @@ +class AnotherFoo {} public class Foo { public static Foo createInstance() {