diff --git a/core/reflection.jvm/src/kotlin/reflect/KClasses.kt b/core/reflection.jvm/src/kotlin/reflect/KClasses.kt index 7abad005ccd..4077d46f404 100644 --- a/core/reflection.jvm/src/kotlin/reflect/KClasses.kt +++ b/core/reflection.jvm/src/kotlin/reflect/KClasses.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.types.TypeSubstitutor import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.utils.DFS +import kotlin.reflect.jvm.internal.KCallableImpl import kotlin.reflect.jvm.internal.KClassImpl import kotlin.reflect.jvm.internal.KFunctionImpl import kotlin.reflect.jvm.internal.KTypeImpl @@ -70,8 +71,8 @@ val KClass<*>.defaultType: KType */ val KClass<*>.declaredMembers: Collection> get() = with(this as KClassImpl) { - (getMembers(memberScope, declaredOnly = true, nonExtensions = true, extensions = true) + - getMembers(staticScope, declaredOnly = true, nonExtensions = true, extensions = true)).toList() + (getMembers(memberScope, declaredOnly = true) + + getMembers(staticScope, declaredOnly = true)).toList() } /** @@ -86,7 +87,7 @@ val KClass<*>.functions: Collection> */ val KClass<*>.staticFunctions: Collection> get() = (this as KClassImpl) - .getMembers(staticScope, declaredOnly = false, nonExtensions = true, extensions = true) + .getMembers(staticScope, declaredOnly = false) .filterIsInstance>() .toList() @@ -95,7 +96,8 @@ val KClass<*>.staticFunctions: Collection> */ val KClass<*>.memberFunctions: Collection> get() = (this as KClassImpl) - .getMembers(memberScope, declaredOnly = false, nonExtensions = true, extensions = false) + .getMembers(memberScope, declaredOnly = false) + .filterNotExtensions() .filterIsInstance>() .toList() @@ -104,7 +106,8 @@ val KClass<*>.memberFunctions: Collection> */ val KClass<*>.memberExtensionFunctions: Collection> get() = (this as KClassImpl) - .getMembers(memberScope, declaredOnly = false, nonExtensions = false, extensions = true) + .getMembers(memberScope, declaredOnly = false) + .filterExtensions() .filterIsInstance>() .toList() @@ -115,8 +118,8 @@ val KClass<*>.memberExtensionFunctions: Collection> */ val KClass<*>.declaredFunctions: Collection> get() = (this as KClassImpl) - .getMembers(memberScope, declaredOnly = true, nonExtensions = true, extensions = true) - .plus(getMembers(staticScope, declaredOnly = true, nonExtensions = true, extensions = true)) + .getMembers(memberScope, declaredOnly = true) + .plus(getMembers(staticScope, declaredOnly = true)) .filterIsInstance>() .toList() @@ -125,7 +128,8 @@ val KClass<*>.declaredFunctions: Collection> */ val KClass<*>.declaredMemberFunctions: Collection> get() = (this as KClassImpl) - .getMembers(memberScope, declaredOnly = true, nonExtensions = true, extensions = false) + .getMembers(memberScope, declaredOnly = true) + .filterNotExtensions() .filterIsInstance>() .toList() @@ -134,7 +138,8 @@ val KClass<*>.declaredMemberFunctions: Collection> */ val KClass<*>.declaredMemberExtensionFunctions: Collection> get() = (this as KClassImpl) - .getMembers(memberScope, declaredOnly = true, nonExtensions = false, extensions = true) + .getMembers(memberScope, declaredOnly = true) + .filterExtensions() .filterIsInstance>() .toList() @@ -144,7 +149,8 @@ val KClass<*>.declaredMemberExtensionFunctions: Collection> */ val KClass<*>.staticProperties: Collection> get() = (this as KClassImpl) - .getMembers(staticScope, declaredOnly = false, nonExtensions = true, extensions = false) + .getMembers(staticScope, declaredOnly = false) + .filterNotExtensions() .filterIsInstance>() .toList() @@ -153,7 +159,8 @@ val KClass<*>.staticProperties: Collection> */ val KClass.memberProperties: Collection> get() = (this as KClassImpl) - .getMembers(memberScope, declaredOnly = false, nonExtensions = true, extensions = false) + .getMembers(memberScope, declaredOnly = false) + .filterNotExtensions() .filterIsInstance>() .toList() @@ -162,7 +169,8 @@ val KClass.memberProperties: Collection> */ val KClass.memberExtensionProperties: Collection> get() = (this as KClassImpl) - .getMembers(memberScope, declaredOnly = false, nonExtensions = false, extensions = true) + .getMembers(memberScope, declaredOnly = false) + .filterExtensions() .filterIsInstance>() .toList() @@ -171,7 +179,8 @@ val KClass.memberExtensionProperties: Collection KClass.declaredMemberProperties: Collection> get() = (this as KClassImpl) - .getMembers(memberScope, declaredOnly = true, nonExtensions = true, extensions = false) + .getMembers(memberScope, declaredOnly = true) + .filterNotExtensions() .filterIsInstance>() .toList() @@ -180,11 +189,18 @@ val KClass.declaredMemberProperties: Collection> */ val KClass.declaredMemberExtensionProperties: Collection> get() = (this as KClassImpl) - .getMembers(memberScope, declaredOnly = true, nonExtensions = false, extensions = true) + .getMembers(memberScope, declaredOnly = true) + .filterExtensions() .filterIsInstance>() .toList() +private fun > Sequence.filterExtensions(): Sequence = + filter { it.descriptor.extensionReceiverParameter != null } + +private fun > Sequence.filterNotExtensions(): Sequence = + filter { it.descriptor.extensionReceiverParameter == null } + /** * Immediate superclasses of this class, in the order they are listed in the source code. * Includes superclasses and superinterfaces of the class, but does not include the class itself. diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt index df51b973ad4..99a0c20c1ee 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt @@ -75,9 +75,7 @@ internal class KClassImpl(override val jClass: Class) : internal val staticScope: MemberScope get() = descriptor.staticScope override val members: Collection> - get() = getMembers(memberScope, declaredOnly = false, nonExtensions = true, extensions = true) - .plus(getMembers(staticScope, declaredOnly = false, nonExtensions = true, extensions = true)) - .toList() + get() = (getMembers(memberScope, declaredOnly = false) + getMembers(staticScope, declaredOnly = false)).toList() override val constructorDescriptors: Collection get() { diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KDeclarationContainerImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KDeclarationContainerImpl.kt index e2ec95a015a..1a47c29cd71 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KDeclarationContainerImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KDeclarationContainerImpl.kt @@ -47,17 +47,10 @@ internal abstract class KDeclarationContainerImpl : ClassBasedDeclarationContain abstract fun getFunctions(name: Name): Collection - fun getMembers(scope: MemberScope, declaredOnly: Boolean, nonExtensions: Boolean, extensions: Boolean): Sequence> { + fun getMembers(scope: MemberScope, declaredOnly: Boolean): Sequence> { val visitor = object : DeclarationDescriptorVisitorEmptyBodies?, Unit>() { - private fun skipCallable(descriptor: CallableMemberDescriptor): Boolean { - if (declaredOnly && !descriptor.kind.isReal) return true - - val isExtension = descriptor.extensionReceiverParameter != null - if (isExtension && !extensions) return true - if (!isExtension && !nonExtensions) return true - - return false - } + private fun skipCallable(descriptor: CallableMemberDescriptor): Boolean = + declaredOnly && !descriptor.kind.isReal override fun visitPropertyDescriptor(descriptor: PropertyDescriptor, data: Unit): KCallableImpl<*>? { return if (skipCallable(descriptor)) null else createProperty(descriptor) diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt index 827180528ae..e64b5784d52 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt @@ -57,7 +57,7 @@ internal class KPackageImpl(override val jClass: Class<*>, val moduleName: Strin private val scope: MemberScope get() = data().descriptor.memberScope override val members: Collection> - get() = getMembers(scope, declaredOnly = false, nonExtensions = true, extensions = true).filter { member -> + get() = getMembers(scope, declaredOnly = false).filter { member -> val callableDescriptor = member.descriptor as DeserializedCallableMemberDescriptor val packageFragment = callableDescriptor.containingDeclaration as PackageFragmentDescriptor val source = (packageFragment as? LazyJavaPackageFragment)?.source as? KotlinJvmBinaryPackageSourceElement