JDR: Use module to resolve special classes
This commit is contained in:
+3
-1
@@ -48,6 +48,7 @@ import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
|
||||
import org.jetbrains.jet.renderer.DescriptorRenderer
|
||||
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap
|
||||
import org.jetbrains.jet.lang.types.TypeUtils
|
||||
import org.jetbrains.jet.lang.resolve.java.lazy.resolveTopLevelClassInModule
|
||||
|
||||
private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument {
|
||||
override fun getName(): Name? = null
|
||||
@@ -159,7 +160,8 @@ class LazyJavaAnnotationDescriptor(
|
||||
private fun resolveFromJavaClassObjectType(javaType: JavaType): CompileTimeConstant<*>? {
|
||||
// Class type is never nullable in 'Foo.class' in Java
|
||||
val `type` = TypeUtils.makeNotNullable(c.typeResolver.transformJavaType(javaType, TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes()))
|
||||
val jlClass = c.javaClassResolver.resolveClassByFqName(FqName("java.lang.Class"))
|
||||
|
||||
val jlClass = c.resolveTopLevelClassInModule(FqName("java.lang.Class"))
|
||||
if (jlClass == null) return null
|
||||
|
||||
val arguments = listOf(TypeProjectionImpl(`type`))
|
||||
|
||||
+7
-4
@@ -53,6 +53,7 @@ import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFra
|
||||
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.name.SpecialNames
|
||||
import org.jetbrains.jet.lang.types.AbstractClassTypeConstructor
|
||||
import org.jetbrains.jet.lang.resolve.java.lazy.resolveTopLevelClassInModule
|
||||
|
||||
class LazyJavaClassDescriptor(
|
||||
private val outerC: LazyJavaResolverContextWithTypes,
|
||||
@@ -203,15 +204,17 @@ class LazyJavaClassDescriptor(
|
||||
|
||||
private val _supertypes = c.storageManager.createLazyValue<Collection<JetType>> {
|
||||
val supertypes = jClass.getSupertypes()
|
||||
if (supertypes.isEmpty())
|
||||
if (jClass.getFqName() == DescriptorResolverUtils.OBJECT_FQ_NAME) {
|
||||
if (supertypes.isEmpty()) {
|
||||
val objectFqName = DescriptorResolverUtils.OBJECT_FQ_NAME
|
||||
if (jClass.getFqName() == objectFqName) {
|
||||
listOf(KotlinBuiltIns.getInstance().getAnyType())
|
||||
}
|
||||
else {
|
||||
val jlObject = c.javaClassResolver.resolveClassByFqName(DescriptorResolverUtils.OBJECT_FQ_NAME)?.getDefaultType()
|
||||
val objectType = c.resolveTopLevelClassInModule(objectFqName)?.getDefaultType()
|
||||
// If java.lang.Object is not found, we simply use Any to recover
|
||||
listOf(jlObject ?: KotlinBuiltIns.getInstance().getAnyType())
|
||||
listOf(objectType ?: KotlinBuiltIns.getInstance().getAnyType())
|
||||
}
|
||||
}
|
||||
else
|
||||
supertypes.stream()
|
||||
.map {
|
||||
|
||||
@@ -114,3 +114,8 @@ private fun LazyJavaResolverContext.resolveBinaryClass(kotlinClass: KotlinJvmBin
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
fun LazyJavaResolverContext.resolveTopLevelClassInModule(fqName: FqName): ClassDescriptor? {
|
||||
return packageFragmentProvider.getModule().getPackage(fqName.parent())
|
||||
?.getMemberScope()?.getClassifier(fqName.shortName()) as? ClassDescriptor
|
||||
}
|
||||
Reference in New Issue
Block a user