Java Code Examples for com.intellij.psi.xml.XmlTag#getSubTags()

The following examples show how to use com.intellij.psi.xml.XmlTag#getSubTags() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: MuleConfigUtils.java    From mule-intellij-plugins with Apache License 2.0 6 votes vote down vote up
private static XmlTag findXmlTag(XSourcePosition sourcePosition, XmlTag rootTag) {
    final XmlTag[] subTags = rootTag.getSubTags();
    for (int i = 0; i < subTags.length; i++) {
        XmlTag subTag = subTags[i];
        final int subTagLineNumber = getLineNumber(sourcePosition.getFile(), subTag);
        if (subTagLineNumber == sourcePosition.getLine()) {
            return subTag;
        } else if (subTagLineNumber > sourcePosition.getLine() && i > 0 && subTags[i - 1].getSubTags().length > 0) {
            return findXmlTag(sourcePosition, subTags[i - 1]);
        }
    }
    if (subTags.length > 0) {
        final XmlTag lastElement = subTags[subTags.length - 1];
        return findXmlTag(sourcePosition, lastElement);
    } else {
        return null;
    }
}
 
Example 2
Source File: ServiceActionUtil.java    From idea-php-symfony2-plugin with MIT License 6 votes vote down vote up
@NotNull
public static Collection<XmlTag> getXmlContainerServiceDefinition(PsiFile psiFile) {

    Collection<XmlTag> xmlTags = new ArrayList<>();

    for(XmlTag xmlTag: PsiTreeUtil.getChildrenOfTypeAsList(psiFile.getFirstChild(), XmlTag.class)) {
        if(xmlTag.getName().equals("container")) {
            for(XmlTag servicesTag: xmlTag.getSubTags()) {
                if(servicesTag.getName().equals("services")) {
                    for(XmlTag parameterTag: servicesTag.getSubTags()) {
                        if(parameterTag.getName().equals("service")) {
                            xmlTags.add(parameterTag);
                        }
                    }
                }
            }
        }
    }

    return xmlTags;
}
 
Example 3
Source File: RouteHelper.java    From idea-php-symfony2-plugin with MIT License 6 votes vote down vote up
/**
 * <route controller="Foo"/>
 * <route>
 *     <default key="_controller">Foo</default>
 * </route>
 */
@Nullable
public static String getXmlController(@NotNull XmlTag serviceTag) {
    for(XmlTag subTag :serviceTag.getSubTags()) {
        if("default".equalsIgnoreCase(subTag.getName())) {
            String keyValue = subTag.getAttributeValue("key");
            if(keyValue != null && "_controller".equals(keyValue)) {
                String actionName = subTag.getValue().getTrimmedText();
                if(StringUtils.isNotBlank(actionName)) {
                    return actionName;
                }
            }
        }
    }

    String controller = serviceTag.getAttributeValue("controller");
    if(controller != null && StringUtils.isNotBlank(controller)) {
        return controller;
    }

    return null;
}
 
Example 4
Source File: FormUtil.java    From idea-php-symfony2-plugin with MIT License 6 votes vote down vote up
public static Set<String> getTags(XmlTag serviceTag) {

        Set<String> tags = new HashSet<>();

        for(XmlTag serviceSubTag: serviceTag.getSubTags()) {
            if("tag".equals(serviceSubTag.getName())) {
                XmlAttribute attribute = serviceSubTag.getAttribute("name");
                if(attribute != null) {
                    String tagName = attribute.getValue();
                    if(tagName != null && StringUtils.isNotBlank(tagName)) {
                        tags.add(tagName);
                    }
                }

            }
        }

        return tags;
    }
 
