From 52ee8d5d0fb3795cb797c74d0f7e3253b8d6dcfd Mon Sep 17 00:00:00 2001 From: Nikolay Chashnikov Date: Thu, 1 May 2025 09:06:11 +0200 Subject: [PATCH] [java] move classes in 'java.impl' inheriting from classes from 'java.analysis.impl' to a different package (IJPL-149126) This is needed to avoid IllegalAccessError if 'java.impl' and 'java.analysis.impl' are loaded by different classloaders. For example, EntryPointsManagerImpl inherits from EntryPointsManagerBase, and an anonymous class inside EntryPointsManagerImpl refers to a protected field EntryPointsManagerBase.myWriteAnnotations. Since the anonymous doesn't inherit from EntryPointsManagerBase, such access works via package-private visibility because both classes are located in the same package and loaded by the same classloader. Moving EntryPointsManagerImpl to a different package forces javac to generate an accessor method in EntryPointsManagerImpl and use it from the anonymous class to access the protected field. GitOrigin-RevId: 8c7b92c473f490f48f4226f0ed49339ef83cd4c3 --- .../inspectionProfiles/idea_fatal_errors.xml | 19 ------------------- .../resources/META-INF/InspectionGadgets.xml | 6 +++--- .../resources/META-INF/JavaPlugin.xml | 2 +- .../options/JavaInspectionButtons.java | 2 +- .../ex/{ => impl}/ClassPatternsPanel.java | 5 +++-- .../ex/{ => impl}/EntryPointsManagerImpl.java | 5 +++-- .../AnonymousClassComplexityInspection.java | 4 +++- .../AnonymousClassMethodCountInspection.java | 3 ++- .../ParametersPerConstructorInspection.java | 3 ++- .../AnonymousClassComplexity.java | 0 ...nonymousClassComplexityInspectionTest.java | 1 + .../codeInspection/inspection-black-list.txt | 4 ++-- 12 files changed, 21 insertions(+), 33 deletions(-) rename java/java-impl/src/com/intellij/codeInspection/ex/{ => impl}/ClassPatternsPanel.java (98%) rename java/java-impl/src/com/intellij/codeInspection/ex/{ => impl}/EntryPointsManagerImpl.java (96%) rename java/java-impl/src/com/siyeh/ig/classmetrics/{ => impl}/AnonymousClassComplexityInspection.java (95%) rename java/java-impl/src/com/siyeh/ig/classmetrics/{ => impl}/AnonymousClassMethodCountInspection.java (96%) rename java/java-impl/src/com/siyeh/ig/methodmetrics/{ => impl}/ParametersPerConstructorInspection.java (97%) rename java/java-tests/testData/ig/com/siyeh/igtest/classmetrics/{ => impl}/anonymous_class_complexity/AnonymousClassComplexity.java (100%) diff --git a/.idea/inspectionProfiles/idea_fatal_errors.xml b/.idea/inspectionProfiles/idea_fatal_errors.xml index 7cc4c1fdd186..45a81f75f4df 100644 --- a/.idea/inspectionProfiles/idea_fatal_errors.xml +++ b/.idea/inspectionProfiles/idea_fatal_errors.xml @@ -3925,17 +3925,6 @@ diff --git a/java/java-impl/resources/META-INF/InspectionGadgets.xml b/java/java-impl/resources/META-INF/InspectionGadgets.xml index 92b31e896ca3..1f3eb3d0796c 100644 --- a/java/java-impl/resources/META-INF/InspectionGadgets.xml +++ b/java/java-impl/resources/META-INF/InspectionGadgets.xml @@ -534,11 +534,11 @@ + implementationClass="com.siyeh.ig.classmetrics.impl.AnonymousClassComplexityInspection"/> + implementationClass="com.siyeh.ig.classmetrics.impl.AnonymousClassMethodCountInspection"/> @@ -1480,7 +1480,7 @@ + implementationClass="com.siyeh.ig.methodmetrics.impl.ParametersPerConstructorInspection"/> + serviceImplementation="com.intellij.codeInspection.ex.impl.EntryPointsManagerImpl"/>