diff --git a/plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/surroundWith/JavaExpressionSurroundDescriptor.java b/plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/surroundWith/JavaExpressionSurroundDescriptor.java index e0d2e113d..4bb7b9142 100644 --- a/plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/surroundWith/JavaExpressionSurroundDescriptor.java +++ b/plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/surroundWith/JavaExpressionSurroundDescriptor.java @@ -21,23 +21,26 @@ import com.intellij.java.language.psi.PsiExpression; import consulo.annotation.access.RequiredReadAction; import consulo.annotation.component.ExtensionImpl; +import consulo.application.Application; import consulo.externalService.statistic.FeatureUsageTracker; import consulo.language.Language; import consulo.language.editor.surroundWith.SurroundDescriptor; import consulo.language.editor.surroundWith.Surrounder; import consulo.language.psi.PsiElement; import consulo.language.psi.PsiFile; - import jakarta.annotation.Nonnull; +import jakarta.inject.Inject; import java.util.ArrayList; import java.util.Collections; +import java.util.List; /** * @author ven */ @ExtensionImpl public class JavaExpressionSurroundDescriptor implements SurroundDescriptor { + private final Application myApplication; private Surrounder[] mySurrounders = null; private static final Surrounder[] SURROUNDERS = { @@ -50,6 +53,11 @@ public class JavaExpressionSurroundDescriptor implements SurroundDescriptor { new JavaWithNullCheckSurrounder() }; + @Inject + public JavaExpressionSurroundDescriptor(Application application) { + myApplication = application; + } + @Nonnull @Override @RequiredReadAction @@ -69,9 +77,9 @@ public PsiElement[] getElementsToSurround(PsiFile file, int startOffset, int end @Nonnull public Surrounder[] getSurrounders() { if (mySurrounders == null) { - ArrayList list = new ArrayList<>(); + List list = new ArrayList<>(); Collections.addAll(list, SURROUNDERS); - Collections.addAll(list, JavaExpressionSurrounder.EP_NAME.getExtensions()); + list.addAll(myApplication.getExtensionList(JavaExpressionSurrounder.class)); mySurrounders = list.toArray(new Surrounder[list.size()]); } return mySurrounders; diff --git a/plugin/src/main/java/com/intellij/java/impl/refactoring/migration/MigrationMapSet.java b/plugin/src/main/java/com/intellij/java/impl/refactoring/migration/MigrationMapSet.java index 817d988a5..12c8c3bc9 100644 --- a/plugin/src/main/java/com/intellij/java/impl/refactoring/migration/MigrationMapSet.java +++ b/plugin/src/main/java/com/intellij/java/impl/refactoring/migration/MigrationMapSet.java @@ -158,8 +158,7 @@ private void copyPredefinedMaps(File dir) { } } - PredefinedMigrationProvider.EP_NAME.forEachExtensionSafe(provider -> - { + Application.get().getExtensionPoint(PredefinedMigrationProvider.class).forEach(provider -> { URL migrationMap = provider.getMigrationMap(); String fileName = new File(migrationMap.getFile()).getName(); if (myDeletedMaps.contains(FileUtil.getNameWithoutExtension(fileName))) { diff --git a/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java b/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java index 80f20b7e5..ef6af93f0 100644 --- a/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java +++ b/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java @@ -24,6 +24,7 @@ import consulo.annotation.access.RequiredReadAction; import consulo.annotation.access.RequiredWriteAction; import consulo.application.Application; +import consulo.component.extension.ExtensionPoint; import consulo.language.editor.refactoring.BaseRefactoringProcessor; import consulo.language.editor.refactoring.localize.RefactoringLocalize; import consulo.language.editor.refactoring.move.MoveCallback; @@ -144,13 +145,12 @@ protected void performRefactoring(@Nonnull UsageInfo[] usages) { return; } - MoveClassToInnerHandler[] handlers = MoveClassToInnerHandler.EP_NAME.getExtensions(); + ExtensionPoint extensionPoint = + myProject.getApplication().getExtensionPoint(MoveClassToInnerHandler.class); List usageList = new ArrayList<>(Arrays.asList(usages)); List importStatements = new ArrayList<>(); - for (MoveClassToInnerHandler handler : handlers) { - importStatements.addAll(handler.filterImports(usageList, myProject)); - } + extensionPoint.forEach(handler -> importStatements.addAll(handler.filterImports(usageList, myProject))); usages = usageList.toArray(new UsageInfo[usageList.size()]); @@ -158,13 +158,7 @@ protected void performRefactoring(@Nonnull UsageInfo[] usages) { Map oldToNewElementsMapping = new HashMap<>(); try { for (PsiClass classToMove : myClassesToMove) { - PsiClass newClass = null; - for (MoveClassToInnerHandler handler : handlers) { - newClass = handler.moveClass(classToMove, myTargetClass); - if (newClass != null) { - break; - } - } + PsiClass newClass = extensionPoint.computeSafeIfAny(handler -> handler.moveClass(classToMove, myTargetClass)); LOG.assertTrue( newClass != null, "There is no appropriate MoveClassToInnerHandler for " + myTargetClass + "; " + classToMove @@ -173,17 +167,9 @@ protected void performRefactoring(@Nonnull UsageInfo[] usages) { } myNonCodeUsages = CommonMoveUtil.retargetUsages(usages, oldToNewElementsMapping); - for (MoveClassToInnerHandler handler : handlers) { - handler.retargetNonCodeUsages(oldToNewElementsMapping, myNonCodeUsages); - } - - for (MoveClassToInnerHandler handler : handlers) { - handler.retargetClassRefsInMoved(oldToNewElementsMapping); - } - - for (MoveClassToInnerHandler handler : handlers) { - handler.removeRedundantImports(myTargetClass.getContainingFile()); - } + extensionPoint.forEach(handler -> handler.retargetNonCodeUsages(oldToNewElementsMapping, myNonCodeUsages)); + extensionPoint.forEach(handler -> handler.retargetClassRefsInMoved(oldToNewElementsMapping)); + extensionPoint.forEach(handler -> handler.removeRedundantImports(myTargetClass.getContainingFile())); for (PsiClass classToMove : myClassesToMove) { classToMove.delete(); diff --git a/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java b/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java index d3b7b30f3..a31169bd3 100644 --- a/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java +++ b/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java @@ -34,7 +34,6 @@ import consulo.ide.impl.idea.ide.util.DirectoryChooser; import consulo.ide.impl.idea.refactoring.rename.DirectoryAsPackageRenameHandlerBase; import consulo.language.editor.refactoring.BaseRefactoringProcessor; -import consulo.language.editor.refactoring.RefactoringBundle; import consulo.language.editor.refactoring.localize.RefactoringLocalize; import consulo.language.editor.refactoring.move.MoveCallback; import consulo.language.editor.refactoring.rename.RenameUtil; @@ -60,7 +59,6 @@ import consulo.usage.UsageInfo; import consulo.util.collection.MultiMap; import consulo.util.lang.Comparing; -import consulo.util.lang.ref.SimpleReference; import consulo.virtualFileSystem.VirtualFile; import jakarta.annotation.Nullable; @@ -119,10 +117,9 @@ public static PsiElement[] adjustForMove(Project project, PsiElement[] elements, PsiJavaPackage aPackage = JavaDirectoryService.getInstance().getPackage(directory); LOG.assertTrue(aPackage != null); if (aPackage.getQualifiedName().isEmpty()) { //is default package - String message = RefactoringLocalize.movePackageRefactoringCannotBeAppliedToDefaultPackage().get(); CommonRefactoringUtil.showErrorMessage( RefactoringLocalize.moveTitle().get(), - message, + RefactoringLocalize.movePackageRefactoringCannotBeAppliedToDefaultPackage().get(), HelpID.getMoveHelpID(element), project ); @@ -144,10 +141,9 @@ else if (element instanceof PsiJavaPackage psiPackage) { } else if (element instanceof PsiClass aClass) { if (aClass instanceof PsiAnonymousClass) { - String message = RefactoringLocalize.moveClassRefactoringCannotBeAppliedToAnonymousClasses().get(); CommonRefactoringUtil.showErrorMessage( RefactoringLocalize.moveTitle().get(), - message, + RefactoringLocalize.moveClassRefactoringCannotBeAppliedToAnonymousClasses().get(), HelpID.getMoveHelpID(element), project ); @@ -165,13 +161,8 @@ else if (element instanceof PsiClass aClass) { return null; } - String name = null; - for (MoveClassHandler nameProvider : MoveClassHandler.EP_NAME.getExtensionList()) { - name = nameProvider.getName(aClass); - if (name != null) { - break; - } - } + String name = project.getApplication().getExtensionPoint(MoveClassHandler.class) + .computeSafeIfAny(nameProvider -> nameProvider.getName(aClass)); if (name == null) { name = aClass.getContainingFile().getName(); } @@ -216,17 +207,13 @@ private static boolean checkMovePackage(Project project, PsiJavaPackage aPackage VirtualFile[] virtualFiles = aPackage.occursInPackagePrefixes(); if (directories.length > 1 || virtualFiles.length > 0) { StringBuffer message = new StringBuffer(); - RenameUtil.buildPackagePrefixChangedMessage(virtualFiles, message, aPackage.getQualifiedName()); + String packageName = aPackage.getQualifiedName(); + assert packageName != null; + RenameUtil.buildPackagePrefixChangedMessage(virtualFiles, message, packageName); if (directories.length > 1) { - DirectoryAsPackageRenameHandlerBase.buildMultipleDirectoriesInPackageMessage( - message, - aPackage.getQualifiedName(), - directories - ); + DirectoryAsPackageRenameHandlerBase.buildMultipleDirectoriesInPackageMessage(message, packageName, directories); message.append("\n\n"); - LocalizeValue report = - RefactoringLocalize.allTheseDirectoriesWillBeMovedAndAllReferencesTo0WillBeChanged(aPackage.getQualifiedName()); - message.append(report.get()); + message.append(RefactoringLocalize.allTheseDirectoriesWillBeMovedAndAllReferencesTo0WillBeChanged(packageName)); } message.append("\n"); message.append(RefactoringLocalize.doYouWishToContinue()); @@ -252,7 +239,8 @@ static boolean checkNesting(Project project, PsiJavaPackage srcPackage, PsiEleme CommonRefactoringUtil.showErrorMessage( RefactoringLocalize.moveTitle().get(), RefactoringLocalize.cannotMovePackageIntoItself().get(), - HelpID.getMoveHelpID(srcPackage), project + HelpID.getMoveHelpID(srcPackage), + project ); } return false; @@ -419,24 +407,25 @@ public static void doRearrangePackage(Project project, PsiDirectory[] directorie } } } - SimpleReference ex = SimpleReference.create(); - String commandDescription = RefactoringLocalize.movingDirectoriesCommand().get(); - @RequiredUIAccess - Runnable runnable = () -> project.getApplication().runWriteAction(() -> { - LocalHistoryAction a = LocalHistory.getInstance().startAction(commandDescription); - try { - rearrangeDirectoriesToTarget(directories, selectedTarget); - } - catch (IncorrectOperationException e) { - ex.set(e); - } - finally { - a.finish(); - } - }); - CommandProcessor.getInstance().executeCommand(project, runnable, commandDescription, null); - if (!ex.isNull()) { - RefactoringUIUtil.processIncorrectOperation(project, ex.get()); + try { + LocalizeValue commandDescription = RefactoringLocalize.movingDirectoriesCommand(); + CommandProcessor.getInstance().newCommand() + .project(project) + .name(commandDescription) + .inWriteAction() + .canThrow(IncorrectOperationException.class) + .run(() -> { + LocalHistoryAction a = LocalHistory.getInstance().startAction(commandDescription.get()); + try { + rearrangeDirectoriesToTarget(directories, selectedTarget); + } + finally { + a.finish(); + } + }); + } + catch (IncorrectOperationException e) { + RefactoringUIUtil.processIncorrectOperation(project, e); } } diff --git a/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java b/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java index 5099645ce..78b77542b 100644 --- a/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java +++ b/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java @@ -119,6 +119,7 @@ public MoveClassesOrPackagesProcessor( } @Nonnull + @Override protected UsageViewDescriptor createUsageViewDescriptor(@Nonnull UsageInfo[] usages) { PsiElement[] elements = new PsiElement[myElementsToMove.length]; System.arraycopy(myElementsToMove, 0, elements, 0, myElementsToMove.length); @@ -169,6 +170,7 @@ public void setSearchInNonJavaFiles(boolean searchInNonJavaFiles) { } @Nonnull + @Override @RequiredReadAction protected UsageInfo[] findUsages() { List allUsages = new ArrayList<>(); @@ -216,6 +218,7 @@ public PackageWrapper getTargetPackage() { protected static class ConflictsUsageInfo extends UsageInfo { private final Collection myConflicts; + @RequiredReadAction public ConflictsUsageInfo(PsiElement pseudoElement, Collection conflicts) { super(pseudoElement); myConflicts = conflicts; @@ -485,11 +488,10 @@ protected void performRefactoring(@Nonnull UsageInfo[] usages) { if (allClasses.containsKey(psiClass)) { continue; } - for (MoveAllClassesInFileHandler fileHandler : MoveAllClassesInFileHandler.EP_NAME.getExtensionList()) { - fileHandler.processMoveAllClassesInFile(allClasses, psiClass, myElementsToMove); + myProject.getApplication().getExtensionPoint(MoveAllClassesInFileHandler.class) + .forEach(fileHandler -> fileHandler.processMoveAllClassesInFile(allClasses, psiClass, myElementsToMove)); } } - } Map oldToNewElementsMapping = new HashMap<>(); for (int idx = 0; idx < myElementsToMove.length; idx++) { PsiElement element = myElementsToMove[idx]; diff --git a/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java b/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java index 7167e8ddb..ed0eade2c 100644 --- a/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java +++ b/plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java @@ -82,16 +82,10 @@ public static UsageInfo[] findUsages( } findNonCodeUsages(searchInStringsAndComments, searchInNonJavaFiles, element, newQName, results); - preprocessUsages(results); + element.getApplication().getExtensionPoint(MoveClassHandler.class).forEach(handler -> handler.preprocessUsages(results)); return results.toArray(new UsageInfo[results.size()]); } - private static void preprocessUsages(ArrayList results) { - for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensionList()) { - handler.preprocessUsages(results); - } - } - public static void findNonCodeUsages( boolean searchInStringsAndComments, boolean searchInNonJavaFiles, @@ -220,15 +214,13 @@ private static void moveDirectoryRecursively(PsiDirectory dir, PsiDirectory dest } public static void prepareMoveClass(PsiClass aClass) { - for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensionList()) { - handler.prepareMove(aClass); - } + aClass.getApplication().getExtensionPoint(MoveClassHandler.class) + .forEach(handler -> handler.prepareMove(aClass)); } public static void finishMoveClass(PsiClass aClass) { - for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensionList()) { - handler.finishMoveClass(aClass); - } + aClass.getApplication().getExtensionPoint(MoveClassHandler.class) + .forEach(handler -> handler.finishMoveClass(aClass)); } // Does not process non-code usages! @@ -243,11 +235,10 @@ public static PsiClass doMoveClass(PsiClass aClass, PsiDirectory moveDestination throws IncorrectOperationException { PsiClass newClass; if (!moveAllClassesInFile) { - for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensionList()) { - newClass = handler.doMoveClass(aClass, moveDestination); - if (newClass != null) { - return newClass; - } + newClass = aClass.getApplication().getExtensionPoint(MoveClassHandler.class) + .computeSafeIfAny(handler -> handler.doMoveClass(aClass, moveDestination)); + if (newClass != null) { + return newClass; } } diff --git a/plugin/src/main/java/com/intellij/java/impl/refactoring/rename/RenameAliasingPomTargetProcessor.java b/plugin/src/main/java/com/intellij/java/impl/refactoring/rename/RenameAliasingPomTargetProcessor.java index 738e02981..01550f460 100644 --- a/plugin/src/main/java/com/intellij/java/impl/refactoring/rename/RenameAliasingPomTargetProcessor.java +++ b/plugin/src/main/java/com/intellij/java/impl/refactoring/rename/RenameAliasingPomTargetProcessor.java @@ -36,29 +36,30 @@ public boolean canProcessElement(@Nonnull PsiElement element) { @Override public void prepareRenaming(PsiElement element, String newName, Map allRenames) { - PomTarget target = null; + PomTarget target; if (element instanceof PomTargetPsiElement targetPsiElement) { target = targetPsiElement.getTarget(); } else if (element instanceof PomTarget pomTarget) { target = pomTarget; } + else { + return; + } - if (target != null) { - for (AliasingPsiTargetMapper mapper : AliasingPsiTargetMapper.EP_NAME.getExtensions()) { - for (AliasingPsiTarget psiTarget : mapper.getTargets(target)) { - PsiElement psiElement = PomService.convertToPsi(psiTarget); - String name = psiTarget.getNameAlias(newName); + element.getApplication().getExtensionPoint(AliasingPsiTargetMapper.class).forEach(mapper -> { + for (AliasingPsiTarget psiTarget : mapper.getTargets(target)) { + PsiElement psiElement = PomService.convertToPsi(psiTarget); + String name = psiTarget.getNameAlias(newName); - String definedName = allRenames.put(psiElement, name); - if (definedName != null) { - assert definedName.equals(name); - } - else { - prepareRenaming(psiElement, name, allRenames); - } + String definedName = allRenames.put(psiElement, name); + if (definedName != null) { + assert definedName.equals(name); + } + else { + prepareRenaming(psiElement, name, allRenames); } } - } + }); } } diff --git a/plugin/src/main/java/com/intellij/java/impl/refactoring/safeDelete/ImportSearcher.java b/plugin/src/main/java/com/intellij/java/impl/refactoring/safeDelete/ImportSearcher.java index a8ac63527..569a5feaf 100644 --- a/plugin/src/main/java/com/intellij/java/impl/refactoring/safeDelete/ImportSearcher.java +++ b/plugin/src/main/java/com/intellij/java/impl/refactoring/safeDelete/ImportSearcher.java @@ -37,13 +37,7 @@ public abstract class ImportSearcher { @Nullable public static PsiElement getImport(PsiElement element, boolean onlyNonStatic) { - for (ImportSearcher searcher : EP_NAME.getExtensions()) { - PsiElement anImport = searcher.findImport(element, onlyNonStatic); - if (anImport != null) { - return anImport; - } - } - - return null; + return element.getApplication().getExtensionPoint(ImportSearcher.class) + .computeSafeIfAny(searcher -> searcher.findImport(element, onlyNonStatic)); } } diff --git a/plugin/src/main/java/com/intellij/java/impl/refactoring/typeMigration/TypeMigrationRules.java b/plugin/src/main/java/com/intellij/java/impl/refactoring/typeMigration/TypeMigrationRules.java index 7b53445b6..ca7188c82 100644 --- a/plugin/src/main/java/com/intellij/java/impl/refactoring/typeMigration/TypeMigrationRules.java +++ b/plugin/src/main/java/com/intellij/java/impl/refactoring/typeMigration/TypeMigrationRules.java @@ -36,7 +36,7 @@ public TypeMigrationRules(@Nonnull Project project) { myConversionRules = new ArrayList<>(extensions.length + 2); myConversionRules.add(new RootTypeConversionRule()); myConversionRules.add(new DisjunctionTypeConversionRule()); - ContainerUtil.addAll(myConversionRules, extensions); + myConversionRules.addAll(project.getApplication().getExtensionList(TypeConversionRule.class)); addConversionRuleSettings(new MigrateGetterNameSetting()); }