KotlinCodeAnalyzer interface extracted

This commit is contained in:
Andrey Breslav
2013-02-12 14:06:09 +04:00
parent a3667d1b28
commit fb87a560fb
12 changed files with 110 additions and 46 deletions
@@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -347,14 +348,14 @@ public class JetShortNamesCache extends PsiShortNamesCache {
public Collection<ClassDescriptor> getJetClassesDescriptors(
@NotNull Condition<String> acceptedShortNameCondition,
@NotNull ResolveSession resolveSession
@NotNull KotlinCodeAnalyzer analyzer
) {
Collection<ClassDescriptor> classDescriptors = new ArrayList<ClassDescriptor>();
for (String fqName : JetFullClassNameIndex.getInstance().getAllKeys(project)) {
FqName classFQName = new FqName(fqName);
if (acceptedShortNameCondition.value(classFQName.shortName().getName())) {
classDescriptors.addAll(ResolveSessionUtils.getClassDescriptorsByFqName(resolveSession, classFQName));
classDescriptors.addAll(ResolveSessionUtils.getClassDescriptorsByFqName(analyzer, classFQName));
}
}
@@ -33,7 +33,7 @@ import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.plugin.JetDescriptorIconProvider;
@@ -59,7 +59,7 @@ public final class DescriptorLookupConverter {
private DescriptorLookupConverter() {}
@NotNull
public static LookupElement createLookupElement(@NotNull ResolveSession resolveSession,
public static LookupElement createLookupElement(@NotNull KotlinCodeAnalyzer analyzer,
@NotNull DeclarationDescriptor descriptor, @Nullable PsiElement declaration) {
if (declaration != null) {
MutableLookupElement javaLookupElement = createJavaLookupElementIfPossible(declaration);
@@ -75,7 +75,7 @@ public final class DescriptorLookupConverter {
}
LookupElementBuilder element = LookupElementBuilder.create(
new JetLookupObject(descriptor, resolveSession, declaration), descriptor.getName().getName());
new JetLookupObject(descriptor, analyzer, declaration), descriptor.getName().getName());
String presentableText = descriptor.getName().getName();
String typeText = "";
@@ -172,7 +172,7 @@ public final class DescriptorLookupConverter {
@NotNull
public static LookupElement createLookupElement(
@NotNull ResolveSession resolveSession,
@NotNull KotlinCodeAnalyzer analyzer,
@NotNull BindingContext bindingContext,
@NotNull DeclarationDescriptor descriptor) {
if (descriptor instanceof CallableMemberDescriptor) {
@@ -183,17 +183,17 @@ public final class DescriptorLookupConverter {
}
descriptor = callableMemberDescriptor;
}
return createLookupElement(resolveSession, descriptor, BindingContextUtils.descriptorToDeclaration(bindingContext, descriptor));
return createLookupElement(analyzer, descriptor, BindingContextUtils.descriptorToDeclaration(bindingContext, descriptor));
}
public static LookupElement[] collectLookupElements(
@NotNull ResolveSession resolveSession,
@NotNull KotlinCodeAnalyzer analyzer,
@NotNull BindingContext bindingContext,
@NotNull Iterable<DeclarationDescriptor> descriptors) {
List<LookupElement> result = Lists.newArrayList();
for (final DeclarationDescriptor descriptor : descriptors) {
result.add(createLookupElement(resolveSession, bindingContext, descriptor));
result.add(createLookupElement(analyzer, bindingContext, descriptor));
}
return result.toArray(new LookupElement[result.size()]);
@@ -21,7 +21,7 @@ import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.renderer.DescriptorRenderer;
/**
@@ -35,14 +35,14 @@ public final class JetLookupObject {
private final DeclarationDescriptor descriptor;
@NotNull
private final ResolveSession resolveSession;
private final KotlinCodeAnalyzer analyzer;
@Nullable
private final PsiElement psiElement;
public JetLookupObject(@Nullable DeclarationDescriptor descriptor, @NotNull ResolveSession resolveSession, @Nullable PsiElement psiElement) {
public JetLookupObject(@Nullable DeclarationDescriptor descriptor, @NotNull KotlinCodeAnalyzer analyzer, @Nullable PsiElement psiElement) {
this.descriptor = descriptor;
this.resolveSession = resolveSession;
this.analyzer = analyzer;
this.psiElement = psiElement;
}
@@ -79,7 +79,7 @@ public final class JetLookupObject {
// Same descriptor - same lookup element
if (descriptor != null && other.descriptor != null) {
if (resolveSession == other.resolveSession) {
if (analyzer == other.analyzer) {
if (descriptor.equals(other.descriptor)) {
return true;
}
@@ -40,6 +40,7 @@ import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.lazy.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.resolve.lazy.LockBasedStorageManager;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -207,7 +208,7 @@ public class JetSourceNavigationHelper {
return KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(fqName);
}
});
ResolveSession resolveSession = new ResolveSession(
KotlinCodeAnalyzer analyzer = new ResolveSession(
project,
storageManager,
new ModuleDescriptor(Name.special("<library module>")),
@@ -216,7 +217,7 @@ public class JetSourceNavigationHelper {
for (JetNamedDeclaration candidate : candidates) {
//noinspection unchecked
CallableDescriptor candidateDescriptor = (CallableDescriptor) resolveSession.resolveToDescriptor(candidate);
CallableDescriptor candidateDescriptor = (CallableDescriptor) analyzer.resolveToDescriptor(candidate);
if (receiversMatch(decompiledDeclaration, candidateDescriptor)
&& valueParametersTypesMatch(decompiledDeclaration, candidateDescriptor)
&& typeParametersMatch((JetTypeParameterListOwner) decompiledDeclaration, candidateDescriptor.getTypeParameters())) {
@@ -46,6 +46,7 @@ import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.plugin.JetBundle;
@@ -158,14 +159,14 @@ public class ImportClassAndFunFix extends JetHintAction<JetSimpleNameExpression>
/*
* Searches for possible class names in kotlin context and java facade.
*/
public static Collection<FqName> getClassNames(@NotNull String referenceName, @NotNull JetFile file, @NotNull ResolveSession resolveSession) {
public static Collection<FqName> getClassNames(@NotNull String referenceName, @NotNull JetFile file, @NotNull KotlinCodeAnalyzer analyzer) {
Set<FqName> possibleResolveNames = Sets.newHashSet();
if (!JsModuleDetector.isJsModule(file)) {
possibleResolveNames.addAll(getClassesFromCache(referenceName, file));
}
else {
possibleResolveNames.addAll(getJetClasses(referenceName, file.getProject(), resolveSession));
possibleResolveNames.addAll(getJetClasses(referenceName, file.getProject(), analyzer));
}
// TODO: Do appropriate sorting
@@ -205,7 +206,7 @@ public class ImportClassAndFunFix extends JetHintAction<JetSimpleNameExpression>
return PsiShortNamesCache.getInstance(jetFile.getProject());
}
private static Collection<FqName> getJetClasses(@NotNull final String typeName, @NotNull Project project, @NotNull ResolveSession resolveSession) {
private static Collection<FqName> getJetClasses(@NotNull final String typeName, @NotNull Project project, @NotNull KotlinCodeAnalyzer resolveSession) {
JetShortNamesCache cache = JetShortNamesCache.getKotlinInstance(project);
Collection<ClassDescriptor> descriptors = cache.getJetClassesDescriptors(new Condition<String>() {
@Override
@@ -30,7 +30,7 @@ import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade;
import org.jetbrains.jet.plugin.stubindex.JetSuperClassIndex;
@@ -63,7 +63,7 @@ public class KotlinDirectInheritorsSearcher extends QueryExecutorBase<PsiClass,
for (JetClassOrObject candidate : candidates) {
if (!(candidate instanceof JetClass)) continue;
JetFile containingFile = (JetFile) candidate.getContainingFile();
ResolveSession sessionForFile = WholeProjectAnalyzerFacade.getLazyResolveSessionForFile(containingFile);
KotlinCodeAnalyzer sessionForFile = WholeProjectAnalyzerFacade.getLazyResolveSessionForFile(containingFile);
ClassDescriptor classDescriptor = (ClassDescriptor) sessionForFile.resolveToDescriptor(candidate);
for (JetType type : classDescriptor.getTypeConstructor().getSupertypes()) {
ClassifierDescriptor declarationDescriptor = type.getConstructor().getDeclarationDescriptor();