mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-125414 DB keys/indices to columns navigation
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user