KT-43045 mangle function name for fake override with default impl

This commit is contained in:
Dmitry Petrov
2020-11-13 13:18:37 +03:00
parent 1ecf5943ab
commit 5d76df6e1a
14 changed files with 132 additions and 3 deletions
@@ -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");
@@ -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.
@@ -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()
}
}
@@ -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>
@@ -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
}
@@ -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");
@@ -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");
@@ -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");
@@ -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");
@@ -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");
@@ -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");
@@ -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");
@@ -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");
@@ -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");