All Java classes extend java.lang.Object (directly or indirectly)

This commit is contained in:
Andrey Breslav
2013-10-22 18:03:36 +04:00
parent 1ea9be67c4
commit cee4c0c29d
@@ -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()