From 492f88c1be7ad7e26c60857f96c033be7df0f779 Mon Sep 17 00:00:00 2001 From: "Maxim.Medvedev" Date: Mon, 25 Jun 2012 17:16:03 +0400 Subject: [PATCH] IDEA-87697 remove static import if cannot use non qualified ref --- .../style/ImportStaticIntention.java | 29 ++++++++++++------- .../groovy/lang/GrReferenceAdjuster.java | 26 +++++++++-------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/ImportStaticIntention.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/ImportStaticIntention.java index a0bec7ad26be..733fcd1c1758 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/ImportStaticIntention.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/ImportStaticIntention.java @@ -42,21 +42,27 @@ public class ImportStaticIntention extends Intention { private static final Key TEMP_REFERENT_USER_DATA = new Key("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 diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/GrReferenceAdjuster.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/GrReferenceAdjuster.java index 5eb95b6b418a..c47b09bc1261 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/GrReferenceAdjuster.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/GrReferenceAdjuster.java @@ -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 void shortenReference(GrQualifiedReference ref) { - shortenReferenceInner(ref, true, false); + public static boolean shortenReference(GrQualifiedReference 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 boolean shortenReferenceInner(GrQualifiedReference ref, boolean addImports, boolean incomplete) {