highlighting for xml-tags added...
[fedora-idea.git] / source / com / intellij / util / xml / highlighting / DomElementsHighlightingUtil.java
blob99d0d5282e0feba55cee4de9e6ba1c09242fb2df
1 /*
2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
3 */
5 package com.intellij.util.xml.highlighting;
7 import com.intellij.codeInspection.InspectionManager;
8 import com.intellij.codeInspection.ProblemDescriptor;
9 import com.intellij.codeInspection.ProblemHighlightType;
10 import com.intellij.lang.ASTNode;
11 import com.intellij.psi.PsiElement;
12 import com.intellij.psi.xml.XmlChildRole;
13 import com.intellij.psi.xml.XmlTag;
14 import com.intellij.util.xml.DomElement;
15 import com.intellij.util.xml.GenericValue;
17 import java.util.ArrayList;
18 import java.util.List;
20 /**
21 * User: Sergey.Vasiliev
23 public class DomElementsHighlightingUtil {
25 public static List<ProblemDescriptor> getProblemDescriptor(final InspectionManager manager, DomElementProblemDescriptor problemDescriptor) {
26 List<ProblemDescriptor> descritors = new ArrayList<ProblemDescriptor>();
27 final DomElement domElement = problemDescriptor.getDomElement();
29 if (domElement.getXmlTag() != null) {
30 descritors.add(manager.createProblemDescriptor(getPsiElement(domElement), problemDescriptor.getDescriptionTemplate(),
31 problemDescriptor.getFixes(), ProblemHighlightType.GENERIC_ERROR_OR_WARNING));
32 } else {
33 final XmlTag tag = getParentXmlTag(domElement);
34 if (tag != null) {
35 final ASTNode startNode = XmlChildRole.START_TAG_NAME_FINDER.findChild(tag.getNode());
36 final ASTNode endNode = XmlChildRole.CLOSING_TAG_NAME_FINDER.findChild(tag.getNode());
38 descritors.add(manager.createProblemDescriptor(startNode.getPsi(), problemDescriptor.getDescriptionTemplate(), problemDescriptor.getFixes(),
39 ProblemHighlightType.GENERIC_ERROR_OR_WARNING));
41 if (endNode != null && !startNode.equals(endNode)) {
42 descritors.add(manager.createProblemDescriptor(endNode.getPsi(), problemDescriptor.getDescriptionTemplate(), problemDescriptor.getFixes(),
43 ProblemHighlightType.GENERIC_ERROR_OR_WARNING));
48 return descritors;
52 private static PsiElement getPsiElement(final DomElement domElement) {
53 if (domElement instanceof GenericValue && ((GenericValue)domElement).getStringValue() != null &&
54 domElement.getXmlTag().getValue().getTextElements().length > 0) {
55 return domElement.getXmlTag().getValue().getTextElements()[0];
58 return domElement.getXmlTag();
61 private static XmlTag getParentXmlTag(final DomElement domElement) {
62 DomElement parent = domElement.getParent();
63 while (parent != null) {
64 if (parent.getXmlTag() != null) return parent.getXmlTag();
66 return null;