Fixed navigation to sources when FQ name is present in several files.
#KT-1681 fixed
This commit is contained in:
@@ -16,6 +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.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;
|
||||||
@@ -32,16 +33,18 @@ import com.intellij.psi.util.PsiTreeUtil;
|
|||||||
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.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.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.java.AnalyzerFacadeForJVM;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
|
||||||
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.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.resolve.DescriptorRenderer;
|
import org.jetbrains.jet.resolve.DescriptorRenderer;
|
||||||
import org.jetbrains.jet.util.slicedmap.WritableSlice;
|
import org.jetbrains.jet.util.slicedmap.ReadOnlySlice;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -58,21 +61,23 @@ public class JetSourceNavigationHelper {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static<D extends ClassOrNamespaceDescriptor> Tuple2<BindingContext, D>
|
private static<D extends ClassOrNamespaceDescriptor> Tuple2<BindingContext, D>
|
||||||
getBindingContextAndClassOrNamespaceDescriptor(@NotNull WritableSlice<FqName, D> slice,
|
getBindingContextAndClassOrNamespaceDescriptor(@NotNull ReadOnlySlice<FqName, D> slice,
|
||||||
@NotNull JetDeclaration declaration,
|
@NotNull JetDeclaration declaration,
|
||||||
@Nullable FqName fqName) {
|
@Nullable FqName fqName) {
|
||||||
if (fqName == null || DumbService.isDumb(declaration.getProject())) {
|
if (fqName == null || DumbService.isDumb(declaration.getProject())) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
final Project project = declaration.getProject();
|
||||||
final List<JetFile> libraryFiles = findAllSourceFilesWhichContainIdentifier(declaration);
|
final List<JetFile> libraryFiles = findAllSourceFilesWhichContainIdentifier(declaration);
|
||||||
for (JetFile libraryFile : libraryFiles) {
|
BindingContext bindingContext = AnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
|
||||||
BindingContext bindingContext = AnalyzerFacadeForJVM.analyzeFileWithCache(libraryFile,
|
project,
|
||||||
AnalyzerFacadeForJVM.SINGLE_DECLARATION_PROVIDER)
|
libraryFiles,
|
||||||
.getBindingContext();
|
Predicates.<PsiFile>alwaysTrue(),
|
||||||
D descriptor = bindingContext.get(slice, fqName);
|
JetControlFlowDataTraceFactory.EMPTY,
|
||||||
if (descriptor != null) {
|
CompilerSpecialMode.REGULAR).getBindingContext();
|
||||||
return new Tuple2<BindingContext, D>(bindingContext, descriptor);
|
D descriptor = bindingContext.get(slice, fqName);
|
||||||
}
|
if (descriptor != null) {
|
||||||
|
return new Tuple2<BindingContext, D>(bindingContext, descriptor);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user