StackOverlowes fixed with FQNames remembered in trace
This commit is contained in:
+11
@@ -76,6 +76,12 @@ public class JavaDescriptorResolver {
|
||||
@NotNull
|
||||
public ClassDescriptor resolveClass(@NotNull PsiClass psiClass) {
|
||||
String qualifiedName = psiClass.getQualifiedName();
|
||||
|
||||
ClassDescriptor kotlinClassDescriptor = semanticServices.getKotlinClassDescriptor(qualifiedName);
|
||||
if (kotlinClassDescriptor != null) {
|
||||
return kotlinClassDescriptor;
|
||||
}
|
||||
|
||||
ClassDescriptor classDescriptor = classDescriptorCache.get(qualifiedName);
|
||||
if (classDescriptor == null) {
|
||||
classDescriptor = createJavaClassDescriptor(psiClass);
|
||||
@@ -86,6 +92,11 @@ public class JavaDescriptorResolver {
|
||||
|
||||
@Nullable
|
||||
public ClassDescriptor resolveClass(@NotNull String qualifiedName) {
|
||||
ClassDescriptor kotlinClassDescriptor = semanticServices.getKotlinClassDescriptor(qualifiedName);
|
||||
if (kotlinClassDescriptor != null) {
|
||||
return kotlinClassDescriptor;
|
||||
}
|
||||
|
||||
ClassDescriptor classDescriptor = classDescriptorCache.get(qualifiedName);
|
||||
if (classDescriptor == null) {
|
||||
PsiClass psiClass = findClass(qualifiedName);
|
||||
|
||||
+13
-4
@@ -5,10 +5,7 @@ import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -44,6 +41,11 @@ public class JavaPackageScope extends JetScopeImpl {
|
||||
@NotNull
|
||||
@Override
|
||||
public Set<FunctionDescriptor> getFunctions(@NotNull String name) {
|
||||
NamespaceDescriptor kotlinNamespaceDescriptor = semanticServices.getKotlinNamespaceDescriptor(packageFQN);
|
||||
if (kotlinNamespaceDescriptor != null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
// TODO: what is GlobalSearchScope
|
||||
PsiClass psiClass = semanticServices.getDescriptorResolver().javaFacade.findClass(getQualifiedName("namespace"));
|
||||
if (psiClass == null) {
|
||||
@@ -54,7 +56,9 @@ public class JavaPackageScope extends JetScopeImpl {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
System.out.println(psiClass.getQualifiedName());
|
||||
return semanticServices.getDescriptorResolver().resolveFunctionGroup(containingDescriptor, psiClass, null, name, true);
|
||||
// return Collections.emptySet();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -79,6 +83,11 @@ public class JavaPackageScope extends JetScopeImpl {
|
||||
}
|
||||
|
||||
for (PsiClass psiClass : javaPackage.getClasses()) {
|
||||
ClassDescriptor kotlinClassDescriptor = semanticServices.getKotlinClassDescriptor(psiClass.getQualifiedName());
|
||||
if (kotlinClassDescriptor != null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (psiClass.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||
allDescriptors.add(descriptorResolver.resolveClass(psiClass));
|
||||
}
|
||||
|
||||
+14
@@ -2,7 +2,11 @@ package org.jetbrains.jet.lang.resolve.java;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.JetSemanticServices;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
|
||||
/**
|
||||
@@ -39,4 +43,14 @@ public class JavaSemanticServices {
|
||||
public JetSemanticServices getJetSemanticServices() {
|
||||
return jetSemanticServices;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ClassDescriptor getKotlinClassDescriptor(String qualifiedName) {
|
||||
return getTrace().get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, qualifiedName);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public NamespaceDescriptor getKotlinNamespaceDescriptor(String qualifiedName) {
|
||||
return getTrace().get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, qualifiedName);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user