mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
AddOnDemandStaticImportAction: handle comments
This commit is contained in:
+26
-20
@@ -28,11 +28,13 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import gnu.trove.TIntArrayList;
|
||||
import com.siyeh.ig.psiutils.CommentTracker;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author ven
|
||||
@@ -145,7 +147,8 @@ public class AddOnDemandStaticImportAction extends BaseElementAtCaretIntentionAc
|
||||
PsiElement copy = root.copy();
|
||||
final PsiManager manager = root.getManager();
|
||||
|
||||
final TIntArrayList expressionToDequalifyOffsets = new TIntArrayList();
|
||||
List<PsiJavaCodeReferenceElement> expressionsToDequalify = new ArrayList<>();
|
||||
|
||||
copy.accept(new JavaRecursiveElementWalkingVisitor() {
|
||||
int delta;
|
||||
@Override
|
||||
@@ -163,7 +166,16 @@ public class AddOnDemandStaticImportAction extends BaseElementAtCaretIntentionAc
|
||||
delta += end - expression.getTextRange().getEndOffset();
|
||||
PsiElement after = expression.resolve();
|
||||
if (manager.areElementsEquivalent(after, resolved)) {
|
||||
expressionToDequalifyOffsets.add(expression.getTextRange().getStartOffset() + delta);
|
||||
int offset = expression.getTextRange().getStartOffset() + delta;
|
||||
PsiJavaCodeReferenceElement originalExpression =
|
||||
PsiTreeUtil.findElementOfClassAtOffset(root, offset, PsiJavaCodeReferenceElement.class, false);
|
||||
if (originalExpression != null) {
|
||||
PsiElement originalQualifier = originalExpression.getQualifier();
|
||||
if (originalQualifier instanceof PsiJavaCodeReferenceElement &&
|
||||
((PsiJavaCodeReferenceElement)originalQualifier).isReferenceTo(aClass)) {
|
||||
expressionsToDequalify.add(originalExpression);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
conflict.set(true);
|
||||
@@ -177,24 +189,18 @@ public class AddOnDemandStaticImportAction extends BaseElementAtCaretIntentionAc
|
||||
}
|
||||
});
|
||||
|
||||
expressionToDequalifyOffsets.forEachDescending(offset -> {
|
||||
PsiJavaCodeReferenceElement expression = PsiTreeUtil.findElementOfClassAtOffset(root, offset, PsiJavaCodeReferenceElement.class, false);
|
||||
if (expression == null) {
|
||||
return false;
|
||||
for (PsiJavaCodeReferenceElement expression : expressionsToDequalify) {
|
||||
new CommentTracker().deleteAndRestoreComments(Objects.requireNonNull(expression.getQualifier()));
|
||||
}
|
||||
if (editor != null) {
|
||||
for (PsiJavaCodeReferenceElement expression : expressionsToDequalify) {
|
||||
HighlightManager.getInstance(project)
|
||||
.addRangeHighlight(editor, expression.getTextRange().getStartOffset(), expression.getTextRange().getEndOffset(),
|
||||
EditorColorsManager.getInstance().getGlobalScheme()
|
||||
.getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES),
|
||||
false, null);
|
||||
}
|
||||
PsiElement qualifierExpression = expression.getQualifier();
|
||||
if (qualifierExpression instanceof PsiJavaCodeReferenceElement && ((PsiJavaCodeReferenceElement)qualifierExpression).isReferenceTo(aClass)) {
|
||||
qualifierExpression.delete();
|
||||
if (editor != null) {
|
||||
HighlightManager.getInstance(project)
|
||||
.addRangeHighlight(editor, expression.getTextRange().getStartOffset(), expression.getTextRange().getEndOffset(),
|
||||
EditorColorsManager.getInstance().getGlobalScheme().getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES),
|
||||
false, null);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
return conflict.get();
|
||||
}
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// "Add on demand static import for 'java.util.Arrays'" "true"
|
||||
import java.util.*;
|
||||
|
||||
import static java.util.Arrays.*;
|
||||
|
||||
class Foo {
|
||||
void test(String[] foos, String[] bars) {
|
||||
System.out.println(/*foos1*//*foos2*/asList(foos)+":"+ /*bars1*//*bars2*/asList(bars));
|
||||
}
|
||||
|
||||
void test2(String[] foos, String[] bars) {
|
||||
System.out.println(/*foos1*//*foos2*/asList(foos)+":"+ /*bars1*//*bars2*/asList(bars));
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// "Add on demand static import for 'java.util.Arrays'" "true"
|
||||
import java.util.*;
|
||||
|
||||
class Foo {
|
||||
void test(String[] foos, String[] bars) {
|
||||
System.out.println(<caret>Arrays/*foos1*/./*foos2*/asList(foos)+":"+Arrays/*bars1*/./*bars2*/asList(bars));
|
||||
}
|
||||
|
||||
void test2(String[] foos, String[] bars) {
|
||||
System.out.println(Arrays/*foos1*/./*foos2*/asList(foos)+":"+Arrays/*bars1*/./*bars2*/asList(bars));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user