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 9183e13cc0b..613be07c872 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 @@ -33438,6 +33438,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("kt43217.kt") public void testKt43217() { 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 9c5c9c128a7..37eab0d18a9 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 @@ -33438,6 +33438,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("kt43217.kt") public void testKt43217() { 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 863d1d44f8e..8ab592d5be3 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 @@ -33307,6 +33307,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("kt43217.kt") public void testKt43217() { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java index 010c52270bf..709151bdfe6 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java @@ -33307,6 +33307,12 @@ public class FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGener runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("kt43217.kt") public void testKt43217() { 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 4f7ac82c4ed..051a4e91a81 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 @@ -33307,6 +33307,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("kt43217.kt") public void testKt43217() { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirLightTreeJvmIrTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirLightTreeJvmIrTextTestGenerated.java index 968cf331bbc..b5e64a8ce23 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirLightTreeJvmIrTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirLightTreeJvmIrTextTestGenerated.java @@ -2728,6 +2728,12 @@ public class FirLightTreeJvmIrTextTestGenerated extends AbstractFirLightTreeJvmI runTest("compiler/testData/ir/irText/fakeOverrides/intersectionWithRawType.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("setterVisibliity.kt") public void testSetterVisibliity() { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirPsiJvmIrTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirPsiJvmIrTextTestGenerated.java index 429d5ee3f64..ed26be64135 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirPsiJvmIrTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirPsiJvmIrTextTestGenerated.java @@ -2728,6 +2728,12 @@ public class FirPsiJvmIrTextTestGenerated extends AbstractFirPsiJvmIrTextTest { runTest("compiler/testData/ir/irText/fakeOverrides/intersectionWithRawType.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("setterVisibliity.kt") public void testSetterVisibliity() { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt index d0a9ac23c51..2a02dfe4fd1 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt @@ -200,7 +200,7 @@ private fun JavaClassifierType.toConeKotlinTypeForFlexibleBound( // Given `C`, `C` -> `C..C<*>?`. when { mode.insideAnnotation -> Array(classifier.allTypeParametersNumber()) { ConeStarProjection } - else -> typeParameterSymbols?.getProjectionsForRawType(session) + else -> typeParameterSymbols?.getProjectionsForRawType(session, makeNullable = false) ?: Array(classifier.allTypeParametersNumber()) { ConeStarProjection } } } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/substitution/Substitutors.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/substitution/Substitutors.kt index 6420cc13c75..c2384084a89 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/substitution/Substitutors.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/substitution/Substitutors.kt @@ -281,7 +281,7 @@ class ConeRawScopeSubstitutor( return when { type is ConeTypeParameterType -> { substituteOrSelf( - listOf(type.lookupTag.symbol).getProjectionsForRawType(useSiteSession)[0] as ConeKotlinType + listOf(type.lookupTag.symbol).getProjectionsForRawType(useSiteSession, makeNullable = type.isNullable)[0] ) } type is ConeClassLikeType && type.typeArguments.isNotEmpty() -> { @@ -296,7 +296,7 @@ class ConeRawScopeSubstitutor( val firClass = type.fullyExpandedType(useSiteSession).lookupTag.toFirRegularClassSymbol(useSiteSession) ?: return null ConeRawType.create( - type.withArguments(firClass.typeParameterSymbols.getProjectionsForRawType(useSiteSession)), + type.withArguments(firClass.typeParameterSymbols.getProjectionsForRawType(useSiteSession, makeNullable = type.isNullable)), type.replaceArgumentsWithStarProjections() ) } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt index ed7ce0f1f08..974c24333bd 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.fir.utils.exceptions.withConeTypeEntry import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.model.* +import org.jetbrains.kotlin.utils.addToStdlib.applyIf import org.jetbrains.kotlin.utils.addToStdlib.butIf import org.jetbrains.kotlin.utils.addToStdlib.runIf import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment @@ -688,12 +689,12 @@ fun List.eraseToUpperBoundsAssociated( } } -fun List.getProjectionsForRawType(session: FirSession): Array { +fun List.getProjectionsForRawType(session: FirSession, makeNullable: Boolean): Array { val cache = mutableMapOf() return Array(size) { index -> this[index].fir.eraseToUpperBound( session, cache, mode = EraseUpperBoundMode.FOR_RAW_TYPE_ERASURE - ) + ).applyIf(makeNullable) { withNullability(ConeNullability.NULLABLE, session.typeContext) } } } diff --git a/compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt b/compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt new file mode 100644 index 00000000000..295c0a50ac1 --- /dev/null +++ b/compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt @@ -0,0 +1,28 @@ +// TARGET_BACKEND: JVM_IR +// ISSUE: KT-66067 +// FILE: Java1.java +public class Java1 { + public int foo(T t) { + return 1; + } +} + +// FILE: Java2.java +public class Java2 extends KotlinClass { + public int foo(Object t) { + return 2; + } +} + +// FILE: 1.kt +class A : Java2() // Kotlin ← Java ← Kotlin ← Java + +open class KotlinClass : Java1() where T: Number + +fun box(): String { + if (A().foo(null) != 1) return "FAIL 1"; + if (A().foo(null as Number?) != 1) return "FAIL 1"; + if (A().foo("") != 2) return "FAIL 1"; + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.fir.ir.txt b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.fir.ir.txt new file mode 100644 index 00000000000..5a1df9abbad --- /dev/null +++ b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.fir.ir.txt @@ -0,0 +1,56 @@ +FILE fqName: fileName:/1.kt + CLASS CLASS name:A modality:FINAL visibility:public superTypes:[.Java2] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.A + CONSTRUCTOR visibility:public <> () returnType:.A [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in .Java2' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[.Java2]' + 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 declared in .Java2 + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:foo visibility:public modality:OPEN <> ($this:.Java1, t:@[FlexibleNullability] kotlin.Number?) returnType:kotlin.Unit [fake_override] + overridden: + public open fun foo (t: @[FlexibleNullability] kotlin.Number?): kotlin.Unit declared in .Java2 + $this: VALUE_PARAMETER name: type:.Java1 + VALUE_PARAMETER name:t index:0 type:@[FlexibleNullability] kotlin.Number? + FUN FAKE_OVERRIDE name:foo visibility:public modality:OPEN <> ($this:.Java2, t:@[FlexibleNullability] kotlin.Any?) returnType:kotlin.Unit [fake_override] + overridden: + public open fun foo (t: @[FlexibleNullability] kotlin.Any?): kotlin.Unit declared in .Java2 + $this: VALUE_PARAMETER name: type:.Java2 + VALUE_PARAMETER name:t index:0 type:@[FlexibleNullability] 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 declared in .Java2 + $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 declared in .Java2 + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:KotlinClass modality:OPEN visibility:public superTypes:[.Java1.KotlinClass>] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.KotlinClass.KotlinClass> + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Number] reified:false + CONSTRUCTOR visibility:public <> () returnType:.KotlinClass.KotlinClass> [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in .Java1' + : T of .KotlinClass + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:KotlinClass modality:OPEN visibility:public superTypes:[.Java1.KotlinClass>]' + 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 declared in .Java1 + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:foo visibility:public modality:OPEN <> ($this:.Java1.KotlinClass>, t:@[FlexibleNullability] T of .KotlinClass?) returnType:kotlin.Unit [fake_override] + overridden: + public open fun foo (t: @[FlexibleNullability] T of .Java1?): kotlin.Unit declared in .Java1 + $this: VALUE_PARAMETER name: type:.Java1.KotlinClass> + VALUE_PARAMETER name:t index:0 type:@[FlexibleNullability] T of .KotlinClass? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in .Java1 + $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 declared in .Java1 + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.fir.kt.txt b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.fir.kt.txt new file mode 100644 index 00000000000..794c092ae91 --- /dev/null +++ b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.fir.kt.txt @@ -0,0 +1,17 @@ +class A : Java2 { + constructor() /* primary */ { + super/*Java2*/() + /* () */ + + } + +} + +open class KotlinClass : Java1 { + constructor() /* primary */ { + super/*Java1*/() + /* () */ + + } + +} diff --git a/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.fir.sig.kt.txt b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.fir.sig.kt.txt new file mode 100644 index 00000000000..50053ac50ab --- /dev/null +++ b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.fir.sig.kt.txt @@ -0,0 +1,41 @@ +// CHECK: +// Mangled name: A +// Public signature: /A|null[0] +class A : Java2 { + // CHECK: + // Mangled name: A#(){} + // Public signature: /A.|-5645683436151566731[0] + // Public signature debug description: (){} + constructor() /* primary */ + + // CHECK: + // Mangled name: A#foo(kotlin.Number?){} + // Public signature: /A.foo|2831167016207060641[0] + // Public signature debug description: foo(kotlin.Number?){} + /* fake */ override fun foo(t: Number?): Unit + + // CHECK: + // Mangled name: A#foo(kotlin.Any?){} + // Public signature: /A.foo|-6211124056249407422[0] + // Public signature debug description: foo(kotlin.Any?){} + /* fake */ override fun foo(t: Any?): Unit + +} + +// CHECK: +// Mangled name: KotlinClass +// Public signature: /KotlinClass|null[0] +open class KotlinClass : Java1 { + // CHECK: + // Mangled name: KotlinClass#(){} + // Public signature: /KotlinClass.|-5645683436151566731[0] + // Public signature debug description: (){} + constructor() /* primary */ + + // CHECK: + // Mangled name: KotlinClass#foo(1:0?){} + // Public signature: /KotlinClass.foo|-131141195414545503[0] + // Public signature debug description: foo(1:0?){} + /* fake */ override fun foo(t: T?): Unit + +} diff --git a/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.ir.txt b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.ir.txt new file mode 100644 index 00000000000..8c3f2ebce04 --- /dev/null +++ b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.ir.txt @@ -0,0 +1,56 @@ +FILE fqName: fileName:/1.kt + CLASS CLASS name:A modality:FINAL visibility:public superTypes:[.Java2] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.A + CONSTRUCTOR visibility:public <> () returnType:.A [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in .Java2' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[.Java2]' + 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 declared in .Java2 + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:foo visibility:public modality:OPEN <> ($this:.Java2, t:@[FlexibleNullability] kotlin.Any?) returnType:kotlin.Unit [fake_override] + overridden: + public open fun foo (t: @[FlexibleNullability] kotlin.Any?): kotlin.Unit declared in .Java2 + $this: VALUE_PARAMETER name: type:.Java2 + VALUE_PARAMETER name:t index:0 type:@[FlexibleNullability] kotlin.Any? + FUN FAKE_OVERRIDE name:foo visibility:public modality:OPEN <> ($this:@[RawType] .Java1<@[FlexibleNullability] kotlin.Number?>, t:@[FlexibleNullability] kotlin.Number?) returnType:kotlin.Unit [fake_override] + overridden: + public open fun foo (t: @[FlexibleNullability] kotlin.Number?): kotlin.Unit declared in .Java2 + $this: VALUE_PARAMETER name: type:@[RawType] .Java1<@[FlexibleNullability] kotlin.Number?> + VALUE_PARAMETER name:t index:0 type:@[FlexibleNullability] kotlin.Number? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in .Java2 + $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 declared in .Java2 + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:KotlinClass modality:OPEN visibility:public superTypes:[.Java1.KotlinClass>] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.KotlinClass.KotlinClass> + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Number] reified:false + CONSTRUCTOR visibility:public <> () returnType:.KotlinClass.KotlinClass> [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in .Java1' + : @[FlexibleNullability] T of .KotlinClass? + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:KotlinClass modality:OPEN visibility:public superTypes:[.Java1.KotlinClass>]' + 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 declared in .Java1 + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:foo visibility:public modality:OPEN <> ($this:.Java1.KotlinClass>, t:@[FlexibleNullability] T of .KotlinClass?) returnType:kotlin.Unit [fake_override] + overridden: + public open fun foo (t: @[FlexibleNullability] T of .Java1?): kotlin.Unit declared in .Java1 + $this: VALUE_PARAMETER name: type:.Java1.KotlinClass> + VALUE_PARAMETER name:t index:0 type:@[FlexibleNullability] T of .KotlinClass? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in .Java1 + $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 declared in .Java1 + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.kt b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.kt new file mode 100644 index 00000000000..29d5024440d --- /dev/null +++ b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.kt @@ -0,0 +1,20 @@ +// TARGET_BACKEND: JVM_IR +// ISSUE: KT-66067 +// SCOPE_DUMP: A:foo +// SEPARATE_SIGNATURE_DUMP_FOR_K2 +// FILE: Java1.java +public class Java1 { + public void foo(T t) { + } +} + +// FILE: Java2.java +public class Java2 extends KotlinClass { + public void foo(Object t) { + } +} + +// FILE: 1.kt +class A : Java2() // Kotlin ← Java ← Kotlin ← Java + +open class KotlinClass : Java1() where T: Number diff --git a/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.kt.txt b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.kt.txt new file mode 100644 index 00000000000..3443e1c5ced --- /dev/null +++ b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.kt.txt @@ -0,0 +1,17 @@ +class A : Java2 { + constructor() /* primary */ { + super/*Java2*/() + /* () */ + + } + +} + +open class KotlinClass : Java1 { + constructor() /* primary */ { + super/*Java1*/<@FlexibleNullability T?>() + /* () */ + + } + +} diff --git a/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.overrides.txt b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.overrides.txt new file mode 100644 index 00000000000..a991712df95 --- /dev/null +++ b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.overrides.txt @@ -0,0 +1,9 @@ +A: + [Enhancement]: public open fun foo(t: R|kotlin/Any!|): R|kotlin/Unit| from Use site scope of /A [id: 0] + [Enhancement]: public open fun foo(t: R|kotlin/Any!|): R|kotlin/Unit| from Java enhancement scope for /Java2 [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open override fun foo(t: R|kotlin/Number!|): R|kotlin/Unit| from Use site scope of /A [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open override fun foo(t: R|kotlin/Number!|): R|kotlin/Unit| from Java enhancement scope for /Java2 [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open override fun foo(t: R|kotlin/Number!|): R|kotlin/Unit| from Substitution scope for [Use site scope of /KotlinClass] for type Java2 [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open override fun foo(t: R|ft|): R|kotlin/Unit| from Use site scope of /KotlinClass [id: 1] + [SubstitutionOverride(DeclarationSite)]: public open override fun foo(t: R|ft|): R|kotlin/Unit| from Substitution scope for [Java enhancement scope for /Java1] for type KotlinClass [id: 1] + [Enhancement]: public open fun foo(t: R|ft|): R|kotlin/Unit| from Java enhancement scope for /Java1 [id: 2] diff --git a/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.sig.kt.txt b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.sig.kt.txt new file mode 100644 index 00000000000..94fdd4769a5 --- /dev/null +++ b/compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.sig.kt.txt @@ -0,0 +1,42 @@ +// CHECK: +// Mangled name: A +// Public signature: /A|null[0] +class A : Java2 { + // CHECK: + // Mangled name: A#(){} + // Public signature: /A.|-5645683436151566731[0] + // Public signature debug description: (){} + constructor() /* primary */ + + // CHECK: + // Mangled name: A#foo(kotlin.Any?){} + // Public signature: /A.foo|-6211124056249407422[0] + // Public signature debug description: foo(kotlin.Any?){} + /* fake */ override fun foo(t: Any?): Unit + + // CHECK: + // Mangled name: A#foo(kotlin.Number?){} + // Public signature: /A.foo|2831167016207060641[0] + // Public signature debug description: foo(kotlin.Number?){} + /* fake */ override fun foo(t: Number?): Unit + +} + +// CHECK: +// Mangled name: KotlinClass +// Public signature: /KotlinClass|null[0] +open class KotlinClass : Java1 { + // CHECK: + // Mangled name: KotlinClass#(){} + // Public signature: /KotlinClass.|-5645683436151566731[0] + // Public signature debug description: (){} + constructor() /* primary */ + + // CHECK: + // Mangled name: KotlinClass#foo(1:0?){} + // Public signature: /KotlinClass.foo|-131141195414545503[0] + // Public signature debug description: foo(1:0?){} + /* fake */ override fun foo(t: T?): Unit + +} + 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 86ec11f0d70..e04bd738b96 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 @@ -33307,6 +33307,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("kt43217.kt") public void testKt43217() { 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 9494267a7e7..387d6c54bdb 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 @@ -33307,6 +33307,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("kt43217.kt") public void testKt43217() { 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 d7baa070bf9..2c5f8c8b399 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 @@ -33307,6 +33307,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("kt43217.kt") public void testKt43217() { 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 d47a2c30401..3c41088d649 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 @@ -33307,6 +33307,12 @@ public class FirBlackBoxCodegenTestWithInlineScopesGenerated extends AbstractFir runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("kt43217.kt") public void testKt43217() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/ClassicJvmIrTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/ClassicJvmIrTextTestGenerated.java index 32839de76e4..9c9474aeb4d 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/ClassicJvmIrTextTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/ClassicJvmIrTextTestGenerated.java @@ -2728,6 +2728,12 @@ public class ClassicJvmIrTextTestGenerated extends AbstractClassicJvmIrTextTest runTest("compiler/testData/ir/irText/fakeOverrides/intersectionWithRawType.kt"); } + @Test + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/ir/irText/fakeOverrides/kjkWithRawTypes.kt"); + } + @Test @TestMetadata("setterVisibliity.kt") public void testSetterVisibliity() { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index be186fc94ee..89be5c8a970 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -28229,6 +28229,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/javaInterop/javaTypeFromSameModuleWithRawTypedWildcardBound.kt"); } + @TestMetadata("kjkWithRawTypes.kt") + public void testKjkWithRawTypes() { + runTest("compiler/testData/codegen/box/javaInterop/kjkWithRawTypes.kt"); + } + @TestMetadata("kt43217.kt") public void testKt43217() { runTest("compiler/testData/codegen/box/javaInterop/kt43217.kt");