Example 5
Source File: SVGParser.java    From svgtoandroid with MIT License 6 votes vote down vote up
public XmlTag trim(XmlTag rootTag, List<XmlAttribute> attr) {
    Logger.debug("Current tag: " + rootTag.getName());
    CommonUtil.dumpAttrs("current attr", Arrays.asList(rootTag.getAttributes()));
    CommonUtil.dumpAttrs("parent attr", attr);
    if (attr == null) {
        attr = new ArrayList<XmlAttribute>();
        attr.addAll(Arrays.asList(rootTag.getAttributes()));
    }
    XmlTag[] subTags = rootTag.getSubTags();
    List<XmlAttribute> attrs = new ArrayList<XmlAttribute>();
    if (subTags.length == 1 && subTags[0].getName().equals("g")) {
        Logger.debug("Tag" + rootTag + " has only a subTag and the tag is 'g'");
        Collections.addAll(attrs, subTags[0].getAttributes());
        attrs.addAll(attr);
        rootTag = trim(subTags[0], attrs);
    } else if (subTags.length > 0 && AttrMapper.isShapeName(subTags[0].getName())) {
        Logger.debug(rootTag.getSubTags()[0].getName());
        Logger.debug("Tag" + rootTag + " is correct tag.");
        for (XmlAttribute attribute : attr) {
            Logger.debug(attribute.getName() + ":" + attribute.getValue());
        }
        return AttrMergeUtil.mergeAttrs((XmlTag) rootTag.copy(), reduceAttrs(attr));
    }
    return rootTag;
}
 
Example 6
Source File: SVGParser.java    From svgtoandroid with MIT License 6 votes vote down vote up
public Map<String, XmlTag> getAcceptedDefNodes() {
    XmlTag rootTag = svg.getRootTag();
    Map<String, XmlTag> tags = new HashMap<String, XmlTag>();
    XmlTag[] subTags = rootTag.getSubTags();
    for (XmlTag tag : subTags) {
        if ("defs".equalsIgnoreCase(tag.getName())) {
            XmlTag[] defSubTags = tag.getSubTags();
            if (defSubTags != null) {
                for (XmlTag defNode : defSubTags) {
                    if (AttrMapper.isShapeName(defNode.getName())) {
                        tags.put(defNode.getAttributeValue("id"), defNode);
                    } else {
                        Logger.info("Tag <" + tag.getName() + "> was not supported by android");
                    }
                }
            }
        }
    }
    Logger.debug("use tags of " + rootTag.getName() + " :" + tags.toString());
    return tags;
}
 
Example 7
Source File: SVGParser.java    From svgtoandroid with MIT License 6 votes vote down vote up
public SVGParser(XmlFile svg, String dpi) {
    styles = new HashMap<String, String>();
    this.svg = svg;
    this.dpi = dpi;
    parseDimensions();

    XmlDocument document = svg.getDocument();
    if (document != null) {
        XmlTag rootTag = document.getRootTag();
        if (rootTag != null) {
            XmlTag[] subTags = rootTag.getSubTags();
            for (XmlTag tag : subTags) {
                getChildAttrs(tag);
            }
        }
    }
}
 
Example 8
Source File: StringTableKey.java    From arma-intellij-plugin with MIT License 6 votes vote down vote up
/**
 * Get documentation html for the given StringTable key XmlTag (this should be one returned from {@link #getIDXmlTag()})
 *
 * @param element key's tag
 * @return html showing all languages' values, or null if element was null, or null if element wasn't a key tag
 */
@Nullable
public static String getKeyDoc(@Nullable XmlTag element) {
	if (element == null) {
		return null;
	}
	if (!element.getName().equalsIgnoreCase("key")) {
		return null;
	}

	final String format = "<div><b>%s</b> : <pre>%s</pre></div>";
	StringBuilder doc = new StringBuilder();
	for (XmlTag childTag : element.getSubTags()) {
		doc.append(String.format(format, childTag.getName(), childTag.getText()));
	}
	return doc.toString();
}
 
Example 9
Source File: StringTableKey.java    From arma-intellij-plugin with MIT License 6 votes vote down vote up
/**
 * Get documentation html for the given StringTable key XmlTag (this should be one returned from {@link #getIDXmlTag()})
 *
 * @param element key's tag
 * @return html showing all languages' values, or null if element was null, or null if element wasn't a key tag
 */
@Nullable
public static String getKeyDoc(@Nullable XmlTag element) {
	if (element == null) {
		return null;
	}
	if (!element.getName().equalsIgnoreCase("key")) {
		return null;
	}

	final String format = "<div><b>%s</b> : <pre>%s</pre></div>";
	StringBuilder doc = new StringBuilder();
	for (XmlTag childTag : element.getSubTags()) {
		doc.append(String.format(format, childTag.getName(), childTag.getText()));
	}
	return doc.toString();
}
 
