optimize imports: don't force single imports if imported method available through inheritor as well (IDEA-152798)

This commit is contained in:
Anna.Kozlova
2018-07-27 18:48:57 +02:00
parent b57645dc99
commit 39069ee188
2 changed files with 49 additions and 1 deletions
@@ -276,7 +276,11 @@ public class ImportHelper{
else {
PsiMethod[] methods = aClass.findMethodsByName(shortName, true);
for (PsiMethod method : methods) {
if (method.hasModifierProperty(PsiModifier.STATIC) && resolveHelper.isAccessible(method, file, null)) {
PsiClass containingClass = method.getContainingClass();
if (containingClass == null) continue;
if (method.hasModifierProperty(PsiModifier.STATIC) &&
resolveHelper.isAccessible(method, file, null) &&
!prefix.equals(containingClass.getQualifiedName())) {
namesToUseSingle.add(name);
}
}
@@ -97,4 +97,48 @@ public class LightOptimizeImportsTest extends LightCodeInsightFixtureTestCase {
" }\n" +
"}");
}
public void testStaticImportOnMethodFromSuperClass() {
myFixture.addClass("package p; public class A {\n" +
" public static void m1() {}\n" +
" public static void m2() {}\n" +
"}");
myFixture.addClass("package p; public class B extends A {\n" +
" public static void m3() {}\n" +
" public static void m4() {}\n" +
"}");
myFixture.configureByText(StdFileTypes.JAVA, "\n" +
"import static p.A.m1;\n" +
"import static p.A.m2;\n" +
"import static p.B.m3;\n" +
"import static p.B.m4;\n" +
"\n" +
"public class Main {\n" +
" public static void main(String[] args) {\n" +
" m1();\n" +
" m2();\n" +
" m3();\n" +
" m4();\n" +
" }\n" +
"}");
JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject());
javaSettings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = 1;
WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile()));
myFixture.checkResult("import static p.A.*;\n" +
"import static p.B.*;\n" +
"\n" +
"public class Main {\n" +
" public static void main(String[] args) {\n" +
" m1();\n" +
" m2();\n" +
" m3();\n" +
" m4();\n" +
" }\n" +
"}");
}
}