diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt index edf1a14238d..79a2974981b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.codegen.state +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.codegen.coroutines.unwrapInitialDescriptorForSuspendFunction import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.resolve.DescriptorUtils @@ -13,6 +14,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe import org.jetbrains.kotlin.resolve.jvm.requiresFunctionNameManglingForParameterTypes import org.jetbrains.kotlin.resolve.jvm.requiresFunctionNameManglingForReturnType import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.typeUtil.isPrimitiveNumberOrNullableType import org.jetbrains.kotlin.types.typeUtil.representativeUpperBound import java.security.MessageDigest import java.util.* @@ -29,19 +31,20 @@ fun getManglingSuffixBasedOnKotlinSignature( // Some stdlib functions ('Result.success', 'Result.failure') are annotated with '@JvmName' as a workaround for forward compatibility. if (DescriptorUtils.hasJvmNameAnnotation(descriptor)) return null - // If a function accepts inline class parameters, mangle its name. - if (requiresFunctionNameManglingForParameterTypes(descriptor)) { - return "-" + md5base64(collectSignatureForMangling(descriptor)) - } + val unwrappedDescriptor = descriptor.unwrapInitialDescriptorForSuspendFunction() - // If a class member function returns inline class value, mangle its name. - // NB here function can be a suspend function JVM view with return type replaced with 'Any', - // should unwrap it and take original return type instead. - if (shouldMangleByReturnType) { - val unwrappedDescriptor = descriptor.unwrapInitialDescriptorForSuspendFunction() - if (requiresFunctionNameManglingForReturnType(unwrappedDescriptor)) { - return "-" + md5base64(":" + getSignatureElementForMangling(unwrappedDescriptor.returnType!!)) - } + // If a function accepts inline class parameters, mangle its name. + if (requiresFunctionNameManglingForParameterTypes(descriptor) || + (shouldMangleByReturnType && requiresFunctionNameManglingForReturnType(unwrappedDescriptor)) + ) { + // If a class member function returns inline class value, mangle its name. + // NB here function can be a suspend function JVM view with return type replaced with 'Any', + // should unwrap it and take original return type instead. + val signature = collectSignatureForMangling(descriptor) + + if (shouldMangleByReturnType && requiresFunctionNameManglingForReturnType(unwrappedDescriptor)) + ":" + getSignatureElementForMangling(unwrappedDescriptor.returnType!!) + else "" + return "-" + md5base64(signature) } return null } @@ -54,11 +57,13 @@ private fun collectSignatureForMangling(descriptor: CallableMemberDescriptor): S private fun getSignatureElementForMangling(type: KotlinType): String = buildString { val descriptor = type.constructor.declarationDescriptor ?: return "" when (descriptor) { - is ClassDescriptor -> { + is ClassDescriptor -> if (descriptor.isInline) { append('L') append(descriptor.fqNameUnsafe) if (type.isMarkedNullable) append('?') append(';') + } else { + append('x') } is TypeParameterDescriptor -> { diff --git a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java index 3053f16d46f..e2694f20f07 100644 --- a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java @@ -12837,6 +12837,11 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte runTest("compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclarationDisabled.kt"); } + @TestMetadata("changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt") + public void testChangingNullabilityOfOrdinaryClassIsBinaryCompatibleChange() throws Exception { + runTest("compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt"); + } + @TestMetadata("constructorsJvmSignaturesClash.kt") public void testConstructorsJvmSignaturesClash() throws Exception { runTest("compiler/testData/diagnostics/tests/inlineClasses/constructorsJvmSignaturesClash.kt"); 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 c510346ab76..d8d95005c45 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 @@ -14397,6 +14397,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt"); } + @TestMetadata("overrideGenericWithInlineClass.kt") + public void testOverrideGenericWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt"); + } + @TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt") public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt index 4dd8caa22a0..7587f6d4095 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt @@ -369,7 +369,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext) name = if (samSuperType == null && callee.returnType.erasedUpperBound.isInline && context.state.functionsWithInlineClassReturnTypesMangled) { // For functions with inline class return type we need to mangle the invoke method. // Otherwise, bridge lowering may fail to generate bridges for inline class types erasing to Any. - val suffix = InlineClassAbi.returnHashSuffix(callee) + val suffix = InlineClassAbi.hashSuffix(callee, true) Name.identifier("${superMethod.owner.name.asString()}-${suffix}") } else superMethod.owner.name returnType = callee.returnType diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt index 204849bdb18..a4f811e8633 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt @@ -72,10 +72,8 @@ object InlineClassAbi { } val suffix = when { - irFunction.fullValueParameterList.any { it.type.requiresMangling } -> - hashSuffix(irFunction) - mangleReturnTypes && irFunction.hasMangledReturnType -> - returnHashSuffix(irFunction) + irFunction.fullValueParameterList.any { it.type.requiresMangling } || (mangleReturnTypes && irFunction.hasMangledReturnType) -> + hashSuffix(irFunction, mangleReturnTypes) (irFunction.parent as? IrClass)?.isInline == true && irFunction.origin != IrDeclarationOrigin.IR_BUILTINS_STUB -> "impl" @@ -100,27 +98,26 @@ object InlineClassAbi { private val IrFunction.propertyName: Name get() = (this as IrSimpleFunction).correspondingPropertySymbol!!.owner.name - fun returnHashSuffix(irFunction: IrFunction) = - md5base64(":${irFunction.returnType.eraseToString()}") - - private fun hashSuffix(irFunction: IrFunction): String { + fun hashSuffix(irFunction: IrFunction, mangleReturnTypes: Boolean): String { val signatureElementsForMangling = irFunction.fullValueParameterList.mapTo(mutableListOf()) { it.type.eraseToString() } if (irFunction.isSuspend) { // The JVM backend computes mangled names after creating suspend function views, but before default argument // stub insertion. It would be nice if this part of the continuation lowering happened earlier in the pipeline. // TODO: Move suspend function view creation before JvmInlineClassLowering. - signatureElementsForMangling += "Lkotlin.coroutines.Continuation;" + signatureElementsForMangling += "x" } - return md5base64(signatureElementsForMangling.joinToString()) + val signatureString = signatureElementsForMangling.joinToString() + + if (mangleReturnTypes && irFunction.hasMangledReturnType) ":${irFunction.returnType.eraseToString()}" else "" + return md5base64(signatureString) } - private fun IrType.eraseToString() = buildString { + private fun IrType.eraseToString() = if (getClass()?.isInline == true) buildString { append('L') append(erasedUpperBound.fqNameWhenAvailable!!) if (isNullable()) append('?') append(';') - } + } else "x" } internal val IrType.requiresMangling: Boolean diff --git a/compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt b/compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt new file mode 100644 index 00000000000..cd364e0730f --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt @@ -0,0 +1,20 @@ +inline class Marker(val i: Int) + +interface I { + fun foo(i: Marker) : T +} + +inline class IC(val a: Any) + +class C : I { + override fun foo(i: Marker): IC = IC("OK") +} + +fun box(): String { + val i: I = C() + val foo: IC = i.foo(Marker(0)) + if (foo.a != "OK") return "FAIL 1" + val foo1: IC = C().foo(Marker(0)) + if (foo1.a != "OK") return "FAIL 2" + return "OK" +} diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/list.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/list.txt index 749284caf33..5a214731a3a 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/list.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/list.txt @@ -21,8 +21,8 @@ public final class InlineList { private synthetic method (p0: java.util.List): void public synthetic method add(p0: int, p1: java.lang.Object): void public synthetic method add(p0: java.lang.Object): boolean - public method add-_bimVNw(p0: int, p1: int): void public method add-jHY5zpA(p0: int): boolean + public method add-rENGgLQ(p0: int, p1: int): void public method addAll(p0: int, p1: java.util.Collection): boolean public method addAll(p0: java.util.Collection): boolean public synthetic final static method box-impl(p0: java.util.List): InlineList @@ -37,8 +37,8 @@ public final class InlineList { public static method equals-impl(p0: java.util.List, p1: java.lang.Object): boolean public final static method equals-impl0(p0: java.util.List, p1: java.util.List): boolean public synthetic bridge method get(p0: int): java.lang.Object - public method get-XAcLw3A(p0: int): int - public static method get-XAcLw3A(p0: java.util.List, p1: int): int + public method get-JnfgTak(p0: int): int + public static method get-JnfgTak(p0: java.util.List, p1: int): int public method getSize(): int public static method getSize-impl(p0: java.util.List): int public method hashCode(): int @@ -63,7 +63,7 @@ public final class InlineList { public method removeAll(p0: java.util.Collection): boolean public method retainAll(p0: java.util.Collection): boolean public synthetic method set(p0: int, p1: java.lang.Object): java.lang.Object - public method set-_bimVNw(p0: int, p1: int): int + public method set-Geu8JnU(p0: int, p1: int): int public bridge final method size(): int public method subList(p0: int, p1: int): java.util.List public static method subList-impl(p0: java.util.List, p1: int, p2: int): java.util.List diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/list_ir.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/list_ir.txt index 0ebc3e3c566..545c025b400 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/list_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/list_ir.txt @@ -21,8 +21,8 @@ public final class InlineList { private synthetic method (p0: java.util.List): void public synthetic bridge method add(p0: int, p1: java.lang.Object): void public synthetic bridge method add(p0: java.lang.Object): boolean - public method add-_bimVNw(p0: int, p1: int): void public method add-jHY5zpA(p0: int): boolean + public method add-rENGgLQ(p0: int, p1: int): void public method addAll(p0: int, p1: java.util.Collection): boolean public method addAll(p0: java.util.Collection): boolean public synthetic final static method box-impl(p0: java.util.List): InlineList @@ -37,8 +37,8 @@ public final class InlineList { public static method equals-impl(p0: java.util.List, p1: java.lang.Object): boolean public final static method equals-impl0(p0: java.util.List, p1: java.util.List): boolean public synthetic bridge method get(p0: int): java.lang.Object - public method get-XAcLw3A(p0: int): int - public static method get-XAcLw3A(p0: java.util.List, p1: int): int + public method get-JnfgTak(p0: int): int + public static method get-JnfgTak(p0: java.util.List, p1: int): int public method getSize(): int public static method getSize-impl(p0: java.util.List): int public method hashCode(): int @@ -63,7 +63,7 @@ public final class InlineList { public method removeAll(p0: java.util.Collection): boolean public method retainAll(p0: java.util.Collection): boolean public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object - public method set-_bimVNw(p0: int, p1: int): int + public method set-Geu8JnU(p0: int, p1: int): int public synthetic bridge method size(): int public method subList(p0: int, p1: int): java.util.List public static method subList-impl(p0: java.util.List, p1: int, p2: int): java.util.List diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/map.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/map.txt index f49fe34f3c4..72a6cd266db 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/map.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/map.txt @@ -50,8 +50,8 @@ public final class InlineMap { public static method equals-impl(p0: java.util.Map, p1: java.lang.Object): boolean public final static method equals-impl0(p0: java.util.Map, p1: java.util.Map): boolean public bridge final method get(p0: java.lang.Object): java.lang.Object - public method get-FSIWiWE(p0: int): IV - public static method get-FSIWiWE(p0: java.util.Map, p1: int): IV + public method get-qgyy0Jc(p0: int): IV + public static method get-qgyy0Jc(p0: java.util.Map, p1: int): IV public method getEntries(): java.util.Set public static method getEntries-impl(p0: java.util.Map): java.util.Set public method getKeys(): java.util.Set @@ -66,7 +66,7 @@ public final class InlineMap { public static method isEmpty-impl(p0: java.util.Map): boolean public bridge final method keySet(): java.util.Set public synthetic method put(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object - public method put-pjrbk2k(p0: int, p1: double): IV + public method put-eSoqwEg(p0: int, p1: double): IV public method putAll(p0: java.util.Map): void public method remove(p0: java.lang.Object): java.lang.Object public bridge final method size(): int diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mapEntry.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mapEntry.txt index 1e92d29064c..45a7fff750d 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mapEntry.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mapEntry.txt @@ -50,7 +50,7 @@ public final class InlineMapEntry { public method hashCode(): int public static method hashCode-impl(p0: java.util.Map$Entry): int public synthetic method setValue(p0: java.lang.Object): java.lang.Object - public method setValue-jbX5DO8(p0: double): double + public method setValue-cYiyq8k(p0: double): double public method toString(): java.lang.String public static method toString-impl(p0: java.util.Map$Entry): java.lang.String public synthetic final method unbox-impl(): java.util.Map$Entry diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mapEntry_ir.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mapEntry_ir.txt index 6564cf86e94..c93d273e7b4 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mapEntry_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mapEntry_ir.txt @@ -50,7 +50,7 @@ public final class InlineMapEntry { public method hashCode(): int public static method hashCode-impl(p0: java.util.Map$Entry): int public synthetic bridge method setValue(p0: java.lang.Object): java.lang.Object - public method setValue-jbX5DO8(p0: double): double + public method setValue-cYiyq8k(p0: double): double public method toString(): java.lang.String public static method toString-impl(p0: java.util.Map$Entry): java.lang.String public synthetic final method unbox-impl(): java.util.Map$Entry diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/map_ir.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/map_ir.txt index cb491d7ac80..79daf9cdeea 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/map_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/map_ir.txt @@ -50,8 +50,8 @@ public final class InlineMap { public static method equals-impl(p0: java.util.Map, p1: java.lang.Object): boolean public final static method equals-impl0(p0: java.util.Map, p1: java.util.Map): boolean public synthetic bridge method get(p0: java.lang.Object): java.lang.Object - public method get-FSIWiWE(p0: int): IV - public static method get-FSIWiWE(p0: java.util.Map, p1: int): IV + public method get-qgyy0Jc(p0: int): IV + public static method get-qgyy0Jc(p0: java.util.Map, p1: int): IV public method getEntries(): java.util.Set public static method getEntries-impl(p0: java.util.Map): java.util.Set public method getKeys(): java.util.Set @@ -66,11 +66,11 @@ public final class InlineMap { public static method isEmpty-impl(p0: java.util.Map): boolean public synthetic bridge method keySet(): java.util.Set public synthetic bridge method put(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object - public method put-pjrbk2k(p0: int, p1: double): IV + public method put-eSoqwEg(p0: int, p1: double): IV public method putAll(p0: java.util.Map): void public bridge final method remove(p0: java.lang.Object): IV public synthetic bridge method remove(p0: java.lang.Object): java.lang.Object - public method remove-i7hxwoc(p0: java.lang.Object): IV + public method remove-Ilea9M0(p0: java.lang.Object): IV public synthetic bridge method size(): int public method toString(): java.lang.String public static method toString-impl(p0: java.util.Map): java.lang.String diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableList.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableList.txt index 1b78c07af56..01dac07b709 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableList.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableList.txt @@ -21,10 +21,10 @@ public final class InlineMutableList { private synthetic method (p0: java.util.List): void public synthetic bridge method add(p0: int, p1: java.lang.Object): void public synthetic bridge method add(p0: java.lang.Object): boolean - public method add-_bimVNw(p0: int, p1: long): void - public static method add-_bimVNw(p0: java.util.List, p1: int, p2: long): void public static method add-jHY5zpA(p0: java.util.List, p1: long): boolean public method add-jHY5zpA(p0: long): boolean + public method add-rENGgLQ(p0: int, p1: long): void + public static method add-rENGgLQ(p0: java.util.List, p1: int, p2: long): void public method addAll(p0: int, p1: java.util.Collection): boolean public method addAll(p0: java.util.Collection): boolean public static method addAll-impl(p0: java.util.List, p1: int, p2: java.util.Collection): boolean @@ -42,8 +42,8 @@ public final class InlineMutableList { public static method equals-impl(p0: java.util.List, p1: java.lang.Object): boolean public final static method equals-impl0(p0: java.util.List, p1: java.util.List): boolean public synthetic bridge method get(p0: int): java.lang.Object - public method get-XAcLw3A(p0: int): long - public static method get-XAcLw3A(p0: java.util.List, p1: int): long + public method get-JnfgTak(p0: int): long + public static method get-JnfgTak(p0: java.util.List, p1: int): long public method getSize(): int public static method getSize-impl(p0: java.util.List): int public method hashCode(): int @@ -69,13 +69,13 @@ public final class InlineMutableList { public method remove-jHY5zpA(p0: long): boolean public method removeAll(p0: java.util.Collection): boolean public static method removeAll-impl(p0: java.util.List, p1: java.util.Collection): boolean - public method removeAt-XAcLw3A(p0: int): long - public static method removeAt-XAcLw3A(p0: java.util.List, p1: int): long + public method removeAt-JnfgTak(p0: int): long + public static method removeAt-JnfgTak(p0: java.util.List, p1: int): long public method retainAll(p0: java.util.Collection): boolean public static method retainAll-impl(p0: java.util.List, p1: java.util.Collection): boolean public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object - public method set-_bimVNw(p0: int, p1: long): long - public static method set-_bimVNw(p0: java.util.List, p1: int, p2: long): long + public method set-Geu8JnU(p0: int, p1: long): long + public static method set-Geu8JnU(p0: java.util.List, p1: int, p2: long): long public bridge final method size(): int public method subList(p0: int, p1: int): java.util.List public static method subList-impl(p0: java.util.List, p1: int, p2: int): java.util.List diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableList_ir.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableList_ir.txt index c17c4e5d9c0..62efe7547f3 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableList_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableList_ir.txt @@ -21,10 +21,10 @@ public final class InlineMutableList { private synthetic method (p0: java.util.List): void public synthetic bridge method add(p0: int, p1: java.lang.Object): void public synthetic bridge method add(p0: java.lang.Object): boolean - public method add-_bimVNw(p0: int, p1: long): void - public static method add-_bimVNw(p0: java.util.List, p1: int, p2: long): void public static method add-jHY5zpA(p0: java.util.List, p1: long): boolean public method add-jHY5zpA(p0: long): boolean + public method add-rENGgLQ(p0: int, p1: long): void + public static method add-rENGgLQ(p0: java.util.List, p1: int, p2: long): void public method addAll(p0: int, p1: java.util.Collection): boolean public method addAll(p0: java.util.Collection): boolean public static method addAll-impl(p0: java.util.List, p1: int, p2: java.util.Collection): boolean @@ -42,8 +42,8 @@ public final class InlineMutableList { public static method equals-impl(p0: java.util.List, p1: java.lang.Object): boolean public final static method equals-impl0(p0: java.util.List, p1: java.util.List): boolean public synthetic bridge method get(p0: int): java.lang.Object - public method get-XAcLw3A(p0: int): long - public static method get-XAcLw3A(p0: java.util.List, p1: int): long + public method get-JnfgTak(p0: int): long + public static method get-JnfgTak(p0: java.util.List, p1: int): long public method getSize(): int public static method getSize-impl(p0: java.util.List): int public method hashCode(): int @@ -69,13 +69,13 @@ public final class InlineMutableList { public method remove-jHY5zpA(p0: long): boolean public method removeAll(p0: java.util.Collection): boolean public static method removeAll-impl(p0: java.util.List, p1: java.util.Collection): boolean - public method removeAt-XAcLw3A(p0: int): long - public static method removeAt-XAcLw3A(p0: java.util.List, p1: int): long + public method removeAt-JnfgTak(p0: int): long + public static method removeAt-JnfgTak(p0: java.util.List, p1: int): long public method retainAll(p0: java.util.Collection): boolean public static method retainAll-impl(p0: java.util.List, p1: java.util.Collection): boolean public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object - public method set-_bimVNw(p0: int, p1: long): long - public static method set-_bimVNw(p0: java.util.List, p1: int, p2: long): long + public method set-Geu8JnU(p0: int, p1: long): long + public static method set-Geu8JnU(p0: java.util.List, p1: int, p2: long): long public synthetic bridge method size(): int public method subList(p0: int, p1: int): java.util.List public static method subList-impl(p0: java.util.List, p1: int, p2: int): java.util.List diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMap.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMap.txt index 7239d03d579..da3683dba69 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMap.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMap.txt @@ -51,8 +51,8 @@ public final class InlineMutableMap { public static method equals-impl(p0: java.util.Map, p1: java.lang.Object): boolean public final static method equals-impl0(p0: java.util.Map, p1: java.util.Map): boolean public bridge final method get(p0: java.lang.Object): java.lang.Object - public method get-FSIWiWE(p0: int): IV - public static method get-FSIWiWE(p0: java.util.Map, p1: int): IV + public method get-qgyy0Jc(p0: int): IV + public static method get-qgyy0Jc(p0: java.util.Map, p1: int): IV public method getEntries(): java.util.Set public static method getEntries-impl(p0: java.util.Map): java.util.Set public method getKeys(): java.util.Set @@ -67,13 +67,13 @@ public final class InlineMutableMap { public static method isEmpty-impl(p0: java.util.Map): boolean public bridge final method keySet(): java.util.Set public synthetic bridge method put(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object - public method put-pjrbk2k(p0: int, p1: double): IV - public static method put-pjrbk2k(p0: java.util.Map, p1: int, p2: double): IV + public method put-eSoqwEg(p0: int, p1: double): IV + public static method put-eSoqwEg(p0: java.util.Map, p1: int, p2: double): IV public method putAll(p0: java.util.Map): void public static method putAll-impl(p0: java.util.Map, p1: java.util.Map): void public bridge final method remove(p0: java.lang.Object): java.lang.Object - public method remove-FSIWiWE(p0: int): IV - public static method remove-FSIWiWE(p0: java.util.Map, p1: int): IV + public method remove-qgyy0Jc(p0: int): IV + public static method remove-qgyy0Jc(p0: java.util.Map, p1: int): IV public bridge final method size(): int public method toString(): java.lang.String public static method toString-impl(p0: java.util.Map): java.lang.String diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMapEntry.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMapEntry.txt index a0e0083055f..c785efd7c01 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMapEntry.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMapEntry.txt @@ -50,8 +50,8 @@ public final class InlineMutableMapEntry { public method hashCode(): int public static method hashCode-impl(p0: java.util.Map$Entry): int public synthetic bridge method setValue(p0: java.lang.Object): java.lang.Object - public method setValue-jbX5DO8(p0: double): double - public static method setValue-jbX5DO8(p0: java.util.Map$Entry, p1: double): double + public method setValue-cYiyq8k(p0: double): double + public static method setValue-cYiyq8k(p0: java.util.Map$Entry, p1: double): double public method toString(): java.lang.String public static method toString-impl(p0: java.util.Map$Entry): java.lang.String public synthetic final method unbox-impl(): java.util.Map$Entry diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMap_ir.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMap_ir.txt index 657df961e74..d0692071ecb 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMap_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCollectionOfInlineClass/mutableMap_ir.txt @@ -51,8 +51,8 @@ public final class InlineMutableMap { public static method equals-impl(p0: java.util.Map, p1: java.lang.Object): boolean public final static method equals-impl0(p0: java.util.Map, p1: java.util.Map): boolean public synthetic bridge method get(p0: java.lang.Object): java.lang.Object - public method get-FSIWiWE(p0: int): IV - public static method get-FSIWiWE(p0: java.util.Map, p1: int): IV + public method get-qgyy0Jc(p0: int): IV + public static method get-qgyy0Jc(p0: java.util.Map, p1: int): IV public method getEntries(): java.util.Set public static method getEntries-impl(p0: java.util.Map): java.util.Set public method getKeys(): java.util.Set @@ -67,14 +67,14 @@ public final class InlineMutableMap { public static method isEmpty-impl(p0: java.util.Map): boolean public synthetic bridge method keySet(): java.util.Set public synthetic bridge method put(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object - public method put-pjrbk2k(p0: int, p1: double): IV - public static method put-pjrbk2k(p0: java.util.Map, p1: int, p2: double): IV + public method put-eSoqwEg(p0: int, p1: double): IV + public static method put-eSoqwEg(p0: java.util.Map, p1: int, p2: double): IV public method putAll(p0: java.util.Map): void public static method putAll-impl(p0: java.util.Map, p1: java.util.Map): void public bridge final method remove(p0: java.lang.Object): IV public synthetic bridge method remove(p0: java.lang.Object): java.lang.Object - public method remove-FSIWiWE(p0: int): IV - public static method remove-FSIWiWE(p0: java.util.Map, p1: int): IV + public method remove-qgyy0Jc(p0: int): IV + public static method remove-qgyy0Jc(p0: java.util.Map, p1: int): IV public synthetic bridge method size(): int public method toString(): java.lang.String public static method toString-impl(p0: java.util.Map): java.lang.String diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.kt new file mode 100644 index 00000000000..f80a9a0f85f --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.kt @@ -0,0 +1,6 @@ +// !LANGUAGE: +InlineClasses + +inline class IC(val i: Int) + +fun foo(i: Int, ic: IC) {} +fun foo(i: Int?, ic: IC) {} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.txt new file mode 100644 index 00000000000..6fd2d077823 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.txt @@ -0,0 +1,24 @@ +@kotlin.Metadata +public final class IC { + // source: 'nullableAndNotNullPrimitive.kt' + private final field i: int + private synthetic method (p0: int): void + public synthetic final static method box-impl(p0: int): IC + public static method constructor-impl(p0: int): int + public method equals(p0: java.lang.Object): boolean + public static method equals-impl(p0: int, p1: java.lang.Object): boolean + public final static method equals-impl0(p0: int, p1: int): boolean + public final method getI(): int + public method hashCode(): int + public static method hashCode-impl(p0: int): int + public method toString(): java.lang.String + public static method toString-impl(p0: int): java.lang.String + public synthetic final method unbox-impl(): int +} + +@kotlin.Metadata +public final class NullableAndNotNullPrimitiveKt { + // source: 'nullableAndNotNullPrimitive.kt' + public final static method foo-MSgPiiU(@org.jetbrains.annotations.Nullable p0: java.lang.Integer, p1: int): void + public final static method foo-MSgPiiU(p0: int, p1: int): void +} diff --git a/compiler/testData/codegen/bytecodeListing/kt42879.txt b/compiler/testData/codegen/bytecodeListing/kt42879.txt index 08e63465dff..f52a4c4eeb0 100644 --- a/compiler/testData/codegen/bytecodeListing/kt42879.txt +++ b/compiler/testData/codegen/bytecodeListing/kt42879.txt @@ -19,7 +19,7 @@ public final class A { @kotlin.Metadata public interface I { // source: 'kt42879.kt' - public abstract method compute-GKOAj6k(p0: int): int + public abstract method compute-WzO2ekY(p0: int): int } @kotlin.Metadata @@ -30,7 +30,7 @@ final class Kt42879Kt$g$1 { inner (anonymous) class Kt42879Kt$g$1 static method (): void method (): void - public final method compute-GKOAj6k(p0: int): int + public final method compute-WzO2ekY(p0: int): int } @kotlin.Metadata diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/delegatedPropertyMangling.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/delegatedPropertyMangling.kt index 6f0898a27cb..bb28ea1d8a0 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/delegatedPropertyMangling.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/delegatedPropertyMangling.kt @@ -18,6 +18,6 @@ class B : A { override val i by Delegate() } -// 1 public final getValue-lPtA-2M\(Ljava/lang/Object;Lkotlin/reflect/KProperty;\)I +// 1 public final getValue-Y6jMyTM\(Ljava/lang/Object;Lkotlin/reflect/KProperty;\)I // 1 public getI-lPtA-2M\(\)I // 1 public abstract getI-lPtA-2M\(\)I diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/noBoxingUnboxingInAccessorsForDelegatedPropertyWithInlineClassDelegate.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/noBoxingUnboxingInAccessorsForDelegatedPropertyWithInlineClassDelegate.kt index a6a83e59960..fe53aa20950 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/noBoxingUnboxingInAccessorsForDelegatedPropertyWithInlineClassDelegate.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/noBoxingUnboxingInAccessorsForDelegatedPropertyWithInlineClassDelegate.kt @@ -28,6 +28,6 @@ inline class Delegate(val default: Int) { // 0 DelegateFactory\.unbox // 0 Delegate\.box // 0 Delegate\.unbox -// 1 INVOKESTATIC DelegateFactory\.provideDelegate-ARVzKNs \(ILjava/lang/Object;Ljava/lang/Object;\)I +// 1 INVOKESTATIC DelegateFactory\.provideDelegate-gy51yk8 \(ILjava/lang/Object;Ljava/lang/Object;\)I // 1 INVOKESTATIC Delegate\.getValue-impl \(ILjava/lang/Object;Ljava/lang/Object;\)I // 1 INVOKESTATIC Delegate\.setValue-impl \(ILjava/lang/Object;Ljava/lang/Object;I\)V \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/suspendFunctionMangling.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/suspendFunctionMangling.kt index 730fcca579d..dea971a8d24 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/suspendFunctionMangling.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/suspendFunctionMangling.kt @@ -13,7 +13,7 @@ suspend fun bar(p: P) {} // The mangled name for a suspend function includes the continuation parameter in the hash computation, but not the // default argument mask and handler. -// 1 public final static foo-zMJ7EWY\(ILkotlin/coroutines/Continuation;\)Ljava/lang/Object; -// 1 public static synthetic foo-zMJ7EWY\$default\(ILkotlin/coroutines/Continuation;ILjava/lang/Object;\)Ljava/lang/Object; -// 1 INVOKESTATIC a/TestKt.foo-zMJ7EWY \(ILkotlin/coroutines/Continuation;\)Ljava/lang/Object; -// 1 public final static bar-zMJ7EWY\(ILkotlin/coroutines/Continuation;\)Ljava/lang/Object; \ No newline at end of file +// 1 public final static foo-opU5HYo\(ILkotlin/coroutines/Continuation;\)Ljava/lang/Object; +// 1 public static synthetic foo-opU5HYo\$default\(ILkotlin/coroutines/Continuation;ILjava/lang/Object;\)Ljava/lang/Object; +// 1 INVOKESTATIC a/TestKt.foo-opU5HYo \(ILkotlin/coroutines/Continuation;\)Ljava/lang/Object; +// 1 public final static bar-opU5HYo\(ILkotlin/coroutines/Continuation;\)Ljava/lang/Object; \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.fir.kt b/compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.fir.kt new file mode 100644 index 00000000000..3ad0a8a9070 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.fir.kt @@ -0,0 +1,7 @@ +// !LANGUAGE: +InlineClasses +// !DIAGNOSTICS: -UNUSED_PARAMETER + +inline class IC(val i: Int) + +fun foo(a: Any, ic: IC) {} +fun foo(a: Any?, ic: IC) {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt b/compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt new file mode 100644 index 00000000000..f0d500dabbd --- /dev/null +++ b/compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt @@ -0,0 +1,7 @@ +// !LANGUAGE: +InlineClasses +// !DIAGNOSTICS: -UNUSED_PARAMETER + +inline class IC(val i: Int) + +fun foo(a: Any, ic: IC) {} +fun foo(a: Any?, ic: IC) {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.txt b/compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.txt new file mode 100644 index 00000000000..bf10ceb74b6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.txt @@ -0,0 +1,12 @@ +package + +public fun foo(/*0*/ a: kotlin.Any, /*1*/ ic: IC): kotlin.Unit +public fun foo(/*0*/ a: kotlin.Any?, /*1*/ ic: IC): kotlin.Unit + +public final inline class IC { + public constructor IC(/*0*/ i: kotlin.Int) + public final val i: kotlin.Int + public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt new file mode 100644 index 00000000000..f0d500dabbd --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt @@ -0,0 +1,7 @@ +// !LANGUAGE: +InlineClasses +// !DIAGNOSTICS: -UNUSED_PARAMETER + +inline class IC(val i: Int) + +fun foo(a: Any, ic: IC) {} +fun foo(a: Any?, ic: IC) {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.txt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.txt new file mode 100644 index 00000000000..bf10ceb74b6 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.txt @@ -0,0 +1,12 @@ +package + +public fun foo(/*0*/ a: kotlin.Any, /*1*/ ic: IC): kotlin.Unit +public fun foo(/*0*/ a: kotlin.Any?, /*1*/ ic: IC): kotlin.Unit + +public final inline class IC { + public constructor IC(/*0*/ i: kotlin.Int) + public final val i: kotlin.Int + public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/writeSignature/inlineClasses/genericMethodInsideClass.kt b/compiler/testData/writeSignature/inlineClasses/genericMethodInsideClass.kt index 452dabd40c8..a1c6ee3525a 100644 --- a/compiler/testData/writeSignature/inlineClasses/genericMethodInsideClass.kt +++ b/compiler/testData/writeSignature/inlineClasses/genericMethodInsideClass.kt @@ -22,6 +22,6 @@ inline class SomeClass(val v: Int) { // jvm signature: (ILjava/lang/Object;)Ljava/lang/Object; // generic signature: (ITK;)TK; -// method: SomeClass$Companion::comp-Uh6wWds +// method: SomeClass$Companion::comp-aew-wRw // jvm signature: (ILjava/lang/Object;)Ljava/lang/Object; // generic signature: (ITT;)TT; \ No newline at end of file diff --git a/compiler/testData/writeSignature/inlineClasses/simpleSignatureWithInlineClassTypesAsPrimitive.kt b/compiler/testData/writeSignature/inlineClasses/simpleSignatureWithInlineClassTypesAsPrimitive.kt index 66b6444e9a4..3e122d9cb7d 100644 --- a/compiler/testData/writeSignature/inlineClasses/simpleSignatureWithInlineClassTypesAsPrimitive.kt +++ b/compiler/testData/writeSignature/inlineClasses/simpleSignatureWithInlineClassTypesAsPrimitive.kt @@ -21,6 +21,6 @@ object Test { // jvm signature: (I)V // generic signature: null -// method: Test::asAll--J2ODwA +// method: Test::asAll-wqC9CcI // jvm signature: (ILjava/lang/Object;II)I // generic signature: null diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 8bc1276f43e..bf42951674e 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -12844,6 +12844,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTestWithFirVali runTest("compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclarationDisabled.kt"); } + @TestMetadata("changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt") + public void testChangingNullabilityOfOrdinaryClassIsBinaryCompatibleChange() throws Exception { + runTest("compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt"); + } + @TestMetadata("constructorsJvmSignaturesClash.kt") public void testConstructorsJvmSignaturesClash() throws Exception { runTest("compiler/testData/diagnostics/tests/inlineClasses/constructorsJvmSignaturesClash.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java index e0cd9473b27..865e2a9417a 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java @@ -61,6 +61,11 @@ public class DiagnosticsTestWithJvmIrBackendGenerated extends AbstractDiagnostic runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/caseInProperties.kt"); } + @TestMetadata("changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt") + public void testChangingNullabilityOfOrdinaryClassIsBinaryCompatibleChange() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt"); + } + @TestMetadata("vararg.kt") public void testVararg() throws Exception { runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/vararg.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithOldJvmBackendGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithOldJvmBackendGenerated.java index 8589ffca787..7caddc4167e 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithOldJvmBackendGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithOldJvmBackendGenerated.java @@ -61,6 +61,11 @@ public class DiagnosticsTestWithOldJvmBackendGenerated extends AbstractDiagnosti runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/caseInProperties.kt"); } + @TestMetadata("changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt") + public void testChangingNullabilityOfOrdinaryClassIsBinaryCompatibleChange() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt"); + } + @TestMetadata("vararg.kt") public void testVararg() throws Exception { runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/vararg.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 69aee9d9d3e..2c8875e5bf0 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -12839,6 +12839,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclarationDisabled.kt"); } + @TestMetadata("changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt") + public void testChangingNullabilityOfOrdinaryClassIsBinaryCompatibleChange() throws Exception { + runTest("compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt"); + } + @TestMetadata("constructorsJvmSignaturesClash.kt") public void testConstructorsJvmSignaturesClash() throws Exception { runTest("compiler/testData/diagnostics/tests/inlineClasses/constructorsJvmSignaturesClash.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 5ef49e33862..cf272f439bf 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -15797,6 +15797,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt"); } + @TestMetadata("overrideGenericWithInlineClass.kt") + public void testOverrideGenericWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt"); + } + @TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt") public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index dbaf2b71209..bf0b3616a62 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -987,6 +987,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/nullabilityInExpansion.kt"); } + @TestMetadata("nullableAndNotNullPrimitive.kt") + public void testNullableAndNotNullPrimitive() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.kt"); + } + @TestMetadata("overridingGenericMethodWithInlineClassParameterType.kt") public void testOverridingGenericMethodWithInlineClassParameterType() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/overridingGenericMethodWithInlineClassParameterType.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index c09f7381aa5..54557305203 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15797,6 +15797,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt"); } + @TestMetadata("overrideGenericWithInlineClass.kt") + public void testOverrideGenericWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt"); + } + @TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt") public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 47e76b02666..dbd4c719cbc 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -14397,6 +14397,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt"); } + @TestMetadata("overrideGenericWithInlineClass.kt") + public void testOverrideGenericWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt"); + } + @TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt") public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index d8b11c49fc1..3f148602bf5 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -957,6 +957,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/nullabilityInExpansion.kt"); } + @TestMetadata("nullableAndNotNullPrimitive.kt") + public void testNullableAndNotNullPrimitive() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.kt"); + } + @TestMetadata("overridingGenericMethodWithInlineClassParameterType.kt") public void testOverridingGenericMethodWithInlineClassParameterType() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/overridingGenericMethodWithInlineClassParameterType.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 80951a4b7fa..186b2ee5c47 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -12392,6 +12392,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt"); } + @TestMetadata("overrideGenericWithInlineClass.kt") + public void testOverrideGenericWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt"); + } + @TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt") public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 61fc3d19434..a048e4df518 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -12392,6 +12392,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt"); } + @TestMetadata("overrideGenericWithInlineClass.kt") + public void testOverrideGenericWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt"); + } + @TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt") public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 4f712e2fd20..717af2f9742 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -12457,6 +12457,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt"); } + @TestMetadata("overrideGenericWithInlineClass.kt") + public void testOverrideGenericWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt"); + } + @TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt") public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt");