From 67ab159504c0ff4e2ee9c760bac7157d56bc229e Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 29 Oct 2013 19:08:18 +0400 Subject: [PATCH] Do not build descriptors for built-in classes --- .../jet/lang/resolve/java/lazy/LazyJavaSubModule.kt | 10 +++++++++- .../lang/resolve/java/resolver/JavaClassResolver.java | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaSubModule.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaSubModule.kt index af08b8f8085..033892b7586 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaSubModule.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaSubModule.kt @@ -9,6 +9,7 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaPackage import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaClass import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver +import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver public open class LazyJavaSubModule( private val outerContext: GlobalJavaResolverContext, @@ -52,6 +53,13 @@ public open class LazyJavaSubModule( private inner class SubModuleClassResolver : LazyJavaClassResolver { override fun resolveClass(javaClass: JavaClass): ClassDescriptor? { // TODO: there's no notion of module separation here. We must refuse to resolve classes from other modules + val fqName = javaClass.getFqName() + if (fqName != null) { + // TODO: this should be handled by module seperation logic + val builtinClass = JavaClassResolver.getKotlinBuiltinClassDescriptor(fqName) + if (builtinClass != null) return builtinClass + } + val outer = javaClass.getOuterClass() val scope = if (outer != null) { val outerClass = resolveClass(outer) @@ -59,7 +67,7 @@ public open class LazyJavaSubModule( outerClass.getUnsubstitutedInnerClassesScope() } else { - val outerPackage = getPackageFragment(javaClass.getFqName()!!.parent()) + val outerPackage = getPackageFragment(fqName!!.parent()) if (outerPackage == null) return outerContext.javaClassResolver.resolveClass(javaClass) outerPackage.getMemberScope() } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java index 3969c4e596b..5a08c42f859 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java @@ -168,7 +168,7 @@ public final class JavaClassResolver { } @Nullable - private static ClassDescriptor getKotlinBuiltinClassDescriptor(@NotNull FqName qualifiedName) { + public static ClassDescriptor getKotlinBuiltinClassDescriptor(@NotNull FqName qualifiedName) { if (!qualifiedName.firstSegmentIs(KotlinBuiltIns.BUILT_INS_PACKAGE_NAME)) return null; List segments = qualifiedName.pathSegments();