Search in sources :

Example 21 with GotoRelatedItem

use of com.intellij.navigation.GotoRelatedItem in project intellij-plugins by JetBrains.

the class GotoRelatedActionProvider method getItems.

@NotNull
@Override
public List<? extends GotoRelatedItem> getItems(@NotNull final PsiElement psiElement) {
    PsiFile psiFile = psiElement.getContainingFile();
    if (psiFile == null)
        return Collections.emptyList();
    final PsiFile containingFile = psiFile.getOriginalFile();
    final String filename = containingFile.getName();
    final String extension = FileUtilRt.getExtension(filename);
    if (!SUPPORTED_EXTENSIONS.contains(extension)) {
        return Collections.emptyList();
    }
    final StrutsManager strutsManager = StrutsManager.getInstance(psiElement.getProject());
    final StrutsModel strutsModel = strutsManager.getCombinedModel(psiElement);
    if (strutsModel == null) {
        return Collections.emptyList();
    }
    final List<PsiFile> allFiles = containingFile.getViewProvider().getAllFiles();
    final Set<Action> actions = new HashSet<>();
    final List<GotoRelatedItem> items = new ArrayList<>();
    strutsModel.processActions(action -> {
        for (final Result result : action.getResults()) {
            final PathReference pathReference = result.getValue();
            if (pathReference == null) {
                continue;
            }
            final String path = pathReference.getPath();
            if (!path.endsWith(filename)) {
                continue;
            }
            final PsiElement resolve = pathReference.resolve();
            if (ContainerUtil.find(allFiles, resolve) == null) {
                continue;
            }
            if (!actions.contains(action)) {
                items.add(new DomGotoRelatedItem(action));
                actions.add(action);
            }
            final PsiClass actionClass = action.searchActionClass();
            if (actionClass == null) {
                continue;
            }
            final PsiMethod actionMethod = action.searchActionMethod();
            items.add(new GotoRelatedItem(actionMethod != null ? actionMethod : actionClass));
        }
        return true;
    });
    return items;
}
Also used : PathReference(com.intellij.openapi.paths.PathReference) Action(com.intellij.struts2.dom.struts.action.Action) PsiMethod(com.intellij.psi.PsiMethod) StrutsManager(com.intellij.struts2.dom.struts.model.StrutsManager) PsiClass(com.intellij.psi.PsiClass) Result(com.intellij.struts2.dom.struts.action.Result) DomGotoRelatedItem(com.intellij.codeInsight.navigation.DomGotoRelatedItem) StrutsModel(com.intellij.struts2.dom.struts.model.StrutsModel) PsiFile(com.intellij.psi.PsiFile) DomGotoRelatedItem(com.intellij.codeInsight.navigation.DomGotoRelatedItem) GotoRelatedItem(com.intellij.navigation.GotoRelatedItem) PsiElement(com.intellij.psi.PsiElement) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

GotoRelatedItem (com.intellij.navigation.GotoRelatedItem)21 PsiElement (com.intellij.psi.PsiElement)13 NotNull (org.jetbrains.annotations.NotNull)11 PsiFile (com.intellij.psi.PsiFile)9 VirtualFile (com.intellij.openapi.vfs.VirtualFile)4 ArrayList (java.util.ArrayList)3 ResourceBundle (com.intellij.lang.properties.ResourceBundle)2 PropertiesFile (com.intellij.lang.properties.psi.PropertiesFile)2 GotoRelatedProvider (com.intellij.navigation.GotoRelatedProvider)2 DataContext (com.intellij.openapi.actionSystem.DataContext)2 FileEditor (com.intellij.openapi.fileEditor.FileEditor)2 Project (com.intellij.openapi.project.Project)2 Computable (com.intellij.openapi.util.Computable)2 PsiClass (com.intellij.psi.PsiClass)2 LineMarkerProvider (com.intellij.codeInsight.daemon.LineMarkerProvider)1 RelatedItemLineMarkerInfo (com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo)1 RelatedItemLineMarkerProvider (com.intellij.codeInsight.daemon.RelatedItemLineMarkerProvider)1 DomGotoRelatedItem (com.intellij.codeInsight.navigation.DomGotoRelatedItem)1 Location (com.intellij.execution.Location)1 DefaultPsiElementCellRenderer (com.intellij.ide.util.DefaultPsiElementCellRenderer)1