Fix signature mapping for built-in methods inside erased inline class
This commit is contained in:
@@ -1257,7 +1257,7 @@ public class KotlinTypeMapper {
|
||||
|
||||
JvmMethodGenericSignature signature = sw.makeJvmMethodSignature(mapFunctionName(f));
|
||||
|
||||
if (kind != OwnerKind.DEFAULT_IMPLS && !hasSpecialBridge) {
|
||||
if (kind != OwnerKind.DEFAULT_IMPLS && kind != OwnerKind.ERASED_INLINE_CLASS && !hasSpecialBridge) {
|
||||
SpecialSignatureInfo specialSignatureInfo = BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo(f);
|
||||
|
||||
if (specialSignatureInfo != null) {
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// WITH_RUNTIME
|
||||
// TARGET_BACKEND: JVM
|
||||
|
||||
inline class MyUInt(val x: Int)
|
||||
|
||||
inline class MyUIntArray(private val storage: IntArray) : Collection<MyUInt> {
|
||||
public override val size: Int get() = storage.size
|
||||
|
||||
override operator fun iterator() = TODO()
|
||||
override fun contains(element: MyUInt): Boolean = storage.contains(element.x)
|
||||
override fun containsAll(elements: Collection<MyUInt>): Boolean = elements.all { storage.contains(it.x) }
|
||||
override fun isEmpty(): Boolean = TODO()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val uints = MyUIntArray(intArrayOf(0, 1, 42))
|
||||
|
||||
if (MyUInt(42) !in uints) return "Fail 1"
|
||||
|
||||
val ints = listOf(MyUInt(1), MyUInt(0))
|
||||
if (!uints.containsAll(ints)) return "Fail 2"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class UInt(val x: Int)
|
||||
|
||||
inline class UIntArray(private val storage: IntArray) : Collection<UInt> {
|
||||
public override val size: Int get() = storage.size
|
||||
|
||||
override operator fun iterator() = TODO()
|
||||
override fun contains(element: UInt): Boolean = TODO()
|
||||
override fun containsAll(elements: Collection<UInt>): Boolean = TODO()
|
||||
override fun isEmpty(): Boolean = TODO()
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package
|
||||
|
||||
public final inline class UInt {
|
||||
public constructor UInt(/*0*/ x: kotlin.Int)
|
||||
public final val x: kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final inline class UIntArray : kotlin.collections.Collection<UInt> {
|
||||
public constructor UIntArray(/*0*/ storage: kotlin.IntArray)
|
||||
public open override /*1*/ val size: kotlin.Int
|
||||
private final val storage: kotlin.IntArray
|
||||
public open override /*1*/ fun contains(/*0*/ element: UInt): kotlin.Boolean
|
||||
public open override /*1*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection<UInt>): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ fun isEmpty(): kotlin.Boolean
|
||||
public open override /*1*/ fun iterator(): kotlin.Nothing
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Generated
+5
@@ -11264,6 +11264,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassImplementsCollection.kt")
|
||||
public void testInlineClassImplementsCollection() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassImplementsCollection.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineFunctionInsideInlineClass.kt")
|
||||
public void testInlineFunctionInsideInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt");
|
||||
|
||||
@@ -10716,6 +10716,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassImplementsCollection.kt")
|
||||
public void testInlineClassImplementsCollection() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/inlineClassImplementsCollection.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassesInsideAnnotations.kt")
|
||||
public void testInlineClassesInsideAnnotations() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/inlineClassesInsideAnnotations.kt");
|
||||
|
||||
Generated
+5
@@ -10716,6 +10716,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassImplementsCollection.kt")
|
||||
public void testInlineClassImplementsCollection() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/inlineClassImplementsCollection.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassesInsideAnnotations.kt")
|
||||
public void testInlineClassesInsideAnnotations() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/inlineClassesInsideAnnotations.kt");
|
||||
|
||||
+5
@@ -11264,6 +11264,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassImplementsCollection.kt")
|
||||
public void testInlineClassImplementsCollection() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassImplementsCollection.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineFunctionInsideInlineClass.kt")
|
||||
public void testInlineFunctionInsideInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt");
|
||||
|
||||
+5
@@ -11264,6 +11264,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassImplementsCollection.kt")
|
||||
public void testInlineClassImplementsCollection() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassImplementsCollection.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineFunctionInsideInlineClass.kt")
|
||||
public void testInlineFunctionInsideInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt");
|
||||
|
||||
Reference in New Issue
Block a user