From ac3eb58d4451116129e908b2d40849404c84a5d9 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 24 Sep 2009 19:04:07 +0400 Subject: [PATCH] skip dirs containing only one subdir --- .../ide/navigationToolbar/NavBarPanel.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java index 9e1d77324ece..daba5ece836e 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java @@ -158,7 +158,7 @@ public class NavBarPanel extends JPanel implements DataProvider, PopupOwner { registerKeyboardAction(new AbstractAction() { public void actionPerformed(ActionEvent e) { final Object o = myModel.getSelectedValue(); - navigateInsideBar(o); + navigateInsideBar(optimizeTarget(o)); } }, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), WHEN_FOCUSED); @@ -204,6 +204,16 @@ public class NavBarPanel extends JPanel implements DataProvider, PopupOwner { updateList(); } + private static Object optimizeTarget(Object target) { + if (target instanceof PsiDirectory && ((PsiDirectory)target).getFiles().length == 0) { + final PsiDirectory[] subDir = ((PsiDirectory)target).getSubdirectories(); + if (subDir.length == 1) { + return optimizeTarget(subDir[0]); + } + } + return target; + } + private void processFocusLost(final FocusEvent e) { final boolean nodePopupInactive = myNodePopup == null || !myNodePopup.isVisible() || !myNodePopup.isFocused(); final JBPopup child = JBPopupFactory.getInstance().getChildPopup(this); @@ -488,7 +498,7 @@ public class NavBarPanel extends JPanel implements DataProvider, PopupOwner { @NotNull public String getTextFor(final Object value) { return NavBarModel.getPresentableText(value, null);} public boolean isSelectable(Object value) { return true; } public PopupStep onChosen(final Object selectedValue, final boolean finalChoice) { - navigateInsideBar(selectedValue); + navigateInsideBar(optimizeTarget(selectedValue)); return FINAL_CHOICE; }