diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/ide/actions')
5 files changed, 20 insertions, 293 deletions
diff --git a/platform/lang-impl/src/com/intellij/ide/actions/GotoRelatedFileAction.java b/platform/lang-impl/src/com/intellij/ide/actions/GotoRelatedFileAction.java index 6d734d52a584..e86caec534f6 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/GotoRelatedFileAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/GotoRelatedFileAction.java @@ -15,6 +15,7 @@ */ package com.intellij.ide.actions; +import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.navigation.GotoRelatedItem; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.ui.popup.JBPopup; @@ -25,22 +26,25 @@ import org.jetbrains.annotations.Nullable; import java.util.List; /** - * @deprecated API compatibility. Utility methods will be moved to NavigationUtil + * @deprecated API compatibility. Utility methods moved to NavigationUtil. + * todo [neuro] REMOVE-ME when September Ends.. * @author gregsh */ public class GotoRelatedFileAction { /** - * @deprecated This method will be moved to NavigationUtil + * @deprecated + * @see com.intellij.codeInsight.navigation.NavigationUtil#getRelatedItemsPopup(java.util.List, String) */ public static JBPopup createPopup(List<? extends GotoRelatedItem> items, final String title) { - return GotoRelatedSymbolAction.createPopup(items, title); + return NavigationUtil.getRelatedItemsPopup(items, title); } /** - * @deprecated This method will be moved to NavigationUtil + * @deprecated + * @see com.intellij.codeInsight.navigation.NavigationUtil#collectRelatedItems(com.intellij.psi.PsiElement, com.intellij.openapi.actionSystem.DataContext) */ public static List<GotoRelatedItem> getItems(@NotNull PsiElement contextElement, @Nullable DataContext dataContext) { - return GotoRelatedSymbolAction.getItems(contextElement, dataContext); + return NavigationUtil.collectRelatedItems(contextElement, dataContext); } } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/GotoRelatedSymbolAction.java b/platform/lang-impl/src/com/intellij/ide/actions/GotoRelatedSymbolAction.java index 2870f806ab8a..229531b3ef53 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/GotoRelatedSymbolAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/GotoRelatedSymbolAction.java @@ -15,39 +15,19 @@ */ package com.intellij.ide.actions; -import com.intellij.ide.util.DefaultPsiElementCellRenderer; +import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.navigation.GotoRelatedItem; -import com.intellij.navigation.GotoRelatedProvider; 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; -import com.intellij.openapi.ui.popup.PopupStep; -import com.intellij.openapi.ui.popup.util.BaseListPopupStep; -import com.intellij.openapi.util.Ref; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; -import com.intellij.ui.ColoredListCellRenderer; -import com.intellij.ui.JBColor; -import com.intellij.ui.SeparatorWithText; -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; import org.jetbrains.annotations.TestOnly; -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.util.*; import java.util.List; /** @@ -66,210 +46,20 @@ public class GotoRelatedSymbolAction extends AnAction { PsiElement element = getContextElement(e.getDataContext()); if (element == null) return; - List<GotoRelatedItem> items = getItems(element, e.getDataContext()); + List<GotoRelatedItem> items = NavigationUtil.collectRelatedItems(element, e.getDataContext()); if (items.isEmpty()) return; if (items.size() == 1 && items.get(0).getElement() != null) { items.get(0).navigate(); return; } - createPopup(items, "Choose Target").showInBestPositionFor(e.getDataContext()); - } - - public static JBPopup createPopup(final List<? extends GotoRelatedItem> items, final String title) { - Object[] elements = new Object[items.size()]; - //todo[nik] move presentation logic to GotoRelatedItem class - final Map<PsiElement, GotoRelatedItem> itemsMap = new HashMap<PsiElement, GotoRelatedItem>(); - for (int i = 0; i < items.size(); i++) { - GotoRelatedItem item = items.get(i); - elements[i] = item.getElement() != null ? item.getElement() : item; - itemsMap.put(item.getElement(), item); - } - - return getPsiElementPopup(elements, itemsMap, title, new Processor<Object>() { - @Override - public boolean process(Object element) { - if (element instanceof PsiElement) { - //noinspection SuspiciousMethodCalls - itemsMap.get(element).navigate(); - } - else { - ((GotoRelatedItem)element).navigate(); - } - return true; - } - } - ); - } - - private static JBPopup getPsiElementPopup(final Object[] elements, final Map<PsiElement, GotoRelatedItem> itemsMap, - final String title, final Processor<Object> processor) { - - final Ref<Boolean> hasMnemonic = Ref.create(false); - final DefaultPsiElementCellRenderer renderer = new DefaultPsiElementCellRenderer() { - { - setFocusBorderEnabled(false); - } - - @Override - public String getElementText(PsiElement element) { - String customName = itemsMap.get(element).getCustomName(); - return (customName != null ? customName : super.getElementText(element)); - } - - @Override - protected Icon getIcon(PsiElement element) { - Icon customIcon = itemsMap.get(element).getCustomIcon(); - return customIcon != null ? customIcon : super.getIcon(element); - } - - @Override - public String getContainerText(PsiElement element, String name) { - String customContainerName = itemsMap.get(element).getCustomContainerName(); - - if (customContainerName != null) { - return customContainerName; - } - PsiFile file = element.getContainingFile(); - return file != null && !getElementText(element).equals(file.getName()) - ? "(" + file.getName() + ")" - : null; - } - - @Override - protected DefaultListCellRenderer getRightCellRenderer(Object value) { - return null; - } - - @Override - protected boolean customizeNonPsiElementLeftRenderer(ColoredListCellRenderer renderer, - JList list, - Object value, - int index, - boolean selected, - boolean hasFocus) { - final GotoRelatedItem item = (GotoRelatedItem)value; - Color color = list.getForeground(); - final SimpleTextAttributes nameAttributes = new SimpleTextAttributes(Font.PLAIN, color); - final String name = item.getCustomName(); - if (name == null) return false; - renderer.append(name, nameAttributes); - renderer.setIcon(item.getCustomIcon()); - return true; - } - - @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - final JPanel component = (JPanel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - if (!hasMnemonic.get()) return component; - - final JPanel panelWithMnemonic = new JPanel(new BorderLayout()); - final int mnemonic = getMnemonic(value, itemsMap); - final JLabel label = new JLabel(""); - if (mnemonic != -1) { - label.setText(mnemonic + "."); - label.setDisplayedMnemonicIndex(0); - } - label.setPreferredSize(new JLabel("8.").getPreferredSize()); - - final JComponent leftRenderer = (JComponent)component.getComponents()[0]; - component.remove(leftRenderer); - panelWithMnemonic.setBorder(BorderFactory.createEmptyBorder(0, 7, 0, 0)); - panelWithMnemonic.setBackground(leftRenderer.getBackground()); - label.setBackground(leftRenderer.getBackground()); - panelWithMnemonic.add(label, BorderLayout.WEST); - panelWithMnemonic.add(leftRenderer, BorderLayout.CENTER); - component.add(panelWithMnemonic); - return component; - } - }; - final ListPopupImpl popup = new ListPopupImpl(new BaseListPopupStep<Object>(title, Arrays.asList(elements)) { - @Override - public boolean isSpeedSearchEnabled() { - return true; - } - - @Override - public String getIndexedString(Object value) { - if (value instanceof GotoRelatedItem) { - //noinspection ConstantConditions - return ((GotoRelatedItem)value).getCustomName(); - } - final PsiElement element = (PsiElement)value; - return renderer.getElementText(element) + " " + renderer.getContainerText(element, null); - } - - @Override - public PopupStep onChosen(Object selectedValue, boolean finalChoice) { - processor.process(selectedValue); - return super.onChosen(selectedValue, finalChoice); - } - }) { - }; - popup.getList().setCellRenderer(new PopupListElementRenderer(popup) { - Map<Object, String> separators = new HashMap<Object, String>(); - { - final ListModel model = popup.getList().getModel(); - String current = null; - boolean hasTitle = false; - for (int i = 0; i < model.getSize(); i++) { - final Object element = model.getElementAt(i); - final GotoRelatedItem item = itemsMap.get(element); - if (item != null && !StringUtil.equals(current, item.getGroup())) { - current = item.getGroup(); - separators.put(element, current); - if (!hasTitle && !StringUtil.isEmpty(current)) { - hasTitle = true; - } - } - } - - if (!hasTitle) { - separators.remove(model.getElementAt(0)); - } - } - @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - final Component component = renderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - final String separator = separators.get(value); - - if (separator != null) { - JPanel panel = new JPanel(new BorderLayout()); - panel.add(component, BorderLayout.CENTER); - final SeparatorWithText sep = new SeparatorWithText() { - @Override - protected void paintComponent(Graphics g) { - g.setColor(new JBColor(Color.WHITE, UIUtil.getSeparatorColor())); - g.fillRect(0,0,getWidth(), getHeight()); - super.paintComponent(g); - } - }; - sep.setCaption(separator); - panel.add(sep, BorderLayout.NORTH); - return panel; - } - return component; - } - }); - - popup.setMinimumSize(new Dimension(200, -1)); - - for (Object item : elements) { - final int mnemonic = getMnemonic(item, itemsMap); - if (mnemonic != -1) { - final Action action = createNumberAction(mnemonic, popup, itemsMap, processor); - popup.registerAction(mnemonic + "Action", KeyStroke.getKeyStroke(String.valueOf(mnemonic)), action); - popup.registerAction(mnemonic + "Action", KeyStroke.getKeyStroke("NUMPAD" + String.valueOf(mnemonic)), action); - hasMnemonic.set(true); - } - } - return popup; + NavigationUtil.getRelatedItemsPopup(items, "Choose Target").showInBestPositionFor(e.getDataContext()); } @TestOnly @NotNull public static List<GotoRelatedItem> getItems(@NotNull PsiFile psiFile, @Nullable Editor editor, @Nullable DataContext dataContext) { - return getItems(getContextElement(psiFile, editor), dataContext); + return NavigationUtil.collectRelatedItems(getContextElement(psiFile, editor), dataContext); } @Nullable @@ -294,65 +84,4 @@ public class GotoRelatedSymbolAction extends AnAction { } return contextElement; } - - @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) { - items.addAll(provider.getItems(dataContext)); - } - } - sortByGroupNames(items); - return new ArrayList<GotoRelatedItem>(items); - } - - private static void sortByGroupNames(Set<GotoRelatedItem> items) { - Map<String, List<GotoRelatedItem>> map = new HashMap<String, List<GotoRelatedItem>>(); - for (GotoRelatedItem item : items) { - final String key = item.getGroup(); - if (!map.containsKey(key)) { - map.put(key, new ArrayList<GotoRelatedItem>()); - } - map.get(key).add(item); - } - final List<String> keys = new ArrayList<String>(map.keySet()); - Collections.sort(keys, new Comparator<String>() { - @Override - public int compare(String o1, String o2) { - return StringUtil.isEmpty(o1) ? 1 : StringUtil.isEmpty(o2) ? -1 : o1.compareTo(o2); - } - }); - items.clear(); - for (String key : keys) { - items.addAll(map.get(key)); - } - } - - private static Action createNumberAction(final int mnemonic, - final ListPopupImpl listPopup, - final Map<PsiElement, GotoRelatedItem> itemsMap, - final Processor<Object> processor) { - return new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - for (final Object item : listPopup.getListStep().getValues()) { - if (getMnemonic(item, itemsMap) == mnemonic) { - listPopup.setFinalRunnable(new Runnable() { - @Override - public void run() { - processor.process(item); - } - }); - listPopup.closeOk(null); - } - } - } - }; - } - - private static int getMnemonic(Object item, Map<PsiElement, GotoRelatedItem> itemsMap) { - return (item instanceof GotoRelatedItem ? (GotoRelatedItem)item : itemsMap.get((PsiElement)item)).getMnemonic(); - } } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/SearchAgainAction.java b/platform/lang-impl/src/com/intellij/ide/actions/SearchAgainAction.java index 3e28023a935c..531f3e52159f 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/SearchAgainAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/SearchAgainAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -49,7 +49,8 @@ public class SearchAgainAction extends AnAction implements DumbAware { public void run() { PsiDocumentManager.getInstance(project).commitAllDocuments(); IdeDocumentHistory.getInstance(project).includeCurrentCommandAsNavigation(); - if(FindManager.getInstance(project).findNextUsageInEditor(editor)) { + FindManager findManager = FindManager.getInstance(project); + if(!findManager.selectNextOccurrenceWasPerformed() && findManager.findNextUsageInEditor(editor)) { return; } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/SearchBackAction.java b/platform/lang-impl/src/com/intellij/ide/actions/SearchBackAction.java index 4783205ae8c0..5f6e0d9959bd 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/SearchBackAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/SearchBackAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -46,7 +46,8 @@ public class SearchBackAction extends AnAction implements DumbAware { @Override public void run() { PsiDocumentManager.getInstance(project).commitAllDocuments(); - if(FindManager.getInstance(project).findPreviousUsageInEditor(editor)) { + FindManager findManager = FindManager.getInstance(project); + if(!findManager.selectNextOccurrenceWasPerformed() && findManager.findPreviousUsageInEditor(editor)) { return; } FindUtil.searchBack(project, editor, e.getDataContext()); diff --git a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java index ae7ee4363247..d704e738efa3 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java @@ -108,11 +108,9 @@ import javax.swing.border.EmptyBorder; import javax.swing.event.DocumentEvent; import java.awt.*; import java.awt.event.*; -import java.lang.reflect.Field; import java.util.*; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicLong; /** * @author Konstantin Bulenkov @@ -2120,13 +2118,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA private SearchListModel() { super(); - try { - final Field field = DefaultListModel.class.getDeclaredField("delegate"); - field.setAccessible(true); - myDelegate = (Vector)field.get(this); - } - catch (NoSuchFieldException ignore) {} - catch (IllegalAccessException ignore) {} + myDelegate = ReflectionUtil.getField(DefaultListModel.class, this, Vector.class, "delegate"); } int next(int index) { |