From a9025d0d2251be359df5b22cd06375f177214cfe Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 26 Aug 2014 14:59:29 +0400 Subject: [PATCH] unnecessary qualified names removed quick fix: ensure that during batch apply conflicting imports won't be inserted (IDEA-128765) --- .../com/siyeh/ig/psiutils/ImportUtils.java | 5 ++- ...lyQualifiedInnerClassAccessInspection.java | 33 ++++++++++--------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java index 9b4a3a832913..7bfaae8cc722 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java @@ -67,6 +67,9 @@ public class ImportUtils { !hasDefaultImportConflict(qualifiedName, javaFile) && !hasOnDemandImportConflict(qualifiedName, javaFile)) { return; } + if (hasExactImportConflict(qualifiedName, javaFile)) { + return; + } final Project project = importList.getProject(); final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); final PsiElementFactory elementFactory = psiFacade.getElementFactory(); @@ -156,7 +159,7 @@ public class ImportUtils { return false; } - private static boolean hasExactImportConflict(String fqName, PsiJavaFile file) { + public static boolean hasExactImportConflict(String fqName, PsiJavaFile file) { final PsiImportList imports = file.getImportList(); if (imports == null) { return false; diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessarilyQualifiedInnerClassAccessInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessarilyQualifiedInnerClassAccessInspection.java index 78e32e5eee60..e449ad98fc8f 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessarilyQualifiedInnerClassAccessInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessarilyQualifiedInnerClassAccessInspection.java @@ -99,7 +99,10 @@ public class UnnecessarilyQualifiedInnerClassAccessInspection extends BaseInspec } final PsiClass aClass = (PsiClass)target; ImportUtils.addImportIfNeeded(aClass, element); - element.delete(); + final String shortName = aClass.getName(); + if (isReferenceToTarget(shortName, aClass, parent)) { + element.delete(); + } } } @@ -108,6 +111,20 @@ public class UnnecessarilyQualifiedInnerClassAccessInspection extends BaseInspec return new UnnecessarilyQualifiedInnerClassAccessVisitor(); } + private static boolean isReferenceToTarget(String referenceText, @NotNull PsiClass target, PsiElement context) { + final PsiJavaCodeReferenceElement reference = + JavaPsiFacade.getElementFactory(target.getProject()).createReferenceFromText(referenceText, context); + final JavaResolveResult[] results = reference.multiResolve(false); + if (results.length == 0) { + return true; + } + if (results.length > 1) { + return false; + } + final JavaResolveResult result = results[0]; + return result.isAccessible() && target.equals(result.getElement()); + } + private class UnnecessarilyQualifiedInnerClassAccessVisitor extends BaseInspectionVisitor { @@ -175,20 +192,6 @@ public class UnnecessarilyQualifiedInnerClassAccessInspection extends BaseInspec visitReferenceElement(expression); } - private boolean isReferenceToTarget(String referenceText, @NotNull PsiClass target, PsiElement context) { - final PsiJavaCodeReferenceElement reference = - JavaPsiFacade.getElementFactory(target.getProject()).createReferenceFromText(referenceText, context); - final JavaResolveResult[] results = reference.multiResolve(false); - if (results.length == 0) { - return true; - } - if (results.length > 1) { - return false; - } - final JavaResolveResult result = results[0]; - return result.isAccessible() && target.equals(result.getElement()); - } - private boolean isInImportOrPackage(PsiElement element) { while (element instanceof PsiJavaCodeReferenceElement) { element = element.getParent();