KT-43045 mangle function name for fake override with default impl
This commit is contained in:
Generated
+5
@@ -13612,6 +13612,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultWithInlineClassArgument.kt")
|
||||
public void testDefaultWithInlineClassArgument() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt");
|
||||
|
||||
+3
-3
@@ -135,9 +135,9 @@ private class JvmInlineClassLowering(private val context: JvmBackendContext) : F
|
||||
val bridgeFunction = createBridgeDeclaration(
|
||||
function,
|
||||
when {
|
||||
// If the original function has signature which need mangling we still need to replace
|
||||
// it with a mangled version.
|
||||
!function.isFakeOverride && function.signatureRequiresMangling() ->
|
||||
// If the original function has signature which need mangling we still need to replace it with a mangled version.
|
||||
(!function.isFakeOverride || function.findInterfaceImplementation(context.state.jvmDefaultMode) != null) &&
|
||||
function.signatureRequiresMangling() ->
|
||||
replacement.name
|
||||
// Since we remove the corresponding property symbol from the bridge we need to resolve getter/setter
|
||||
// names at this point.
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
interface IFoo<T> {
|
||||
fun foo(x: T): String = "O"
|
||||
fun T.bar(): String = "K"
|
||||
}
|
||||
|
||||
inline class L(val x: Long) : IFoo<L>
|
||||
|
||||
fun box(): String {
|
||||
val z = L(0L)
|
||||
return with(z) {
|
||||
foo(z) + z.bar()
|
||||
}
|
||||
}
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
interface IFoo<T> {
|
||||
fun foo(x: T): String = "OK"
|
||||
fun T.bar(): String = "OK"
|
||||
fun withDefault(x: T, y: Int = 42): String = "OK"
|
||||
}
|
||||
|
||||
inline class L(val x: Long) : IFoo<L>
|
||||
|
||||
class X : IFoo<L>
|
||||
Vendored
+57
@@ -0,0 +1,57 @@
|
||||
@kotlin.Metadata
|
||||
public final class IFoo$DefaultImpls {
|
||||
// source: 'defaultInterfaceMethodsInInlineClass.kt'
|
||||
public static @org.jetbrains.annotations.NotNull method bar(@org.jetbrains.annotations.NotNull p0: IFoo, p1: java.lang.Object): java.lang.String
|
||||
public static @org.jetbrains.annotations.NotNull method foo(@org.jetbrains.annotations.NotNull p0: IFoo, p1: java.lang.Object): java.lang.String
|
||||
public synthetic static method withDefault$default(p0: IFoo, p1: java.lang.Object, p2: int, p3: int, p4: java.lang.Object): java.lang.String
|
||||
public static @org.jetbrains.annotations.NotNull method withDefault(@org.jetbrains.annotations.NotNull p0: IFoo, p1: java.lang.Object, p2: int): java.lang.String
|
||||
public final inner class IFoo$DefaultImpls
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface IFoo {
|
||||
// source: 'defaultInterfaceMethodsInInlineClass.kt'
|
||||
public abstract @org.jetbrains.annotations.NotNull method bar(p0: java.lang.Object): java.lang.String
|
||||
public abstract @org.jetbrains.annotations.NotNull method foo(p0: java.lang.Object): java.lang.String
|
||||
public abstract @org.jetbrains.annotations.NotNull method withDefault(p0: java.lang.Object, p1: int): java.lang.String
|
||||
public final inner class IFoo$DefaultImpls
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class L {
|
||||
// source: 'defaultInterfaceMethodsInInlineClass.kt'
|
||||
private final field x: long
|
||||
private synthetic method <init>(p0: long): void
|
||||
public synthetic bridge method bar(p0: java.lang.Object): java.lang.String
|
||||
public @org.jetbrains.annotations.NotNull method bar--h0D71M(p0: long): java.lang.String
|
||||
public static @org.jetbrains.annotations.NotNull method bar--h0D71M(p0: long, p1: long): java.lang.String
|
||||
public synthetic final static method box-impl(p0: long): L
|
||||
public static method constructor-impl(p0: long): long
|
||||
public method equals(p0: java.lang.Object): boolean
|
||||
public static method equals-impl(p0: long, p1: java.lang.Object): boolean
|
||||
public final static method equals-impl0(p0: long, p1: long): boolean
|
||||
public synthetic bridge method foo(p0: java.lang.Object): java.lang.String
|
||||
public @org.jetbrains.annotations.NotNull method foo--h0D71M(p0: long): java.lang.String
|
||||
public static @org.jetbrains.annotations.NotNull method foo--h0D71M(p0: long, p1: long): java.lang.String
|
||||
public final method getX(): long
|
||||
public method hashCode(): int
|
||||
public static method hashCode-impl(p0: long): int
|
||||
public method toString(): java.lang.String
|
||||
public static method toString-impl(p0: long): java.lang.String
|
||||
public synthetic final method unbox-impl(): long
|
||||
public synthetic bridge method withDefault(p0: java.lang.Object, p1: int): java.lang.String
|
||||
public @org.jetbrains.annotations.NotNull method withDefault-OIj-6XA(p0: long, p1: int): java.lang.String
|
||||
public static @org.jetbrains.annotations.NotNull method withDefault-OIj-6XA(p0: long, p1: long, p2: int): java.lang.String
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class X {
|
||||
// source: 'defaultInterfaceMethodsInInlineClass.kt'
|
||||
public method <init>(): void
|
||||
public synthetic bridge method bar(p0: java.lang.Object): java.lang.String
|
||||
public @org.jetbrains.annotations.NotNull method bar--h0D71M(p0: long): java.lang.String
|
||||
public synthetic bridge method foo(p0: java.lang.Object): java.lang.String
|
||||
public @org.jetbrains.annotations.NotNull method foo--h0D71M(p0: long): java.lang.String
|
||||
public synthetic bridge method withDefault(p0: java.lang.Object, p1: int): java.lang.String
|
||||
public @org.jetbrains.annotations.NotNull method withDefault-OIj-6XA(p0: long, p1: int): java.lang.String
|
||||
}
|
||||
+5
@@ -15012,6 +15012,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultWithInlineClassArgument.kt")
|
||||
public void testDefaultWithInlineClassArgument() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt");
|
||||
|
||||
+5
@@ -927,6 +927,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/constructorsWithDefaultParameterValues.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineCharSequence.kt")
|
||||
public void testInlineCharSequence() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt");
|
||||
|
||||
+5
@@ -15027,6 +15027,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultWithInlineClassArgument.kt")
|
||||
public void testDefaultWithInlineClassArgument() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt");
|
||||
|
||||
+5
@@ -13612,6 +13612,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultWithInlineClassArgument.kt")
|
||||
public void testDefaultWithInlineClassArgument() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt");
|
||||
|
||||
+5
@@ -897,6 +897,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
|
||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/constructorsWithDefaultParameterValues.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineCharSequence.kt")
|
||||
public void testInlineCharSequence() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt");
|
||||
|
||||
Generated
+5
@@ -11677,6 +11677,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultWithInlineClassArgument.kt")
|
||||
public void testDefaultWithInlineClassArgument() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt");
|
||||
|
||||
Generated
+5
@@ -11677,6 +11677,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultWithInlineClassArgument.kt")
|
||||
public void testDefaultWithInlineClassArgument() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt");
|
||||
|
||||
+5
@@ -11742,6 +11742,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultWithInlineClassArgument.kt")
|
||||
public void testDefaultWithInlineClassArgument() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt");
|
||||
|
||||
Generated
+5
@@ -6287,6 +6287,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInterfaceMethodsInInlineClass.kt")
|
||||
public void testDefaultInterfaceMethodsInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultWithInlineClassArgument.kt")
|
||||
public void testDefaultWithInlineClassArgument() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt");
|
||||
|
||||
Reference in New Issue
Block a user