diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b26e18a6..9da067fc 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -83,7 +83,7 @@ jobs: - name: Test uses: gradle/gradle-build-action@v2 with: - gradle-version: 7.6.5 + gradle-version: 8.7 build-root-directory: tck-impl arguments: check -Pparsson.home=image/parsson-dist -Pparsson.impl=${{ matrix.test_suite }} - name: Upload test results diff --git a/impl/src/main/java/org/eclipse/parsson/JsonObjectBuilderImpl.java b/impl/src/main/java/org/eclipse/parsson/JsonObjectBuilderImpl.java index 6c093df5..e96965dd 100644 --- a/impl/src/main/java/org/eclipse/parsson/JsonObjectBuilderImpl.java +++ b/impl/src/main/java/org/eclipse/parsson/JsonObjectBuilderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2026 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -168,7 +168,9 @@ public JsonObjectBuilder addAll(JsonObjectBuilder builder) { @Override public JsonObjectBuilder remove(String name) { validateName(name); - this.valueMap.remove(name); + if (valueMap != null) { + valueMap.remove(name); + } return this; } diff --git a/impl/src/test/java/org/eclipse/parsson/tests/JsonBuilderTest.java b/impl/src/test/java/org/eclipse/parsson/tests/JsonBuilderTest.java index c9bd7bc0..b4734a2f 100644 --- a/impl/src/test/java/org/eclipse/parsson/tests/JsonBuilderTest.java +++ b/impl/src/test/java/org/eclipse/parsson/tests/JsonBuilderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2026 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -95,6 +95,28 @@ void testJsonObjectMap() { JsonObjectTest.testPerson(copyPerson); } + @Test + void testRemoveFromEmptyObjectBuilder() { + JsonObject empty = Json.createObjectBuilder() + .remove("missing") + .build(); + + JsonObjectTest.testEmpty(empty); + } + + @Test + void testRemoveFromObjectBuilderAfterBuild() { + JsonObjectBuilder builder = Json.createObjectBuilder() + .add("firstName", "John"); + + JsonObject first = builder.build(); + builder.remove("firstName"); + JsonObject empty = builder.build(); + + Assertions.assertEquals("John", first.getString("firstName")); + JsonObjectTest.testEmpty(empty); + } + static Map buildPersonAsMap() { Map person = new HashMap<>(); person.put("firstName", "John");