in api/maven-api-xml/src/main/java/org/apache/maven/api/xml/XmlNode.java [456:552]
private record Impl(
String prefix,
String namespaceUri,
@Nonnull String name,
String value,
@Nonnull Map<String, String> attributes,
@Nonnull List<XmlNode> children,
Object inputLocation)
implements XmlNode, Serializable {
private Impl {
// Validation and normalization from the original constructor
prefix = prefix == null ? "" : prefix;
namespaceUri = namespaceUri == null ? "" : namespaceUri;
name = Objects.requireNonNull(name);
attributes = ImmutableCollections.copy(attributes);
children = ImmutableCollections.copy(children);
}
@Override
public String attribute(@Nonnull String name) {
return attributes.get(name);
}
@Override
public XmlNode child(String name) {
if (name != null) {
ListIterator<XmlNode> it = children.listIterator(children.size());
while (it.hasPrevious()) {
XmlNode child = it.previous();
if (name.equals(child.name())) {
return child;
}
}
}
return null;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Impl that = (Impl) o;
return Objects.equals(this.name, that.name)
&& Objects.equals(this.value, that.value)
&& Objects.equals(this.attributes, that.attributes)
&& Objects.equals(this.children, that.children);
}
@Override
public int hashCode() {
return Objects.hash(name, value, attributes, children);
}
@Override
public String toString() {
try {
StringWriter writer = new StringWriter();
XmlService.write(this, writer);
return writer.toString();
} catch (IOException e) {
return toStringObject();
}
}
private String toStringObject() {
StringBuilder sb = new StringBuilder();
sb.append("XmlNode[");
boolean w = false;
w = addToStringField(sb, prefix, o -> !o.isEmpty(), "prefix", w);
w = addToStringField(sb, namespaceUri, o -> !o.isEmpty(), "namespaceUri", w);
w = addToStringField(sb, name, o -> !o.isEmpty(), "name", w);
w = addToStringField(sb, value, o -> !o.isEmpty(), "value", w);
w = addToStringField(sb, attributes, o -> !o.isEmpty(), "attributes", w);
w = addToStringField(sb, children, o -> !o.isEmpty(), "children", w);
w = addToStringField(sb, inputLocation, Objects::nonNull, "inputLocation", w);
sb.append("]");
return sb.toString();
}
private static <T> boolean addToStringField(
StringBuilder sb, T o, Function<T, Boolean> p, String n, boolean w) {
if (!p.apply(o)) {
if (w) {
sb.append(", ");
} else {
w = true;
}
sb.append(n).append("='").append(o).append('\'');
}
return w;
}
}