unnecessary qualified names removed quick fix: ensure that during batch apply conflicting imports won't be inserted (IDEA-128765)

This commit is contained in:
Anna Kozlova
2014-08-26 15:18:21 +04:00
parent 9ac824f7f6
commit a9025d0d22
2 changed files with 22 additions and 16 deletions
@@ -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;
@@ -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();