diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveAllClassesInFileHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveAllClassesInFileHandler.java new file mode 100644 index 000000000000..c08dcc313bb7 --- /dev/null +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveAllClassesInFileHandler.java @@ -0,0 +1,34 @@ +/* + * Copyright 2000-2009 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.refactoring.move.moveClassesOrPackages; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiElement; +import com.intellij.usageView.UsageInfo; +import com.intellij.util.IncorrectOperationException; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collection; +import java.util.Map; + +public abstract class MoveAllClassesInFileHandler { + public static ExtensionPointName EP_NAME = new ExtensionPointName("com.intellij.refactoring.moveAllClassesInFileHandler"); + + public abstract void processMoveAllClassesInFile(@NotNull Map allClasses, PsiClass psiClass, PsiElement... elementsToMove); +} diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java index 6bd56d8746b6..8a88e1c19626 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java @@ -16,6 +16,7 @@ package com.intellij.refactoring.move.moveClassesOrPackages; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Comparing; @@ -460,17 +461,8 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor { if (allClasses.containsKey(psiClass)) { continue; } - final PsiClassOwner containingFile = (PsiClassOwner)element.getContainingFile(); - final PsiClass[] classes = containingFile.getClasses(); - boolean all = true; - for (PsiClass aClass : classes) { - if (ArrayUtil.find(myElementsToMove, aClass) == -1) { - all = false; - break; - } - } - for (PsiClass aClass : classes) { - allClasses.put(aClass, all); + for (MoveAllClassesInFileHandler fileHandler : Extensions.getExtensions(MoveAllClassesInFileHandler.EP_NAME)) { + fileHandler.processMoveAllClassesInFile(allClasses, psiClass, myElementsToMove); } } } @@ -523,7 +515,7 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor { } } - protected void performPsiSpoilingRefactoring() { + protected void performPsiSpoilingRefactoring() { RenameUtil.renameNonCodeUsages(myProject, myNonCodeUsages); if (myMoveCallback != null) { if (myMoveCallback instanceof MoveClassesOrPackagesCallback) { diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaClassesInFileHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaClassesInFileHandler.java new file mode 100644 index 000000000000..e38db7e18bb3 --- /dev/null +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaClassesInFileHandler.java @@ -0,0 +1,30 @@ +package com.intellij.refactoring.move.moveClassesOrPackages; + +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiClassOwner; +import com.intellij.psi.PsiElement; +import com.intellij.psi.impl.light.LightClass; +import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; + +public class MoveJavaClassesInFileHandler extends MoveAllClassesInFileHandler { + + @Override + public void processMoveAllClassesInFile(@NotNull Map allClasses, PsiClass psiClass, PsiElement... elementsToMove) { + if (psiClass instanceof LightClass) return; + final PsiClassOwner containingFile = (PsiClassOwner)psiClass.getContainingFile(); + final PsiClass[] classes = containingFile.getClasses(); + boolean all = true; + for (PsiClass aClass : classes) { + if (ArrayUtil.find(elementsToMove, aClass) == -1) { + all = false; + break; + } + } + for (PsiClass aClass : classes) { + allClasses.put(aClass, all); + } + } +} diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index ba68c2430b74..6852f4ad5525 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -250,6 +250,7 @@ + diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index f6ebc57dc207..a13e2d1c0354 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -1112,6 +1112,7 @@ +