diff options
author | Octavia Togami <octavia.togami@gmail.com> | 2021-03-29 00:48:52 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-29 08:48:52 +0100 |
commit | 806dd1b84068a94facdb5a036f523c47526c93ab (patch) | |
tree | 559a461eb7a315e0e43c4a0e9b14bbe4d70d4995 /src/main/java/net/fabricmc | |
parent | 71535fa75f7555a9ca663331eebcca6d0e5b465d (diff) | |
download | architectury-loom-806dd1b84068a94facdb5a036f523c47526c93ab.tar.gz architectury-loom-806dd1b84068a94facdb5a036f523c47526c93ab.tar.bz2 architectury-loom-806dd1b84068a94facdb5a036f523c47526c93ab.zip |
Fix name comparision in GroovyXmlUtil (#373)
Nodes can also have groovy.xml.QNames, which need to be compared using
their matches(Object) method.
Diffstat (limited to 'src/main/java/net/fabricmc')
-rw-r--r-- | src/main/java/net/fabricmc/loom/util/GroovyXmlUtil.java | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/main/java/net/fabricmc/loom/util/GroovyXmlUtil.java b/src/main/java/net/fabricmc/loom/util/GroovyXmlUtil.java index c07fa64c..801cc118 100644 --- a/src/main/java/net/fabricmc/loom/util/GroovyXmlUtil.java +++ b/src/main/java/net/fabricmc/loom/util/GroovyXmlUtil.java @@ -29,13 +29,14 @@ import java.util.Optional; import java.util.stream.Stream; import groovy.util.Node; +import groovy.xml.QName; public final class GroovyXmlUtil { private GroovyXmlUtil() { } public static Node getOrCreateNode(Node parent, String name) { for (Object object : parent.children()) { - if (object instanceof Node && name.equals(((Node) object).name())) { + if (object instanceof Node && isSameName(((Node) object).name(), name)) { return (Node) object; } } @@ -45,7 +46,7 @@ public final class GroovyXmlUtil { public static Optional<Node> getNode(Node parent, String name) { for (Object object : parent.children()) { - if (object instanceof Node && name.equals(((Node) object).name())) { + if (object instanceof Node && isSameName(((Node) object).name(), name)) { return Optional.of((Node) object); } } @@ -53,6 +54,18 @@ public final class GroovyXmlUtil { return Optional.empty(); } + private static boolean isSameName(Object nodeName, String givenName) { + if (nodeName instanceof String) { + return nodeName.equals(givenName); + } + + if (nodeName instanceof QName) { + return ((QName) nodeName).matches(givenName); + } + + throw new UnsupportedOperationException("Cannot determine if " + nodeName.getClass() + " is the same as a String"); + } + public static Stream<Node> childrenNodesStream(Node node) { //noinspection unchecked return (Stream<Node>) (Stream) (((List<Object>) node.children()).stream().filter((i) -> i instanceof Node)); |