JVM IR: do not mangle property accessors of unsigned types in annotations
Before this change, we incorrectly mangled the names of annotation methods (e.g. `getI-pVg5ArA` instead of `i`) because the isSpecial condition was false.
This commit is contained in:
+5
-3
@@ -81,7 +81,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val property = (function as? IrSimpleFunction)?.correspondingPropertySymbol?.owner
|
val property = (function as? IrSimpleFunction)?.correspondingPropertySymbol?.owner
|
||||||
if (property != null && function.name.isSpecial) {
|
if (property != null) {
|
||||||
val propertyName = property.name.asString()
|
val propertyName = property.name.asString()
|
||||||
val propertyParent = property.parentAsClass
|
val propertyParent = property.parentAsClass
|
||||||
if (propertyParent.isAnnotationClass)
|
if (propertyParent.isAnnotationClass)
|
||||||
@@ -93,8 +93,10 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
if ((propertyParent.isEnumClass || propertyParent.isEnumEntry) && (propertyName == "name" || propertyName == "ordinal"))
|
if ((propertyParent.isEnumClass || propertyParent.isEnumEntry) && (propertyName == "name" || propertyName == "ordinal"))
|
||||||
return propertyName
|
return propertyName
|
||||||
|
|
||||||
val accessorName = if (function.isGetter) JvmAbi.getterName(propertyName) else JvmAbi.setterName(propertyName)
|
if (function.name.isSpecial) {
|
||||||
return mangleMemberNameIfRequired(accessorName, function)
|
val accessorName = if (function.isGetter) JvmAbi.getterName(propertyName) else JvmAbi.setterName(propertyName)
|
||||||
|
return mangleMemberNameIfRequired(accessorName, function)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mangleMemberNameIfRequired(function.name.asString(), function)
|
return mangleMemberNameIfRequired(function.name.asString(), function)
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
annotation class Anno(
|
||||||
|
val b: UByte,
|
||||||
|
val i: UInt,
|
||||||
|
val l: ULong,
|
||||||
|
val s: UShort,
|
||||||
|
)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
@java.lang.annotation.Retention
|
||||||
|
@kotlin.Metadata
|
||||||
|
public annotation class Anno {
|
||||||
|
// source: 'unsignedTypes.kt'
|
||||||
|
public abstract method b(): byte
|
||||||
|
public abstract method i(): int
|
||||||
|
public abstract method l(): long
|
||||||
|
public abstract method s(): short
|
||||||
|
}
|
||||||
+5
@@ -230,6 +230,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
|
|||||||
public void testOnReceiver() throws Exception {
|
public void testOnReceiver() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeListing/annotations/onReceiver.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/annotations/onReceiver.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("unsignedTypes.kt")
|
||||||
|
public void testUnsignedTypes() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/bytecodeListing/annotations/unsignedTypes.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/bytecodeListing/collectionStubs")
|
@TestMetadata("compiler/testData/codegen/bytecodeListing/collectionStubs")
|
||||||
|
|||||||
+5
@@ -230,6 +230,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
|
|||||||
public void testOnReceiver() throws Exception {
|
public void testOnReceiver() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeListing/annotations/onReceiver.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/annotations/onReceiver.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("unsignedTypes.kt")
|
||||||
|
public void testUnsignedTypes() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/bytecodeListing/annotations/unsignedTypes.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/bytecodeListing/collectionStubs")
|
@TestMetadata("compiler/testData/codegen/bytecodeListing/collectionStubs")
|
||||||
|
|||||||
Reference in New Issue
Block a user