JVM IR: generate ACC_SYNTHETIC for deprecated-hidden declarations correctly
Extract the logic that computes ACC_SYNTHETIC flag for deprecated declarations, and use `DeprecationResolver` as the old backend does in `DescriptorAsmUtil.getCommonCallableFlags`. Creating IR-based descriptors for each function to pass it there is a bit costly though, so as a small optimization, use `allOverridden` to check if anything in the method hierarchy is deprecated. Also optimize `allOverridden` for the case of linear inheritance which is far more common. #KT-43199 Fixed
This commit is contained in:
committed by
Alexander Udalov
parent
d9efc2d922
commit
0e91d3fcb0
@@ -0,0 +1,16 @@
|
||||
@Deprecated("")
|
||||
@Suppress("DEPRECATED_SINCE_KOTLIN_OUTSIDE_KOTLIN_SUBPACKAGE")
|
||||
@DeprecatedSinceKotlin(hiddenSince = "1.0")
|
||||
fun hidden() {}
|
||||
|
||||
open class Base {
|
||||
@Deprecated("", level = DeprecationLevel.HIDDEN)
|
||||
open fun f() {}
|
||||
}
|
||||
|
||||
class Derived : Base {
|
||||
@Deprecated("", level = DeprecationLevel.HIDDEN)
|
||||
constructor()
|
||||
|
||||
override fun f() {}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
@kotlin.Metadata
|
||||
public class Base {
|
||||
// source: 'hidden.kt'
|
||||
public method <init>(): void
|
||||
public synthetic deprecated @kotlin.Deprecated method f(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class Derived {
|
||||
// source: 'hidden.kt'
|
||||
public synthetic deprecated @kotlin.Deprecated method <init>(): void
|
||||
public synthetic method f(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class HiddenKt {
|
||||
// source: 'hidden.kt'
|
||||
public synthetic deprecated final static @kotlin.Deprecated @kotlin.DeprecatedSinceKotlin method hidden(): void
|
||||
}
|
||||
Reference in New Issue
Block a user