Optimized navigation to sources a little bit by using per-file cache.

This commit is contained in:
Evgeny Gerashchenko
2012-03-15 21:40:17 +04:00
parent ff739c7aa8
commit 6274c0b12e
@@ -16,7 +16,7 @@
package org.jetbrains.jet.plugin.libraries; package org.jetbrains.jet.plugin.libraries;
import com.google.common.base.Predicates; import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.OrderEntry; import com.intellij.openapi.roots.OrderEntry;
import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.OrderRootType;
@@ -31,13 +31,11 @@ import com.intellij.psi.search.UsageSearchContext;
import jet.Tuple2; import jet.Tuple2;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.FqName; import org.jetbrains.jet.lang.resolve.FqName;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
import org.jetbrains.jet.resolve.DescriptorRenderer; import org.jetbrains.jet.resolve.DescriptorRenderer;
@@ -64,16 +62,14 @@ public class JetSourceNavigationHelper {
if (fqName == null) { if (fqName == null) {
return null; return null;
} }
final Project project = declaration.getProject();
final List<JetFile> libraryFiles = findAllSourceFilesWhichContainIdentifier(declaration); final List<JetFile> libraryFiles = findAllSourceFilesWhichContainIdentifier(declaration);
BindingContext bindingContext = AnalyzingUtils.analyzeFiles(project, for (JetFile libraryFile : libraryFiles) {
ModuleConfiguration.EMPTY, BindingContext bindingContext = AnalyzerFacadeForJVM.analyzeFileWithCache(libraryFile,
libraryFiles, AnalyzerFacadeForJVM.SINGLE_DECLARATION_PROVIDER);
Predicates.<PsiFile>alwaysTrue(), D descriptor = bindingContext.get(slice, fqName);
JetControlFlowDataTraceFactory.EMPTY); if (descriptor != null) {
D descriptor = bindingContext.get(slice, fqName); return new Tuple2<BindingContext, D>(bindingContext, descriptor);
if (descriptor != null) { }
return new Tuple2<BindingContext, D>(bindingContext, descriptor);
} }
return null; return null;
} }