JVM IR: keep property annotations for inline class replacements

In particular, `@Deprecated` is not lost anymore and accessors of
deprecated property are generated with ACC_DEPRECATED just as in the old
backend.

 #KT-43327 Fixed
This commit is contained in:
Alexander Udalov
2020-11-13 19:17:14 +01:00
parent 4ca60a2d7d
commit 5212ae6bbd
5 changed files with 32 additions and 1 deletions
@@ -219,7 +219,7 @@ class MemoizedInlineClassReplacements(private val mangleReturnTypes: Boolean, pr
returnType = function.returnType
}.apply {
parent = function.parent
annotations += function.annotations
annotations = function.annotations
copyTypeParameters(function.allTypeParameters)
if (function.metadata != null) {
metadata = function.metadata
@@ -237,6 +237,7 @@ class MemoizedInlineClassReplacements(private val mangleReturnTypes: Boolean, pr
}.apply {
parent = propertySymbol.owner.parent
copyAttributes(propertySymbol.owner)
annotations = propertySymbol.owner.annotations
}
}
correspondingPropertySymbol = property.symbol
@@ -0,0 +1,9 @@
// WITH_RUNTIME
abstract class A {
@Deprecated("")
abstract var warn: UByte
@Deprecated("", level = DeprecationLevel.HIDDEN)
abstract var hidden: UByte
}
@@ -0,0 +1,11 @@
@kotlin.Metadata
public abstract class A {
// source: 'inlineClassTypesInSignature.kt'
public method <init>(): void
public synthetic deprecated static @kotlin.Deprecated method getHidden-w2LRezQ$annotations(): void
public synthetic deprecated abstract method getHidden-w2LRezQ(): byte
public synthetic deprecated static @kotlin.Deprecated method getWarn-w2LRezQ$annotations(): void
public deprecated abstract method getWarn-w2LRezQ(): byte
public synthetic deprecated abstract method setHidden-7apg3OU(p0: byte): void
public deprecated abstract method setWarn-7apg3OU(p0: byte): void
}
@@ -782,6 +782,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
public void testHidden() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/deprecated/hidden.kt");
}
@TestMetadata("inlineClassTypesInSignature.kt")
public void testInlineClassTypesInSignature() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/deprecated/inlineClassTypesInSignature.kt");
}
}
@TestMetadata("compiler/testData/codegen/bytecodeListing/inline")
@@ -752,6 +752,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
public void testHidden() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/deprecated/hidden.kt");
}
@TestMetadata("inlineClassTypesInSignature.kt")
public void testInlineClassTypesInSignature() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/deprecated/inlineClassTypesInSignature.kt");
}
}
@TestMetadata("compiler/testData/codegen/bytecodeListing/inline")