Search in sources :

Example 1 with Define

use of org.intellij.plugins.relaxNG.model.Define in project intellij-community by JetBrains.

the class RngRefImpl method getPattern.

@Override
public Define getPattern() {
    final XmlAttributeValue value = getName().getXmlAttributeValue();
    if (value == null)
        return null;
    final String name = getReferencedName();
    if (name == null) {
        return null;
    }
    final RngGrammar scope = getScope();
    if (scope == null) {
        return null;
    }
    final Set<Define> defines = DefinitionResolver.resolve(scope, name);
    // TODO: honor combine & return virtual element if defines.size() > 1
    return defines != null && defines.size() > 0 ? defines.iterator().next() : null;
}
Also used : Define(org.intellij.plugins.relaxNG.model.Define) XmlAttributeValue(com.intellij.psi.xml.XmlAttributeValue) RngGrammar(org.intellij.plugins.relaxNG.xml.dom.RngGrammar)

Example 2 with Define

use of org.intellij.plugins.relaxNG.model.Define in project intellij-community by JetBrains.

the class OverriddenDefineRenderer method getClickAction.

@Override
@Nullable
public AnAction getClickAction() {
    return new AnAction() {

        @Override
        public void actionPerformed(AnActionEvent e) {
            final PsiElement element = myDefine.getPsiElement();
            if (element == null || !element.isValid())
                return;
            final PsiElementProcessor.CollectElements<XmlFile> collector = new PsiElementProcessor.CollectElements<>();
            final XmlFile localFile = (XmlFile) element.getContainingFile();
            RelaxIncludeIndex.processBackwardDependencies(localFile, collector);
            final Collection<XmlFile> files = collector.getCollection();
            final List<Define> result = new SmartList<>();
            final OverriddenDefineSearcher searcher = new OverriddenDefineSearcher(myDefine, localFile, result);
            for (XmlFile file : files) {
                final Grammar grammar = GrammarFactory.getGrammar(file);
                if (grammar == null)
                    continue;
                grammar.acceptChildren(searcher);
            }
            if (result.size() > 0) {
                OverridingDefineRenderer.doClickAction(e, result, "Go to overriding define(s)");
            }
        }
    };
}
Also used : XmlFile(com.intellij.psi.xml.XmlFile) Grammar(org.intellij.plugins.relaxNG.model.Grammar) AnActionEvent(com.intellij.openapi.actionSystem.AnActionEvent) AnAction(com.intellij.openapi.actionSystem.AnAction) PsiElementProcessor(com.intellij.psi.search.PsiElementProcessor) Define(org.intellij.plugins.relaxNG.model.Define) SmartList(com.intellij.util.SmartList) PsiElement(com.intellij.psi.PsiElement) Nullable(org.jetbrains.annotations.Nullable)

Example 3 with Define

use of org.intellij.plugins.relaxNG.model.Define in project intellij-community by JetBrains.

the class RelaxSymbolIndex method getSymbolsByName.

public static NavigationItem[] getSymbolsByName(final String name, Project project, boolean includeNonProjectItems) {
    final GlobalSearchScope scope = includeNonProjectItems ? GlobalSearchScope.allScope(project) : GlobalSearchScope.projectScope(project);
    final Collection<NavigationItem> result = new ArrayList<>();
    PsiManager psiManager = PsiManager.getInstance(project);
    for (VirtualFile file : FileBasedIndex.getInstance().getContainingFiles(NAME, name, scope)) {
        final PsiFile psiFile = psiManager.findFile(file);
        if (psiFile instanceof XmlFile) {
            final Grammar grammar = GrammarFactory.getGrammar((XmlFile) psiFile);
            if (grammar != null) {
                grammar.acceptChildren(new CommonElement.Visitor() {

                    @Override
                    public void visitDefine(Define define) {
                        if (name.equals(define.getName())) {
                            final PsiElement psi = define.getPsiElement();
                            if (psi != null) {
                                MyNavigationItem.add((NavigationItem) define.getPsiElement(), result);
                            }
                        }
                    }
                });
            }
        }
    }
    return result.toArray(new NavigationItem[result.size()]);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) XmlFile(com.intellij.psi.xml.XmlFile) PsiManager(com.intellij.psi.PsiManager) Grammar(org.intellij.plugins.relaxNG.model.Grammar) CommonElement(org.intellij.plugins.relaxNG.model.CommonElement) NavigationItem(com.intellij.navigation.NavigationItem) PsiElementNavigationItem(com.intellij.navigation.PsiElementNavigationItem) Define(org.intellij.plugins.relaxNG.model.Define) GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) PsiFile(com.intellij.psi.PsiFile) PsiElement(com.intellij.psi.PsiElement)

Example 4 with Define

use of org.intellij.plugins.relaxNG.model.Define in project intellij-community by JetBrains.

the class OverridingDefineRenderer method doClickAction.

