From bd85b83398ad07bdf845b55a8fe7bdf291ca32fd Mon Sep 17 00:00:00 2001 From: elharo Date: Thu, 30 Jul 2026 12:05:55 +0000 Subject: [PATCH 1/4] Fix #12609: ProtoSession.Builder.newBuilder() NPE on unset property maps Initialize userProperties and systemProperties to Map.of() in Builder to prevent NullPointerException when build() is called without setting these properties. Fixes gh-12609 --- .../org/apache/maven/api/ProtoSession.java | 4 +- .../apache/maven/api/ProtoSessionTest.java | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ProtoSession.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ProtoSession.java index 41300d074e63..cacf6b8a8121 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ProtoSession.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ProtoSession.java @@ -116,8 +116,8 @@ static Builder newBuilder() { } class Builder { - private Map userProperties; - private Map systemProperties; + private Map userProperties = Map.of(); + private Map systemProperties = Map.of(); private Instant startTime; private Path topDirectory; private Path rootDirectory; diff --git a/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java b/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java new file mode 100644 index 000000000000..56639d996327 --- /dev/null +++ b/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.maven.api; + +import java.nio.file.Paths; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class ProtoSessionTest { + + @Test + void testNewBuilderWithUnsetPropertyMaps() { + ProtoSession session = ProtoSession.newBuilder() + .withTopDirectory(Paths.get(".")) + .withRootDirectory(Paths.get(".")) + .build(); + assertNotNull(session); + assertNotNull(session.getUserProperties()); + assertNotNull(session.getSystemProperties()); + } +} From b9c2efaae1f72ecc2f67f5f4acb9d85124fbaa9d Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Thu, 30 Jul 2026 12:13:03 +0000 Subject: [PATCH 2/4] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../src/test/java/org/apache/maven/api/ProtoSessionTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java b/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java index 56639d996327..dd02a278dcdf 100644 --- a/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java +++ b/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java @@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; class ProtoSessionTest { @@ -35,5 +36,7 @@ void testNewBuilderWithUnsetPropertyMaps() { assertNotNull(session); assertNotNull(session.getUserProperties()); assertNotNull(session.getSystemProperties()); + assertTrue(session.getUserProperties().isEmpty(), "User properties should default to empty"); + assertTrue(session.getSystemProperties().isEmpty(), "System properties should default to empty"); } } From 574135500059e20cf3107e81e4d02e68ac728f71 Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Thu, 30 Jul 2026 12:13:29 +0000 Subject: [PATCH 3/4] Update api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java Co-authored-by: Guillaume Nodet --- .../src/test/java/org/apache/maven/api/ProtoSessionTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java b/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java index dd02a278dcdf..b1dab8833fb5 100644 --- a/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java +++ b/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java @@ -35,7 +35,10 @@ void testNewBuilderWithUnsetPropertyMaps() { .build(); assertNotNull(session); assertNotNull(session.getUserProperties()); + assertNotNull(session.getUserProperties()); + assertTrue(session.getUserProperties().isEmpty()); assertNotNull(session.getSystemProperties()); + assertTrue(session.getSystemProperties().isEmpty()); assertTrue(session.getUserProperties().isEmpty(), "User properties should default to empty"); assertTrue(session.getSystemProperties().isEmpty(), "System properties should default to empty"); } From 80a0c0bb02c2996abc82a73d721375963581c685 Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Thu, 30 Jul 2026 12:15:18 +0000 Subject: [PATCH 4/4] Refactor ProtoSessionTest assertions for clarity --- .../src/test/java/org/apache/maven/api/ProtoSessionTest.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java b/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java index b1dab8833fb5..d186402edd5a 100644 --- a/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java +++ b/api/maven-api-core/src/test/java/org/apache/maven/api/ProtoSessionTest.java @@ -35,11 +35,8 @@ void testNewBuilderWithUnsetPropertyMaps() { .build(); assertNotNull(session); assertNotNull(session.getUserProperties()); - assertNotNull(session.getUserProperties()); - assertTrue(session.getUserProperties().isEmpty()); - assertNotNull(session.getSystemProperties()); - assertTrue(session.getSystemProperties().isEmpty()); assertTrue(session.getUserProperties().isEmpty(), "User properties should default to empty"); + assertNotNull(session.getSystemProperties()); assertTrue(session.getSystemProperties().isEmpty(), "System properties should default to empty"); } }