diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 7ba14deef6a..94061cea113 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -14619,6 +14619,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/jvmField/checkNoAccessors.kt"); } + @TestMetadata("clashWithJavaSuperClassField.kt") + public void testClashWithJavaSuperClassField() throws Exception { + runTest("compiler/testData/codegen/box/jvmField/clashWithJavaSuperClassField.kt"); + } + @TestMetadata("classFieldReference.kt") public void testClassFieldReference() throws Exception { runTest("compiler/testData/codegen/box/jvmField/classFieldReference.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RenameFieldsLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RenameFieldsLowering.kt index a162b5bddc7..9e9ce6236a4 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RenameFieldsLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RenameFieldsLowering.kt @@ -96,7 +96,9 @@ private class FieldNameCollector : IrElementVisitorVoid { } override fun visitField(declaration: IrField) { - nameToField.getOrPut(declaration.parent to declaration.name) { mutableListOf() }.add(declaration) + if (!declaration.isFakeOverride) { + nameToField.getOrPut(declaration.parent to declaration.name) { mutableListOf() }.add(declaration) + } } } diff --git a/compiler/testData/codegen/box/jvmField/clashWithJavaSuperClassField.kt b/compiler/testData/codegen/box/jvmField/clashWithJavaSuperClassField.kt new file mode 100644 index 00000000000..d80e232695e --- /dev/null +++ b/compiler/testData/codegen/box/jvmField/clashWithJavaSuperClassField.kt @@ -0,0 +1,19 @@ +// TARGET_BACKEND: JVM +// IGNORE_BACKEND_FIR: JVM_IR +// WITH_RUNTIME +// FILE: test.kt + +abstract class A { + @JvmField + protected var flag: String = "Fail" +} + +fun box(): String = object : J() { + val result = flag +}.result + +// FILE: J.java + +public class J extends A { + protected String flag = "OK"; +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 807e8d2ffe7..53820e90baf 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -15764,6 +15764,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/jvmField/checkNoAccessors.kt"); } + @TestMetadata("clashWithJavaSuperClassField.kt") + public void testClashWithJavaSuperClassField() throws Exception { + runTest("compiler/testData/codegen/box/jvmField/clashWithJavaSuperClassField.kt"); + } + @TestMetadata("classFieldReference.kt") public void testClassFieldReference() throws Exception { runTest("compiler/testData/codegen/box/jvmField/classFieldReference.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 13d9a68b064..b396bb59ebf 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15764,6 +15764,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/jvmField/checkNoAccessors.kt"); } + @TestMetadata("clashWithJavaSuperClassField.kt") + public void testClashWithJavaSuperClassField() throws Exception { + runTest("compiler/testData/codegen/box/jvmField/clashWithJavaSuperClassField.kt"); + } + @TestMetadata("classFieldReference.kt") public void testClassFieldReference() throws Exception { runTest("compiler/testData/codegen/box/jvmField/classFieldReference.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index ffd5218921a..f7b8a0f5892 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -14619,6 +14619,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/jvmField/checkNoAccessors.kt"); } + @TestMetadata("clashWithJavaSuperClassField.kt") + public void testClashWithJavaSuperClassField() throws Exception { + runTest("compiler/testData/codegen/box/jvmField/clashWithJavaSuperClassField.kt"); + } + @TestMetadata("classFieldReference.kt") public void testClassFieldReference() throws Exception { runTest("compiler/testData/codegen/box/jvmField/classFieldReference.kt");