Reflection: add KVisibility, KClass.visibility, KCallable.visibility
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
// WITH_REFLECT
|
||||
|
||||
import kotlin.reflect.KFunction
|
||||
import kotlin.reflect.KProperty
|
||||
import kotlin.reflect.KVisibility
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
open class Foo<in T> {
|
||||
public fun publicFun() {}
|
||||
protected fun protectedFun() {}
|
||||
internal fun internalFun() {}
|
||||
private fun privateFun() {}
|
||||
private fun privateToThisFun(): T = null!!
|
||||
|
||||
fun getProtectedFun() = this::protectedFun
|
||||
fun getPrivateFun() = this::privateFun
|
||||
fun getPrivateToThisFun(): KFunction<*> = this::privateToThisFun
|
||||
|
||||
public val publicVal = Unit
|
||||
protected val protectedVar = Unit
|
||||
internal val internalVal = Unit
|
||||
private val privateVal = Unit
|
||||
private val privateToThisVal: T? = null
|
||||
|
||||
fun getProtectedVar() = this::protectedVar
|
||||
fun getPrivateVal() = this::privateVal
|
||||
fun getPrivateToThisVal(): KProperty<*> = this::privateToThisVal
|
||||
|
||||
public var publicVarPrivateSetter = Unit
|
||||
private set
|
||||
|
||||
fun getPublicVarPrivateSetter() = this::publicVarPrivateSetter
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val f = Foo<String>()
|
||||
|
||||
assertEquals(KVisibility.PUBLIC, f::publicFun.visibility)
|
||||
assertEquals(KVisibility.PROTECTED, f.getProtectedFun().visibility)
|
||||
assertEquals(KVisibility.INTERNAL, f::internalFun.visibility)
|
||||
assertEquals(KVisibility.PRIVATE, f.getPrivateFun().visibility)
|
||||
assertEquals(KVisibility.PRIVATE, f.getPrivateToThisFun().visibility)
|
||||
|
||||
assertEquals(KVisibility.PUBLIC, f::publicVal.visibility)
|
||||
assertEquals(KVisibility.PROTECTED, f.getProtectedVar().visibility)
|
||||
assertEquals(KVisibility.INTERNAL, f::internalVal.visibility)
|
||||
assertEquals(KVisibility.PRIVATE, f.getPrivateVal().visibility)
|
||||
assertEquals(KVisibility.PRIVATE, f.getPrivateToThisVal().visibility)
|
||||
|
||||
assertEquals(KVisibility.PUBLIC, f.getPublicVarPrivateSetter().visibility)
|
||||
assertEquals(KVisibility.PUBLIC, f.getPublicVarPrivateSetter().getter.visibility)
|
||||
assertEquals(KVisibility.PRIVATE, f.getPublicVarPrivateSetter().setter.visibility)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// WITH_REFLECT
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.reflect.KVisibility
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class DefaultVisibilityClass
|
||||
public class PublicClass {
|
||||
protected class ProtectedClass
|
||||
fun getProtectedClass(): KClass<*> = ProtectedClass::class
|
||||
}
|
||||
internal class InternalClass
|
||||
private class PrivateClass
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(KVisibility.PUBLIC, DefaultVisibilityClass::class.visibility)
|
||||
assertEquals(KVisibility.PUBLIC, PublicClass::class.visibility)
|
||||
assertEquals(KVisibility.PROTECTED, PublicClass().getProtectedClass().visibility)
|
||||
assertEquals(KVisibility.INTERNAL, InternalClass::class.visibility)
|
||||
assertEquals(KVisibility.PRIVATE, PrivateClass::class.visibility)
|
||||
|
||||
class Local
|
||||
assertEquals(null, Local::class.visibility)
|
||||
|
||||
val anonymous = object {}
|
||||
assertEquals(null, anonymous::class.visibility)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// WITH_REFLECT
|
||||
// FILE: J.java
|
||||
|
||||
class J {
|
||||
protected class C {}
|
||||
protected static class D {}
|
||||
|
||||
void foo() {}
|
||||
protected void bar() {}
|
||||
protected static void baz() {}
|
||||
}
|
||||
|
||||
// FILE: K.kt
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun box(): String {
|
||||
// Package-private class
|
||||
assertEquals(null, J::class.visibility)
|
||||
// Protected+package class
|
||||
assertEquals(null, J.C::class.visibility)
|
||||
// Protected static class
|
||||
assertEquals(null, J.D::class.visibility)
|
||||
|
||||
// Package-private method
|
||||
assertEquals(null, J::foo.visibility)
|
||||
// Protected+package method
|
||||
assertEquals(null, J::bar.visibility)
|
||||
// Protected static method
|
||||
assertEquals(null, J::baz.visibility)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user