Implement KClass.getProperties()

#KT-6570 In Progress
This commit is contained in:
Alexander Udalov
2015-02-20 19:40:47 +03:00
parent fdfd808d80
commit da209e673c
7 changed files with 125 additions and 1 deletions
@@ -16,6 +16,7 @@
package kotlin.reflect.jvm.internal
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.resolve.scopes.JetScope
import org.jetbrains.kotlin.serialization.deserialization.findClassAcrossModuleDependencies
import kotlin.reflect.KClass
@@ -40,6 +41,19 @@ class KClassImpl<T>(override val jClass: Class<T>) : KCallableContainerImpl(), K
override val scope: JetScope get() = descriptor.getDefaultType().getMemberScope()
override fun getProperties(): Collection<KMemberProperty<T, *>> {
return scope.getAllDescriptors().stream()
.filterIsInstance<PropertyDescriptor>()
.filter { descriptor ->
descriptor.getExtensionReceiverParameter() == null
}
.map { descriptor ->
if (descriptor.isVar()) KMutableMemberPropertyImpl<T, Any?>(this) { descriptor }
else KMemberPropertyImpl<T, Any?>(this) { descriptor }
}
.toList()
}
fun memberProperty(name: String): KMemberProperty<T, *> {
return KMemberPropertyImpl<T, Any>(this, findPropertyDescriptor(name))
}