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.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap
|
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap
|
||||||
import org.jetbrains.jet.lang.types.TypeUtils
|
import org.jetbrains.jet.lang.types.TypeUtils
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.lazy.resolveTopLevelClassInModule
|
||||||
|
|
||||||
private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument {
|
private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument {
|
||||||
override fun getName(): Name? = null
|
override fun getName(): Name? = null
|
||||||
@@ -159,7 +160,8 @@ class LazyJavaAnnotationDescriptor(
|
|||||||
private fun resolveFromJavaClassObjectType(javaType: JavaType): CompileTimeConstant<*>? {
|
private fun resolveFromJavaClassObjectType(javaType: JavaType): CompileTimeConstant<*>? {
|
||||||
// Class type is never nullable in 'Foo.class' in Java
|
// Class type is never nullable in 'Foo.class' in Java
|
||||||
val `type` = TypeUtils.makeNotNullable(c.typeResolver.transformJavaType(javaType, TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes()))
|
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
|
if (jlClass == null) return null
|
||||||
|
|
||||||
val arguments = listOf(TypeProjectionImpl(`type`))
|
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.descriptors.impl.MutableClassDescriptor
|
||||||
import org.jetbrains.jet.lang.resolve.name.SpecialNames
|
import org.jetbrains.jet.lang.resolve.name.SpecialNames
|
||||||
import org.jetbrains.jet.lang.types.AbstractClassTypeConstructor
|
import org.jetbrains.jet.lang.types.AbstractClassTypeConstructor
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.lazy.resolveTopLevelClassInModule
|
||||||
|
|
||||||
class LazyJavaClassDescriptor(
|
class LazyJavaClassDescriptor(
|
||||||
private val outerC: LazyJavaResolverContextWithTypes,
|
private val outerC: LazyJavaResolverContextWithTypes,
|
||||||
@@ -203,15 +204,17 @@ class LazyJavaClassDescriptor(
|
|||||||
|
|
||||||
private val _supertypes = c.storageManager.createLazyValue<Collection<JetType>> {
|
private val _supertypes = c.storageManager.createLazyValue<Collection<JetType>> {
|
||||||
val supertypes = jClass.getSupertypes()
|
val supertypes = jClass.getSupertypes()
|
||||||
if (supertypes.isEmpty())
|
if (supertypes.isEmpty()) {
|
||||||
if (jClass.getFqName() == DescriptorResolverUtils.OBJECT_FQ_NAME) {
|
val objectFqName = DescriptorResolverUtils.OBJECT_FQ_NAME
|
||||||
|
if (jClass.getFqName() == objectFqName) {
|
||||||
listOf(KotlinBuiltIns.getInstance().getAnyType())
|
listOf(KotlinBuiltIns.getInstance().getAnyType())
|
||||||
}
|
}
|
||||||
else {
|
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
|
// If java.lang.Object is not found, we simply use Any to recover
|
||||||
listOf(jlObject ?: KotlinBuiltIns.getInstance().getAnyType())
|
listOf(objectType ?: KotlinBuiltIns.getInstance().getAnyType())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
supertypes.stream()
|
supertypes.stream()
|
||||||
.map {
|
.map {
|
||||||
|
|||||||
@@ -114,3 +114,8 @@ private fun LazyJavaResolverContext.resolveBinaryClass(kotlinClass: KotlinJvmBin
|
|||||||
|
|
||||||
return null
|
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