fix: remove unneeded depth/logic in serializer

This commit is contained in:
Connor Tumbleson 2021-08-30 20:59:53 -04:00
parent 2e3f22af7c
commit 0645821883
No known key found for this signature in database
GPG Key ID: C3CC0A201EC7DA75

View File

@ -411,14 +411,6 @@ public class MXSerializer implements XmlSerializer {
throw new IllegalArgumentException("prefix must be not null" + getLocation()); throw new IllegalArgumentException("prefix must be not null" + getLocation());
} }
// check that prefix is not duplicated ...
for (int i = elNamespaceCount[depth]; i < namespaceEnd; i++) {
if (prefix == namespacePrefix[i]) {
// Toss out extra namespaces at same depth to fix #1456
return;
}
}
if (!namesInterned) { if (!namesInterned) {
namespace = namespace.intern(); namespace = namespace.intern();
} else if (checkNamesInterned) { } else if (checkNamesInterned) {
@ -461,16 +453,12 @@ public class MXSerializer implements XmlSerializer {
// first check if namespace is already in scope // first check if namespace is already in scope
for (int i = namespaceEnd - 1; i >= 0; --i) { for (int i = namespaceEnd - 1; i >= 0; --i) {
if (namespace == namespaceUri[i]) { if (namespace.equals(namespaceUri[i])) {
final String prefix = namespacePrefix[i]; final String prefix = namespacePrefix[i];
if (nonEmpty && prefix.length() == 0) if (nonEmpty && prefix.length() == 0) {
continue; continue;
// now check that prefix is still in scope
for (int p = namespaceEnd - 1; p > i; --p) {
if (prefix == namespacePrefix[p]) {
// too bad - prefix is redeclared with different namespace
}
} }
return prefix; return prefix;
} }
} }
@ -483,30 +471,21 @@ public class MXSerializer implements XmlSerializer {
} }
private String generatePrefix(String namespace) { private String generatePrefix(String namespace) {
while (true) { ++autoDeclaredPrefixes;
++autoDeclaredPrefixes; // fast lookup uses table that was pre-initialized in static{} ....
// fast lookup uses table that was pre-initialized in static{} .... final String prefix = autoDeclaredPrefixes < precomputedPrefixes.length
final String prefix = autoDeclaredPrefixes < precomputedPrefixes.length ? precomputedPrefixes[autoDeclaredPrefixes]
? precomputedPrefixes[autoDeclaredPrefixes] : ("n" + autoDeclaredPrefixes).intern();
: ("n" + autoDeclaredPrefixes).intern();
// make sure this prefix is not declared in any scope (avoid hiding in-scope prefixes)! // declare prefix
for (int i = namespaceEnd - 1; i >= 0; --i) { if (namespaceEnd >= namespacePrefix.length) {
if (prefix == namespacePrefix[i]) { ensureNamespacesCapacity();
// prefix is already declared - generate new and try again }
} namespacePrefix[namespaceEnd] = prefix;
} namespaceUri[namespaceEnd] = namespace;
// declare prefix ++namespaceEnd;
if (namespaceEnd >= namespacePrefix.length) { return prefix;
ensureNamespacesCapacity();
}
namespacePrefix[namespaceEnd] = prefix;
namespaceUri[namespaceEnd] = namespace;
++namespaceEnd;
return prefix;
}
} }
@Override @Override