Example 10
Source File: MuleConfigUtils.java    From mule-intellij-plugins with Apache License 2.0 6 votes vote down vote up
private static XmlTag findChildMessageProcessorByPath(MessageProcessorPath messageProcessorPath, XmlTag xmlTag) {
    final List<MessageProcessorPathNode> nodes = messageProcessorPath.getNodes();
    for (MessageProcessorPathNode node : nodes) {
        final String elementName = node.getElementName();
        final int i = Integer.parseInt(elementName);
        final XmlTag[] subTags = xmlTag.getSubTags();
        int index = -1;
        for (XmlTag subTag : subTags) {
            final MuleElementType muleElementType = getMuleElementTypeFromXmlElement(subTag);
            if (muleElementType == MuleElementType.MESSAGE_PROCESSOR) {
                xmlTag = subTag;
                index = index + 1;
            }
            if (index == i) {
                break;
            }
        }
    }
    return xmlTag;
}
 
Example 11
Source File: SVGParser.java    From svgtoandroid with MIT License 5 votes vote down vote up
public List<XmlTag> getGroups() {
    List<XmlTag> groups = new ArrayList<XmlTag>();
    if (svg.getDocument() != null) {
        XmlTag rootTag = svg.getDocument().getRootTag();
        if (rootTag != null) {
            for (XmlTag tag : rootTag.getSubTags()) {
                if (tag.getName().equals("g")) {
                    groups.add(trim(tag, null));
                }
            }
        }
    }
    return groups;
}
 
Example 12
Source File: SVGParser.java    From svgtoandroid with MIT License 5 votes vote down vote up
public List<XmlTag> getGroupChildes(String groupName) {
    List<XmlTag> childes = new ArrayList<XmlTag>();
    if (svg.getDocument() != null) {
        XmlTag rootTag = svg.getDocument().getRootTag();
        if (rootTag != null) {
            for (XmlTag tag : rootTag.getSubTags()) {
                if (tag.getName().equals(groupName)) {
                    Collections.addAll(childes, tag.getSubTags());
                }
            }
        }
    }
    return childes;
}
 
Example 13
Source File: SVGParser.java    From svgtoandroid with MIT License 5 votes vote down vote up
public List<XmlTag> getSubGroups(XmlTag parent) {
    List<XmlTag> list = new ArrayList<XmlTag>();
    for (XmlTag tag : parent.getSubTags()) {
        if (tag.getName().equals("g")) {
            list.add(tag);
        }
    }
    return list;
}
 
Example 14
Source File: SVGParser.java    From svgtoandroid with MIT License 5 votes vote down vote up
public XmlTag getStyles() {
    List<XmlTag> childes = getSVGChildes();
    for (XmlTag tag : childes) {
        if ("defs".equals(tag.getName()) && tag.getSubTags() != null) {
            for (XmlTag subTag : tag.getSubTags()) {
                if ("style".equals(subTag.getName())) {
                    return subTag;
                }
            }
        }
    }
    return null;
}
 
Example 15
Source File: SVGParser.java    From svgtoandroid with MIT License 5 votes vote down vote up
public List<XmlTag> getShapeTags(XmlTag parentTag) {
    List<XmlTag> tags = new ArrayList<XmlTag>();
    XmlTag[] subTags = parentTag.getSubTags();
    for (XmlTag tag : subTags) {
        if (AttrMapper.isShapeName(tag.getName())) {
            tags.add(tag);
        }
    }
    Logger.debug("shapeTag of " + parentTag.getName() + " :" + tags.toString());
    return tags;
}
 
Example 16
Source File: ServiceActionUtil.java    From idea-php-symfony2-plugin with MIT License 5 votes vote down vote up
@NotNull
public static List<String> getXmlMissingArgumentTypes(@NotNull XmlTag xmlTag, boolean collectOptionalParameter, @NotNull ContainerCollectionResolver.LazyServiceCollector collector) {
    PhpClass resolvedClassDefinition = getPhpClassFromXmlTag(xmlTag, collector);
    if (resolvedClassDefinition == null) {
        return Collections.emptyList();
    }

    Method constructor = resolvedClassDefinition.getConstructor();
    if(constructor == null) {
        return Collections.emptyList();
    }

    int serviceArguments = 0;

    for (XmlTag tag : xmlTag.getSubTags()) {
        if("argument".equals(tag.getName())) {
            serviceArguments++;
        }
    }

    Parameter[] parameters = collectOptionalParameter ? constructor.getParameters() : PhpElementsUtil.getFunctionRequiredParameter(constructor);
    if(parameters.length <= serviceArguments) {
        return Collections.emptyList();
    }

    final List<String> args = new ArrayList<>();

    for (int i = serviceArguments; i < parameters.length; i++) {
        Parameter parameter = parameters[i];
        String s = parameter.getDeclaredType().toString();
        args.add(s);
    }

    return args;
}
 
