Files
kotlin-fork/compiler/testData/codegen/box/annotations/syntheticMethodForJvmStaticProperty.kt
T
Ivan Kylchik c7435ba760 Replace all occurrences of WITH_RUNTIME with WITH_STDLIB
We are going to deprecate `WITH_RUNTIME` directive. The main reason
behind this change is that `WITH_STDLIB` directive better describes
its meaning, specifically it will add kotlin stdlib to test's classpath.
2021-11-17 15:26:38 +03:00

61 lines
1.7 KiB
Kotlin
Vendored

// !LANGUAGE: +UseGetterNameForPropertyAnnotationsMethodOnJvm
// TARGET_BACKEND: JVM
// WITH_STDLIB
// FULL_JDK
// JVM_TARGET: 1.8
package test
import java.lang.reflect.Modifier
import kotlin.test.*
class WithCompanionJvmStatic {
companion object {
@JvmStatic
val property: Int
get() = 42
}
}
interface InterfaceWithCompanionJvmStatic {
fun defaultImplsTrigger() = 123
companion object {
@JvmStatic
val property: Int
get() = 42
}
}
fun check(clazz: Class<*>, expected: Boolean = true) {
for (method in clazz.getDeclaredMethods()) {
if (method.getName() == "getProperty\$annotations") {
if (!expected) {
fail("Synthetic method for annotated property found, but not expected: $method")
}
assertTrue(method.isSynthetic())
assertTrue(Modifier.isStatic(method.modifiers))
assertTrue(Modifier.isPublic(method.modifiers))
val str = method.declaredAnnotations.single().toString()
assertTrue("@kotlin.jvm.JvmStatic\\(\\)".toRegex().matches(str), str)
return
}
}
if (expected) {
fail("Synthetic method for annotated property expected, but not found")
}
}
fun box(): String {
check(Class.forName("test.WithCompanionJvmStatic"), expected = false)
check(Class.forName("test.WithCompanionJvmStatic\$Companion"))
check(Class.forName("test.InterfaceWithCompanionJvmStatic"), expected = false)
check(Class.forName("test.InterfaceWithCompanionJvmStatic\$DefaultImpls"), expected = false)
check(Class.forName("test.InterfaceWithCompanionJvmStatic\$Companion"))
return "OK"
}