static void doClickAction(AnActionEvent e, Collection<Define> set, String title) {
    if (set.size() == 1) {
        final Navigatable n = (Navigatable) set.iterator().next().getPsiElement();
        OpenSourceUtil.navigate(true, n);
    } else {
        final Define[] array = set.toArray(new Define[set.size()]);
        NavigationUtil.getPsiElementPopup(ContainerUtil.map(array, define -> define.getPsiElement(), PsiElement.EMPTY_ARRAY), title).show(new RelativePoint((MouseEvent) e.getInputEvent()));
    }
}
Also used : Define(org.intellij.plugins.relaxNG.model.Define) MouseEvent(java.awt.event.MouseEvent) RelativePoint(com.intellij.ui.awt.RelativePoint) Navigatable(com.intellij.pom.Navigatable)

Example 5 with Define

use of org.intellij.plugins.relaxNG.model.Define in project intellij-community by JetBrains.

the class DefinitionReference method getVariants.

@Override
@NotNull
public Object[] getVariants() {
    final RngGrammar scope = getScope();
    if (scope == null) {
        return ResolveResult.EMPTY_ARRAY;
    }
    final Map<String, Set<Define>> map = DefinitionResolver.getAllVariants(scope);
    if (map == null || map.size() == 0)
        return ArrayUtil.EMPTY_OBJECT_ARRAY;
    return ContainerUtil.mapNotNull(map.values(), defines -> {
        final Define define = defines.iterator().next();
        if (defines.size() == 0) {
            return null;
        } else {
            final PsiElement element = define.getPsiElement();
            if (element != null) {
                final PsiPresentableMetaData data = (PsiPresentableMetaData) ((PsiMetaOwner) element).getMetaData();
                if (data != null) {
                    return LookupValueFactory.createLookupValue(data.getName(), data.getIcon());
                } else {
                    return define.getName();
                }
            } else {
                return define.getName();
            }
        }
    }).toArray();
}
Also used : PsiMetaOwner(com.intellij.psi.meta.PsiMetaOwner) PsiPresentableMetaData(com.intellij.psi.meta.PsiPresentableMetaData) ArrayUtil(com.intellij.util.ArrayUtil) ContainerUtil(com.intellij.util.containers.ContainerUtil) LookupValueFactory(com.intellij.codeInsight.lookup.LookupValueFactory) PsiTreeUtil(com.intellij.psi.util.PsiTreeUtil) LocalQuickFixProvider(com.intellij.codeInspection.LocalQuickFixProvider) PsiReferenceBase(com.intellij.psi.PsiReferenceBase) RngParentRef(org.intellij.plugins.relaxNG.xml.dom.RngParentRef) Map(java.util.Map) PsiElement(com.intellij.psi.PsiElement) XmlAttributeValue(com.intellij.psi.xml.XmlAttributeValue) LocalQuickFix(com.intellij.codeInspection.LocalQuickFix) Define(org.intellij.plugins.relaxNG.model.Define) XmlTag(com.intellij.psi.xml.XmlTag) GenericAttributeValue(com.intellij.util.xml.GenericAttributeValue) Set(java.util.Set) DefinitionResolver(org.intellij.plugins.relaxNG.model.resolve.DefinitionResolver) Nullable(org.jetbrains.annotations.Nullable) PsiElementResolveResult(com.intellij.psi.PsiElementResolveResult) ResolveResult(com.intellij.psi.ResolveResult) RngGrammar(org.intellij.plugins.relaxNG.xml.dom.RngGrammar) Function(com.intellij.util.Function) XmlElement(com.intellij.psi.xml.XmlElement) EmptyResolveMessageProvider(com.intellij.codeInsight.daemon.EmptyResolveMessageProvider) NotNull(org.jetbrains.annotations.NotNull) PsiPresentableMetaData(com.intellij.psi.meta.PsiPresentableMetaData) Set(java.util.Set) Define(org.intellij.plugins.relaxNG.model.Define) PsiMetaOwner(com.intellij.psi.meta.PsiMetaOwner) PsiElement(com.intellij.psi.PsiElement) RngGrammar(org.intellij.plugins.relaxNG.xml.dom.RngGrammar) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

Define (org.intellij.plugins.relaxNG.model.Define)7 RngGrammar (org.intellij.plugins.relaxNG.xml.dom.RngGrammar)4 PsiElement (com.intellij.psi.PsiElement)3 XmlAttributeValue (com.intellij.psi.xml.XmlAttributeValue)3 XmlFile (com.intellij.psi.xml.XmlFile)3 NotNull (org.jetbrains.annotations.NotNull)3 PsiReferenceBase (com.intellij.psi.PsiReferenceBase)2 Map (java.util.Map)2 Grammar (org.intellij.plugins.relaxNG.model.Grammar)2 EmptyResolveMessageProvider (com.intellij.codeInsight.daemon.EmptyResolveMessageProvider)1 LookupValueFactory (com.intellij.codeInsight.lookup.LookupValueFactory)1 LocalQuickFix (com.intellij.codeInspection.LocalQuickFix)1 LocalQuickFixProvider (com.intellij.codeInspection.LocalQuickFixProvider)1 NavigationItem (com.intellij.navigation.NavigationItem)1 PsiElementNavigationItem (com.intellij.navigation.PsiElementNavigationItem)1 AnAction (com.intellij.openapi.actionSystem.AnAction)1 AnActionEvent (com.intellij.openapi.actionSystem.AnActionEvent)1 Ref (com.intellij.openapi.util.Ref)1 VirtualFile (com.intellij.openapi.vfs.VirtualFile)1 Navigatable (com.intellij.pom.Navigatable)1