Example 17
Source File: XmlServiceTagIntention.java    From idea-php-symfony2-plugin with MIT License 4 votes vote down vote up
@Override
public void invoke(@NotNull final Project project, final Editor editor, @NotNull PsiElement psiElement) throws IncorrectOperationException {

    final XmlTag xmlTag = XmlServiceArgumentIntention.getServiceTagValid(psiElement);
    if(xmlTag == null) {
        return;
    }

    final PhpClass phpClassFromXmlTag = ServiceActionUtil.getPhpClassFromXmlTag(xmlTag, new ContainerCollectionResolver.LazyServiceCollector(project));
    if(phpClassFromXmlTag == null) {
        return;
    }

    Set<String> phpServiceTags = ServiceUtil.getPhpClassServiceTags(phpClassFromXmlTag);
    if(phpServiceTags.size() == 0) {
        HintManager.getInstance().showErrorHint(editor, "Ops, no possible Tag found");
        return;
    }

    for (XmlTag tag : xmlTag.getSubTags()) {

        if(!"tag".equals(tag.getName())) {
            continue;
        }

        XmlAttribute name = tag.getAttribute("name");
        if(name == null) {
            continue;
        }

        String value = name.getValue();
        if(phpServiceTags.contains(value)) {
            phpServiceTags.remove(value);
        }

    }

    ServiceUtil.insertTagWithPopupDecision(editor, phpServiceTags, tag -> {
        ServiceTag serviceTag = new ServiceTag(phpClassFromXmlTag, tag);
        ServiceUtil.decorateServiceTag(serviceTag);
        xmlTag.addSubTag(XmlElementFactory.getInstance(project).createTagFromText(serviceTag.toXmlString()), false);
    });
}
 
Example 18
Source File: DoctrineXmlMappingDriver.java    From idea-php-symfony2-plugin with MIT License 4 votes vote down vote up
@Nullable
public DoctrineMetadataModel getMetadata(@NotNull DoctrineMappingDriverArguments args) {

    PsiFile psiFile = args.getPsiFile();
    if(!(psiFile instanceof XmlFile)) {
        return null;
    }

    XmlTag rootTag = ((XmlFile) psiFile).getRootTag();
    if(rootTag == null || !rootTag.getName().matches(DoctrineMetadataPattern.DOCTRINE_MAPPING)) {
        return null;
    }

    Collection<DoctrineModelField> fields = new ArrayList<>();
    DoctrineMetadataModel model = new DoctrineMetadataModel(fields);

    for (XmlTag xmlTag : rootTag.getSubTags()) {
        String name = xmlTag.getAttributeValue("name");
        if(name == null) {
            continue;
        }

        if("entity".equals(xmlTag.getName()) && args.isEqualClass(name)) {
            // Doctrine ORM
            // @TODO: refactor allow multiple
            fields.addAll(EntityHelper.getEntityFields((XmlFile) psiFile));

            // get table for dbal
            String table = xmlTag.getAttributeValue("table");
            if(StringUtils.isNotBlank(table)) {
                model.setTable(table);
            }
        } else if("document".equals(xmlTag.getName()) && args.isEqualClass(name)) {
            // Doctrine ODM
            getOdmFields(xmlTag, fields);
        }
    }

    if(model.isEmpty()) {
        return null;
    }

    return model;
}
 
