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 c3bf8d24def..c2f3fe166e1 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 @@ -35668,6 +35668,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @Test + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @Test @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { 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 6506352adf6..49da0ed21b9 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 @@ -35668,6 +35668,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @Test + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @Test @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { 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 c855920d15a..1d05283f7e3 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 @@ -35519,6 +35519,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @Test + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @Test @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { 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 7f210c5662a..ed76ed632ed 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 @@ -35519,6 +35519,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @Test + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @Test @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { 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 06625a6b9c3..a91112d293c 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 @@ -35519,6 +35519,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @Test + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @Test @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index 5a540d7ff08..46945b91c7d 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt @@ -175,12 +175,13 @@ class JavaClassUseSiteMemberScope( } internal fun syntheticPropertyFromOverride(overriddenProperty: ResultOfIntersection): FirSyntheticPropertySymbol? { - val overrideInClass = overriddenProperty.overriddenMembers.firstNotNullOfOrNull { (symbol, _) -> + val overrideInClass = overriddenProperty.overriddenMembers.firstNotNullOfOrNull superMember@{ (symbol, baseScope) -> // We may call this function at the STATUS phase, which means that using resolved status may lead to cycle // So we need to use raw status here - if (!symbol.isVisibleInClass(klass.symbol, symbol.rawStatus)) return@firstNotNullOfOrNull null + if (!symbol.isVisibleInClass(klass.symbol, symbol.rawStatus)) return@superMember null symbol.createOverridePropertyIfExists(declaredMemberScope, takeModalityFromGetter = true) - ?: superTypeScopes.firstNotNullOfOrNull { scope -> + ?: superTypeScopes.firstNotNullOfOrNull superScope@{ scope -> + if (scope == baseScope) return@superScope null symbol.createOverridePropertyIfExists(scope, takeModalityFromGetter = false) } } diff --git a/compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt b/compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt new file mode 100644 index 00000000000..939b080097f --- /dev/null +++ b/compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt @@ -0,0 +1,26 @@ +// TARGET_BACKEND: JVM_IR +// WITH_STDLIB +// ISSUE: KT-66020 + +// FILE: Base.kt +open class Base { + open val b = "O" + + @JvmName("getBJava") + fun getB() : String = "K" +} + +// FILE: Derived.java +public class Derived extends Base { + public static String box() { + Impl x = new Impl(); + return x.getB() + x.getBJava(); + } +} + +// FILE: Impl.kt +class Impl : Derived() + +fun box(): String { + return Derived.box() +} 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 ddb31c54284..e44ad573513 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 @@ -35519,6 +35519,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @Test + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @Test @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { 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 964f61f4e27..bf1009b7d56 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 @@ -35519,6 +35519,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @Test + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @Test @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { 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 cd5ea962a95..698b761b151 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 @@ -35519,6 +35519,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @Test + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @Test @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java index 0f6a7e8e9b9..e368594da7b 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java @@ -35519,6 +35519,12 @@ public class FirBlackBoxCodegenTestWithInlineScopesGenerated extends AbstractFir runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @Test + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @Test @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index acd8c0bd8ba..1ea213a8946 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -30217,6 +30217,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/jvmName/classMembers.kt"); } + @TestMetadata("conflictingGetterAndPropertyInBaseKotlinClass.kt") + public void testConflictingGetterAndPropertyInBaseKotlinClass() { + runTest("compiler/testData/codegen/box/jvmName/conflictingGetterAndPropertyInBaseKotlinClass.kt"); + } + @TestMetadata("fakeJvmNameInJava.kt") public void testFakeJvmNameInJava() { runTest("compiler/testData/codegen/box/jvmName/fakeJvmNameInJava.kt");