copy class: fix copy of one class from file with multiple top level classes (IDEA-230143)

GitOrigin-RevId: 2d73053c1851e8c40bfeaef6466e944acc59b6bf
This commit is contained in:
Anna Kozlova
2020-01-06 20:01:50 +00:00
committed by intellij-monorepo-bot
parent e2dd5682df
commit 3e4d1af932
2 changed files with 15 additions and 14 deletions
@@ -358,23 +358,23 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase {
continue;
}
List<PsiClass> nonSyntheticClasses = new ArrayList<>();
for (final PsiClass aClass : ((PsiClassOwner)createdFile).getClasses()) {
if (!isSynthetic(aClass)) {
nonSyntheticClasses.add(aClass);
Map<PsiClass, PsiClass> 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<PsiClass, PsiClass> 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);
}
@@ -1,3 +1,4 @@
class AnotherFoo {}
public class Foo {
public static Foo createInstance() {