diff --git a/build/jvm-rules/MODULE.bazel.lock b/build/jvm-rules/MODULE.bazel.lock index 01f75c1b0628..568da7a1e3e8 100644 --- a/build/jvm-rules/MODULE.bazel.lock +++ b/build/jvm-rules/MODULE.bazel.lock @@ -99,7 +99,6 @@ "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", "https://bcr.bazel.build/modules/rules_java/8.11.0/MODULE.bazel": "c3d280bc5ff1038dcb3bacb95d3f6b83da8dd27bba57820ec89ea4085da767ad", "https://bcr.bazel.build/modules/rules_java/8.11.0/source.json": "302b52a39259a85aa06ca3addb9787864ca3e03b432a5f964ea68244397e7544", - "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2", "https://bcr.bazel.build/modules/rules_java/8.7.1/MODULE.bazel": "123a57f84c7f80d6f66b0c2486db3460ed8c4389f788ccbd35bb489b1ab23634", "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", diff --git a/build/jvm-rules/src/abi/JavaAbiClassVisitor.kt b/build/jvm-rules/src/abi/JavaAbiClassVisitor.kt index 7feb17c7b8eb..5d1d818d04f0 100644 --- a/build/jvm-rules/src/abi/JavaAbiClassVisitor.kt +++ b/build/jvm-rules/src/abi/JavaAbiClassVisitor.kt @@ -27,7 +27,18 @@ internal class JavaAbiClassVisitor( if (isApiClass) { stripNonPublicMethods = !name.contains("android") if (superName != null && superName != "java/lang/Object" && classesToBeDeleted.contains(superName)) { - abiErrorConsumer("Class ${formatClassName(name)} extends ${formatClassName(superName)} which is not public") + val subClass = formatClassName(name) + val parentClass = formatClassName(superName) + abiErrorConsumer(""" + Class $subClass is public, + but it extends $parentClass, which is not public. + + A public class must only extend classes that are accessible at the same visibility level. + + To fix this, consider either: + * Reducing the visibility of $subClass, or + * Making $parentClass public (and annotate it with @ApiStatus.Internal if applicable). + """.trimIndent()) } super.visit(version, access, name, signature, superName, interfaces) } diff --git a/build/jvm-rules/src/worker-framework/testHelper.kt b/build/jvm-rules/src/worker-framework/testHelper.kt index b531f18d9466..5620f67954a8 100644 --- a/build/jvm-rules/src/worker-framework/testHelper.kt +++ b/build/jvm-rules/src/worker-framework/testHelper.kt @@ -23,6 +23,7 @@ enum class TestModules(@JvmField val sourcePaths: List, private val para LANG_IMPL(listOf("platform/lang-impl/src", "platform/lang-impl/gen"), "platform/lang-impl/lang-impl.jar-0.params"), PLATFORM_BOOTSTRAP(listOf("platform/platform-impl/bootstrap/src"), "platform/platform-impl/bootstrap/ide-bootstrap.jar-0.params"), DEVKIT_CORE(listOf("plugins/devkit/devkit-core/src", "plugins/devkit/devkit-core/gen"), "plugins/devkit/devkit-core/core.jar-0.params"), + JAVA_PSI_API(listOf("java/java-psi-api"), "java/java-psi-api/psi.jar-0.params"), JEWEL(listOf("platform/jewel/foundation/src/main/kotlin"), "platform/jewel/foundation/foundation.jar-0.params"), TEST_AM_B(listOf("testData/IJI-2602/b"), "testData/IJI-2602/b.jar-0.params"),