diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java b/java/java-impl-refactorings/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java index 07f36ea44dac..cc798b8250cc 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java @@ -18,6 +18,7 @@ import com.intellij.refactoring.util.RefactoringConflictsUtil; import com.intellij.usageView.UsageInfo; import com.intellij.util.Function; import com.intellij.util.ObjectUtils; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; @@ -44,7 +45,7 @@ public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClasses PsiManager psiManager = PsiManager.getInstance(project); for (VirtualFile vFile : filesToMove.keySet()) { PsiFile psiFile = psiManager.findFile(vFile); - if (psiFile instanceof PsiClassOwner) { + if (psiFile instanceof PsiJavaFile) { String packageName = ""; MoveDirectoryWithClassesProcessor.TargetDirectoryWrapper targetWrapper = filesToMove.get(vFile); PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage(targetWrapper.getRootDirectory()); @@ -102,11 +103,11 @@ public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClasses Map oldToNewElementsMapping, List movedFiles, RefactoringElementListener listener) { - if (!(file instanceof PsiClassOwner)) { + if (!(file instanceof PsiJavaFile javaFile)) { return false; } - final PsiClass[] classes = ((PsiClassOwner)file).getClasses(); + final PsiClass[] classes = javaFile.getClasses(); if (classes.length == 0) { return false; } @@ -170,28 +171,30 @@ public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClasses UsageInfo[] infos, PsiDirectory targetDirectory, MultiMap conflicts) { - if (files != null) { - final VirtualFile vFile = PsiUtilCore.getVirtualFile(targetDirectory); - if (vFile != null) { - RefactoringConflictsUtil.getInstance().analyzeModuleConflicts(project, files, infos, vFile, conflicts); - } + if (files == null || files.isEmpty()) return; + List javaFiles = ContainerUtil.filterIsInstance(files, PsiJavaFile.class); + final VirtualFile vFile = PsiUtilCore.getVirtualFile(targetDirectory); + if (vFile != null) { + RefactoringConflictsUtil.getInstance().analyzeModuleConflicts(project, javaFiles, infos, vFile, conflicts); } if (targetDirectory != null) { PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage(targetDirectory); - if (aPackage != null && files != null) { - MoveClassesOrPackagesProcessor.detectPackageLocalsUsed(conflicts, files.toArray(PsiElement.EMPTY_ARRAY), new PackageWrapper(aPackage)); + if (aPackage != null) { + MoveClassesOrPackagesProcessor.detectPackageLocalsUsed(conflicts, javaFiles.toArray(PsiElement.EMPTY_ARRAY), new PackageWrapper(aPackage)); } } } @Override public void beforeMove(PsiFile psiFile) { + if (!(psiFile instanceof PsiJavaFile)) return; ChangeContextUtil.encodeContextInfo(psiFile, true); } @Override public void afterMove(PsiElement newElement) { + if (!(newElement instanceof PsiJavaFile)) return; ChangeContextUtil.decodeContextInfo(newElement, null, null); } diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt index e5f08973a1ef..6807bf9dc36b 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations @@ -199,7 +199,7 @@ open class MoveKotlinDeclarationsProcessor( } } - MoveClassHandler.EP_NAME.extensions.filter { it !is MoveKotlinClassHandler }.forEach { handler -> + MoveClassHandler.EP_NAME.extensions.forEach { handler -> handler.preprocessUsages(results) } diff --git a/plugins/kotlin/plugin/common/resources/META-INF/refactorings.xml b/plugins/kotlin/plugin/common/resources/META-INF/refactorings.xml index 3d8d51436628..30715d717273 100644 --- a/plugins/kotlin/plugin/common/resources/META-INF/refactorings.xml +++ b/plugins/kotlin/plugin/common/resources/META-INF/refactorings.xml @@ -65,9 +65,6 @@ - diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/move/MoveKotlinClassHandler.kt b/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/move/MoveKotlinClassHandler.kt deleted file mode 100644 index e939e201fc8d..000000000000 --- a/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/move/MoveKotlinClassHandler.kt +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package org.jetbrains.kotlin.idea.refactoring.move - -import com.intellij.psi.PsiClass -import com.intellij.psi.PsiDirectory -import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassHandler -import com.intellij.refactoring.util.MoveRenameUsageInfo -import com.intellij.usageView.UsageInfo -import org.jetbrains.kotlin.asJava.classes.KtLightClass - -class MoveKotlinClassHandler : MoveClassHandler { - override fun doMoveClass(aClass: PsiClass, moveDestination: PsiDirectory): PsiClass? = null - override fun getName(clazz: PsiClass?): String? = null - - /** - * Ensure that Kotlin classes are not processed twice when moving Kotlin files - * (once through the Java move handler calling KtFile.getClasses() and another time through the Kotlin move handler) - */ - override fun preprocessUsages(results: MutableCollection) { - results.removeAll { usageInfo -> - usageInfo is MoveRenameUsageInfo && usageInfo.referencedElement is KtLightClass - } - } - - override fun prepareMove(aClass: PsiClass) {} - - override fun finishMoveClass(aClass: PsiClass) {} -} \ No newline at end of file