1515 */
1616package org .intellij .lang .xpath .validation .inspections ;
1717
18+ import consulo .annotation .access .RequiredReadAction ;
1819import consulo .annotation .component .ExtensionImpl ;
1920import consulo .language .editor .inspection .LocalQuickFix ;
2021import consulo .language .editor .inspection .ProblemHighlightType ;
2122import consulo .language .editor .inspection .ProblemsHolder ;
2223import consulo .language .editor .inspection .scheme .InspectionManager ;
24+ import consulo .localize .LocalizeValue ;
2325import consulo .xml .psi .xml .XmlElement ;
26+ import jakarta .annotation .Nonnull ;
27+ import jakarta .annotation .Nullable ;
2428import org .intellij .lang .xpath .context .ContextProvider ;
2529import org .intellij .lang .xpath .context .NamespaceContext ;
2630import org .intellij .lang .xpath .psi .PrefixedName ;
2731import org .intellij .lang .xpath .psi .XPathNodeTest ;
28- import org .jetbrains .annotations .NonNls ;
2932
30- import jakarta .annotation .Nonnull ;
31- import jakarta .annotation .Nullable ;
3233import javax .xml .namespace .QName ;
3334import java .text .MessageFormat ;
3435import java .util .Set ;
3738public class CheckNodeTest extends XPathInspection <Object > {
3839 private static final String SHORT_NAME = "CheckNodeTest" ;
3940
41+ @ Override
4042 protected Visitor createVisitor (InspectionManager manager , ProblemsHolder holder , boolean isOnTheFly , Object state ) {
4143 return new MyVisitor (manager , isOnTheFly , holder , state );
4244 }
4345
4446 @ Nonnull
45- public String getDisplayName () {
46- return "Check Node Test" ;
47+ @ Override
48+ public LocalizeValue getDisplayName () {
49+ return LocalizeValue .localizeTODO ("Check Node Test" );
4750 }
4851
4952 @ Nonnull
50- @ NonNls
53+ @ Override
5154 public String getShortName () {
5255 return SHORT_NAME ;
5356 }
5457
58+ @ Override
5559 public boolean isEnabledByDefault () {
5660 return true ;
5761 }
@@ -61,22 +65,24 @@ final static class MyVisitor extends Visitor<Object> {
6165 super (manager , holder , isOnTheFly , state );
6266 }
6367
68+ @ Override
69+ @ RequiredReadAction
6470 protected void checkNodeTest (XPathNodeTest nodeTest ) {
65- final ContextProvider contextProvider = ContextProvider .getContextProvider (nodeTest .getContainingFile ());
66- final XmlElement contextNode = contextProvider .getContextElement ();
67- final NamespaceContext namespaceContext = contextProvider .getNamespaceContext ();
71+ ContextProvider contextProvider = ContextProvider .getContextProvider (nodeTest .getContainingFile ());
72+ XmlElement contextNode = contextProvider .getContextElement ();
73+ NamespaceContext namespaceContext = contextProvider .getNamespaceContext ();
6874 if (namespaceContext == null ) {
6975 return ;
7076 }
7177
7278 if (nodeTest .isNameTest () && contextNode != null ) {
73- final PrefixedName prefixedName = nodeTest .getQName ();
79+ PrefixedName prefixedName = nodeTest .getQName ();
7480 assert prefixedName != null ;
7581 if (!"*" .equals (prefixedName .getLocalName ()) && !"*" .equals (prefixedName .getPrefix ())) {
7682 boolean found ;
7783
7884 if (nodeTest .getPrincipalType () == XPathNodeTest .PrincipalType .ELEMENT ) {
79- final Set <QName > elementNames = contextProvider .getElements (true );
85+ Set <QName > elementNames = contextProvider .getElements (true );
8086 if (elementNames != null ) {
8187 found = false ;
8288 for (QName pair : elementNames ) {
@@ -91,7 +97,7 @@ protected void checkNodeTest(XPathNodeTest nodeTest) {
9197 }
9298 }
9399 else if (nodeTest .getPrincipalType () == XPathNodeTest .PrincipalType .ATTRIBUTE ) {
94- final Set <QName > attributeNames = contextProvider .getAttributes (true );
100+ Set <QName > attributeNames = contextProvider .getAttributes (true );
95101 if (attributeNames != null ) {
96102 found = false ;
97103 for (QName pair : attributeNames ) {
@@ -109,51 +115,54 @@ else if (nodeTest.getPrincipalType() == XPathNodeTest.PrincipalType.ATTRIBUTE) {
109115 }
110116 }
111117
118+ @ RequiredReadAction
112119 private void registerProblem (ContextProvider contextProvider , PrefixedName prefixedName , XPathNodeTest nodeTest , String type ) {
113- final QName qName = contextProvider .getQName (prefixedName , nodeTest );
114- final String name ;
120+ QName qName = contextProvider .getQName (prefixedName , nodeTest );
121+ String name ;
115122 if (qName != null ) {
116- final String pattern ;
117- if (!"" .equals (qName .getNamespaceURI ())) {
118- pattern = "''<b>{0}</b>'' (<i>{1}</i>)" ;
119- }
120- else {
121- pattern = "''<b>{0}</b>''" ;
122- }
123+ String pattern = qName .getNamespaceURI ().isEmpty () ? "''<b>{0}</b>''" : "''<b>{0}</b>'' (<i>{1}</i>)" ;
123124 name = MessageFormat .format (pattern , qName .getLocalPart (), qName .getNamespaceURI ());
124125 }
125126 else {
126127 name = MessageFormat .format ("''<b>{0}</b>''" , prefixedName .getLocalName ());
127128 }
128129
129- final LocalQuickFix [] fixes = contextProvider .getQuickFixFactory ().createUnknownNodeTestFixes (nodeTest );
130- addProblem (myManager .createProblemDescriptor (nodeTest , "<html>Unknown " + type + " name " + name + "</html>" , myOnTheFly , fixes , ProblemHighlightType .GENERIC_ERROR_OR_WARNING ));
130+ LocalQuickFix [] fixes = contextProvider .getQuickFixFactory ().createUnknownNodeTestFixes (nodeTest );
131+ addProblem (myManager .createProblemDescriptor (
132+ nodeTest ,
133+ "<html>Unknown " + type + " name " + name + "</html>" ,
134+ myOnTheFly ,
135+ fixes ,
136+ ProblemHighlightType .GENERIC_ERROR_OR_WARNING
137+ ));
131138 }
132139
133- private static boolean matches (@ Nullable PrefixedName prefixedName ,
134- QName element ,
135- NamespaceContext namespaceContext ,
136- XmlElement context ,
137- boolean allowDefaultNamespace ) {
140+ private static boolean matches (
141+ @ Nullable PrefixedName prefixedName ,
142+ QName element ,
143+ NamespaceContext namespaceContext ,
144+ XmlElement context ,
145+ boolean allowDefaultNamespace
146+ ) {
138147 if (prefixedName == null ) {
139148 return false ;
140149 }
141150
142151 boolean b = prefixedName .getLocalName ().equals (element .getLocalPart ()) || "*" .equals (element .getLocalPart ());
143152
144- final String prefix = prefixedName .getPrefix ();
153+ String prefix = prefixedName .getPrefix ();
145154 if (prefix != null ) {
146155 if (!"*" .equals (prefix )) {
147- final String namespaceURI = namespaceContext .getNamespaceURI (prefix , context );
156+ String namespaceURI = namespaceContext .getNamespaceURI (prefix , context );
148157 b = b && element .getNamespaceURI ().equals (namespaceURI );
149158 }
150159 }
151160 else if (allowDefaultNamespace ) {
152- final String namespaceURI = namespaceContext .getDefaultNamespace (context );
153- b = b && (element .getNamespaceURI ().equals (namespaceURI ) || ( element .getNamespaceURI ().length () == 0 && namespaceURI == null ) );
161+ String namespaceURI = namespaceContext .getDefaultNamespace (context );
162+ b = b && (element .getNamespaceURI ().equals (namespaceURI ) || element .getNamespaceURI ().isEmpty () && namespaceURI == null );
154163 }
155164 else {
156- b = b && element .getNamespaceURI ().length () == 0 ;
165+ b = b && element .getNamespaceURI ().isEmpty () ;
157166 }
158167 return b ;
159168 }
0 commit comments