Initial support of JvmField annotation

This commit is contained in:
Michael Bogdanov
2015-10-11 11:50:59 +03:00
parent 6cf9bfdb70
commit 22142ee44d
25 changed files with 497 additions and 16 deletions
@@ -0,0 +1,64 @@
// FULL_JDK
import java.lang.reflect.Field
import kotlin.reflect.jvm.javaField
import kotlin.test.assertNotEquals
import java.lang.reflect.Modifier
@JvmField public val publicField = "OK";
@JvmField internal val internalField = "OK";
fun testVisibilities() {
checkVisibility(::publicField.javaField!!, Modifier.PUBLIC)
checkVisibility(::internalField.javaField!!, Modifier.PUBLIC)
}
class A {
@JvmField public val publicField = "OK";
@JvmField internal val internalField = "OK";
@JvmField protected val protectedfield = "OK";
fun testVisibilities() {
checkVisibility(A::publicField.javaField!!, Modifier.PUBLIC)
checkVisibility(A::internalField.javaField!!, Modifier.PUBLIC)
checkVisibility(A::protectedfield.javaField!!, Modifier.PROTECTED)
}
}
class AWithCompanion {
companion object {
@JvmField public val publicField = "OK";
@JvmField internal val internalField = "OK";
@JvmField protected val protectedfield = "OK";
fun testVisibilities() {
checkVisibility(AWithCompanion.Companion::publicField.javaField!!, Modifier.PUBLIC)
checkVisibility(AWithCompanion.Companion::internalField.javaField!!, Modifier.PUBLIC)
checkVisibility(AWithCompanion.Companion::protectedfield.javaField!!, Modifier.PROTECTED)
}
}
}
object Object {
@JvmField public val publicField = "OK";
@JvmField internal val internalField = "OK";
@JvmField protected val protectedfield = "OK";
fun testVisibilities() {
checkVisibility(Object::publicField.javaField!!, Modifier.PUBLIC)
checkVisibility(Object::internalField.javaField!!, Modifier.PUBLIC)
checkVisibility(Object::protectedfield.javaField!!, Modifier.PROTECTED)
}
}
fun box(): String {
A().testVisibilities()
AWithCompanion.testVisibilities()
Object.testVisibilities()
return "OK"
}
public fun checkVisibility(field: Field, visibility: Int) {
assertNotEquals(field.modifiers and visibility, 0, "Field ${field} has wrong visibility")
}