mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java: don't add static import for STR when optimizing imports (IDEA-321466)
GitOrigin-RevId: 58570ed1f0f0ad96432e3be035f1157c8f27e964
This commit is contained in:
committed by
intellij-monorepo-bot
parent
cb3d988229
commit
e0d16d42e6
@@ -4,6 +4,7 @@ package com.intellij.psi.impl.source.codeStyle;
|
||||
import com.intellij.application.options.CodeStyle;
|
||||
import com.intellij.codeInsight.ImportFilter;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightingFeature;
|
||||
import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.jsp.JspSpiUtil;
|
||||
import com.intellij.lang.ASTNode;
|
||||
@@ -57,6 +58,7 @@ public final class ImportHelper{
|
||||
|
||||
private final JavaCodeStyleSettings mySettings;
|
||||
@NonNls private static final String JAVA_LANG_PACKAGE = "java.lang";
|
||||
private static final String STRING_TEMPLATE_STR = "java.lang.StringTemplate.STR";
|
||||
|
||||
public ImportHelper(@NotNull JavaCodeStyleSettings settings) {
|
||||
mySettings = settings;
|
||||
@@ -125,7 +127,8 @@ public final class ImportHelper{
|
||||
classesToUseSingle.addAll(toReimport);
|
||||
|
||||
try {
|
||||
StringBuilder text = buildImportListText(resultList, classesOrPackagesToImportOnDemand.keySet(), classesToUseSingle);
|
||||
boolean stringTemplates = HighlightingFeature.STRING_TEMPLATES.isAvailable(file);
|
||||
StringBuilder text = buildImportListText(resultList, classesOrPackagesToImportOnDemand.keySet(), classesToUseSingle, stringTemplates);
|
||||
for (PsiElement nonImport : nonImports) {
|
||||
text.append("\n").append(nonImport.getText());
|
||||
}
|
||||
@@ -367,15 +370,17 @@ public final class ImportHelper{
|
||||
|
||||
@NotNull
|
||||
private static StringBuilder buildImportListText(@NotNull List<? extends Pair<String, Boolean>> names,
|
||||
@NotNull final Set<String> packagesOrClassesToImportOnDemand,
|
||||
@NotNull final Set<String> namesToUseSingle) {
|
||||
@NotNull Set<String> packagesOrClassesToImportOnDemand,
|
||||
@NotNull Set<String> namesToUseSingle,
|
||||
boolean stringTemplates) {
|
||||
final Set<Pair<String, Boolean>> importedPackagesOrClasses = new HashSet<>();
|
||||
@NonNls final StringBuilder buffer = new StringBuilder();
|
||||
for (Pair<String, Boolean> pair : names) {
|
||||
String name = pair.getFirst();
|
||||
Boolean isStatic = pair.getSecond();
|
||||
String packageOrClassName = getPackageOrClassName(name);
|
||||
final boolean implicitlyImported = JAVA_LANG_PACKAGE.equals(packageOrClassName);
|
||||
final boolean implicitlyImported = JAVA_LANG_PACKAGE.equals(packageOrClassName) ||
|
||||
stringTemplates && STRING_TEMPLATE_STR.equals(name);
|
||||
boolean useOnDemand = implicitlyImported || packagesOrClassesToImportOnDemand.contains(packageOrClassName);
|
||||
final Pair<String, Boolean> current = Pair.create(packageOrClassName, isStatic);
|
||||
if (namesToUseSingle.remove(name)) {
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class X {
|
||||
|
||||
void x() {
|
||||
String s = STR."";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
class X {
|
||||
|
||||
void x() {
|
||||
String s = STR."";
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ex.PathManagerEx;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
@@ -23,6 +24,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.PackageEntry;
|
||||
import com.intellij.psi.codeStyle.PackageEntryTable;
|
||||
import com.intellij.psi.codeStyle.modifier.CodeStyleSettingsModifier;
|
||||
import com.intellij.testFramework.IdeaTestUtil;
|
||||
import com.intellij.testFramework.ServiceContainerUtil;
|
||||
import com.intellij.util.PathUtil;
|
||||
|
||||
@@ -65,12 +67,27 @@ public class OptimizeImportsTest extends OptimizeImportsTestCase {
|
||||
public void testIDEADEV10716() { doTest(); }
|
||||
public void testUnresolvedImports() { doTest(); }
|
||||
public void testUnresolvedImports2() { doTest(); }
|
||||
public void testInterfaceMethodThroughInheritance() {
|
||||
public void testInterfaceMethodThroughInheritance() {
|
||||
myFixture.addClass("package foo; public interface Foo {" +
|
||||
" static void foo() {}" +
|
||||
" interface Inner extends Foo {}" +
|
||||
"}");
|
||||
doTest();
|
||||
doTest();
|
||||
}
|
||||
public void testStringTemplates() {
|
||||
IdeaTestUtil.setModuleLanguageLevel(getModule(), LanguageLevel.JDK_21_PREVIEW);
|
||||
myFixture.addClass("""
|
||||
package java.lang;
|
||||
public interface StringTemplate {
|
||||
Processor<String, RuntimeException> STR = null;
|
||||
|
||||
@PreviewFeature(feature=PreviewFeature.Feature.STRING_TEMPLATES)
|
||||
@FunctionalInterface
|
||||
public interface Processor<R, E extends Throwable> {
|
||||
R process(StringTemplate stringTemplate) throws E;
|
||||
}
|
||||
}""");
|
||||
doTest();
|
||||
}
|
||||
public void testNewImportListIsEmptyAndCommentPreserved() { doTest(); }
|
||||
public void testNewImportListIsEmptyAndJavaDocWithInvalidCodePreserved() { doTest(); }
|
||||
|
||||
Reference in New Issue
Block a user