diff --git a/src/com/magento/idea/magento2plugin/linemarker/SearchGutterIconNavigationHandler.java b/src/com/magento/idea/magento2plugin/linemarker/SearchGutterIconNavigationHandler.java new file mode 100644 index 000000000..8f235a241 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/linemarker/SearchGutterIconNavigationHandler.java @@ -0,0 +1,47 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.linemarker; + +import com.intellij.codeInsight.daemon.GutterIconNavigationHandler; +import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator; +import com.intellij.ide.util.DefaultPsiElementCellRenderer; +import com.intellij.psi.NavigatablePsiElement; +import com.intellij.psi.PsiElement; +import java.awt.event.MouseEvent; +import java.util.Collection; +import org.jetbrains.annotations.NotNull; + +public class SearchGutterIconNavigationHandler + implements GutterIconNavigationHandler { + + private final Collection myReferences; + private final @NotNull String popupTitle; + + /** + * Search gutter icon navigation handler constructor. + * + * @param references Collection + * @param popupTitle String + */ + public SearchGutterIconNavigationHandler( + final Collection references, + final @NotNull String popupTitle + ) { + this.popupTitle = popupTitle; + myReferences = references; + } + + @Override + public void navigate(final MouseEvent event, final T elt) { + PsiElementListNavigator.openTargets( + event, + myReferences.toArray(NavigatablePsiElement.EMPTY_NAVIGATABLE_ELEMENT_ARRAY), + popupTitle, + "Open in Find Tool Window",// Ignored + new DefaultPsiElementCellRenderer() + ); + } +} diff --git a/src/com/magento/idea/magento2plugin/linemarker/php/PluginLineMarkerProvider.java b/src/com/magento/idea/magento2plugin/linemarker/php/PluginLineMarkerProvider.java index 980e76d1b..5d4500d65 100644 --- a/src/com/magento/idea/magento2plugin/linemarker/php/PluginLineMarkerProvider.java +++ b/src/com/magento/idea/magento2plugin/linemarker/php/PluginLineMarkerProvider.java @@ -5,10 +5,12 @@ package com.magento.idea.magento2plugin.linemarker.php; +import com.intellij.codeInsight.daemon.GutterIconNavigationHandler; import com.intellij.codeInsight.daemon.LineMarkerInfo; import com.intellij.codeInsight.daemon.LineMarkerProvider; import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder; import com.intellij.icons.AllIcons; +import com.intellij.psi.NavigatablePsiElement; import com.intellij.psi.PsiElement; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiTreeUtil; @@ -16,6 +18,7 @@ import com.jetbrains.php.PhpIndex; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; +import com.magento.idea.magento2plugin.linemarker.SearchGutterIconNavigationHandler; import com.magento.idea.magento2plugin.project.Settings; import com.magento.idea.magento2plugin.stubs.indexes.PluginIndex; import java.util.ArrayList; @@ -39,6 +42,7 @@ public class PluginLineMarkerProvider implements LineMarkerProvider { } @Override + @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") public void collectSlowLineMarkers( final @NotNull List psiElements, final @NotNull Collection> collection @@ -69,12 +73,21 @@ public void collectSlowLineMarkers( } if (!results.isEmpty()) { + final GutterIconNavigationHandler navigationHandler = + new SearchGutterIconNavigationHandler<>( + (Collection) results, + TOOLTIP_TEXT + ); + collection.add( NavigationGutterIconBuilder .create(AllIcons.Nodes.Plugin) .setTargets(results) .setTooltipText(TOOLTIP_TEXT) - .createLineMarkerInfo(PsiTreeUtil.getDeepestFirst(psiElement)) + .createLineMarkerInfo( + PsiTreeUtil.getDeepestFirst(psiElement), + navigationHandler + ) ); } }