mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-80841: "Organize import" deletes xsi:schemeLocation mark as unsed because xmlns redefine for element
This commit is contained in:
+5
-3
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user