From 72f751f5a40a3e244d5ca94af06405fb67ee2f9a Mon Sep 17 00:00:00 2001 From: "Alexander.Kass" Date: Thu, 25 Feb 2021 10:04:53 +0300 Subject: [PATCH] allow to provide navigatables to navbar GitOrigin-RevId: 7887a9cc53f5550becd50eeede99fd06eb25f6a9 --- .../ide/navigationToolbar/NavBarPanel.java | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 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 1cbc8f7a1785..713076282b41 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java @@ -545,25 +545,31 @@ public class NavBarPanel extends JPanel implements DataProvider, PopupOwner, Dis } protected void doubleClick(final Object object) { - if (object instanceof Navigatable) { - Navigatable navigatable = (Navigatable)object; + Object target = ObjectUtils.notNull(getNavigatable(object), object); + if (target instanceof Navigatable) { + Navigatable navigatable = (Navigatable)target; if (navigatable.canNavigate()) { navigatable.navigate(true); } } - else if (object instanceof Module) { + else if (target instanceof Module) { ProjectView projectView = ProjectView.getInstance(myProject); AbstractProjectViewPane projectViewPane = projectView.getProjectViewPaneById(projectView.getCurrentViewId()); if (projectViewPane != null) { - projectViewPane.selectModule((Module)object, true); + projectViewPane.selectModule((Module)target, true); } } - else if (object instanceof Project) { + else if (target instanceof Project) { return; } hideHint(true); } + @Nullable + private Navigatable getNavigatable(Object object) { + return CommonDataKeys.NAVIGATABLE.getData(getDataProvider(() -> JBIterable.of(object))); + } + private void ctrlClick(final int index) { if (isNodePopupActive()) { cancelPopup(); @@ -663,16 +669,27 @@ public class NavBarPanel extends JPanel implements DataProvider, PopupOwner, Dis @Override @Nullable public Object getData(@NotNull String dataId) { - for (NavBarModelExtension modelExtension : NavBarModelExtension.EP_NAME.getExtensionList()) { - Object data = modelExtension.getData(dataId, this::getDataInner); - if (data != null) return data; - } - return getDataInner(dataId); + return getData(dataId, () -> getSelection()); } @Nullable - private Object getDataInner(String dataId) { - return getDataImpl(dataId, this, () -> getSelection()); + private Object getData(@NotNull String dataId, Getter> selection) { + DataProvider dataProvider = getDataProviderInner(selection); + for (NavBarModelExtension modelExtension : NavBarModelExtension.EP_NAME.getExtensionList()) { + Object data = modelExtension.getData(dataId, dataProvider); + if (data != null) return data; + } + return dataProvider.getData(dataId); + } + + @NotNull + private DataProvider getDataProvider(Getter> selection) { + return d -> getData(d, selection); + } + + @NotNull + private DataProvider getDataProviderInner(Getter> selection) { + return d -> getDataImpl(d, this, selection); } @NotNull