JVM: generate 'Deprecated' on method as runtime-visible annotation
We generate @java.lang.Deprecated annotation on methods of $DefaultImpls classes in compatibility mode. This annotation has RUNTIME retention and should be visible. Also, get rid of representing annotations as Class'es (yes we know that these annotations are in compiler CLASSPATH, but we should not rely on such classes and associated information).
This commit is contained in:
+20
@@ -0,0 +1,20 @@
|
||||
// !JVM_DEFAULT_MODE: compatibility
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// FULL_JDK
|
||||
// WITH_RUNTIME
|
||||
|
||||
interface IFoo {
|
||||
@JvmDefault
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val iFoo = IFoo::class.java
|
||||
val iFooDefaultImpls = Class.forName("${iFoo.name}\$DefaultImpls")
|
||||
val fooMethod = iFooDefaultImpls.declaredMethods.find { it.name == "foo" }
|
||||
?: throw AssertionError("No method 'foo' in class ${iFooDefaultImpls.name}")
|
||||
fooMethod.getAnnotation(java.lang.Deprecated::class.java)
|
||||
?: throw AssertionError("No java.lang.Deprecated annotation on method 'foo'")
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user