diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt index 3fe2a528269..a0f9d71dc0b 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt @@ -7,7 +7,6 @@ import org.jetbrains.jet.lang.resolve.java.structure.JavaClass 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.JavaClassResolver import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaPackageFragment @@ -73,7 +72,7 @@ public open class LazyJavaPackageFragmentProvider( val fqName = javaClass.getFqName() if (fqName != null) { // TODO: this should be handled by module separation logic - val builtinClass = JavaClassResolver.getKotlinBuiltinClassDescriptor(fqName) + val builtinClass = DescriptorResolverUtils.getKotlinBuiltinClassDescriptor(fqName) if (builtinClass != null) return builtinClass if (javaClass.getOriginKind() == JavaClass.OriginKind.KOTLIN_LIGHT_CLASS) { @@ -97,7 +96,7 @@ public open class LazyJavaPackageFragmentProvider( } override fun resolveClassByFqName(fqName: FqName): ClassDescriptor? { - val builtinClass = JavaClassResolver.getKotlinBuiltinClassDescriptor(fqName) + val builtinClass = DescriptorResolverUtils.getKotlinBuiltinClassDescriptor(fqName) if (builtinClass != null) return builtinClass // TODO Here we prefer sources (something outside JDR subsystem) to binaries, which should actually be driven by module dependencies separation 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 04f5bde6cc1..14f226f710e 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 @@ -23,9 +23,9 @@ import org.jetbrains.jet.lang.resolve.java.structure.JavaTypeParameter import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaTypeParameterDescriptor import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.resolve.name.FqName -import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader.Kind +import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils trait LazyJavaClassResolver { fun resolveClass(javaClass: JavaClass): ClassDescriptor? @@ -71,7 +71,7 @@ data class JavaClassLookupResult(val jClass: JavaClass? = null, val kClass: Clas fun LazyJavaResolverContext.findClassInJava(fqName: FqName): JavaClassLookupResult { // TODO: this should be governed by module separation logic // Do not look for JavaClasses for Kotlin binaries & built-ins - if (JavaClassResolver.getKotlinBuiltinClassDescriptor(fqName) != null) { + if (DescriptorResolverUtils.getKotlinBuiltinClassDescriptor(fqName) != null) { return JavaClassLookupResult() } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java index 0631f3712c2..cf57e49b2be 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java @@ -29,10 +29,12 @@ import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils; import org.jetbrains.jet.lang.resolve.java.structure.*; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeProjection; import org.jetbrains.jet.lang.types.TypeProjectionImpl; import org.jetbrains.jet.lang.types.TypeSubstitutor; +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.*; @@ -308,4 +310,22 @@ public final class DescriptorResolverUtils { return false; } + + @Nullable + public static ClassDescriptor getKotlinBuiltinClassDescriptor(@NotNull FqName qualifiedName) { + if (!qualifiedName.firstSegmentIs(KotlinBuiltIns.BUILT_INS_PACKAGE_NAME)) return null; + + List segments = qualifiedName.pathSegments(); + if (segments.size() < 2) return null; + + JetScope scope = KotlinBuiltIns.getInstance().getBuiltInsPackageScope(); + for (int i = 1, size = segments.size(); i < size; i++) { + ClassifierDescriptor classifier = scope.getClassifier(segments.get(i)); + if (classifier == null) return null; + assert classifier instanceof ClassDescriptor : "Unexpected classifier in built-ins: " + classifier; + scope = ((ClassDescriptor) classifier).getUnsubstitutedInnerClassesScope(); + } + + return (ClassDescriptor) scope.getContainingDeclaration(); + } } 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 480ac61e36e..510db66405a 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 @@ -167,24 +167,6 @@ public final class JavaClassResolver { return doResolveClass(qualifiedName, tasks); } - @Nullable - public static ClassDescriptor getKotlinBuiltinClassDescriptor(@NotNull FqName qualifiedName) { - if (!qualifiedName.firstSegmentIs(KotlinBuiltIns.BUILT_INS_PACKAGE_NAME)) return null; - - List segments = qualifiedName.pathSegments(); - if (segments.size() < 2) return null; - - JetScope scope = KotlinBuiltIns.getInstance().getBuiltInsPackageScope(); - for (int i = 1, size = segments.size(); i < size; i++) { - ClassifierDescriptor classifier = scope.getClassifier(segments.get(i)); - if (classifier == null) return null; - assert classifier instanceof ClassDescriptor : "Unexpected classifier in built-ins: " + classifier; - scope = ((ClassDescriptor) classifier).getUnsubstitutedInnerClassesScope(); - } - - return (ClassDescriptor) scope.getContainingDeclaration(); - } - private ClassDescriptor doResolveClass(@NotNull FqName qualifiedName, @NotNull PostponedTasks tasks) { //TODO: correct scope KotlinJvmBinaryClass kotlinClass = kotlinClassFinder.findKotlinClass(qualifiedName);