2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
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
;
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
));
33 final XmlTag tag
= getParentXmlTag(domElement
);
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
));
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();