package com.siberika.idea.pascal.ide.actions;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.SmartList;
import com.siberika.idea.pascal.PascalBundle;
import com.siberika.idea.pascal.lang.psi.PasUsesClause;
import com.siberika.idea.pascal.lang.psi.impl.PascalRoutineImpl;
import com.siberika.idea.pascal.util.EditorUtil;
import com.siberika.idea.pascal.util.PsiUtil;
import java.util.Collection;
import java.util.Collections;
/**
* Author: George Bakhtadze
* Date: 28/05/2015
*/
public class IntfImplNavAction extends PascalAction {
@Override
public void doActionPerformed(AnActionEvent e) {
Editor editor = getEditor(e);
PsiElement el = getElement(e);
if ((null == el) || (null == editor)) {
return;
}
PsiElement target;
target = SectionToggle.getRoutineTarget(PsiTreeUtil.getParentOfType(el, PascalRoutineImpl.class));
if (null == target) {
target = SectionToggle.getUsesTarget(PsiTreeUtil.getParentOfType(el, PasUsesClause.class));
}
Collection<PsiElement> targets;
if (PsiUtil.isElementUsable(target)) {
targets = Collections.singletonList(target);
} else {
targets = new SmartList<PsiElement>();
SectionToggle.getStructTarget(targets, el);
}
if (!targets.isEmpty()) {
EditorUtil.navigateTo(editor, PascalBundle.message("navigate.title.toggle.section"), targets);
}
}
}