diff --git a/java/java-impl/src/com/siyeh/ipp/imports/ReplaceOnDemandImportIntention.java b/java/java-impl/src/com/siyeh/ipp/imports/ReplaceOnDemandImportIntention.java index 2b814bf4856d..935847639b4d 100644 --- a/java/java-impl/src/com/siyeh/ipp/imports/ReplaceOnDemandImportIntention.java +++ b/java/java-impl/src/com/siyeh/ipp/imports/ReplaceOnDemandImportIntention.java @@ -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) { diff --git a/java/java-tests/testData/ipp/com/siyeh/ipp/imports/ModuleImportImplicitImport.java b/java/java-tests/testData/ipp/com/siyeh/ipp/imports/ModuleImportImplicitImport.java new file mode 100644 index 000000000000..20a5f2404650 --- /dev/null +++ b/java/java-tests/testData/ipp/com/siyeh/ipp/imports/ModuleImportImplicitImport.java @@ -0,0 +1,7 @@ +import module java.base; + +public class ModuleImport { + public static void main(String[] args) { + List a = new ArrayList<>(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/ipp/com/siyeh/ipp/imports/ModuleImportImplicitImport_after.java b/java/java-tests/testData/ipp/com/siyeh/ipp/imports/ModuleImportImplicitImport_after.java new file mode 100644 index 000000000000..43c6ed17c219 --- /dev/null +++ b/java/java-tests/testData/ipp/com/siyeh/ipp/imports/ModuleImportImplicitImport_after.java @@ -0,0 +1,8 @@ +import java.util.ArrayList; +import java.util.List; + +public class ModuleImport { + public static void main(String[] args) { + List a = new ArrayList<>(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/siyeh/ipp/imports/ReplaceOnDemandImportIntentionTest.java b/java/java-tests/testSrc/com/siyeh/ipp/imports/ReplaceOnDemandImportIntentionTest.java index c19db2dfc765..66b507cc274b 100644 --- a/java/java-tests/testSrc/com/siyeh/ipp/imports/ReplaceOnDemandImportIntentionTest.java +++ b/java/java-tests/testSrc/com/siyeh/ipp/imports/ReplaceOnDemandImportIntentionTest.java @@ -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() {