From 3df4c71d996a78ddaab8faa25359c4d1078a0a99 Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Sun, 4 Oct 2026 05:55:03 +0200 Subject: [PATCH] Add PluginPropertyUtilsTest test case and fix malformed pom data. - copies a test case from MavenSourceLevelImplTest to invoke it in a more direct way using PluginPropertyUtil. - fixes missing wrapper and a typo in test data - small cleanup in the general area --- .../maven/api/PluginPropertyUtils.java | 12 +++- .../maven/modelcache/MavenProjectCache.java | 55 +++++++++--------- .../maven/api/PluginPropertyUtilsTest.java | 56 +++++++++++++++++++ .../classpath/ClassPathProviderImplTest.java | 2 +- .../MavenReloadImplementationTest.java | 17 +++--- .../queries/MavenSourceLevelImplTest.java | 16 +++--- 6 files changed, 111 insertions(+), 47 deletions(-) diff --git a/java/maven/src/org/netbeans/modules/maven/api/PluginPropertyUtils.java b/java/maven/src/org/netbeans/modules/maven/api/PluginPropertyUtils.java index 309c9acb0cc1..1c1136c98936 100644 --- a/java/maven/src/org/netbeans/modules/maven/api/PluginPropertyUtils.java +++ b/java/maven/src/org/netbeans/modules/maven/api/PluginPropertyUtils.java @@ -98,9 +98,17 @@ private PluginPropertyUtils() { * @param expressionProperty expression property that once defined (and plugin configuration is omitted) is used. only value, no ${} */ public static @CheckForNull String getPluginProperty(@NonNull Project prj, @NonNull String groupId, @NonNull String artifactId, @NonNull String parameter, @NullAllowed String goal, @NullAllowed String expressionProperty) { - NbMavenProjectImpl project = prj instanceof NbMavenProjectImpl ? (NbMavenProjectImpl)prj : prj.getLookup().lookup(NbMavenProjectImpl.class); + NbMavenProjectImpl project = prj instanceof NbMavenProjectImpl nbp + ? nbp : prj.getLookup().lookup(NbMavenProjectImpl.class); assert project != null : "Requires a maven project instance"; //NOI18N - return getPluginPropertyImpl(project.getOriginalMavenProject(), groupId, artifactId, simpleProperty(parameter), goal, simpleDefaultProperty(expressionProperty)); + return getPluginPropertyImpl( + project.getOriginalMavenProject(), + groupId, + artifactId, + simpleProperty(parameter), + goal, + simpleDefaultProperty(expressionProperty) + ); } /** diff --git a/java/maven/src/org/netbeans/modules/maven/modelcache/MavenProjectCache.java b/java/maven/src/org/netbeans/modules/maven/modelcache/MavenProjectCache.java index cd2085754309..5ad342da9b97 100644 --- a/java/maven/src/org/netbeans/modules/maven/modelcache/MavenProjectCache.java +++ b/java/maven/src/org/netbeans/modules/maven/modelcache/MavenProjectCache.java @@ -109,17 +109,14 @@ public final class MavenProjectCache { private static final String ATTR_IGNORE_ON_LOAD = "ignoreOnModelLoad"; // NOI18N //File is referenced during lifetime of the Project. FileObject cannot be used as with rename it changes value@!!! - private static final Map> file2Project = new WeakHashMap>(); - private static final Map file2Mutex = new WeakHashMap(); + private static final Map> file2Project = new WeakHashMap<>(); + private static final Map file2Mutex = new WeakHashMap<>(); public static void clearMavenProject(final File pomFile) { Mutex mutex = getMutex(pomFile); - mutex.writeAccess(new Action() { - @Override - public MavenProject run() { - file2Project.remove(pomFile); - return null; - } + mutex.writeAccess(() -> { + file2Project.remove(pomFile); + return null; }); } @@ -152,7 +149,7 @@ public MavenProject run() { } } MavenProject mp = loadOriginalMavenProject(pomFile); - file2Project.put(pomFile, new WeakReference(mp)); + file2Project.put(pomFile, new WeakReference<>(mp)); return mp; } }); @@ -196,9 +193,10 @@ public static long getLoadTimestamp(MavenProject p) { * @param p project * @return set of placeholder artifacts. */ + @SuppressWarnings({"unchecked", "rawtypes"}) public static Collection getPlaceholderArtifacts(MavenProject p) { Object o = p.getContextValue(CONTEXT_PLACEHOLDER_ARTIFACTS); - return o instanceof Collection ? (Collection)o : Collections.emptySet(); + return o instanceof Collection c ? c : Collections.emptySet(); } /** @@ -206,6 +204,7 @@ public static Collection getPlaceholderArtifacts(MavenProject p) { * @param project * @return */ + @SuppressWarnings("unchecked") public static Collection getUnknownBuildParticipantsClassNames(MavenProject project) { return (Collection) project.getContextValue(CONTEXT_PARTICIPANTS); } @@ -235,11 +234,16 @@ public static MavenProject loadOriginalMavenProjectInternal(MavenEmbedder projec long startLoading = System.currentTimeMillis(); try { - res = NbArtifactFixer.collectPlaceholderArtifacts(() -> projectEmbedder.readProjectWithDependencies(req, true), (c) -> - c.forEach(a -> { - // artifact fixer only injects POMs. - placeholders.add(projectEmbedder.createArtifactWithClassifier(a.getGroupId(), a.getArtifactId(), a.getVersion(), a.getExtension(), a.getClassifier())); // NOI18N - } + res = NbArtifactFixer.collectPlaceholderArtifacts( + () -> projectEmbedder.readProjectWithDependencies(req, true), + set -> set.forEach(a -> { + // artifact fixer only injects POMs. + placeholders.add( + projectEmbedder.createArtifactWithClassifier( + a.getGroupId(), a.getArtifactId(), a.getVersion(), a.getExtension(), a.getClassifier() + ) + ); + } )); newproject = res.getProject(); @@ -346,8 +350,8 @@ public static MavenProject loadOriginalMavenProjectInternal(MavenEmbedder projec active = config.getActiveConfiguration(); if (ctx != null && ctx.getConfiguration() != null) { ProjectConfiguration cfg = ctx.getConfiguration(); - if (cfg instanceof M2Configuration) { - active = (M2Configuration)cfg; + if (cfg instanceof M2Configuration m2c) { + active = m2c; } } @@ -464,14 +468,11 @@ public static MavenProject getFallbackProject(MavenExecutionResult result, File MavenProject partial = null; for (Throwable t : result.getExceptions()) { - if (t instanceof ProjectBuildingException) { - ProjectBuildingException pbe = (ProjectBuildingException)t; - if (pbe.getResults() != null) { - for (ProjectBuildingResult res : pbe.getResults()) { - if (projectFile.equals(res.getPomFile())) { - partial = res.getProject(); - break; - } + if (t instanceof ProjectBuildingException pbe && pbe.getResults() != null) { + for (ProjectBuildingResult res : pbe.getResults()) { + if (projectFile.equals(res.getPomFile())) { + partial = res.getProject(); + break; } } } @@ -515,8 +516,8 @@ public static boolean isFallbackproject(MavenProject prj) { public static MavenProject getPartialProject(MavenProject prj) { Object o = prj.getContextValue(CONTEXT_PARTIAL_PROJECT); - if (o instanceof MavenProject) { - return (MavenProject)o; + if (o instanceof MavenProject mavenProject) { + return mavenProject; } else { return null; } diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/api/PluginPropertyUtilsTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/api/PluginPropertyUtilsTest.java index eafa3c27b444..717237445346 100644 --- a/java/maven/test/unit/src/org/netbeans/modules/maven/api/PluginPropertyUtilsTest.java +++ b/java/maven/test/unit/src/org/netbeans/modules/maven/api/PluginPropertyUtilsTest.java @@ -37,6 +37,7 @@ import org.openide.filesystems.FileUtil; import org.openide.filesystems.test.TestFileUtils; +@SuppressWarnings("null") public class PluginPropertyUtilsTest extends NbTestCase { public PluginPropertyUtilsTest(String name) { @@ -304,6 +305,61 @@ public void testGetCompilerArgs() throws Exception { assertEquals("[--enable-preview]", Arrays.toString(PluginPropertyUtils.getPluginPropertyList(ProjectManager.getDefault().findProject(d), "org.apache.maven.plugins", "maven-compiler-plugin", "compilerArgs", "arg", null))); } + // same as in MavenSourceLevelImplTest but more direct + public void testTestSourceLevel() throws Exception { + TestFileUtils.writeFile(d, "pom.xml", + """ + + 4.0.0 + test + prj + 1.0 + + + + + maven-compiler-plugin + 2.3.2 + + 1.4 + + + + + + + maven-compiler-plugin + + 1.2 + + + + test-compile-java5 + + testCompile + + + 1.6 + + + + + + + + """); + Project project = ProjectManager.getDefault().findProject(d); + String value = PluginPropertyUtils.getPluginProperty( + project, + "org.apache.maven.plugins", + "maven-compiler-plugin", + "source", + "testCompile", + null + ); + assertEquals("1.6", value); + } + public void testDependencyListBuilder() throws Exception { String testPom = """ diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/classpath/ClassPathProviderImplTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/classpath/ClassPathProviderImplTest.java index 7f84287cf70c..3711993ce49c 100644 --- a/java/maven/test/unit/src/org/netbeans/modules/maven/classpath/ClassPathProviderImplTest.java +++ b/java/maven/test/unit/src/org/netbeans/modules/maven/classpath/ClassPathProviderImplTest.java @@ -376,7 +376,7 @@ public void testArchetypeResources() throws Exception { // #189037 4.0.0 g a - " + 0 """ diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenReloadImplementationTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenReloadImplementationTest.java index 7843cb2705af..e0f352d6dfae 100644 --- a/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenReloadImplementationTest.java +++ b/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenReloadImplementationTest.java @@ -26,7 +26,6 @@ import java.nio.file.attribute.FileTime; import java.time.Instant; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.concurrent.CompletableFuture; @@ -36,9 +35,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Function; -import java.util.logging.ConsoleHandler; -import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.text.Document; import org.apache.maven.project.MavenProject; @@ -60,7 +56,6 @@ import org.netbeans.modules.project.dependency.ProjectReload.Quality; import org.netbeans.modules.project.dependency.ProjectReload.StateRequest; import org.netbeans.modules.project.dependency.reload.ProjectReloadInternal; -import org.netbeans.modules.project.dependency.reload.Reloader; import org.netbeans.modules.project.dependency.spi.ProjectReloadImplementation; import org.netbeans.modules.project.dependency.spi.ProjectReloadImplementation.ProjectStateData; import org.netbeans.spi.project.ActionProgress; @@ -128,12 +123,14 @@ private static File getTestNBDestDir() { loggers.add(Logger.getLogger(ProjectReloadInternal.class.getName())); loggers.add(Logger.getLogger(Reloader.class.getName())); + loggers.add(Logger.getLogger(MavenProjectCache.class.getName())); loggers.forEach(logger -> { - logger.setLevel(Level.FINER); + logger.setLevel(java.util.logging.Level.FINER); - ConsoleHandler h = new ConsoleHandler(); - h.setLevel(Level.FINER); - if (!Arrays.asList(logger.getHandlers()).stream().anyMatch(x -> x instanceof ConsoleHandler)) { + java.util.logging.ConsoleHandler h = new java.util.logging.ConsoleHandler(); + h.setFormatter(new org.netbeans.core.startup.logging.NbFormatter()); + h.setLevel(java.util.logging.Level.FINER); + if (java.util.stream.Stream.of(logger.getHandlers()).noneMatch(x -> x instanceof java.util.logging.ConsoleHandler)) { logger.addHandler(h); } }); @@ -957,7 +954,7 @@ public void testUnresolvableArtifactAppears() throws Exception { assertEquals(Quality.RESOLVED, ps.getQuality()); oci.getProjectDirectory().getFileObject("pom.xml").delete(); - FileObject newPom = FileUtil.copyFile(testApp.getFileObject("oci/pom_add_artifact.xml"), oci.getProjectDirectory(), "pom"); + FileUtil.copyFile(testApp.getFileObject("oci/pom_add_artifact.xml"), oci.getProjectDirectory(), "pom"); // now the project state should be just LOADED, as a new artifact has apepared: ProjectState ps2 = ProjectReload.withProjectState(oci, ProjectReload.StateRequest.refresh()).get(); diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenSourceLevelImplTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenSourceLevelImplTest.java index ddf04bf34361..0fb9d11c7ba2 100644 --- a/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenSourceLevelImplTest.java +++ b/java/maven/test/unit/src/org/netbeans/modules/maven/queries/MavenSourceLevelImplTest.java @@ -202,13 +202,15 @@ public void testTestSourceLevel() throws Exception { // e.g. org.apache.felix.co 1.0 - - maven-compiler-plugin - 2.3.2 - - 1.4 - - + + + maven-compiler-plugin + 2.3.2 + + 1.4 + + +