mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-87697 remove static import if cannot use non qualified ref
This commit is contained in:
+19
-10
@@ -42,21 +42,27 @@ public class ImportStaticIntention extends Intention {
|
||||
private static final Key<PsiElement> TEMP_REFERENT_USER_DATA = new Key<PsiElement>("TEMP_REFERENT_USER_DATA");
|
||||
|
||||
@Override
|
||||
protected void processIntention(@NotNull PsiElement element, Project project, Editor editor) throws IncorrectOperationException {
|
||||
protected void processIntention(@NotNull PsiElement element, final Project project, final Editor editor)
|
||||
throws IncorrectOperationException {
|
||||
final PsiElement resolved;
|
||||
final String name;
|
||||
final GroovyFile file;
|
||||
final GrImportStatement importStatement;
|
||||
boolean isAnythingShortened;
|
||||
if (!(element instanceof GrReferenceExpression)) return;
|
||||
final GrReferenceExpression ref = (GrReferenceExpression)element;
|
||||
final PsiElement resolved = ref.resolve();
|
||||
resolved = ref.resolve();
|
||||
if (!(resolved instanceof PsiMember)) return;
|
||||
|
||||
final PsiClass containingClass = ((PsiMember)resolved).getContainingClass();
|
||||
if (containingClass == null) return;
|
||||
final String qname = containingClass.getQualifiedName();
|
||||
final String name = ((PsiMember)resolved).getName();
|
||||
name = ((PsiMember)resolved).getName();
|
||||
if (name == null) return;
|
||||
|
||||
final PsiFile containingFile = element.getContainingFile();
|
||||
if (!(containingFile instanceof GroovyFile)) return;
|
||||
final GroovyFile file = (GroovyFile)containingFile;
|
||||
file = (GroovyFile)containingFile;
|
||||
file.accept(new GroovyRecursiveElementVisitor() {
|
||||
@Override
|
||||
public void visitReferenceExpression(GrReferenceExpression expression) {
|
||||
@@ -70,19 +76,22 @@ public class ImportStaticIntention extends Intention {
|
||||
}
|
||||
});
|
||||
|
||||
final GrImportStatement importStatement =
|
||||
GroovyPsiElementFactory.getInstance(project).createImportStatementFromText(qname + "." + name, true, false, null);
|
||||
|
||||
|
||||
file.addImport(importStatement);
|
||||
final GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(project);
|
||||
final GrImportStatement tempImport = factory.createImportStatementFromText(qname + "." + name, true, false, null);
|
||||
importStatement = file.addImport(tempImport);
|
||||
|
||||
isAnythingShortened = false;
|
||||
for (PsiReference reference : ReferencesSearch.search(resolved, new LocalSearchScope(containingFile))) {
|
||||
final PsiElement refElement = reference.getElement();
|
||||
if (refElement instanceof GrQualifiedReference<?>) {
|
||||
GrReferenceAdjuster.shortenReference((GrQualifiedReference<?>)refElement);
|
||||
isAnythingShortened |= GrReferenceAdjuster.shortenReference((GrQualifiedReference<?>)refElement);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isAnythingShortened) {
|
||||
importStatement.delete();
|
||||
return;
|
||||
}
|
||||
|
||||
file.accept(new GroovyRecursiveElementVisitor() {
|
||||
@Override
|
||||
|
||||
@@ -41,38 +41,40 @@ public class GrReferenceAdjuster {
|
||||
}
|
||||
|
||||
|
||||
public static void shortenReferences(PsiElement element) {
|
||||
public static boolean shortenReferences(PsiElement element) {
|
||||
final TextRange range = element.getTextRange();
|
||||
shortenReferences(element, range.getStartOffset(), range.getEndOffset(), true, false);
|
||||
return shortenReferences(element, range.getStartOffset(), range.getEndOffset(), true, false);
|
||||
}
|
||||
|
||||
public static void shortenReferences(PsiElement element, int start, int end, boolean addImports, boolean incomplete) {
|
||||
process(element, start, end, addImports, incomplete);
|
||||
public static boolean shortenReferences(PsiElement element, int start, int end, boolean addImports, boolean incomplete) {
|
||||
return process(element, start, end, addImports, incomplete);
|
||||
}
|
||||
|
||||
public static <T extends PsiElement> void shortenReference(GrQualifiedReference<T> ref) {
|
||||
shortenReferenceInner(ref, true, false);
|
||||
public static <T extends PsiElement> boolean shortenReference(GrQualifiedReference<T> ref) {
|
||||
boolean result = shortenReferenceInner(ref, true, false);
|
||||
final TextRange range = ref.getTextRange();
|
||||
process(ref, range.getStartOffset(), range.getEndOffset(), true, false);
|
||||
result |= process(ref, range.getStartOffset(), range.getEndOffset(), true, false);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void process(PsiElement element, int start, int end, boolean addImports, boolean incomplete) {
|
||||
private static boolean process(PsiElement element, int start, int end, boolean addImports, boolean incomplete) {
|
||||
boolean result = false;
|
||||
if (element instanceof GrQualifiedReference<?> && ((GrQualifiedReference)element).resolve() instanceof PsiClass) {
|
||||
shortenReferenceInner((GrQualifiedReference<?>)element, addImports, incomplete);
|
||||
result = shortenReferenceInner((GrQualifiedReference<?>)element, addImports, incomplete);
|
||||
}
|
||||
|
||||
else if (element instanceof GrReferenceExpression && ((GrReferenceExpression)element).getQualifier() instanceof GrThisSuperReferenceExpression) {
|
||||
shortenReferenceInner((GrReferenceExpression)element, addImports, incomplete);
|
||||
result = shortenReferenceInner((GrReferenceExpression)element, addImports, incomplete);
|
||||
}
|
||||
|
||||
PsiElement child = element.getFirstChild();
|
||||
while (child != null) {
|
||||
final TextRange range = child.getTextRange();
|
||||
if (start < range.getEndOffset() && range.getStartOffset() < end) {
|
||||
process(child, start, end, addImports, incomplete);
|
||||
result |= process(child, start, end, addImports, incomplete);
|
||||
}
|
||||
child = child.getNextSibling();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static <Qualifier extends PsiElement> boolean shortenReferenceInner(GrQualifiedReference<Qualifier> ref, boolean addImports, boolean incomplete) {
|
||||
|
||||
Reference in New Issue
Block a user