Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand All @@ -50,6 +53,11 @@ public class JavaExpressionSurroundDescriptor implements SurroundDescriptor {
new JavaWithNullCheckSurrounder()
};

@Inject
public JavaExpressionSurroundDescriptor(Application application) {
myApplication = application;
}

@Nonnull
@Override
@RequiredReadAction
Expand All @@ -69,9 +77,9 @@ public PsiElement[] getElementsToSurround(PsiFile file, int startOffset, int end
@Nonnull
public Surrounder[] getSurrounders() {
if (mySurrounders == null) {
ArrayList<Surrounder> list = new ArrayList<>();
List<Surrounder> 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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -144,27 +145,20 @@ protected void performRefactoring(@Nonnull UsageInfo[] usages) {
return;
}

MoveClassToInnerHandler[] handlers = MoveClassToInnerHandler.EP_NAME.getExtensions();
ExtensionPoint<MoveClassToInnerHandler> extensionPoint =
myProject.getApplication().getExtensionPoint(MoveClassToInnerHandler.class);

List<UsageInfo> usageList = new ArrayList<>(Arrays.asList(usages));
List<PsiElement> 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()]);

saveNonCodeUsages(usages);
Map<PsiElement, PsiElement> 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
Expand All @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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
);
Expand All @@ -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
);
Expand All @@ -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();
}
Expand Down Expand Up @@ -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());
Expand All @@ -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;
Expand Down Expand Up @@ -419,24 +407,25 @@ public static void doRearrangePackage(Project project, PsiDirectory[] directorie
}
}
}
SimpleReference<IncorrectOperationException> 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);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -169,6 +170,7 @@ public void setSearchInNonJavaFiles(boolean searchInNonJavaFiles) {
}

@Nonnull
@Override
@RequiredReadAction
protected UsageInfo[] findUsages() {
List<UsageInfo> allUsages = new ArrayList<>();
Expand Down Expand Up @@ -216,6 +218,7 @@ public PackageWrapper getTargetPackage() {
protected static class ConflictsUsageInfo extends UsageInfo {
private final Collection<String> myConflicts;

@RequiredReadAction
public ConflictsUsageInfo(PsiElement pseudoElement, Collection<String> conflicts) {
super(pseudoElement);
myConflicts = conflicts;
Expand Down Expand Up @@ -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<PsiElement, PsiElement> oldToNewElementsMapping = new HashMap<>();
for (int idx = 0; idx < myElementsToMove.length; idx++) {
PsiElement element = myElementsToMove[idx];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<UsageInfo> results) {
for (MoveClassHandler handler : MoveClassHandler.EP_NAME.getExtensionList()) {
handler.preprocessUsages(results);
}
}

public static void findNonCodeUsages(
boolean searchInStringsAndComments,
boolean searchInNonJavaFiles,
Expand Down Expand Up @@ -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!
Expand All @@ -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;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,29 +36,30 @@ public boolean canProcessElement(@Nonnull PsiElement element) {

@Override
public void prepareRenaming(PsiElement element, String newName, Map<PsiElement, String> 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);
}
}
}
});
}
}
Loading
Loading