Files
kotlin-fork/compiler/testData/codegen/box/jvm8/defaults/compatibility/deprecatedAnnotation.kt
T
Dmitry Petrov 980b91d082 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).
2020-07-28 18:19:20 +03:00

21 lines
613 B
Kotlin
Vendored

// !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"
}