Navigate to sources from markers not to decompiled classes
This commit is contained in:
@@ -338,6 +338,9 @@ property.is.overridden.header=Is overridden in <br/>
|
|||||||
|
|
||||||
navigation.title.overriding.property=Choose Implementation of {0}
|
navigation.title.overriding.property=Choose Implementation of {0}
|
||||||
navigation.findUsages.title.overriding.property=Overriding properties of {0}
|
navigation.findUsages.title.overriding.property=Overriding properties of {0}
|
||||||
|
navigation.title.super.declaration=Choose Super Implementation of {0}
|
||||||
|
navigation.findUsages.title.super.declaration=Super Implementations of {0}
|
||||||
|
|
||||||
add.function.to.supertype.family=Add Function to Supertype
|
add.function.to.supertype.family=Add Function to Supertype
|
||||||
add.function.to.supertype.action.multiple=Add function to supertype...
|
add.function.to.supertype.action.multiple=Add function to supertype...
|
||||||
add.function.to.type.action.single=Add ''{0}'' to ''{1}''
|
add.function.to.type.action.single=Add ''{0}'' to ''{1}''
|
||||||
|
|||||||
@@ -25,16 +25,12 @@ import com.intellij.codeInsight.daemon.impl.GutterIconTooltipHelper;
|
|||||||
import com.intellij.codeInsight.daemon.impl.LineMarkerNavigator;
|
import com.intellij.codeInsight.daemon.impl.LineMarkerNavigator;
|
||||||
import com.intellij.codeInsight.daemon.impl.MarkerType;
|
import com.intellij.codeInsight.daemon.impl.MarkerType;
|
||||||
import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator;
|
import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator;
|
||||||
import com.intellij.codeInsight.hint.HintUtil;
|
|
||||||
import com.intellij.codeInsight.navigation.NavigationUtil;
|
|
||||||
import com.intellij.icons.AllIcons;
|
import com.intellij.icons.AllIcons;
|
||||||
import com.intellij.ide.util.DefaultPsiElementCellRenderer;
|
import com.intellij.ide.util.DefaultPsiElementCellRenderer;
|
||||||
import com.intellij.ide.util.PsiClassListCellRenderer;
|
import com.intellij.ide.util.PsiClassListCellRenderer;
|
||||||
import com.intellij.openapi.editor.markup.GutterIconRenderer;
|
import com.intellij.openapi.editor.markup.GutterIconRenderer;
|
||||||
import com.intellij.openapi.progress.ProgressManager;
|
import com.intellij.openapi.progress.ProgressManager;
|
||||||
import com.intellij.openapi.project.DumbService;
|
import com.intellij.openapi.project.DumbService;
|
||||||
import com.intellij.openapi.ui.popup.JBPopup;
|
|
||||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
|
||||||
import com.intellij.openapi.util.Pair;
|
import com.intellij.openapi.util.Pair;
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
@@ -44,8 +40,6 @@ import com.intellij.psi.search.PsiElementProcessorAdapter;
|
|||||||
import com.intellij.psi.search.searches.AllOverridingMethodsSearch;
|
import com.intellij.psi.search.searches.AllOverridingMethodsSearch;
|
||||||
import com.intellij.psi.search.searches.ClassInheritorsSearch;
|
import com.intellij.psi.search.searches.ClassInheritorsSearch;
|
||||||
import com.intellij.psi.search.searches.OverridingMethodsSearch;
|
import com.intellij.psi.search.searches.OverridingMethodsSearch;
|
||||||
import com.intellij.psi.util.PsiUtilCore;
|
|
||||||
import com.intellij.ui.awt.RelativePoint;
|
|
||||||
import com.intellij.util.*;
|
import com.intellij.util.*;
|
||||||
import gnu.trove.THashSet;
|
import gnu.trove.THashSet;
|
||||||
import org.jetbrains.annotations.NonNls;
|
import org.jetbrains.annotations.NonNls;
|
||||||
@@ -57,12 +51,12 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
|||||||
import org.jetbrains.jet.lang.descriptors.Modality;
|
import org.jetbrains.jet.lang.descriptors.Modality;
|
||||||
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.DescriptorToSourceUtils;
|
|
||||||
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
||||||
import org.jetbrains.jet.lexer.JetTokens;
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
import org.jetbrains.jet.plugin.JetBundle;
|
import org.jetbrains.jet.plugin.JetBundle;
|
||||||
import org.jetbrains.jet.plugin.ProjectRootsUtil;
|
import org.jetbrains.jet.plugin.ProjectRootsUtil;
|
||||||
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
|
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
|
||||||
|
import org.jetbrains.jet.plugin.codeInsight.DescriptorToDeclarationUtil;
|
||||||
import org.jetbrains.jet.plugin.codeInsight.JetFunctionPsiElementCellRenderer;
|
import org.jetbrains.jet.plugin.codeInsight.JetFunctionPsiElementCellRenderer;
|
||||||
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache;
|
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache;
|
||||||
import org.jetbrains.jet.plugin.search.ideaExtensions.KotlinDefinitionsSearcher;
|
import org.jetbrains.jet.plugin.search.ideaExtensions.KotlinDefinitionsSearcher;
|
||||||
@@ -281,47 +275,30 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void iconNavigatorHandler(MouseEvent event, PsiElement elt) {
|
private static void iconNavigatorHandler(MouseEvent event, PsiElement elt) {
|
||||||
JetFile file = (JetFile)elt.getContainingFile();
|
|
||||||
assert file != null;
|
|
||||||
|
|
||||||
BindingContext bindingContext = AnalyzerFacadeWithCache.getContextForElement((JetElement) elt);
|
BindingContext bindingContext = AnalyzerFacadeWithCache.getContextForElement((JetElement) elt);
|
||||||
DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, elt);
|
DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, elt);
|
||||||
if (!(descriptor instanceof CallableMemberDescriptor)) {
|
if (!(descriptor instanceof CallableMemberDescriptor)) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Set<CallableMemberDescriptor> overriddenMembers = OverrideResolver
|
|
||||||
.getDirectlyOverriddenDeclarations((CallableMemberDescriptor) descriptor);
|
|
||||||
if (overriddenMembers.size() == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Set<CallableMemberDescriptor> overriddenMembers =
|
||||||
|
OverrideResolver.getDirectlyOverriddenDeclarations((CallableMemberDescriptor) descriptor);
|
||||||
if (overriddenMembers.isEmpty()) return;
|
if (overriddenMembers.isEmpty()) return;
|
||||||
List<PsiElement> list = Lists.newArrayList();
|
|
||||||
|
List<NavigatablePsiElement> list = Lists.newArrayList();
|
||||||
for (CallableMemberDescriptor overriddenMember : overriddenMembers) {
|
for (CallableMemberDescriptor overriddenMember : overriddenMembers) {
|
||||||
PsiElement declarationPsiElement = DescriptorToSourceUtils.descriptorToDeclaration(overriddenMember);
|
Collection<PsiElement> declarations = DescriptorToDeclarationUtil.INSTANCE$.resolveToPsiElements(elt.getProject(), overriddenMember);
|
||||||
list.add(declarationPsiElement);
|
for (PsiElement declaration : declarations) {
|
||||||
}
|
if (declaration instanceof NavigatablePsiElement) {
|
||||||
if (list.isEmpty()) {
|
list.add((NavigatablePsiElement) declaration);
|
||||||
String myEmptyText = "empty text";
|
}
|
||||||
JComponent renderer = HintUtil.createErrorLabel(myEmptyText);
|
|
||||||
JBPopup popup = JBPopupFactory.getInstance().createComponentPopupBuilder(renderer, renderer).createPopup();
|
|
||||||
if (event != null) {
|
|
||||||
popup.show(new RelativePoint(event));
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (list.size() == 1) {
|
|
||||||
PsiNavigateUtil.navigate(list.iterator().next());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
JBPopup popup = NavigationUtil.getPsiElementPopup(PsiUtilCore.toPsiElementArray(list),
|
|
||||||
new JetFunctionPsiElementCellRenderer(bindingContext),
|
|
||||||
DescriptorRenderer.FQ_NAMES_IN_TYPES.render(descriptor));
|
|
||||||
if (event != null) {
|
|
||||||
popup.show(new RelativePoint(event));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PsiElementListNavigator.openTargets(
|
||||||
|
event,
|
||||||
|
ArrayUtil.toObjectArray(list, NavigatablePsiElement.class),
|
||||||
|
JetBundle.message("navigation.title.super.declaration", descriptor.getName()),
|
||||||
|
JetBundle.message("navigation.findUsages.title.super.declaration", descriptor.getName()),
|
||||||
|
new JetFunctionPsiElementCellRenderer(bindingContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String calculateTooltipString(PsiElement element) {
|
private static String calculateTooltipString(PsiElement element) {
|
||||||
|
|||||||
Reference in New Issue
Block a user