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 @@ -3,6 +3,7 @@
import com.intellij.java.impl.refactoring.util.RefactoringConflictsUtil;
import com.intellij.java.language.impl.codeInsight.ChangeContextUtil;
import com.intellij.java.language.psi.*;
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.component.ExtensionImpl;
import consulo.language.editor.refactoring.event.RefactoringElementListener;
import consulo.language.psi.PsiDirectory;
Expand All @@ -22,6 +23,7 @@
public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClassesHelper {

@Override
@RequiredReadAction
public void findUsages(
Collection<PsiFile> filesToMove,
PsiDirectory[] directoriesToMove,
Expand All @@ -30,24 +32,22 @@ public void findUsages(
boolean searchInNonJavaFiles,
Project project
) {
final Set<String> packageNames = new HashSet<String>();
Set<String> packageNames = new HashSet<>();
for (PsiFile psiFile : filesToMove) {
if (psiFile instanceof PsiClassOwner) {
final PsiClass[] classes = ((PsiClassOwner)psiFile).getClasses();
for (PsiClass aClass : classes) {
Collections
.addAll(
usages,
MoveClassesOrPackagesUtil.findUsages(aClass, searchInComments, searchInNonJavaFiles, aClass.getName())
);
if (psiFile instanceof PsiClassOwner classOwner) {
for (PsiClass aClass : classOwner.getClasses()) {
Collections.addAll(
usages,
MoveClassesOrPackagesUtil.findUsages(aClass, searchInComments, searchInNonJavaFiles, aClass.getName())
);
}
packageNames.add(((PsiClassOwner)psiFile).getPackageName());
}
}

final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
for (String packageName : packageNames) {
final PsiJavaPackage aPackage = psiFacade.findPackage(packageName);
PsiJavaPackage aPackage = psiFacade.findPackage(packageName);
if (aPackage != null) {
boolean remainsNothing = true;
for (PsiDirectory packageDirectory : aPackage.getDirectories()) {
Expand All @@ -58,8 +58,8 @@ public void findUsages(
}
if (remainsNothing) {
for (PsiReference reference : ReferencesSearch.search(aPackage)) {
final PsiElement element = reference.getElement();
final PsiImportStatementBase statementBase = PsiTreeUtil.getParentOfType(element, PsiImportStatementBase.class);
PsiElement element = reference.getElement();
PsiImportStatementBase statementBase = PsiTreeUtil.getParentOfType(element, PsiImportStatementBase.class);
if (statementBase != null && statementBase.isOnDemand()) {
usages.add(new RemoveOnDemandImportStatementsUsageInfo(statementBase));
}
Expand Down Expand Up @@ -103,10 +103,11 @@ public boolean move(
}

@Override
@RequiredReadAction
public void postProcessUsages(UsageInfo[] usages, Function<PsiDirectory, PsiDirectory> newDirMapper) {
for (UsageInfo usage : usages) {
if (usage instanceof RemoveOnDemandImportStatementsUsageInfo) {
final PsiElement element = usage.getElement();
PsiElement element = usage.getElement();
if (element != null) {
element.delete();
}
Expand Down Expand Up @@ -136,6 +137,7 @@ public void afterMove(PsiElement newElement) {
}

private static class RemoveOnDemandImportStatementsUsageInfo extends UsageInfo {
@RequiredReadAction
public RemoveOnDemandImportStatementsUsageInfo(PsiImportStatementBase statementBase) {
super(statementBase);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@ private boolean isInaccessibleFromTarget(PsiElement element, String visibility)
&& !Comparing.equal(elementPackage, myTargetPackage));
}

@RequiredReadAction
private void detectInaccessibleMemberUsages(ConflictsCollector collector) {
PsiElement[] members = collectPackageLocalMembers(collector.getClassToMove());
for (PsiElement member : members) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/*
* User: anna
* Date: 28-Dec-2009
*/
package com.intellij.java.impl.refactoring.move.moveClassesOrPackages;

import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.access.RequiredWriteAction;
import consulo.ide.impl.idea.openapi.vfs.VfsUtilCore;
import consulo.language.editor.refactoring.BaseRefactoringProcessor;
import consulo.language.editor.refactoring.event.RefactoringElementListener;
Expand Down Expand Up @@ -52,6 +48,10 @@

import java.util.*;

/**
* @author anna
* @since 2009-12-28
*/
public class MoveDirectoryWithClassesProcessor extends BaseRefactoringProcessor {
private final PsiDirectory[] myDirectories;
private final PsiDirectory myTargetDirectory;
Expand Down Expand Up @@ -108,6 +108,7 @@ protected String getTargetName() {

@Nonnull
@Override
@RequiredReadAction
public UsageInfo[] findUsages() {
List<UsageInfo> usages = new ArrayList<>();
for (MoveDirectoryWithClassesHelper helper : MoveDirectoryWithClassesHelper.findAll()) {
Expand Down Expand Up @@ -208,6 +209,7 @@ private TargetDirectoryWrapper getResultDirectory(PsiDirectory dir) {
}

@Override
@RequiredWriteAction
protected void performPsiSpoilingRefactoring() {
if (myNonCodeUsages == null) {
return; //refactoring was aborted
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@
import com.intellij.java.language.impl.codeInsight.ChangeContextUtil;
import com.intellij.java.language.psi.*;
import com.intellij.java.language.psi.javadoc.PsiDocComment;
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.access.RequiredWriteAction;
import consulo.annotation.component.ExtensionImpl;
import consulo.language.psi.PsiDirectory;
import consulo.language.psi.PsiElement;
import consulo.language.psi.PsiFile;
import consulo.language.psi.util.PsiTreeUtil;
import consulo.language.util.IncorrectOperationException;
import consulo.logging.Logger;
import consulo.usage.UsageInfo;

import jakarta.annotation.Nonnull;

import java.util.Collection;
Expand Down Expand Up @@ -55,27 +55,28 @@ public void prepareMove(@Nonnull PsiClass aClass) {
}
}

public PsiClass doMoveClass(@Nonnull final PsiClass aClass, @Nonnull PsiDirectory moveDestination) throws IncorrectOperationException {
@Override
@RequiredWriteAction
public PsiClass doMoveClass(@Nonnull PsiClass aClass, @Nonnull PsiDirectory moveDestination) throws IncorrectOperationException {
PsiFile file = aClass.getContainingFile();
final PsiJavaPackage newPackage = JavaDirectoryService.getInstance().getPackage(moveDestination);
PsiJavaPackage newPackage = JavaDirectoryService.getInstance().getPackage(moveDestination);

PsiClass newClass = null;
if (file instanceof PsiJavaFile) {
if (!moveDestination.equals(file.getContainingDirectory()) &&
moveDestination.findFile(file.getName()) != null) {
if (file instanceof PsiJavaFile javaFile) {
if (!moveDestination.equals(javaFile.getContainingDirectory()) && moveDestination.findFile(file.getName()) != null) {
// moving second of two classes which were in the same file to a different directory (IDEADEV-3089)
correctSelfReferences(aClass, newPackage);
final PsiFile newFile = moveDestination.findFile(file.getName());
PsiFile newFile = moveDestination.findFile(file.getName());
LOG.assertTrue(newFile != null);
newClass = (PsiClass)newFile.add(aClass);
correctOldClassReferences(newClass, aClass);
aClass.delete();
}
else if (((PsiJavaFile)file).getClasses().length > 1) {
else if (javaFile.getClasses().length > 1) {
correctSelfReferences(aClass, newPackage);
final PsiClass created = JavaDirectoryService.getInstance().createClass(moveDestination, aClass.getName());
PsiClass created = JavaDirectoryService.getInstance().createClass(moveDestination, aClass.getName());
if (aClass.getDocComment() == null) {
final PsiDocComment createdDocComment = created.getDocComment();
PsiDocComment createdDocComment = created.getDocComment();
if (createdDocComment != null) {
aClass.addAfter(createdDocComment, null);
}
Expand All @@ -89,12 +90,13 @@ else if (((PsiJavaFile)file).getClasses().length > 1) {
}

private static void correctOldClassReferences(final PsiClass newClass, final PsiClass oldClass) {
final Set<PsiImportStatementBase> importsToDelete = new HashSet<PsiImportStatementBase>();
final Set<PsiImportStatementBase> importsToDelete = new HashSet<>();
newClass.getContainingFile().accept(new JavaRecursiveElementVisitor() {
@Override
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
@RequiredWriteAction
public void visitReferenceElement(@Nonnull PsiJavaCodeReferenceElement reference) {
if (reference.isValid() && reference.isReferenceTo(oldClass)) {
final PsiImportStatementBase importStatement = PsiTreeUtil.getParentOfType(reference, PsiImportStatementBase.class);
PsiImportStatementBase importStatement = PsiTreeUtil.getParentOfType(reference, PsiImportStatementBase.class);
if (importStatement != null) {
importsToDelete.add(importStatement);
return;
Expand All @@ -119,13 +121,13 @@ private static void correctSelfReferences(final PsiClass aClass, final PsiJavaPa
if (aPackage != null) {
aClass.accept(new JavaRecursiveElementWalkingVisitor() {
@Override
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
@RequiredWriteAction
public void visitReferenceElement(@Nonnull PsiJavaCodeReferenceElement reference) {
if (reference.isQualified() && reference.isReferenceTo(aClass)) {
final PsiElement qualifier = reference.getQualifier();
if (qualifier instanceof PsiJavaCodeReferenceElement && ((PsiJavaCodeReferenceElement)qualifier).isReferenceTo(
aPackage)) {
if (reference.getQualifier() instanceof PsiJavaCodeReferenceElement codeRefElem
&& codeRefElem.isReferenceTo(aPackage)) {
try {
((PsiJavaCodeReferenceElement)qualifier).bindToElement(newContainingPackage);
codeRefElem.bindToElement(newContainingPackage);
}
catch (IncorrectOperationException e) {
LOG.error(e);
Expand All @@ -138,12 +140,15 @@ public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
}
}

@Override
@RequiredReadAction
public String getName(PsiClass clazz) {
final PsiFile file = clazz.getContainingFile();
if (!(file instanceof PsiJavaFile)) {
if (!(clazz.getContainingFile() instanceof PsiJavaFile javaFile)) {
return null;
}
return ((PsiJavaFile)file).getClasses().length > 1 ? clazz.getName() + "." + JavaFileType.INSTANCE.getDefaultExtension() : file.getName();
return javaFile.getClasses().length > 1
? clazz.getName() + "." + JavaFileType.INSTANCE.getDefaultExtension()
: javaFile.getName();
}

@Override
Expand Down
Loading
Loading