From b69ab12db75c14f96470036c63898b6af0ebfdfd Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 2 Jun 2014 19:53:03 +0400 Subject: [PATCH] JDR: Use module to resolve special classes --- .../lazy/descriptors/LazyJavaAnnotationDescriptor.kt | 4 +++- .../java/lazy/descriptors/LazyJavaClassDescriptor.kt | 11 +++++++---- .../jetbrains/jet/lang/resolve/java/lazy/resolvers.kt | 5 +++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt index 09852199649..8ec4760e9df 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt @@ -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`)) 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 434c5fee2d2..01be75b4317 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 @@ -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> { 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 { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/resolvers.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/resolvers.kt index 36ba831bc82..7c9e339e608 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/resolvers.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/resolvers.kt @@ -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 +} \ No newline at end of file