JVM_IR: keep the $default suffix for stubs for @JvmName functions

Technically a backwards compatibility problem, as the new backend
*consistently* renamed `f$default` on `f` with `@JvmName("g")` to
`g` instead of `g$default`, so it all worked out. However, this
breaks when encountering libraries compiled with the non-IR backend.
This commit is contained in:
pyos
2019-11-14 12:33:53 +01:00
committed by Alexander Udalov
parent 23dfade24f
commit ba93bdb14d
5 changed files with 30 additions and 2 deletions
@@ -85,8 +85,10 @@ val IrType.erasedUpperBound: IrClass
fun IrDeclaration.getJvmNameFromAnnotation(): String? {
val const = getAnnotation(DescriptorUtils.JVM_NAME)?.getValueArgument(0) as? IrConst<*>
return const?.value as? String
// TODO lower @JvmName?
val const = getAnnotation(DescriptorUtils.JVM_NAME)?.getValueArgument(0) as? IrConst<*> ?: return null
val value = const.value as? String ?: return null
return if (origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER) "$value\$default" else value
}
val IrFunction.propertyIfAccessor: IrDeclaration
@@ -0,0 +1,11 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
@JvmName("bar")
fun foo(x: String = (object {}).javaClass.enclosingMethod.name) = x
fun box(): String {
val f = foo()
if (f != "bar\$default") return "Fail: $f"
return "OK"
}
@@ -15091,6 +15091,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/jvmName/functionName.kt");
}
@TestMetadata("functionWithDefault.kt")
public void testFunctionWithDefault() throws Exception {
runTest("compiler/testData/codegen/box/jvmName/functionWithDefault.kt");
}
@TestMetadata("loadJvmName.kt")
public void testLoadJvmName() throws Exception {
runTest("compiler/testData/codegen/box/jvmName/loadJvmName.kt");
@@ -15091,6 +15091,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/jvmName/functionName.kt");
}
@TestMetadata("functionWithDefault.kt")
public void testFunctionWithDefault() throws Exception {
runTest("compiler/testData/codegen/box/jvmName/functionWithDefault.kt");
}
@TestMetadata("loadJvmName.kt")
public void testLoadJvmName() throws Exception {
runTest("compiler/testData/codegen/box/jvmName/loadJvmName.kt");
@@ -13976,6 +13976,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/jvmName/functionName.kt");
}
@TestMetadata("functionWithDefault.kt")
public void testFunctionWithDefault() throws Exception {
runTest("compiler/testData/codegen/box/jvmName/functionWithDefault.kt");
}
@TestMetadata("loadJvmName.kt")
public void testLoadJvmName() throws Exception {
runTest("compiler/testData/codegen/box/jvmName/loadJvmName.kt");