Example 19
Source File: XmlDuplicateServiceKeyInspection.java    From idea-php-symfony2-plugin with MIT License 4 votes vote down vote up
protected void visitRoot(PsiFile psiFile, @NotNull ProblemsHolder holder, String root, String child, String tagName) {

        XmlDocument xmlDocument = PsiTreeUtil.getChildOfType(psiFile, XmlDocument.class);
        if(xmlDocument == null) {
            return;
        }

        Map<String, XmlAttribute> psiElementMap = new HashMap<>();
        Set<XmlAttribute> yamlKeyValues = new HashSet<>();

        for(XmlTag xmlTag: PsiTreeUtil.getChildrenOfTypeAsList(psiFile.getFirstChild(), XmlTag.class)) {
            if(xmlTag.getName().equals("container")) {
                for(XmlTag servicesTag: xmlTag.getSubTags()) {
                    if(servicesTag.getName().equals(root)) {
                        for(XmlTag parameterTag: servicesTag.getSubTags()) {
                            if(parameterTag.getName().equals(child)) {
                                XmlAttribute keyAttr = parameterTag.getAttribute(tagName);
                                if(keyAttr != null) {
                                    String parameterName = keyAttr.getValue();
                                    if(parameterName != null && StringUtils.isNotBlank(parameterName)) {
                                        if(psiElementMap.containsKey(parameterName)) {
                                            yamlKeyValues.add(psiElementMap.get(parameterName));
                                            yamlKeyValues.add(keyAttr);
                                        } else {
                                            psiElementMap.put(parameterName, keyAttr);
                                        }
                                    }

                                }
                            }
                        }
                    }
                }
            }
        }

        if(yamlKeyValues.size() > 0) {
            for(PsiElement psiElement: yamlKeyValues) {
                XmlAttributeValue valueElement = ((XmlAttribute) psiElement).getValueElement();
                if(valueElement != null) {
                    holder.registerProblem(valueElement, "Duplicate Key", ProblemHighlightType.GENERIC_ERROR_OR_WARNING);
                }
            }
        }

    }
 
Example 20
Source File: RouteHelper.java    From idea-php-symfony2-plugin with MIT License 4 votes vote down vote up
public static Collection<StubIndexedRoute> getXmlRouteDefinitions(XmlFile psiFile) {

        XmlDocumentImpl document = PsiTreeUtil.getChildOfType(psiFile, XmlDocumentImpl.class);
        if(document == null) {
            return Collections.emptyList();
        }

        Collection<StubIndexedRoute> indexedRoutes = new ArrayList<>();

        /*
         * <routes>
         *   <route id="foo" path="/blog/{slug}" methods="GET">
         *     <default key="_controller">Foo</default>
         *   </route>
         *
         *   <route id="foo" path="/blog/{slug}" methods="GET" controller="AppBundle:Blog:list"/>
         * </routes>
         */
        for(XmlTag xmlTag: PsiTreeUtil.getChildrenOfTypeAsList(psiFile.getFirstChild(), XmlTag.class)) {
            if(xmlTag.getName().equals("routes")) {
                for(XmlTag servicesTag: xmlTag.getSubTags()) {
                    if(servicesTag.getName().equals("route")) {
                        XmlAttribute xmlAttribute = servicesTag.getAttribute("id");
                        if(xmlAttribute != null) {
                            String attrValue = xmlAttribute.getValue();
                            if(attrValue != null && StringUtils.isNotBlank(attrValue)) {

                                StubIndexedRoute route = new StubIndexedRoute(attrValue);
                                String pathAttribute = servicesTag.getAttributeValue("path");
                                if(pathAttribute == null) {
                                    pathAttribute = servicesTag.getAttributeValue("pattern");
                                }

                                if(pathAttribute != null && StringUtils.isNotBlank(pathAttribute) ) {
                                    route.setPath(pathAttribute);
                                }

                                String methods = servicesTag.getAttributeValue("methods");
                                if(methods != null && StringUtils.isNotBlank(methods))  {
                                    String[] split = methods.replaceAll(" +", "").toLowerCase().split("\\|");
                                    if(split.length > 0) {
                                        route.addMethod(split);
                                    }
                                }

                                // <route><default key="_controller"/></route>
                                //  <route controller="AppBundle:Blog:list"/>
                                String controller = getXmlController(servicesTag);
                                if(controller != null) {
                                    route.setController(normalizeRouteController(controller));
                                }

                                indexedRoutes.add(route);
                            }
                        }
                    }
                }
            }
        }

        return indexedRoutes;
    }