diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt index f5c4aedc2c7..7374ce6f28c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt @@ -30,7 +30,6 @@ import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.isComposite import org.jetbrains.kotlin.ir.util.parentAsClass -import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities import org.jetbrains.kotlin.name.Name class FakeOverrideGenerator( @@ -49,12 +48,6 @@ class FakeOverrideGenerator( return conversionScope.withProperty(this, firProperty = null, f) } - private fun FirCallableDeclaration.allowsToHaveFakeOverrideIn(klass: FirClass): Boolean { - if (!allowsToHaveFakeOverride) return false - if (this.visibility != JavaDescriptorVisibilities.PACKAGE_VISIBILITY) return true - return this.symbol.callableId.packageName == klass.symbol.classId.packageFqName - } - private fun IrType.containsErrorType(): Boolean { return when (this) { is IrErrorType -> true @@ -218,7 +211,7 @@ class FakeOverrideGenerator( // We have already a FIR declaration for such fake override originalDeclaration to computeBaseSymbols(originalSymbol, computeDirectOverridden, scope, classLookupTag) } - originalDeclaration.allowsToHaveFakeOverrideIn(klass) -> { + originalDeclaration.allowsToHaveFakeOverride -> { // Trivial fake override case // We've got no relevant declaration in FIR world for such a fake override in current class, thus we're creating it here val fakeOverrideSymbol = createFakeOverrideSymbol(originalDeclaration, baseSymbol) @@ -272,7 +265,7 @@ class FakeOverrideGenerator( scope, classLookupTag ) } - originalDeclaration.allowsToHaveFakeOverrideIn(klass) -> { + originalDeclaration.allowsToHaveFakeOverride -> { // Trivial fake override case // We've got no relevant declaration in FIR world for such a fake override in current class, thus we're creating it here val fakeOverrideSymbol = createFakeOverrideSymbol(originalDeclaration, baseSymbol) diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java index 33c4f205b82..73b4ce9a0cd 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java @@ -154,6 +154,12 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest { runTest("compiler/testData/ir/irText/classes/enumWithSecondaryCtor.kt"); } + @Test + @TestMetadata("fakeOverridesForJavaNonStaticMembers.kt") + public void testFakeOverridesForJavaNonStaticMembers() throws Exception { + runTest("compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.kt"); + } + @Test @TestMetadata("fakeOverridesForJavaStaticMembers.kt") public void testFakeOverridesForJavaStaticMembers() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LightTreeFir2IrTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LightTreeFir2IrTextTestGenerated.java index f20663c7583..2b84bfb13e6 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LightTreeFir2IrTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LightTreeFir2IrTextTestGenerated.java @@ -154,6 +154,12 @@ public class LightTreeFir2IrTextTestGenerated extends AbstractLightTreeFir2IrTex runTest("compiler/testData/ir/irText/classes/enumWithSecondaryCtor.kt"); } + @Test + @TestMetadata("fakeOverridesForJavaNonStaticMembers.kt") + public void testFakeOverridesForJavaNonStaticMembers() throws Exception { + runTest("compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.kt"); + } + @Test @TestMetadata("fakeOverridesForJavaStaticMembers.kt") public void testFakeOverridesForJavaStaticMembers() throws Exception { diff --git a/compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.fir.ir.txt b/compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.fir.ir.txt new file mode 100644 index 00000000000..1abcfb3a43d --- /dev/null +++ b/compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.fir.ir.txt @@ -0,0 +1,60 @@ +FILE fqName:a fileName:/fakeOverridesForJavaNonStaticMembers.kt + CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[a.Base] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:a.Test + CONSTRUCTOR visibility:public <> () returnType:a.Test [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in a.Base' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[a.Base]' + FUN FAKE_OVERRIDE name:publicMethod visibility:public modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + public open fun publicMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base + FUN FAKE_OVERRIDE name:protectedMethod visibility:protected/*protected and package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + protected/*protected and package*/ open fun protectedMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base + FUN FAKE_OVERRIDE name:packagePrivateMethod visibility:public/*package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + public/*package*/ open fun packagePrivateMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any +FILE fqName: fileName:/fakeOverridesForJavaNonStaticMembers2.kt + CLASS CLASS name:Test2 modality:FINAL visibility:public superTypes:[a.Base] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Test2 + CONSTRUCTOR visibility:public <> () returnType:.Test2 [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in a.Base' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test2 modality:FINAL visibility:public superTypes:[a.Base]' + FUN FAKE_OVERRIDE name:publicMethod visibility:public modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + public open fun publicMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base + FUN FAKE_OVERRIDE name:protectedMethod visibility:protected/*protected and package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + protected/*protected and package*/ open fun protectedMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.ir.txt b/compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.ir.txt new file mode 100644 index 00000000000..d7ced9eeaf9 --- /dev/null +++ b/compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.ir.txt @@ -0,0 +1,60 @@ +FILE fqName:a fileName:/fakeOverridesForJavaNonStaticMembers.kt + CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[a.Base] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:a.Test + CONSTRUCTOR visibility:public <> () returnType:a.Test [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in a.Base' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[a.Base]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:publicMethod visibility:public modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + public open fun publicMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base + FUN FAKE_OVERRIDE name:protectedMethod visibility:protected/*protected and package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + protected/*protected and package*/ open fun protectedMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base + FUN FAKE_OVERRIDE name:packagePrivateMethod visibility:public/*package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + public/*package*/ open fun packagePrivateMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base +FILE fqName: fileName:/fakeOverridesForJavaNonStaticMembers2.kt + CLASS CLASS name:Test2 modality:FINAL visibility:public superTypes:[a.Base] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Test2 + CONSTRUCTOR visibility:public <> () returnType:.Test2 [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in a.Base' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test2 modality:FINAL visibility:public superTypes:[a.Base]' + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in a.Base + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:publicMethod visibility:public modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + public open fun publicMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base + FUN FAKE_OVERRIDE name:protectedMethod visibility:protected/*protected and package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override] + overridden: + protected/*protected and package*/ open fun protectedMethod (): kotlin.Unit declared in a.Base + $this: VALUE_PARAMETER name: type:a.Base diff --git a/compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.kt b/compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.kt new file mode 100644 index 00000000000..e67246956d4 --- /dev/null +++ b/compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.kt @@ -0,0 +1,22 @@ +// TARGET_BACKEND: JVM +// SKIP_KT_DUMP +// FILE: fakeOverridesForJavaNonStaticMembers.kt +package a + +class Test : Base() + +// FILE: fakeOverridesForJavaNonStaticMembers2.kt + +import a.Base + +class Test2 : Base() + +// FILE: a/Base.java +package a + +public class Base { + public void publicMethod() {} + protected void protectedMethod() {} + void packagePrivateMethod() {} + private void privateMethod() {} +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java index eb0ed1c9b4c..1f457c8dfb0 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java @@ -154,6 +154,12 @@ public class IrTextTestGenerated extends AbstractIrTextTest { runTest("compiler/testData/ir/irText/classes/enumWithSecondaryCtor.kt"); } + @Test + @TestMetadata("fakeOverridesForJavaNonStaticMembers.kt") + public void testFakeOverridesForJavaNonStaticMembers() throws Exception { + runTest("compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.kt"); + } + @Test @TestMetadata("fakeOverridesForJavaStaticMembers.kt") public void testFakeOverridesForJavaStaticMembers() throws Exception {