add static import: take into account packages which should be always imported on demand (IDEA-127947)

This commit is contained in:
Anna.Kozlova
2018-07-30 12:34:57 +02:00
parent 793f759366
commit f73b89ad6a
7 changed files with 33 additions and 1 deletions
@@ -32,6 +32,11 @@ public class JavaCodeStyleSettingsFacadeImpl extends JavaCodeStyleSettingsFacade
return myManager.getCurrentSettings().getCustomSettings(JavaCodeStyleSettings.class).NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND;
}
@Override
public boolean isToImportInDemand(String qualifiedName) {
return myManager.getCurrentSettings().getCustomSettings(JavaCodeStyleSettings.class).PACKAGES_TO_USE_IMPORT_ON_DEMAND.contains(qualifiedName);
}
@Override
public boolean useFQClassNames() {
return myManager.getCurrentSettings().getCustomSettings(JavaCodeStyleSettings.class).USE_FQ_CLASS_NAMES;
@@ -24,6 +24,8 @@ import com.intellij.openapi.project.Project;
public abstract class JavaCodeStyleSettingsFacade {
public abstract int getNamesCountToUseImportOnDemand();
public abstract boolean isToImportInDemand(String qualifiedName);
public abstract boolean useFQClassNames();
public abstract boolean isJavaDocLeadingAsterisksEnabled();
@@ -26,6 +26,11 @@ public class CoreJavaCodeStyleSettingsFacade extends JavaCodeStyleSettingsFacade
return 0;
}
@Override
public boolean isToImportInDemand(String qualifiedName) {
return false;
}
@Override
public boolean useFQClassNames() {
return false;
@@ -107,7 +107,8 @@ public class PsiReferenceExpressionImpl extends ExpressionPsiElement implements
assert importList != null;
final String qualifiedName = qualifierClass.getQualifiedName();
final List<PsiJavaCodeReferenceElement> refs = getImportsFromClass(importList, qualifiedName);
if (refs.size() + 1 < JavaCodeStyleSettingsFacade.getInstance(qualifierClass.getProject()).getNamesCountToUseImportOnDemand() ||
JavaCodeStyleSettingsFacade javaCodeStyleSettingsFacade = JavaCodeStyleSettingsFacade.getInstance(qualifierClass.getProject());
if (!javaCodeStyleSettingsFacade.isToImportInDemand(qualifiedName) && refs.size() + 1 < javaCodeStyleSettingsFacade.getNamesCountToUseImportOnDemand() ||
JavaCodeStyleManager.getInstance(qualifierClass.getProject()).hasConflictingOnDemandImport((PsiJavaFile)importList.getContainingFile(), qualifierClass, staticName)) {
importList.add(JavaPsiFacade.getInstance(qualifierClass.getProject()).getElementFactory().createImportStaticStatement(qualifierClass, staticName));
} else {
@@ -0,0 +1,5 @@
class ImportTest{
{
Math.ab<caret>s(-1);
}
}
@@ -0,0 +1,7 @@
import static java.lang.Math.*;
class ImportTest{
{
ab<caret>s(-1);
}
}
@@ -19,6 +19,7 @@ import com.intellij.JavaTestUtil;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.codeStyle.PackageEntry;
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase;
public class AddSingleStaticImportActionTest extends JavaCodeInsightFixtureTestCase {
@@ -61,6 +62,12 @@ public class AddSingleStaticImportActionTest extends JavaCodeInsightFixtureTestC
doTest("Add import for 'foo.Class1.Inner1'");
}
public void testPredefinedAlwaysUseOnDemandImport() {
JavaCodeStyleSettings settings = JavaCodeStyleSettings.getInstance(getProject());
settings.PACKAGES_TO_USE_IMPORT_ON_DEMAND.addEntry(new PackageEntry(true, "java.lang.Math", true));
doTest("Add static import for 'java.lang.Math.abs'");
}
public void testSingleStaticReferencesUntilCollapsedToDiamond() {
doTest("Add static import for 'java.lang.Math.max'");
}