diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassDescriptor.kt index 471e8b6732d..67757131b00 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassDescriptor.kt @@ -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 = _parameters() - private val _supertypes = c.storageManager.createLazyValue { - jClass.getSupertypes().map { - supertype -> - innerC.typeResolver.transformJavaType(supertype, TypeUsage.SUPERTYPE.toAttributes()) - } + private val _supertypes = c.storageManager.createLazyValue> { + 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 = _supertypes()