[java-inspections] IDEA-365059 Support JEP 494: Fix expand module imports

- modules shouldn't add implicitly imported classes

GitOrigin-RevId: d18b9bc7783a478cec3e75f95542c410ae78acd8
This commit is contained in:
Mikhail Pyltsin
2024-12-20 18:45:05 +00:00
committed by intellij-monorepo-bot
parent a49e546e18
commit c32067bfb3
4 changed files with 24 additions and 2 deletions
@@ -7,6 +7,7 @@ import com.intellij.psi.util.ClassUtil;
import com.intellij.psi.util.ImportsUtil;
import com.siyeh.IntentionPowerPackBundle;
import com.siyeh.ig.psiutils.CommentTracker;
import com.siyeh.ig.psiutils.ImportUtils;
import com.siyeh.ipp.base.MCIntention;
import com.siyeh.ipp.base.PsiElementPredicate;
import org.jetbrains.annotations.NotNull;
@@ -52,8 +53,13 @@ public final class ReplaceOnDemandImportIntention extends MCIntention {
for (PsiClass aClass : classes) {
aClass.accept(visitor);
}
final PsiClass[] importedClasses = visitor.getImportedClasses();
Arrays.sort(importedClasses, new PsiClassComparator());
ImportUtils.ImplicitImportChecker checker = ImportUtils.createImplicitImportChecker(javaFile);
final PsiClass[] importedClasses = Arrays.stream(visitor.getImportedClasses())
.filter(
cl -> !(importStatementBase instanceof PsiImportModuleStatement) ||
!checker.isImplicitlyImported(cl.getQualifiedName(), false))
.sorted(new PsiClassComparator())
.toArray(PsiClass[]::new);
createImportStatements(importStatementBase, importedClasses, factory::createImportStatement);
}
else if (importStatementBase instanceof PsiImportStaticStatement) {
@@ -0,0 +1,7 @@
import module java<caret>.base;
public class ModuleImport {
public static void main(String[] args) {
List<String> a = new ArrayList<>();
}
}
@@ -0,0 +1,8 @@
import java.util.A<caret>rrayList;
import java.util.List;
public class ModuleImport {
public static void main(String[] args) {
List<String> a = new ArrayList<>();
}
}
@@ -15,6 +15,7 @@ public class ReplaceOnDemandImportIntentionTest extends IPPTestCase {
public void testStaticImport() { doTest(); }
public void testModuleImport() { doTest(); }
public void testModuleImportImplicitImport() { doTest(); }
@Override
protected String getIntentionName() {