IDEA-125414 DB keys/indices to columns navigation

This commit is contained in:
Gregory.Shrago
2014-05-31 15:58:32 +04:00
parent 756b77b4ea
commit e9e95238a6
5 changed files with 47 additions and 32 deletions
@@ -18,8 +18,10 @@ package com.intellij.util;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.Navigatable;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiUtilCore;
import org.jetbrains.annotations.Nullable;
public class PsiNavigateUtil {
@@ -27,10 +29,14 @@ public class PsiNavigateUtil {
if (psiElement != null && psiElement.isValid()) {
final PsiElement navigationElement = psiElement.getNavigationElement();
final int offset = navigationElement instanceof PsiFile ? -1 : navigationElement.getTextOffset();
final VirtualFile virtualFile = navigationElement.getContainingFile().getVirtualFile();
VirtualFile virtualFile = PsiUtilCore.getVirtualFile(psiElement);
if (virtualFile != null && virtualFile.isValid()) {
new OpenFileDescriptor(navigationElement.getProject(), virtualFile, offset).navigate(true);
}
else if (navigationElement instanceof Navigatable) {
((Navigatable)navigationElement).navigate(true);
}
}
}
}
@@ -46,6 +46,7 @@ import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.pom.Navigatable;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.search.GlobalSearchScope;
@@ -584,7 +585,7 @@ public class ShowUsagesAction extends AnAction implements PopupAction {
}
builder.setMovable(true).setResizable(true);
final AtomicReference<UsageInfo> selectedUsage = new AtomicReference<UsageInfo>();
final AtomicReference<Object> selectedUsage = new AtomicReference<Object>();
final AtomicBoolean moreUsages = new AtomicBoolean();
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
@@ -601,7 +602,7 @@ public class ShowUsagesAction extends AnAction implements PopupAction {
}
else {
moreUsages.set(false);
selectedUsage.set(usage instanceof UsageInfo2UsageAdapter ? ((UsageInfo2UsageAdapter)usage).getUsageInfo().copy() : null);
selectedUsage.set(usage instanceof UsageInfo2UsageAdapter ? ((UsageInfo2UsageAdapter)usage).getUsageInfo().copy() : usage);
}
break;
}
@@ -616,9 +617,12 @@ public class ShowUsagesAction extends AnAction implements PopupAction {
appendMoreUsages(editor, popupPosition, handler, maxUsages, options);
return;
}
UsageInfo usage = selectedUsage.get();
if (usage != null) {
UsageViewUtil.navigateTo(usage, true);
Object usage = selectedUsage.get();
if (usage instanceof UsageInfo) {
UsageViewUtil.navigateTo((UsageInfo)usage, true);
}
else if (usage instanceof Navigatable) {
((Navigatable)usage).navigate(true);
}
}
});
@@ -18,8 +18,10 @@ package com.intellij.ide.actions;
import com.intellij.ide.util.DefaultPsiElementCellRenderer;
import com.intellij.navigation.GotoRelatedItem;
import com.intellij.navigation.GotoRelatedProvider;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.ui.popup.JBPopup;
@@ -36,6 +38,7 @@ import com.intellij.ui.SimpleTextAttributes;
import com.intellij.ui.popup.list.ListPopupImpl;
import com.intellij.ui.popup.list.PopupListElementRenderer;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -51,25 +54,28 @@ import java.util.List;
*/
public class GotoRelatedFileAction extends AnAction {
@Override
public void update(AnActionEvent e) {
PsiFile file = CommonDataKeys.PSI_FILE.getData(e.getDataContext());
PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(e.getDataContext());
e.getPresentation().setEnabled(element != null || file != null);
}
@Override
public void actionPerformed(AnActionEvent e) {
DataContext dataContext = e.getDataContext();
PsiFile file = CommonDataKeys.PSI_FILE.getData(e.getDataContext());
Editor editor = CommonDataKeys.EDITOR.getData(e.getDataContext());
PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(dataContext);
if (element == null && file == null) return;
DataContext context = e.getDataContext();
Editor editor = CommonDataKeys.EDITOR.getData(context);
PsiFile psiFile = CommonDataKeys.PSI_FILE.getData(context);
if (psiFile == null) return;
List<GotoRelatedItem> items = getItems(psiFile, editor, context);
List<GotoRelatedItem> items = element == null? getItems(file, editor, dataContext) : getItems(element, dataContext);
if (items.isEmpty()) return;
if (items.size() == 1 && items.get(0).getElement() != null) {
items.get(0).navigate();
return;
}
if (ApplicationManager.getApplication().isUnitTestMode()) {
//noinspection UseOfSystemOutOrSystemErr
System.out.println(items);
}
createPopup(items, "Go to Related Files").showInBestPositionFor(context);
createPopup(items, "Choose Target").showInBestPositionFor(dataContext);
}
public static JBPopup createPopup(final List<? extends GotoRelatedItem> items, final String title) {
@@ -102,8 +108,6 @@ public class GotoRelatedFileAction extends AnAction {
final String title, final Processor<Object> processor) {
final Ref<Boolean> hasMnemonic = Ref.create(false);
final Ref<ListCellRenderer> rendererRef = Ref.create(null);
final DefaultPsiElementCellRenderer renderer = new DefaultPsiElementCellRenderer() {
{
setFocusBorderEnabled(false);
@@ -273,9 +277,12 @@ public class GotoRelatedFileAction extends AnAction {
contextElement = element;
}
}
return getItems(contextElement, dataContext);
}
Set<GotoRelatedItem> items = new LinkedHashSet<GotoRelatedItem>();
@NotNull
public static List<GotoRelatedItem> getItems(@NotNull PsiElement contextElement, @Nullable DataContext dataContext) {
Set<GotoRelatedItem> items = ContainerUtil.newLinkedHashSet();
for (GotoRelatedProvider provider : Extensions.getExtensions(GotoRelatedProvider.EP_NAME)) {
items.addAll(provider.getItems(contextElement));
if (dataContext != null) {
@@ -308,11 +315,6 @@ public class GotoRelatedFileAction extends AnAction {
}
}
@Override
public void update(AnActionEvent e) {
e.getPresentation().setEnabled(CommonDataKeys.PSI_FILE.getData(e.getDataContext()) != null);
}
private static Action createNumberAction(final int mnemonic,
final ListPopupImpl listPopup,
final Map<PsiElement, GotoRelatedItem> itemsMap,
@@ -19,12 +19,12 @@ import com.intellij.navigation.GotoRelatedItem;
import com.intellij.navigation.GotoRelatedProvider;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
@@ -35,11 +35,14 @@ public class GotoTestRelatedProvider extends GotoRelatedProvider {
@Override
public List<? extends GotoRelatedItem> getItems(@NotNull DataContext context) {
final PsiFile file = CommonDataKeys.PSI_FILE.getData(context);
if (file == null) return Collections.emptyList();
List<PsiElement> result;
final boolean isTest = TestFinderHelper.isTest(file);
if (isTest) {
result = TestFinderHelper.findClassesForTest(file);
} else {
}
else {
result = TestFinderHelper.findTestsForClass(file);
}
@@ -50,6 +53,6 @@ public class GotoTestRelatedProvider extends GotoRelatedProvider {
}
return items;
}
return super.getItems(context);
return Collections.emptyList();
}
}
@@ -51,7 +51,7 @@ public class FormRelatedFilesProvider extends GotoRelatedProvider {
}
else {
PsiFile file = context.getContainingFile();
if (file.getFileType() == GuiFormFileType.INSTANCE) {
if (file != null && file.getFileType() == GuiFormFileType.INSTANCE) {
try {
String className = Utils.getBoundClassName(file.getText());
if (className != null) {