All Java classes extend java.lang.Object (directly or indirectly)
This commit is contained in:
+18
-5
@@ -21,6 +21,8 @@ import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage
|
||||
import org.jetbrains.jet.lang.resolve.java.lazy.resolveAnnotations
|
||||
import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
|
||||
import org.jetbrains.jet.lang.resolve.scopes.InnerClassesScopeWrapper
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns
|
||||
|
||||
class LazyJavaClassDescriptor(
|
||||
private val c: LazyJavaResolverContextWithTypes,
|
||||
@@ -77,11 +79,22 @@ class LazyJavaClassDescriptor(
|
||||
|
||||
override fun getParameters(): List<TypeParameterDescriptor> = _parameters()
|
||||
|
||||
private val _supertypes = c.storageManager.createLazyValue {
|
||||
jClass.getSupertypes().map {
|
||||
supertype ->
|
||||
innerC.typeResolver.transformJavaType(supertype, TypeUsage.SUPERTYPE.toAttributes())
|
||||
}
|
||||
private val _supertypes = c.storageManager.createLazyValue<Collection<JetType>> {
|
||||
val supertypes = jClass.getSupertypes()
|
||||
if (supertypes.isEmpty())
|
||||
if (jClass.getFqName() == JavaSupertypeResolver.OBJECT_FQ_NAME) {
|
||||
listOf(KotlinBuiltIns.getInstance().getAnyType())
|
||||
}
|
||||
else {
|
||||
val jlObject = innerC.javaClassResolver.resolveClassByFqName(JavaSupertypeResolver.OBJECT_FQ_NAME)?.getDefaultType()
|
||||
// If java.lang.Object is not found, we simply use Any to recover
|
||||
emptyOrSingletonList(jlObject ?: KotlinBuiltIns.getInstance().getAnyType())
|
||||
}
|
||||
else
|
||||
supertypes.map {
|
||||
supertype ->
|
||||
innerC.typeResolver.transformJavaType(supertype, TypeUsage.SUPERTYPE.toAttributes())
|
||||
}
|
||||
}
|
||||
|
||||
override fun getSupertypes(): Collection<JetType> = _supertypes()
|
||||
|
||||
Reference in New Issue
Block a user