diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index a5b70ef9870..7a893568fd3 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -19268,6 +19268,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("kjkWithPackagePrivate.kt") + public void testKjkWithPackagePrivate() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt"); + } + @Test @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index b4ed0f29860..e348e51958e 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -19268,6 +19268,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("kjkWithPackagePrivate.kt") + public void testKjkWithPackagePrivate() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt"); + } + @Test @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt index b4ede38d533..6d5da13fcb9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt @@ -6,13 +6,11 @@ package org.jetbrains.kotlin.fir.lazy import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.backend.* -import org.jetbrains.kotlin.fir.containingClassLookupTag +import org.jetbrains.kotlin.fir.backend.generators.isFakeOverride import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.* -import org.jetbrains.kotlin.fir.hasEnumEntries -import org.jetbrains.kotlin.fir.isNewPlaceForBodyGeneration -import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope import org.jetbrains.kotlin.fir.scopes.processClassifiersByName import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol @@ -228,13 +226,18 @@ class Fir2IrLazyClass( result } - private fun shouldBuildStub(fir: FirDeclaration): Boolean = - fir !is FirMemberDeclaration || - !Visibilities.isPrivate(fir.visibility) || - // This exception is needed for K/N caches usage - (isObject && fir is FirConstructor) || - // Needed for enums - (this.isEnumClass && fir is FirConstructor) + private fun shouldBuildStub(fir: FirDeclaration): Boolean { + if (fir !is FirMemberDeclaration) return true + return when { + fir is FirConstructor -> isObject || isEnumClass || !Visibilities.isPrivate(fir.visibility) // This special case seams to be not needed anymore - KT-65172 + fir is FirCallableDeclaration && fir.isFakeOverride(this.fir) -> session.visibilityChecker.isVisibleForOverriding( + this.fir.moduleData, + this.fir.classId.packageFqName, + fir + ) + else -> !Visibilities.isPrivate(fir.visibility) + } + } override var metadata: MetadataSource? get() = null diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index cfdbdbf845a..d22d1e3e98d 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -19257,6 +19257,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("kjkWithPackagePrivate.kt") + public void testKjkWithPackagePrivate() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt"); + } + @Test @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java index be51dbb549e..1152e82ceef 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java @@ -19257,6 +19257,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("kjkWithPackagePrivate.kt") + public void testKjkWithPackagePrivate() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt"); + } + @Test @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 33705685b0b..84f6bae5049 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -19257,6 +19257,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("kjkWithPackagePrivate.kt") + public void testKjkWithPackagePrivate() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt"); + } + @Test @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { diff --git a/compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt b/compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt new file mode 100644 index 00000000000..fe03ae1c066 --- /dev/null +++ b/compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt @@ -0,0 +1,47 @@ +// TARGET_BACKEND: JVM_IR + +// FILE: a/A.java +package a; + +public class A { + String foo() { return "OK"; } + String bar() { return "OK"; } + public static String runFoo(A a) { return a.foo();} + public static String runBar(A a) { return a.bar();} +} + +// FILE: c/C.kt +package c + +open class C : a.A() { + fun bar(): String = "FAIL" +} + +// FILE: c/D.java +package c; + +public class D extends C {} + +// FILE: c/E.kt +package c + +open class E : D() { +} + + +// FILE: box.kt + +import a.* +import c.* + +fun box(): String { + if (A.runFoo(A()) != "OK") return "FAIL"; + if (A.runFoo(C()) != "OK") return "FAIL"; + if (A.runFoo(D()) != "OK") return "FAIL"; + if (A.runFoo(E()) != "OK") return "FAIL"; + if (A.runBar(A()) != "OK") return "FAIL"; + if (A.runBar(C()) != "OK") return "FAIL"; + if (A.runBar(D()) != "OK") return "FAIL"; + if (A.runBar(E()) != "OK") return "FAIL"; + return "OK" +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java index bf2d78e9637..1360cbfb439 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java @@ -19257,6 +19257,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("kjkWithPackagePrivate.kt") + public void testKjkWithPackagePrivate() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt"); + } + @Test @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index d74550d54a2..5dc342a2710 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -19257,6 +19257,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("kjkWithPackagePrivate.kt") + public void testKjkWithPackagePrivate() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt"); + } + @Test @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index 5ef8b22745e..bf1010780ef 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -19257,6 +19257,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("kjkWithPackagePrivate.kt") + public void testKjkWithPackagePrivate() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt"); + } + @Test @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 6825b3d121e..83bec214f28 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -16044,6 +16044,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @TestMetadata("kjkWithPackagePrivate.kt") + public void testKjkWithPackagePrivate() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt"); + } + @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { runTest("compiler/testData/codegen/box/fakeOverride/kt49371.kt");