Do not build descriptors for built-in classes

This commit is contained in:
Andrey Breslav
2013-10-29 19:08:18 +04:00
parent eacb731308
commit 67ab159504
2 changed files with 10 additions and 2 deletions
@@ -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()
}
@@ -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<Name> segments = qualifiedName.pathSegments();