diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaSemanticServices.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaSemanticServices.java index 14006b7398e..5db17dc0f63 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaSemanticServices.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaSemanticServices.java @@ -24,8 +24,6 @@ import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import javax.inject.Inject; @@ -91,16 +89,6 @@ public class JavaSemanticServices { return psiDeclarationProviderFactory; } - @Nullable - public ClassDescriptor getKotlinBuiltinClassDescriptor(@NotNull FqName qualifiedName) { - if (qualifiedName.firstSegmentIs(Name.identifier("jet")) && qualifiedName.pathSegments().size() == 2) { - return (ClassDescriptor) KotlinBuiltIns.getInstance().getBuiltInsScope().getClassifier(qualifiedName.pathSegments().get(1)); - } - else { - return null; - } - } - @Nullable public NamespaceDescriptor getKotlinNamespaceDescriptor(@NotNull FqName qualifiedName) { return trace.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, qualifiedName); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java index 2fe9b7f2e0e..fb137f3bb32 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java @@ -43,9 +43,11 @@ import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameBase; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import javax.inject.Inject; import java.util.ArrayList; @@ -159,7 +161,7 @@ public final class JavaClassResolver { return null; } - ClassDescriptor builtinClassDescriptor = semanticServices.getKotlinBuiltinClassDescriptor(qualifiedName); + ClassDescriptor builtinClassDescriptor = getKotlinBuiltinClassDescriptor(qualifiedName); if (builtinClassDescriptor != null) { return builtinClassDescriptor; } @@ -184,6 +186,24 @@ public final class JavaClassResolver { return doResolveClass(qualifiedName, tasks); } + @Nullable + private 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().getBuiltInsScope(); + 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) { PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName, PsiClassFinder.RuntimeClassesHandleMode.REPORT_ERROR); if (psiClass == null) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index f477b19e27c..4c2f97aa7f1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -47,7 +47,7 @@ public class KotlinBuiltIns { public static final JetScope STUB = JetScope.EMPTY; public static final String BUILT_INS_PACKAGE_NAME_STRING = "jet"; - /* package */ static final Name BUILT_INS_PACKAGE_NAME = Name.identifier(BUILT_INS_PACKAGE_NAME_STRING); + public static final Name BUILT_INS_PACKAGE_NAME = Name.identifier(BUILT_INS_PACKAGE_NAME_STRING); public static final FqName BUILT_INS_PACKAGE_FQ_NAME = FqName.topLevel(BUILT_INS_PACKAGE_NAME); public static final int FUNCTION_TRAIT_COUNT = 23;