diff --git a/core/reflection.jvm/src/kotlin/reflect/full/KClasses.kt b/core/reflection.jvm/src/kotlin/reflect/full/KClasses.kt index 881e3f07c10..886d837d8cf 100644 --- a/core/reflection.jvm/src/kotlin/reflect/full/KClasses.kt +++ b/core/reflection.jvm/src/kotlin/reflect/full/KClasses.kt @@ -35,6 +35,7 @@ import kotlin.reflect.jvm.internal.KotlinReflectionInternalError * See the [Kotlin language documentation](http://kotlinlang.org/docs/reference/classes.html#constructors) * for more information. */ +@SinceKotlin("1.1") val KClass.primaryConstructor: KFunction? get() = (this as KClassImpl).constructors.firstOrNull { ((it as KFunctionImpl).descriptor as ConstructorDescriptor).isPrimary @@ -45,6 +46,7 @@ val KClass.primaryConstructor: KFunction? * Returns a [KClass] instance representing the companion object of a given class, * or `null` if the class doesn't have a companion object. */ +@SinceKotlin("1.1") val KClass<*>.companionObject: KClass<*>? get() = nestedClasses.firstOrNull { (it as KClassImpl<*>).descriptor.isCompanionObject @@ -54,6 +56,7 @@ val KClass<*>.companionObject: KClass<*>? * Returns an instance of the companion object of a given class, * or `null` if the class doesn't have a companion object. */ +@SinceKotlin("1.1") val KClass<*>.companionObjectInstance: Any? get() = companionObject?.objectInstance @@ -65,6 +68,7 @@ val KClass<*>.companionObjectInstance: Any? @Deprecated("This function creates a type which rarely makes sense for generic classes. " + "For example, such type can only be used in signatures of members of that class. " + "Use starProjectedType or createType() for clearer semantics.") +@SinceKotlin("1.1") val KClass<*>.defaultType: KType get() = KTypeImpl((this as KClassImpl<*>).descriptor.defaultType) { jClass } @@ -81,24 +85,28 @@ val KClass<*>.declaredMembers: Collection> * Returns all functions declared in this class, including all non-static methods declared in the class * and the superclasses, as well as static methods declared in the class. */ +@SinceKotlin("1.1") val KClass<*>.functions: Collection> get() = members.filterIsInstance>() /** * Returns static functions declared in this class. */ +@SinceKotlin("1.1") val KClass<*>.staticFunctions: Collection> get() = (this as KClassImpl).data().allStaticMembers.filterIsInstance>() /** * Returns non-extension non-static functions declared in this class and all of its superclasses. */ +@SinceKotlin("1.1") val KClass<*>.memberFunctions: Collection> get() = (this as KClassImpl).data().allNonStaticMembers.filter { it.isNotExtension && it is KFunction<*> } as Collection> /** * Returns extension functions declared in this class and all of its superclasses. */ +@SinceKotlin("1.1") val KClass<*>.memberExtensionFunctions: Collection> get() = (this as KClassImpl).data().allNonStaticMembers.filter { it.isExtension && it is KFunction<*> } as Collection> @@ -107,18 +115,21 @@ val KClass<*>.memberExtensionFunctions: Collection> * If this is a Java class, it includes all non-static methods (both extensions and non-extensions) * declared in the class and the superclasses, as well as static methods declared in the class. */ +@SinceKotlin("1.1") val KClass<*>.declaredFunctions: Collection> get() = (this as KClassImpl).data().declaredMembers.filterIsInstance>() /** * Returns non-extension non-static functions declared in this class. */ +@SinceKotlin("1.1") val KClass<*>.declaredMemberFunctions: Collection> get() = (this as KClassImpl).data().declaredNonStaticMembers.filter { it.isNotExtension && it is KFunction<*> } as Collection> /** * Returns extension functions declared in this class. */ +@SinceKotlin("1.1") val KClass<*>.declaredMemberExtensionFunctions: Collection> get() = (this as KClassImpl).data().declaredNonStaticMembers.filter { it.isExtension && it is KFunction<*> } as Collection> @@ -126,30 +137,35 @@ val KClass<*>.declaredMemberExtensionFunctions: Collection> * Returns static properties declared in this class. * Only properties representing static fields of Java classes are considered static. */ +@SinceKotlin("1.1") val KClass<*>.staticProperties: Collection> get() = (this as KClassImpl).data().allStaticMembers.filter { it.isNotExtension && it is KProperty0<*> } as Collection> /** * Returns non-extension properties declared in this class and all of its superclasses. */ +@SinceKotlin("1.1") val KClass.memberProperties: Collection> get() = (this as KClassImpl).data().allNonStaticMembers.filter { it.isNotExtension && it is KProperty1<*, *> } as Collection> /** * Returns extension properties declared in this class and all of its superclasses. */ +@SinceKotlin("1.1") val KClass.memberExtensionProperties: Collection> get() = (this as KClassImpl).data().allNonStaticMembers.filter { it.isExtension && it is KProperty2<*, *, *> } as Collection> /** * Returns non-extension properties declared in this class. */ +@SinceKotlin("1.1") val KClass.declaredMemberProperties: Collection> get() = (this as KClassImpl).data().declaredNonStaticMembers.filter { it.isNotExtension && it is KProperty1<*, *> } as Collection> /** * Returns extension properties declared in this class. */ +@SinceKotlin("1.1") val KClass.declaredMemberExtensionProperties: Collection> get() = (this as KClassImpl).data().declaredNonStaticMembers.filter { it.isExtension && it is KProperty2<*, *, *> } as Collection> diff --git a/core/reflection.jvm/src/kotlin/reflect/full/exceptions.kt b/core/reflection.jvm/src/kotlin/reflect/full/exceptions.kt index 6c0dc6c4eca..1bd02ad186f 100644 --- a/core/reflection.jvm/src/kotlin/reflect/full/exceptions.kt +++ b/core/reflection.jvm/src/kotlin/reflect/full/exceptions.kt @@ -27,6 +27,7 @@ import kotlin.reflect.jvm.isAccessible * * @see [kotlin.reflect.jvm.isAccessible] */ +@SinceKotlin("1.1") class IllegalCallableAccessException(cause: IllegalAccessException) : kotlin.reflect.IllegalCallableAccessException(cause) /** @@ -48,5 +49,6 @@ class IllegalPropertyDelegateAccessException(cause: IllegalAccessException) : Ex * An exception that is thrown when the code tries to introspect a property of a class or a package * and that class or the package no longer has that property. */ +@SinceKotlin("1.1") class NoSuchPropertyException(cause: Exception? = null) : kotlin.reflect.NoSuchPropertyException(cause)