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.resolveAnnotations
|
||||||
import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
|
import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.InnerClassesScopeWrapper
|
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(
|
class LazyJavaClassDescriptor(
|
||||||
private val c: LazyJavaResolverContextWithTypes,
|
private val c: LazyJavaResolverContextWithTypes,
|
||||||
@@ -77,11 +79,22 @@ class LazyJavaClassDescriptor(
|
|||||||
|
|
||||||
override fun getParameters(): List<TypeParameterDescriptor> = _parameters()
|
override fun getParameters(): List<TypeParameterDescriptor> = _parameters()
|
||||||
|
|
||||||
private val _supertypes = c.storageManager.createLazyValue {
|
private val _supertypes = c.storageManager.createLazyValue<Collection<JetType>> {
|
||||||
jClass.getSupertypes().map {
|
val supertypes = jClass.getSupertypes()
|
||||||
supertype ->
|
if (supertypes.isEmpty())
|
||||||
innerC.typeResolver.transformJavaType(supertype, TypeUsage.SUPERTYPE.toAttributes())
|
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()
|
override fun getSupertypes(): Collection<JetType> = _supertypes()
|
||||||
|
|||||||
Reference in New Issue
Block a user