IDEA-80841: "Organize import" deletes xsi:schemeLocation mark as unsed because xmlns redefine for element

This commit is contained in:
Dmitry Avdeev
2012-02-07 16:28:03 +04:00
parent 1c66c3318f
commit 50c3584fe6
2 changed files with 16 additions and 3 deletions
@@ -127,9 +127,11 @@ public class XmlUnusedNamespaceInspection extends XmlSuppressableInspectionTool
private static void checkUnusedLocations(XmlAttribute attribute, ProblemsHolder holder) {
if (XmlUtil.XML_SCHEMA_INSTANCE_URI.equals(attribute.getNamespace())) {
XmlRefCountHolder refCountHolder = XmlRefCountHolder.getRefCountHolder(attribute);
if (refCountHolder == null) return;
if (XmlUtil.NO_NAMESPACE_SCHEMA_LOCATION_ATT.equals(attribute.getLocalName())) {
XmlRefCountHolder refCountHolder = XmlRefCountHolder.getRefCountHolder(attribute);
if (refCountHolder == null || refCountHolder.isInUse("")) return;
if (refCountHolder.isInUse("")) return;
holder.registerProblem(attribute, NAMESPACE_LOCATION_IS_NEVER_USED, ProblemHighlightType.LIKE_UNUSED_SYMBOL,
new RemoveNamespaceLocationFix(""));
}
@@ -141,7 +143,7 @@ public class XmlUnusedNamespaceInspection extends XmlSuppressableInspectionTool
PsiReference reference = references[i];
if (reference instanceof URLReference) {
String ns = getNamespaceFromReference(reference);
if (ArrayUtil.indexOf(attribute.getParent().knownNamespaces(), ns) == -1) {
if (ArrayUtil.indexOf(attribute.getParent().knownNamespaces(), ns) == -1 && !refCountHolder.isUsedNamespace(ns)) {
if (!XmlHighlightVisitor.hasBadResolve(reference, false)) {
holder.registerProblemForReference(reference, ProblemHighlightType.LIKE_UNUSED_SYMBOL, NAMESPACE_LOCATION_IS_NEVER_USED,
new RemoveNamespaceLocationFix(ns));
@@ -68,6 +68,7 @@ public class XmlRefCountHolder {
private final Set<String> myAdditionallyDeclaredIds = new HashSet<String>();
private final Set<PsiElement> myDoNotValidateParentsList = new HashSet<PsiElement>();
private final Set<String> myUsedPrefixes = new HashSet<String>();
private final Set<String> myUsedNamespaces = new HashSet<String>();
@Nullable
public static XmlRefCountHolder getRefCountHolder(final XmlElement element) {
@@ -140,6 +141,10 @@ public class XmlRefCountHolder {
return myUsedPrefixes.contains(prefix);
}
public boolean isUsedNamespace(String ns) {
return myUsedNamespaces.contains(ns);
}
private static class IdGatheringRecursiveVisitor extends XmlRecursiveElementVisitor {
private final XmlRefCountHolder myHolder;
@@ -192,6 +197,7 @@ public class XmlRefCountHolder {
@Override
public void visitXmlTag(XmlTag tag) {
myHolder.addUsedPrefix(tag.getNamespacePrefix());
myHolder.addUsedNamespace(tag.getNamespace());
String text = tag.getValue().getTrimmedText();
detectPrefix(text);
super.visitXmlTag(tag);
@@ -202,6 +208,7 @@ public class XmlRefCountHolder {
if (!attribute.isNamespaceDeclaration()) {
myHolder.addUsedPrefix(attribute.getNamespacePrefix());
}
myHolder.addUsedNamespace(attribute.getNamespace());
super.visitXmlAttribute(attribute);
}
@@ -269,4 +276,8 @@ public class XmlRefCountHolder {
private void addUsedPrefix(String prefix) {
myUsedPrefixes.add(prefix);
}
private void addUsedNamespace(String ns) {
myUsedNamespaces.add(ns);
}
}