[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
This commit is contained in:
Nikolay Chashnikov
2025-05-02 08:05:38 +00:00
committed by intellij-monorepo-bot
parent 420223fa77
commit 52ee8d5d0f
12 changed files with 21 additions and 33 deletions
-19
View File
@@ -3925,17 +3925,6 @@
<inspection_tool class="SuspiciousPackagePrivateAccess" enabled="true" level="ERROR" enabled_by_default="true">
<scope name="Tests" level="WARNING" enabled="false" />
<option name="MODULES_SETS_LOADED_TOGETHER">
<modules-set>
<module name="intellij.java.impl" />
<module name="intellij.java.analysis.impl" />
<module name="intellij.java.execution" />
<module name="intellij.java" />
<module name="intellij.java.psi" />
<module name="intellij.java.ui" />
<module name="intellij.java.psi.impl" />
<module name="intellij.java.analysis" />
<module name="intellij.java.impl.refactorings" />
</modules-set>
<modules-set>
<module name="intellij.android.profilers.ui" />
<module name="intellij.android.profilers" />
@@ -3944,14 +3933,6 @@
<module name="intellij.android.wizard" />
<module name="intellij.android.wizard.model" />
</modules-set>
<modules-set>
<module name="intellij.java.compiler.impl" />
<module name="intellij.java.compiler" />
</modules-set>
<modules-set>
<module name="intellij.java.compiler.instrumentationUtil.java8" />
<module name="intellij.java.compiler.instrumentationUtil" />
</modules-set>
</option>
</inspection_tool>
<inspection_tool class="SuspiciousReturnByteInputStream" enabled="false" level="WARNING" enabled_by_default="false" />
@@ -534,11 +534,11 @@
<localInspection groupPath="Java" language="JAVA" suppressId="OverlyComplexAnonymousInnerClass" shortName="AnonymousClassComplexity"
bundle="messages.InspectionGadgetsBundle" key="overly.complex.anonymous.inner.class.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.classmetrics.AnonymousClassComplexityInspection"/>
implementationClass="com.siyeh.ig.classmetrics.impl.AnonymousClassComplexityInspection"/>
<localInspection groupPath="Java" language="JAVA" suppressId="AnonymousInnerClassWithTooManyMethods" shortName="AnonymousClassMethodCount"
bundle="messages.InspectionGadgetsBundle" key="anonymous.inner.class.with.too.many.methods.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.classmetrics.AnonymousClassMethodCountInspection"/>
implementationClass="com.siyeh.ig.classmetrics.impl.AnonymousClassMethodCountInspection"/>
<localInspection groupPath="Java" language="JAVA" suppressId="OverlyComplexClass" shortName="ClassComplexity" bundle="messages.InspectionGadgetsBundle"
key="overly.complex.class.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics"
enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.classmetrics.ClassComplexityInspection"/>
@@ -1480,7 +1480,7 @@
<localInspection groupPath="Java" language="JAVA" suppressId="ConstructorWithTooManyParameters" shortName="ParametersPerConstructor"
bundle="messages.InspectionGadgetsBundle" key="parameters.per.constructor.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.method.metrics" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.methodmetrics.ParametersPerConstructorInspection"/>
implementationClass="com.siyeh.ig.methodmetrics.impl.ParametersPerConstructorInspection"/>
<localInspection groupPath="Java" language="JAVA" suppressId="OverlyComplexMethod" shortName="CyclomaticComplexity" bundle="messages.InspectionGadgetsBundle"
key="cyclomatic.complexity.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.method.metrics"
enabledByDefault="false" level="WARNING"
@@ -416,7 +416,7 @@
<projectService serviceInterface="com.intellij.testIntegration.TestFailedLineManager"
serviceImplementation="com.intellij.execution.codeInspection.TestFailedLineManagerImpl"/>
<projectService serviceInterface="com.intellij.codeInspection.ex.EntryPointsManager"
serviceImplementation="com.intellij.codeInspection.ex.EntryPointsManagerImpl"/>
serviceImplementation="com.intellij.codeInspection.ex.impl.EntryPointsManagerImpl"/>
<projectService serviceInterface="com.intellij.openapi.roots.JavaProjectModelModificationService"
serviceImplementation="com.intellij.openapi.roots.impl.JavaProjectModelModificationServiceImpl"/>
<projectService serviceInterface="com.intellij.refactoring.listeners.JavaRefactoringListenerManager"
@@ -2,7 +2,7 @@
package com.intellij.codeInsight.options;
import com.intellij.codeInsight.NullableNotNullDialog;
import com.intellij.codeInspection.ex.EntryPointsManagerImpl;
import com.intellij.codeInspection.ex.impl.EntryPointsManagerImpl;
import com.intellij.codeInspection.ui.CustomComponentExtensionWithSwingRenderer;
import com.intellij.openapi.project.Project;
import com.intellij.packageDependencies.ui.DependencyConfigurable;
@@ -1,6 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection.ex;
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection.ex.impl;
import com.intellij.codeInspection.ex.EntryPointsManagerBase;
import com.intellij.ide.DataManager;
import com.intellij.ide.util.ClassFilter;
import com.intellij.ide.util.TreeClassChooser;
@@ -1,8 +1,9 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection.ex;
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection.ex.impl;
import com.intellij.codeInsight.AnnotationTargetUtil;
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerEx;
import com.intellij.codeInspection.ex.EntryPointsManagerBase;
import com.intellij.codeInspection.util.SpecialAnnotationsUtil;
import com.intellij.java.JavaBundle;
import com.intellij.openapi.components.PersistentStateComponent;
@@ -13,12 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.siyeh.ig.classmetrics;
package com.siyeh.ig.classmetrics.impl;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.psi.*;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.classmetrics.ClassMetricInspection;
import com.siyeh.ig.classmetrics.CyclomaticComplexityVisitor;
import com.siyeh.ig.fixes.MoveAnonymousToInnerClassFix;
import org.jetbrains.annotations.NotNull;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.siyeh.ig.classmetrics;
package com.siyeh.ig.classmetrics.impl;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.psi.PsiAnonymousClass;
@@ -21,6 +21,7 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiEnumConstantInitializer;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.classmetrics.ClassMetricInspection;
import com.siyeh.ig.fixes.MoveAnonymousToInnerClassFix;
import org.jetbrains.annotations.NotNull;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.siyeh.ig.methodmetrics;
package com.siyeh.ig.methodmetrics.impl;
import com.intellij.codeInspection.options.OptPane;
import com.intellij.openapi.util.NlsContexts;
@@ -22,6 +22,7 @@ import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiParameterList;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.methodmetrics.MethodMetricInspection;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
@@ -17,6 +17,7 @@ package com.siyeh.ig.classmetrics;
import com.intellij.codeInspection.InspectionProfileEntry;
import com.siyeh.ig.LightJavaInspectionTestCase;
import com.siyeh.ig.classmetrics.impl.AnonymousClassComplexityInspection;
import org.jetbrains.annotations.Nullable;
/**
@@ -68,8 +68,6 @@ com.siyeh.ig.classlayout.InnerClassOnInterfaceInspection
com.siyeh.ig.classlayout.ListenerMayUseAdapterInspection
com.siyeh.ig.classlayout.UtilityClassInspection
com.siyeh.ig.classlayout.UtilityClassWithoutPrivateConstructorInspection
com.siyeh.ig.classmetrics.AnonymousClassComplexityInspection
com.siyeh.ig.classmetrics.AnonymousClassMethodCountInspection
com.siyeh.ig.classmetrics.ClassComplexityInspection
com.siyeh.ig.classmetrics.ClassCouplingInspection
com.siyeh.ig.classmetrics.ClassInheritanceDepthInspection
@@ -77,6 +75,8 @@ com.siyeh.ig.classmetrics.ClassNestingDepthInspection
com.siyeh.ig.classmetrics.ConstructorCountInspection
com.siyeh.ig.classmetrics.FieldCountInspection
com.siyeh.ig.classmetrics.MethodCountInspection
com.siyeh.ig.classmetrics.impl.AnonymousClassComplexityInspection
com.siyeh.ig.classmetrics.impl.AnonymousClassMethodCountInspection
com.siyeh.ig.cloneable.CloneableImplementsCloneInspection
com.siyeh.ig.controlflow.ConfusingElseInspection
com.siyeh.ig.controlflow.DuplicateConditionInspection