Add kotlin.Any to KClass.superclasses if it's absent
#KT-18476 Fixed
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package kotlin.reflect.jvm.internal
|
||||
|
||||
import org.jetbrains.kotlin.builtins.CompanionObjectMapping
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
@@ -27,7 +28,9 @@ import org.jetbrains.kotlin.load.kotlin.reflect.ReflectKotlinClass
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.utils.compactIfPossible
|
||||
import kotlin.jvm.internal.TypeIntrinsics
|
||||
import kotlin.reflect.*
|
||||
import kotlin.reflect.jvm.internal.KDeclarationContainerImpl.MemberBelonginess.DECLARED
|
||||
@@ -113,7 +116,9 @@ internal class KClassImpl<T : Any>(override val jClass: Class<T>) : KDeclaration
|
||||
}
|
||||
|
||||
val supertypes: List<KType> by ReflectProperties.lazySoft {
|
||||
descriptor.typeConstructor.supertypes.map { kotlinType ->
|
||||
val kotlinTypes = descriptor.typeConstructor.supertypes
|
||||
val result = ArrayList<KTypeImpl>(kotlinTypes.size)
|
||||
kotlinTypes.mapTo(result) { kotlinType ->
|
||||
KTypeImpl(kotlinType) {
|
||||
val superClass = kotlinType.constructor.declarationDescriptor
|
||||
if (superClass !is ClassDescriptor) throw KotlinReflectionInternalError("Supertype not a class: $superClass")
|
||||
@@ -131,6 +136,13 @@ internal class KClassImpl<T : Any>(override val jClass: Class<T>) : KDeclaration
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!KotlinBuiltIns.isSpecialClassWithNoSupertypes(descriptor) && result.all {
|
||||
val classKind = DescriptorUtils.getClassDescriptorForType(it.type).kind
|
||||
classKind == ClassKind.INTERFACE || classKind == ClassKind.ANNOTATION_CLASS
|
||||
}) {
|
||||
result += KTypeImpl(descriptor.builtIns.anyType) { Any::class.java }
|
||||
}
|
||||
result.compactIfPossible()
|
||||
}
|
||||
|
||||
val declaredNonStaticMembers: Collection<KCallableImpl<*>>
|
||||
|
||||
Reference in New Issue
Block a user