void (final @NotNull XmlAttributeValue value) { final PsiElement element = value.getParent(); if (!(element instanceof XmlAttribute attribute)) return; final XmlTag tag = attribute.getParent(); if (tag == null) return; final XmlElementDescriptor descriptor = tag.getDescriptor(); if (descriptor == null) return; final XmlAttributeDescriptor attributeDescriptor = attribute.getDescriptor(); if (attributeDescriptor != null) { if (attributeDescriptor.hasIdType()) { updateMap(attribute, value, false); } else { final PsiReference[] references = value.getReferences(); for (PsiReference r : references) { if (r instanceof IdReferenceProvider.GlobalAttributeValueSelfReference /*&& !r.isSoft()*/) { updateMap(attribute, value, r.isSoft()); } else if (r instanceof SchemaPrefixReference) { SchemaPrefix prefix = ((SchemaPrefixReference)r).resolve(); if (prefix != null) { myHolder.addUsedPrefix(prefix.getName()); } } } } if (attributeDescriptor.hasIdRefType() && PsiTreeUtil.getChildOfType(value, OuterLanguageElement.class) == null) { myHolder.registerIdReference(value); } } String s = value.getValue(); detectPrefix(s, tag); super.visitXmlAttributeValue(value); }