Skip to content

Commit f3dda16

Browse files
committed
Refactoring of BaseRefactoringProcessor descendants (part 3).
1 parent 864f9d6 commit f3dda16

7 files changed

Lines changed: 268 additions & 242 deletions

File tree

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

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.intellij.java.impl.refactoring.util.RefactoringConflictsUtil;
44
import com.intellij.java.language.impl.codeInsight.ChangeContextUtil;
55
import com.intellij.java.language.psi.*;
6+
import consulo.annotation.access.RequiredReadAction;
67
import consulo.annotation.component.ExtensionImpl;
78
import consulo.language.editor.refactoring.event.RefactoringElementListener;
89
import consulo.language.psi.PsiDirectory;
@@ -22,6 +23,7 @@
2223
public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClassesHelper {
2324

2425
@Override
26+
@RequiredReadAction
2527
public void findUsages(
2628
Collection<PsiFile> filesToMove,
2729
PsiDirectory[] directoriesToMove,
@@ -30,24 +32,22 @@ public void findUsages(
3032
boolean searchInNonJavaFiles,
3133
Project project
3234
) {
33-
final Set<String> packageNames = new HashSet<String>();
35+
Set<String> packageNames = new HashSet<>();
3436
for (PsiFile psiFile : filesToMove) {
35-
if (psiFile instanceof PsiClassOwner) {
36-
final PsiClass[] classes = ((PsiClassOwner)psiFile).getClasses();
37-
for (PsiClass aClass : classes) {
38-
Collections
39-
.addAll(
40-
usages,
41-
MoveClassesOrPackagesUtil.findUsages(aClass, searchInComments, searchInNonJavaFiles, aClass.getName())
42-
);
37+
if (psiFile instanceof PsiClassOwner classOwner) {
38+
for (PsiClass aClass : classOwner.getClasses()) {
39+
Collections.addAll(
40+
usages,
41+
MoveClassesOrPackagesUtil.findUsages(aClass, searchInComments, searchInNonJavaFiles, aClass.getName())
42+
);
4343
}
4444
packageNames.add(((PsiClassOwner)psiFile).getPackageName());
4545
}
4646
}
4747

48-
final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
48+
JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
4949
for (String packageName : packageNames) {
50-
final PsiJavaPackage aPackage = psiFacade.findPackage(packageName);
50+
PsiJavaPackage aPackage = psiFacade.findPackage(packageName);
5151
if (aPackage != null) {
5252
boolean remainsNothing = true;
5353
for (PsiDirectory packageDirectory : aPackage.getDirectories()) {
@@ -58,8 +58,8 @@ public void findUsages(
5858
}
5959
if (remainsNothing) {
6060
for (PsiReference reference : ReferencesSearch.search(aPackage)) {
61-
final PsiElement element = reference.getElement();
62-
final PsiImportStatementBase statementBase = PsiTreeUtil.getParentOfType(element, PsiImportStatementBase.class);
61+
PsiElement element = reference.getElement();
62+
PsiImportStatementBase statementBase = PsiTreeUtil.getParentOfType(element, PsiImportStatementBase.class);
6363
if (statementBase != null && statementBase.isOnDemand()) {
6464
usages.add(new RemoveOnDemandImportStatementsUsageInfo(statementBase));
6565
}
@@ -103,10 +103,11 @@ public boolean move(
103103
}
104104

105105
@Override
106+
@RequiredReadAction
106107
public void postProcessUsages(UsageInfo[] usages, Function<PsiDirectory, PsiDirectory> newDirMapper) {
107108
for (UsageInfo usage : usages) {
108109
if (usage instanceof RemoveOnDemandImportStatementsUsageInfo) {
109-
final PsiElement element = usage.getElement();
110+
PsiElement element = usage.getElement();
110111
if (element != null) {
111112
element.delete();
112113
}
@@ -136,6 +137,7 @@ public void afterMove(PsiElement newElement) {
136137
}
137138

138139
private static class RemoveOnDemandImportStatementsUsageInfo extends UsageInfo {
140+
@RequiredReadAction
139141
public RemoveOnDemandImportStatementsUsageInfo(PsiImportStatementBase statementBase) {
140142
super(statementBase);
141143
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ private boolean isInaccessibleFromTarget(PsiElement element, String visibility)
333333
&& !Comparing.equal(elementPackage, myTargetPackage));
334334
}
335335

336+
@RequiredReadAction
336337
private void detectInaccessibleMemberUsages(ConflictsCollector collector) {
337338
PsiElement[] members = collectPackageLocalMembers(collector.getClassToMove());
338339
for (PsiElement member : members) {

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,10 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
17-
/*
18-
* User: anna
19-
* Date: 28-Dec-2009
20-
*/
2116
package com.intellij.java.impl.refactoring.move.moveClassesOrPackages;
2217

2318
import consulo.annotation.access.RequiredReadAction;
19+
import consulo.annotation.access.RequiredWriteAction;
2420
import consulo.ide.impl.idea.openapi.vfs.VfsUtilCore;
2521
import consulo.language.editor.refactoring.BaseRefactoringProcessor;
2622
import consulo.language.editor.refactoring.event.RefactoringElementListener;
@@ -52,6 +48,10 @@
5248

5349
import java.util.*;
5450

51+
/**
52+
* @author anna
53+
* @since 2009-12-28
54+
*/
5555
public class MoveDirectoryWithClassesProcessor extends BaseRefactoringProcessor {
5656
private final PsiDirectory[] myDirectories;
5757
private final PsiDirectory myTargetDirectory;
@@ -108,6 +108,7 @@ protected String getTargetName() {
108108

109109
@Nonnull
110110
@Override
111+
@RequiredReadAction
111112
public UsageInfo[] findUsages() {
112113
List<UsageInfo> usages = new ArrayList<>();
113114
for (MoveDirectoryWithClassesHelper helper : MoveDirectoryWithClassesHelper.findAll()) {
@@ -208,6 +209,7 @@ private TargetDirectoryWrapper getResultDirectory(PsiDirectory dir) {
208209
}
209210

210211
@Override
212+
@RequiredWriteAction
211213
protected void performPsiSpoilingRefactoring() {
212214
if (myNonCodeUsages == null) {
213215
return; //refactoring was aborted

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

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@
1919
import com.intellij.java.language.impl.codeInsight.ChangeContextUtil;
2020
import com.intellij.java.language.psi.*;
2121
import com.intellij.java.language.psi.javadoc.PsiDocComment;
22+
import consulo.annotation.access.RequiredReadAction;
23+
import consulo.annotation.access.RequiredWriteAction;
2224
import consulo.annotation.component.ExtensionImpl;
2325
import consulo.language.psi.PsiDirectory;
24-
import consulo.language.psi.PsiElement;
2526
import consulo.language.psi.PsiFile;
2627
import consulo.language.psi.util.PsiTreeUtil;
2728
import consulo.language.util.IncorrectOperationException;
2829
import consulo.logging.Logger;
2930
import consulo.usage.UsageInfo;
30-
3131
import jakarta.annotation.Nonnull;
3232

3333
import java.util.Collection;
@@ -55,27 +55,28 @@ public void prepareMove(@Nonnull PsiClass aClass) {
5555
}
5656
}
5757

58-
public PsiClass doMoveClass(@Nonnull final PsiClass aClass, @Nonnull PsiDirectory moveDestination) throws IncorrectOperationException {
58+
@Override
59+
@RequiredWriteAction
60+
public PsiClass doMoveClass(@Nonnull PsiClass aClass, @Nonnull PsiDirectory moveDestination) throws IncorrectOperationException {
5961
PsiFile file = aClass.getContainingFile();
60-
final PsiJavaPackage newPackage = JavaDirectoryService.getInstance().getPackage(moveDestination);
62+
PsiJavaPackage newPackage = JavaDirectoryService.getInstance().getPackage(moveDestination);
6163

6264
PsiClass newClass = null;
63-
if (file instanceof PsiJavaFile) {
64-
if (!moveDestination.equals(file.getContainingDirectory()) &&
65-
moveDestination.findFile(file.getName()) != null) {
65+
if (file instanceof PsiJavaFile javaFile) {
66+
if (!moveDestination.equals(javaFile.getContainingDirectory()) && moveDestination.findFile(file.getName()) != null) {
6667
// moving second of two classes which were in the same file to a different directory (IDEADEV-3089)
6768
correctSelfReferences(aClass, newPackage);
68-
final PsiFile newFile = moveDestination.findFile(file.getName());
69+
PsiFile newFile = moveDestination.findFile(file.getName());
6970
LOG.assertTrue(newFile != null);
7071
newClass = (PsiClass)newFile.add(aClass);
7172
correctOldClassReferences(newClass, aClass);
7273
aClass.delete();
7374
}
74-
else if (((PsiJavaFile)file).getClasses().length > 1) {
75+
else if (javaFile.getClasses().length > 1) {
7576
correctSelfReferences(aClass, newPackage);
76-
final PsiClass created = JavaDirectoryService.getInstance().createClass(moveDestination, aClass.getName());
77+
PsiClass created = JavaDirectoryService.getInstance().createClass(moveDestination, aClass.getName());
7778
if (aClass.getDocComment() == null) {
78-
final PsiDocComment createdDocComment = created.getDocComment();
79+
PsiDocComment createdDocComment = created.getDocComment();
7980
if (createdDocComment != null) {
8081
aClass.addAfter(createdDocComment, null);
8182
}
@@ -89,12 +90,13 @@ else if (((PsiJavaFile)file).getClasses().length > 1) {
8990
}
9091

9192
private static void correctOldClassReferences(final PsiClass newClass, final PsiClass oldClass) {
92-
final Set<PsiImportStatementBase> importsToDelete = new HashSet<PsiImportStatementBase>();
93+
final Set<PsiImportStatementBase> importsToDelete = new HashSet<>();
9394
newClass.getContainingFile().accept(new JavaRecursiveElementVisitor() {
9495
@Override
95-
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
96+
@RequiredWriteAction
97+
public void visitReferenceElement(@Nonnull PsiJavaCodeReferenceElement reference) {
9698
if (reference.isValid() && reference.isReferenceTo(oldClass)) {
97-
final PsiImportStatementBase importStatement = PsiTreeUtil.getParentOfType(reference, PsiImportStatementBase.class);
99+
PsiImportStatementBase importStatement = PsiTreeUtil.getParentOfType(reference, PsiImportStatementBase.class);
98100
if (importStatement != null) {
99101
importsToDelete.add(importStatement);
100102
return;
@@ -119,13 +121,13 @@ private static void correctSelfReferences(final PsiClass aClass, final PsiJavaPa
119121
if (aPackage != null) {
120122
aClass.accept(new JavaRecursiveElementWalkingVisitor() {
121123
@Override
122-
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
124+
@RequiredWriteAction
125+
public void visitReferenceElement(@Nonnull PsiJavaCodeReferenceElement reference) {
123126
if (reference.isQualified() && reference.isReferenceTo(aClass)) {
124-
final PsiElement qualifier = reference.getQualifier();
125-
if (qualifier instanceof PsiJavaCodeReferenceElement && ((PsiJavaCodeReferenceElement)qualifier).isReferenceTo(
126-
aPackage)) {
127+
if (reference.getQualifier() instanceof PsiJavaCodeReferenceElement codeRefElem
128+
&& codeRefElem.isReferenceTo(aPackage)) {
127129
try {
128-
((PsiJavaCodeReferenceElement)qualifier).bindToElement(newContainingPackage);
130+
codeRefElem.bindToElement(newContainingPackage);
129131
}
130132
catch (IncorrectOperationException e) {
131133
LOG.error(e);
@@ -138,12 +140,15 @@ public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
138140
}
139141
}
140142

143+
@Override
144+
@RequiredReadAction
141145
public String getName(PsiClass clazz) {
142-
final PsiFile file = clazz.getContainingFile();
143-
if (!(file instanceof PsiJavaFile)) {
146+
if (!(clazz.getContainingFile() instanceof PsiJavaFile javaFile)) {
144147
return null;
145148
}
146-
return ((PsiJavaFile)file).getClasses().length > 1 ? clazz.getName() + "." + JavaFileType.INSTANCE.getDefaultExtension() : file.getName();
149+
return javaFile.getClasses().length > 1
150+
? clazz.getName() + "." + JavaFileType.INSTANCE.getDefaultExtension()
151+
: javaFile.getName();
147152
}
148153

149154
@Override

0 commit comments

Comments
 (0)