Fix getting built-in classes in frontend.java
getKotlinBuiltinClassDescriptor() worked only for classes in jet.* package and was failing for classes like jet.Map.Entry, jet.MutableMap.MutableEntry
This commit is contained in:
-12
@@ -24,8 +24,6 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
|
|||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProviderFactory;
|
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProviderFactory;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
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;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
@@ -91,16 +89,6 @@ public class JavaSemanticServices {
|
|||||||
return psiDeclarationProviderFactory;
|
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
|
@Nullable
|
||||||
public NamespaceDescriptor getKotlinNamespaceDescriptor(@NotNull FqName qualifiedName) {
|
public NamespaceDescriptor getKotlinNamespaceDescriptor(@NotNull FqName qualifiedName) {
|
||||||
return trace.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, qualifiedName);
|
return trace.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, qualifiedName);
|
||||||
|
|||||||
+21
-1
@@ -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.FqNameBase;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
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.JetType;
|
||||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
import org.jetbrains.jet.lang.types.TypeUtils;
|
||||||
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
||||||
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -159,7 +161,7 @@ public final class JavaClassResolver {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassDescriptor builtinClassDescriptor = semanticServices.getKotlinBuiltinClassDescriptor(qualifiedName);
|
ClassDescriptor builtinClassDescriptor = getKotlinBuiltinClassDescriptor(qualifiedName);
|
||||||
if (builtinClassDescriptor != null) {
|
if (builtinClassDescriptor != null) {
|
||||||
return builtinClassDescriptor;
|
return builtinClassDescriptor;
|
||||||
}
|
}
|
||||||
@@ -184,6 +186,24 @@ public final class JavaClassResolver {
|
|||||||
return doResolveClass(qualifiedName, tasks);
|
return doResolveClass(qualifiedName, tasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static ClassDescriptor getKotlinBuiltinClassDescriptor(@NotNull FqName qualifiedName) {
|
||||||
|
if (!qualifiedName.firstSegmentIs(KotlinBuiltIns.BUILT_INS_PACKAGE_NAME)) return null;
|
||||||
|
|
||||||
|
List<Name> 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) {
|
private ClassDescriptor doResolveClass(@NotNull FqName qualifiedName, @NotNull PostponedTasks tasks) {
|
||||||
PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName, PsiClassFinder.RuntimeClassesHandleMode.REPORT_ERROR);
|
PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName, PsiClassFinder.RuntimeClassesHandleMode.REPORT_ERROR);
|
||||||
if (psiClass == null) {
|
if (psiClass == null) {
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public class KotlinBuiltIns {
|
|||||||
public static final JetScope STUB = JetScope.EMPTY;
|
public static final JetScope STUB = JetScope.EMPTY;
|
||||||
|
|
||||||
public static final String BUILT_INS_PACKAGE_NAME_STRING = "jet";
|
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 FqName BUILT_INS_PACKAGE_FQ_NAME = FqName.topLevel(BUILT_INS_PACKAGE_NAME);
|
||||||
|
|
||||||
public static final int FUNCTION_TRAIT_COUNT = 23;
|
public static final int FUNCTION_TRAIT_COUNT = 23;
|
||||||
|
|||||||
Reference in New Issue
Block a user