diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/ExplicitToImplicitClassMigrationInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/ExplicitToImplicitClassMigrationInspection.java index 7d430cf3ec30..4163454459a0 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/ExplicitToImplicitClassMigrationInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/ExplicitToImplicitClassMigrationInspection.java @@ -281,6 +281,14 @@ public final class ExplicitToImplicitClassMigrationInspection extends AbstractBa CommentTracker tracker = new CommentTracker(); String body = tracker.rangeText(lBrace.getNextSibling(), rBrace.getPrevSibling()); PsiImplicitClass newClass = PsiElementFactory.getInstance(project).createImplicitClassFromText(body, psiClass); + if(!(newClass.getContainingFile() instanceof PsiJavaFile dummyFile) || + dummyFile.getImportList() == null || + javaFile.getImportList() == null) { + return; + } + //it is necessary to resolve accurately inside a new implicit class + //collisions will be resolved after it + dummyFile.getImportList().replace(javaFile.getImportList()); PsiElement replaced = tracker.replace(psiClass, newClass); if (!(replaced instanceof PsiImplicitClass implicitClass)) { return; @@ -290,7 +298,6 @@ public final class ExplicitToImplicitClassMigrationInspection extends AbstractBa cleanMainMethod(implicitClass); - PsiFile replacedContainingFile = replaced.getContainingFile(); if (replacedContainingFile != null) { JavaCodeStyleManager.getInstance(project).optimizeImports(replacedContainingFile); diff --git a/java/java-impl/resources/META-INF/JavaPlugin.xml b/java/java-impl/resources/META-INF/JavaPlugin.xml index a26c7a03c627..7b0c05983faa 100644 --- a/java/java-impl/resources/META-INF/JavaPlugin.xml +++ b/java/java-impl/resources/META-INF/JavaPlugin.xml @@ -1690,13 +1690,13 @@ key="inspection.string.template.reverse.migration.name"/> -Reports ordinary classes, which can be converted into implicitly declared classes +Reports ordinary classes, which can be converted into compact source files

Example:


   public class Sample {
       public static void main(String[] args) {
-          System.out.println("Hello, world!");
+          String a = "Hello, world!";
       }
   }
 

After the quick-fix is applied:


-  public static void main(String[] args) {
-      System.out.println("Hello, world!");
+  void main() {
+      String a = "Hello, world!";
   }
 
diff --git a/java/java-impl/resources/inspectionDescriptions/ImplicitToExplicitClassBackwardMigration.html b/java/java-impl/resources/inspectionDescriptions/ImplicitToExplicitClassBackwardMigration.html index a4abd97a4c50..406d652e00a5 100644 --- a/java/java-impl/resources/inspectionDescriptions/ImplicitToExplicitClassBackwardMigration.html +++ b/java/java-impl/resources/inspectionDescriptions/ImplicitToExplicitClassBackwardMigration.html @@ -1,17 +1,17 @@ -Reports implicitly declared classes and suggests replacing them with regular classes. +Reports compact source files and suggests replacing them with regular classes.

Example (in file Sample.java):


-  public static void main() {
-      System.out.println("Hello, world!");
+  void main() {
+      String a = "Hello, world!";
   }
 

After the quick-fix is applied:


 public class Sample {
-    public static void main() {
-        System.out.println("Hello, world!");
+    void main() {
+        String a = "Hello, world!";
     }
 }
 
diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/ExplicitToImplicitClassMigrationInspectionInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/ExplicitToImplicitClassMigrationInspectionInspectionTest.java index 97d179903a12..328c0f4ebf5a 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/ExplicitToImplicitClassMigrationInspectionInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/ExplicitToImplicitClassMigrationInspectionInspectionTest.java @@ -21,7 +21,7 @@ public class ExplicitToImplicitClassMigrationInspectionInspectionTest extends Li @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() { - return JAVA_23; + return JAVA_LATEST_WITH_LATEST_JDK; } @Override diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/ImplicitToExplicitClassBackwardMigrationInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/ImplicitToExplicitClassBackwardMigrationInspectionTest.java index 03d8250faa3a..6eaa0f0a6ead 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/ImplicitToExplicitClassBackwardMigrationInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/ImplicitToExplicitClassBackwardMigrationInspectionTest.java @@ -16,7 +16,7 @@ public class ImplicitToExplicitClassBackwardMigrationInspectionTest extends Ligh @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() { - return JAVA_23; + return JAVA_LATEST_WITH_LATEST_JDK; } @Override diff --git a/platform/analysis-api/resources/messages/InspectionsBundle.properties b/platform/analysis-api/resources/messages/InspectionsBundle.properties index 40d2e4e62243..dfca411ee8ce 100644 --- a/platform/analysis-api/resources/messages/InspectionsBundle.properties +++ b/platform/analysis-api/resources/messages/InspectionsBundle.properties @@ -211,6 +211,7 @@ group.names.language.level.specific.issues.and.migration.aids15=Java 15 group.names.language.level.specific.issues.and.migration.aids16=Java 16 group.names.language.level.specific.issues.and.migration.aids21=Java 21 group.names.language.level.specific.issues.and.migration.aids23=Java 23 +group.names.language.level.specific.issues.and.migration.aids25=Java 25 group.names.javabeans.issues=JavaBeans issues group.names.inheritance.issues=Inheritance issues group.names.data.flow.issues=Data flow