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

Reply via email to