void (final @NotNull XmlAttributeValue value) { final PsiElement parent = value.getParent(); if (parent instanceof XmlAttribute) { if (!XsltSupport.isXsltFile(parent.getContainingFile())) { return; } final String s = value.getValue(); if (s.isEmpty()) { if (XsltSupport.isXPathAttribute((XmlAttribute)parent)) { InjectedLanguageManager.getInstance(value.getProject()).enumerate(value, (injectedPsi, places) -> { if (injectedPsi instanceof XPathFile) { if (injectedPsi.getTextLength() == 0) { myHolder.newAnnotation(HighlightSeverity.ERROR, XPathBundle.message("annotator.error.empty.xpath.expression")).range(value).create(); } } }); } } else if (XsltSupport.mayBeAVT((XmlAttribute)parent)) { final List<Integer> singleBraces = collectClosingBraceOffsets(s); if (singleBraces != null) { InjectedLanguageManager.getInstance(value.getProject()).enumerate(value, (injectedPsi, places) -> { if (injectedPsi instanceof XPathFile) { for (PsiLanguageInjectionHost.Shred place : places) { final TextRange range = place.getRangeInsideHost(); singleBraces.removeIf(range::contains); } } }); final String message = XPathBundle.message("annotator.error.invalid.single.closing.brace.escape.as.double.closing.brace"); for (Integer brace : singleBraces) { myHolder.newAnnotation(HighlightSeverity.ERROR, message).range(TextRange.from(value.getTextOffset() + brace, 1)).create(); } } } } super.visitXmlAttributeValue(value); }