This is an automated email from the ASF dual-hosted git repository.
elharo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-shared-utils.git
The following commit(s) were added to refs/heads/master by this push:
new 5e13d9b Xpp3Dom.getValue(): honor @NonNull contract (#389)
5e13d9b is described below
commit 5e13d9b985b394f65ba85168675536db601cde49
Author: Elliotte Rusty Harold <[email protected]>
AuthorDate: Wed Jul 1 14:55:44 2026 +0000
Xpp3Dom.getValue(): honor @NonNull contract (#389)
* Add failing test: Xpp3Dom default value should not be null
* Xpp3Dom.getValue(): honor @NonNull contract, Xpp3DomWriter: use
isValueSet()
* spotless:apply formatting
---
src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java | 6 +++++-
.../java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java | 4 ++--
.../org/apache/maven/shared/utils/xml/pull/Xpp3DomTest.java | 11 +++++++++--
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java
b/src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java
index e76c6b9..e534aa2 100644
--- a/src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java
+++ b/src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java
@@ -95,6 +95,10 @@ public class Xpp3Dom implements Iterable<Xpp3Dom> {
childMap = new HashMap<>();
}
+ boolean isValueSet() {
+ return value != null;
+ }
+
/**
* Create instance.
*
@@ -140,7 +144,7 @@ public class Xpp3Dom implements Iterable<Xpp3Dom> {
*/
@NonNull
public String getValue() {
- return value;
+ return value != null ? value : "";
}
/**
diff --git a/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java
b/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java
index 900f03f..f80d5bb 100644
--- a/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java
+++ b/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java
@@ -72,8 +72,8 @@ public class Xpp3DomWriter {
write(xmlWriter, aChildren, escape);
}
- String value = dom.getValue();
- if (value != null) {
+ if (dom.isValueSet()) {
+ String value = dom.getValue();
if (escape) {
xmlWriter.writeText(value);
} else {
diff --git
a/src/test/java/org/apache/maven/shared/utils/xml/pull/Xpp3DomTest.java
b/src/test/java/org/apache/maven/shared/utils/xml/pull/Xpp3DomTest.java
index d64e9c4..c2dd9f6 100644
--- a/src/test/java/org/apache/maven/shared/utils/xml/pull/Xpp3DomTest.java
+++ b/src/test/java/org/apache/maven/shared/utils/xml/pull/Xpp3DomTest.java
@@ -27,7 +27,7 @@ import org.junit.jupiter.api.Test;
import static org.apache.maven.shared.utils.xml.Xpp3Dom.mergeXpp3Dom;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
/**
@@ -42,6 +42,13 @@ public class Xpp3DomTest {
return t1s1;
}
+ @Test
+ public void defaultValueIsNotNull() {
+ // getValue() is annotated @NonNull but the one-arg constructor
+ // did not initialize value, violating the contract.
+ assertNotNull(new Xpp3Dom("test").getValue());
+ }
+
@Test
public void mergePrecedenceSelfClosed() throws XmlPullParserException {
Xpp3Dom parentConfig =
build("<configuration><items><item/></items></configuration>");
@@ -82,7 +89,7 @@ public class Xpp3DomTest {
Xpp3Dom result = mergeXpp3Dom(t1, t2);
assertEquals(2, result.getAttributeNames().length);
- assertNull(result.getValue());
+ assertEquals("", result.getValue());
}
@Test