Skip to content

Commit da0b9ff

Browse files
committed
Replacing EP_NAME with getExtensionPoint (part 3).
1 parent 3f22787 commit da0b9ff

9 files changed

Lines changed: 82 additions & 112 deletions

File tree

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/surroundWith/JavaExpressionSurroundDescriptor.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,26 @@
2121
import com.intellij.java.language.psi.PsiExpression;
2222
import consulo.annotation.access.RequiredReadAction;
2323
import consulo.annotation.component.ExtensionImpl;
24+
import consulo.application.Application;
2425
import consulo.externalService.statistic.FeatureUsageTracker;
2526
import consulo.language.Language;
2627
import consulo.language.editor.surroundWith.SurroundDescriptor;
2728
import consulo.language.editor.surroundWith.Surrounder;
2829
import consulo.language.psi.PsiElement;
2930
import consulo.language.psi.PsiFile;
30-
3131
import jakarta.annotation.Nonnull;
32+
import jakarta.inject.Inject;
3233

3334
import java.util.ArrayList;
3435
import java.util.Collections;
36+
import java.util.List;
3537

3638
/**
3739
* @author ven
3840
*/
3941
@ExtensionImpl
4042
public class JavaExpressionSurroundDescriptor implements SurroundDescriptor {
43+
private final Application myApplication;
4144
private Surrounder[] mySurrounders = null;
4245

4346
private static final Surrounder[] SURROUNDERS = {
@@ -50,6 +53,11 @@ public class JavaExpressionSurroundDescriptor implements SurroundDescriptor {
5053
new JavaWithNullCheckSurrounder()
5154
};
5255

56+
@Inject
57+
public JavaExpressionSurroundDescriptor(Application application) {
58+
myApplication = application;
59+
}
60+
5361
@Nonnull
5462
@Override
5563
@RequiredReadAction
@@ -69,9 +77,9 @@ public PsiElement[] getElementsToSurround(PsiFile file, int startOffset, int end
6977
@Nonnull
7078
public Surrounder[] getSurrounders() {
7179
if (mySurrounders == null) {
72-
ArrayList<Surrounder> list = new ArrayList<>();
80+
List<Surrounder> list = new ArrayList<>();
7381
Collections.addAll(list, SURROUNDERS);
74-
Collections.addAll(list, JavaExpressionSurrounder.EP_NAME.getExtensions());
82+
list.addAll(myApplication.getExtensionList(JavaExpressionSurrounder.class));
7583
mySurrounders = list.toArray(new Surrounder[list.size()]);
7684
}
7785
return mySurrounders;

plugin/src/main/java/com/intellij/java/impl/refactoring/migration/MigrationMapSet.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,7 @@ private void copyPredefinedMaps(File dir) {
158158
}
159159
}
160160

161-
PredefinedMigrationProvider.EP_NAME.forEachExtensionSafe(provider ->
162-
{
161+
Application.get().getExtensionPoint(PredefinedMigrationProvider.class).forEach(provider -> {
163162
URL migrationMap = provider.getMigrationMap();
164163
String fileName = new File(migrationMap.getFile()).getName();
165164
if (myDeletedMaps.contains(FileUtil.getNameWithoutExtension(fileName))) {

plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import consulo.annotation.access.RequiredReadAction;
2525
import consulo.annotation.access.RequiredWriteAction;
2626
import consulo.application.Application;
27+
import consulo.component.extension.ExtensionPoint;
2728
import consulo.language.editor.refactoring.BaseRefactoringProcessor;
2829
import consulo.language.editor.refactoring.localize.RefactoringLocalize;
2930
import consulo.language.editor.refactoring.move.MoveCallback;
@@ -144,27 +145,20 @@ protected void performRefactoring(@Nonnull UsageInfo[] usages) {
144145
return;
145146
}
146147

147-
MoveClassToInnerHandler[] handlers = MoveClassToInnerHandler.EP_NAME.getExtensions();
148+
ExtensionPoint<MoveClassToInnerHandler> extensionPoint =
149+
myProject.getApplication().getExtensionPoint(MoveClassToInnerHandler.class);
148150

149151
List<UsageInfo> usageList = new ArrayList<>(Arrays.asList(usages));
150152
List<PsiElement> importStatements = new ArrayList<>();
151-
for (MoveClassToInnerHandler handler : handlers) {
152-
importStatements.addAll(handler.filterImports(usageList, myProject));
153-
}
153+
extensionPoint.forEach(handler -> importStatements.addAll(handler.filterImports(usageList, myProject)));
154154

155155
usages = usageList.toArray(new UsageInfo[usageList.size()]);
156156

157157
saveNonCodeUsages(usages);
158158
Map<PsiElement, PsiElement> oldToNewElementsMapping = new HashMap<>();
159159
try {
160160
for (PsiClass classToMove : myClassesToMove) {
161-
PsiClass newClass = null;
162-
for (MoveClassToInnerHandler handler : handlers) {
163-
newClass = handler.moveClass(classToMove, myTargetClass);
164-
if (newClass != null) {
165-
break;
166-
}
167-
}
161+
PsiClass newClass = extensionPoint.computeSafeIfAny(handler -> handler.moveClass(classToMove, myTargetClass));
168162
LOG.assertTrue(
169163
newClass != null,
170164
"There is no appropriate MoveClassToInnerHandler for " + myTargetClass + "; " + classToMove
@@ -173,17 +167,9 @@ protected void performRefactoring(@Nonnull UsageInfo[] usages) {
173167
}
174168

175169
myNonCodeUsages = CommonMoveUtil.retargetUsages(usages, oldToNewElementsMapping);
176-
for (MoveClassToInnerHandler handler : handlers) {
177-
handler.retargetNonCodeUsages(oldToNewElementsMapping, myNonCodeUsages);
178-
}
179-
180-
for (MoveClassToInnerHandler handler : handlers) {
181-
handler.retargetClassRefsInMoved(oldToNewElementsMapping);
182-
}
183-
184-
for (MoveClassToInnerHandler handler : handlers) {
185-
handler.removeRedundantImports(myTargetClass.getContainingFile());
186-
}
170+
extensionPoint.forEach(handler -> handler.retargetNonCodeUsages(oldToNewElementsMapping, myNonCodeUsages));
171+
extensionPoint.forEach(handler -> handler.retargetClassRefsInMoved(oldToNewElementsMapping));
172+
extensionPoint.forEach(handler -> handler.removeRedundantImports(myTargetClass.getContainingFile()));
187173

188174
for (PsiClass classToMove : myClassesToMove) {
189175
classToMove.delete();

plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java

Lines changed: 30 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import consulo.ide.impl.idea.ide.util.DirectoryChooser;
3535
import consulo.ide.impl.idea.refactoring.rename.DirectoryAsPackageRenameHandlerBase;
3636
import consulo.language.editor.refactoring.BaseRefactoringProcessor;
37-
import consulo.language.editor.refactoring.RefactoringBundle;
3837
import consulo.language.editor.refactoring.localize.RefactoringLocalize;
3938
import consulo.language.editor.refactoring.move.MoveCallback;
4039
import consulo.language.editor.refactoring.rename.RenameUtil;
@@ -60,7 +59,6 @@
6059
import consulo.usage.UsageInfo;
6160
import consulo.util.collection.MultiMap;
6261
import consulo.util.lang.Comparing;
63-
import consulo.util.lang.ref.SimpleReference;
6462
import consulo.virtualFileSystem.VirtualFile;
6563
import jakarta.annotation.Nullable;
6664

@@ -119,10 +117,9 @@ public static PsiElement[] adjustForMove(Project project, PsiElement[] elements,
119117
PsiJavaPackage aPackage = JavaDirectoryService.getInstance().getPackage(directory);
120118
LOG.assertTrue(aPackage != null);
121119
if (aPackage.getQualifiedName().isEmpty()) { //is default package
122-
String message = RefactoringLocalize.movePackageRefactoringCannotBeAppliedToDefaultPackage().get();
123120
CommonRefactoringUtil.showErrorMessage(
124121
RefactoringLocalize.moveTitle().get(),
125-
message,
122+
RefactoringLocalize.movePackageRefactoringCannotBeAppliedToDefaultPackage().get(),
126123
HelpID.getMoveHelpID(element),
127124
project
128125
);
@@ -144,10 +141,9 @@ else if (element instanceof PsiJavaPackage psiPackage) {
144141
}
145142
else if (element instanceof PsiClass aClass) {
146143
if (aClass instanceof PsiAnonymousClass) {
147-
String message = RefactoringLocalize.moveClassRefactoringCannotBeAppliedToAnonymousClasses().get();
148144
CommonRefactoringUtil.showErrorMessage(
149145
RefactoringLocalize.moveTitle().get(),
150-
message,
146+
RefactoringLocalize.moveClassRefactoringCannotBeAppliedToAnonymousClasses().get(),
151147
HelpID.getMoveHelpID(element),
152148
project
153149
);
@@ -165,13 +161,8 @@ else if (element instanceof PsiClass aClass) {
165161
return null;
166162
}
167163

168-
String name = null;
169-
for (MoveClassHandler nameProvider : MoveClassHandler.EP_NAME.getExtensionList()) {
170-
name = nameProvider.getName(aClass);
171-
if (name != null) {
172-
break;
173-
}
174-
}
164+
String name = project.getApplication().getExtensionPoint(MoveClassHandler.class)
165+
.computeSafeIfAny(nameProvider -> nameProvider.getName(aClass));
175166
if (name == null) {
176167
name = aClass.getContainingFile().getName();
177168
}
@@ -216,17 +207,13 @@ private static boolean checkMovePackage(Project project, PsiJavaPackage aPackage
216207
VirtualFile[] virtualFiles = aPackage.occursInPackagePrefixes();
217208
if (directories.length > 1 || virtualFiles.length > 0) {
218209
StringBuffer message = new StringBuffer();
219-
RenameUtil.buildPackagePrefixChangedMessage(virtualFiles, message, aPackage.getQualifiedName());
210+
String packageName = aPackage.getQualifiedName();
211+
assert packageName != null;
212+
RenameUtil.buildPackagePrefixChangedMessage(virtualFiles, message, packageName);
220213
if (directories.length > 1) {
221-
DirectoryAsPackageRenameHandlerBase.buildMultipleDirectoriesInPackageMessage(
222-
message,
223-
aPackage.getQualifiedName(),
224-
directories
225-
);
214+
DirectoryAsPackageRenameHandlerBase.buildMultipleDirectoriesInPackageMessage(message, packageName, directories);
226215
message.append("\n\n");
227-
LocalizeValue report =
228-
RefactoringLocalize.allTheseDirectoriesWillBeMovedAndAllReferencesTo0WillBeChanged(aPackage.getQualifiedName());
229-
message.append(report.get());
216+
message.append(RefactoringLocalize.allTheseDirectoriesWillBeMovedAndAllReferencesTo0WillBeChanged(packageName));
230217
}
231218
message.append("\n");
232219
message.append(RefactoringLocalize.doYouWishToContinue());
@@ -252,7 +239,8 @@ static boolean checkNesting(Project project, PsiJavaPackage srcPackage, PsiEleme
252239
CommonRefactoringUtil.showErrorMessage(
253240
RefactoringLocalize.moveTitle().get(),
254241
RefactoringLocalize.cannotMovePackageIntoItself().get(),
255-
HelpID.getMoveHelpID(srcPackage), project
242+
HelpID.getMoveHelpID(srcPackage),
243+
project
256244
);
257245
}
258246
return false;
@@ -419,24 +407,25 @@ public static void doRearrangePackage(Project project, PsiDirectory[] directorie
419407
}
420408
}
421409
}
422-
SimpleReference<IncorrectOperationException> ex = SimpleReference.create();
423-
String commandDescription = RefactoringLocalize.movingDirectoriesCommand().get();
424-
@RequiredUIAccess
425-
Runnable runnable = () -> project.getApplication().runWriteAction(() -> {
426-
LocalHistoryAction a = LocalHistory.getInstance().startAction(commandDescription);
427-
try {
428-
rearrangeDirectoriesToTarget(directories, selectedTarget);
429-
}
430-
catch (IncorrectOperationException e) {
431-
ex.set(e);
432-
}
433-
finally {
434-
a.finish();
435-
}
436-
});
437-
CommandProcessor.getInstance().executeCommand(project, runnable, commandDescription, null);
438-
if (!ex.isNull()) {
439-
RefactoringUIUtil.processIncorrectOperation(project, ex.get());
410+
try {
411+
LocalizeValue commandDescription = RefactoringLocalize.movingDirectoriesCommand();
412+
CommandProcessor.getInstance().newCommand()
413+
.project(project)
414+
.name(commandDescription)
415+
.inWriteAction()
416+
.canThrow(IncorrectOperationException.class)
417+
.run(() -> {
418+
LocalHistoryAction a = LocalHistory.getInstance().startAction(commandDescription.get());
419+
try {
420+
rearrangeDirectoriesToTarget(directories, selectedTarget);
421+
}
422+
finally {
423+
a.finish();
424+
}
425+
});
426+
}
427+
catch (IncorrectOperationException e) {
428+
RefactoringUIUtil.processIncorrectOperation(project, e);
440429
}
441430
}
442431

plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ public MoveClassesOrPackagesProcessor(
119119
}
120120

121121
@Nonnull
122+
@Override
122123
protected UsageViewDescriptor createUsageViewDescriptor(@Nonnull UsageInfo[] usages) {
123124
PsiElement[] elements = new PsiElement[myElementsToMove.length];
124125
System.arraycopy(myElementsToMove, 0, elements, 0, myElementsToMove.length);
@@ -169,6 +170,7 @@ public void setSearchInNonJavaFiles(boolean searchInNonJavaFiles) {
169170
}
170171

171172
@Nonnull
173+
@Override
172174
@RequiredReadAction
173175
protected UsageInfo[] findUsages() {
174176
List<UsageInfo> allUsages = new ArrayList<>();
@@ -216,6 +218,7 @@ public PackageWrapper getTargetPackage() {
216218
protected static class ConflictsUsageInfo extends UsageInfo {
217219
private final Collection<String> myConflicts;
218220

221+
@RequiredReadAction
219222
public ConflictsUsageInfo(PsiElement pseudoElement, Collection<String> conflicts) {
220223
super(pseudoElement);
221224
myConflicts = conflicts;
@@ -485,11 +488,10 @@ protected void performRefactoring(@Nonnull UsageInfo[] usages) {
485488
if (allClasses.containsKey(psiClass)) {
486489
continue;
487490
}
488-
for (MoveAllClassesInFileHandler fileHandler : MoveAllClassesInFileHandler.EP_NAME.getExtensionList()) {
489-
fileHandler.processMoveAllClassesInFile(allClasses, psiClass, myElementsToMove);
491+
myProject.getApplication().getExtensionPoint(MoveAllClassesInFileHandler.class)
492+
.forEach(fileHandler -> fileHandler.processMoveAllClassesInFile(allClasses, psiClass, myElementsToMove));
490493
}
491494
}
492-
}
493495
Map<PsiElement, PsiElement> oldToNewElementsMapping = new HashMap<>();
494496
for (int idx = 0; idx < myElementsToMove.length; idx++) {
495497
PsiElement element = myElementsToMove[idx];

plugin/src/main/java/com/intellij/java/impl/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,10 @@ public static UsageInfo[] findUsages(
8282
}
8383

8484
findNonCodeUsages(searchInStringsAndComments, searchInNonJavaFiles, element, newQName, results);
85-
preprocessUsages(results);
85+
element.getApplication().getExtensionPoint(MoveClassHandler.class).forEach(handler -> handler.preprocessUsages(results));
8686
return results.toArray(new UsageInfo[results.size()]);
8787
}
8888

89-
private static void preprocessUsages(ArrayList<UsageInfo> results) {
90-
for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensionList()) {
91-
handler.preprocessUsages(results);
92-
}
93-
}
94-
9589
public static void findNonCodeUsages(
9690
boolean searchInStringsAndComments,
9791
boolean searchInNonJavaFiles,
@@ -220,15 +214,13 @@ private static void moveDirectoryRecursively(PsiDirectory dir, PsiDirectory dest
220214
}
221215

222216
public static void prepareMoveClass(PsiClass aClass) {
223-
for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensionList()) {
224-
handler.prepareMove(aClass);
225-
}
217+
aClass.getApplication().getExtensionPoint(MoveClassHandler.class)
218+
.forEach(handler -> handler.prepareMove(aClass));
226219
}
227220

228221
public static void finishMoveClass(PsiClass aClass) {
229-
for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensionList()) {
230-
handler.finishMoveClass(aClass);
231-
}
222+
aClass.getApplication().getExtensionPoint(MoveClassHandler.class)
223+
.forEach(handler -> handler.finishMoveClass(aClass));
232224
}
233225

234226
// Does not process non-code usages!
@@ -243,11 +235,10 @@ public static PsiClass doMoveClass(PsiClass aClass, PsiDirectory moveDestination
243235
throws IncorrectOperationException {
244236
PsiClass newClass;
245237
if (!moveAllClassesInFile) {
246-
for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensionList()) {
247-
newClass = handler.doMoveClass(aClass, moveDestination);
248-
if (newClass != null) {
249-
return newClass;
250-
}
238+
newClass = aClass.getApplication().getExtensionPoint(MoveClassHandler.class)
239+
.computeSafeIfAny(handler -> handler.doMoveClass(aClass, moveDestination));
240+
if (newClass != null) {
241+
return newClass;
251242
}
252243
}
253244

plugin/src/main/java/com/intellij/java/impl/refactoring/rename/RenameAliasingPomTargetProcessor.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,29 +36,30 @@ public boolean canProcessElement(@Nonnull PsiElement element) {
3636

3737
@Override
3838
public void prepareRenaming(PsiElement element, String newName, Map<PsiElement, String> allRenames) {
39-
PomTarget target = null;
39+
PomTarget target;
4040
if (element instanceof PomTargetPsiElement targetPsiElement) {
4141
target = targetPsiElement.getTarget();
4242
}
4343
else if (element instanceof PomTarget pomTarget) {
4444
target = pomTarget;
4545
}
46+
else {
47+
return;
48+
}
4649

47-
if (target != null) {
48-
for (AliasingPsiTargetMapper mapper : AliasingPsiTargetMapper.EP_NAME.getExtensions()) {
49-
for (AliasingPsiTarget psiTarget : mapper.getTargets(target)) {
50-
PsiElement psiElement = PomService.convertToPsi(psiTarget);
51-
String name = psiTarget.getNameAlias(newName);
50+
element.getApplication().getExtensionPoint(AliasingPsiTargetMapper.class).forEach(mapper -> {
51+
for (AliasingPsiTarget psiTarget : mapper.getTargets(target)) {
52+
PsiElement psiElement = PomService.convertToPsi(psiTarget);
53+
String name = psiTarget.getNameAlias(newName);
5254

53-
String definedName = allRenames.put(psiElement, name);
54-
if (definedName != null) {
55-
assert definedName.equals(name);
56-
}
57-
else {
58-
prepareRenaming(psiElement, name, allRenames);
59-
}
55+
String definedName = allRenames.put(psiElement, name);
56+
if (definedName != null) {
57+
assert definedName.equals(name);
58+
}
59+
else {
60+
prepareRenaming(psiElement, name, allRenames);
6061
}
6162
}
62-
}
63+
});
6364
}
6465
}

0 commit comments

Comments
 (0)