From d24832588f00d4aa00a7e9b9b722a82f703efa76 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 9 Sep 2022 17:17:49 +0200 Subject: [PATCH 1/5] Clean a bit DefaultProfileActivationContext # Conflicts: # maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java --- .../DefaultProfileActivationContext.java | 77 ++++++++----------- 1 file changed, 30 insertions(+), 47 deletions(-) diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java index bc62f480650a..a27e7c71f4dc 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java @@ -18,7 +18,6 @@ */ package org.apache.maven.model.profile; -import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toMap; import java.io.File; @@ -26,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.stream.Collectors; /** * Describes the environmental context used to determine the activation status of profiles. @@ -58,12 +58,7 @@ public List getActiveProfileIds() { * @return This context, never {@code null}. */ public DefaultProfileActivationContext setActiveProfileIds(List activeProfileIds) { - if (activeProfileIds != null) { - this.activeProfileIds = Collections.unmodifiableList(activeProfileIds); - } else { - this.activeProfileIds = Collections.emptyList(); - } - + this.activeProfileIds = unmodifiable(activeProfileIds); return this; } @@ -79,12 +74,7 @@ public List getInactiveProfileIds() { * @return This context, never {@code null}. */ public DefaultProfileActivationContext setInactiveProfileIds(List inactiveProfileIds) { - if (inactiveProfileIds != null) { - this.inactiveProfileIds = Collections.unmodifiableList(inactiveProfileIds); - } else { - this.inactiveProfileIds = Collections.emptyList(); - } - + this.inactiveProfileIds = unmodifiable(inactiveProfileIds); return this; } @@ -102,13 +92,7 @@ public Map getSystemProperties() { */ @SuppressWarnings("unchecked") public DefaultProfileActivationContext setSystemProperties(Properties systemProperties) { - if (systemProperties != null) { - this.systemProperties = Collections.unmodifiableMap((Map) systemProperties); - } else { - this.systemProperties = Collections.emptyMap(); - } - - return this; + return setSystemProperties(toMap(systemProperties)); } /** @@ -119,12 +103,7 @@ public DefaultProfileActivationContext setSystemProperties(Properties systemProp * @return This context, never {@code null}. */ public DefaultProfileActivationContext setSystemProperties(Map systemProperties) { - if (systemProperties != null) { - this.systemProperties = Collections.unmodifiableMap(systemProperties); - } else { - this.systemProperties = Collections.emptyMap(); - } - + this.systemProperties = unmodifiable(systemProperties); return this; } @@ -143,13 +122,7 @@ public Map getUserProperties() { */ @SuppressWarnings("unchecked") public DefaultProfileActivationContext setUserProperties(Properties userProperties) { - if (userProperties != null) { - this.userProperties = Collections.unmodifiableMap((Map) userProperties); - } else { - this.userProperties = Collections.emptyMap(); - } - - return this; + return setUserProperties(toMap(userProperties)); } /** @@ -161,12 +134,7 @@ public DefaultProfileActivationContext setUserProperties(Properties userProperti * @return This context, never {@code null}. */ public DefaultProfileActivationContext setUserProperties(Map userProperties) { - if (userProperties != null) { - this.userProperties = Collections.unmodifiableMap(userProperties); - } else { - this.userProperties = Collections.emptyMap(); - } - + this.userProperties = unmodifiable(userProperties); return this; } @@ -194,15 +162,30 @@ public Map getProjectProperties() { } public DefaultProfileActivationContext setProjectProperties(Properties projectProperties) { - if (projectProperties != null) { - this.projectProperties = projectProperties.entrySet().stream() - .collect(collectingAndThen( - toMap(k -> String.valueOf(k.getKey()), v -> String.valueOf(v)), - Collections::unmodifiableMap)); - } else { - this.projectProperties = Collections.emptyMap(); - } + return setProjectProperties(toMap(projectProperties)); + } + + public DefaultProfileActivationContext setProjectProperties(Map projectProperties) { + this.projectProperties = unmodifiable(projectProperties); return this; } + + private static List unmodifiable(List list) { + return list != null ? Collections.unmodifiableList(list) : Collections.emptyList(); + } + + private static Map unmodifiable(Map map) { + return map != null ? Collections.unmodifiableMap(map) : Collections.emptyMap(); + } + + private static Map toMap(Properties properties) { + if (properties != null && !properties.isEmpty()) { + return properties.entrySet().stream() + .collect(Collectors.toMap(e -> String.valueOf(e.getKey()), e -> String.valueOf(e.getValue()))); + + } else { + return null; + } + } } From aa94bdc5fbc567ab7df8826f7bec015412d23809 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 15 Sep 2022 00:34:07 +0200 Subject: [PATCH 2/5] Cleanup DefaultProjectBuildingResult # Conflicts: # maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java --- .../project/DefaultProjectBuildingResult.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java index 2fcaf451de8d..199237bf9215 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java @@ -19,7 +19,7 @@ package org.apache.maven.project; import java.io.File; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.apache.maven.model.building.ModelProblem; @@ -30,15 +30,15 @@ */ class DefaultProjectBuildingResult implements ProjectBuildingResult { - private String projectId; + private final String projectId; - private File pomFile; + private final File pomFile; - private MavenProject project; + private final MavenProject project; - private List problems; + private final List problems; - private DependencyResolutionResult dependencyResolutionResult; + private final DependencyResolutionResult dependencyResolutionResult; /** * Creates a new result with the specified contents. @@ -54,7 +54,7 @@ class DefaultProjectBuildingResult implements ProjectBuildingResult { : ""; this.pomFile = (project != null) ? project.getFile() : null; this.project = project; - this.problems = problems; + this.problems = problems != null ? problems : Collections.emptyList(); this.dependencyResolutionResult = dependencyResolutionResult; } @@ -68,7 +68,9 @@ class DefaultProjectBuildingResult implements ProjectBuildingResult { DefaultProjectBuildingResult(String projectId, File pomFile, List problems) { this.projectId = (projectId != null) ? projectId : ""; this.pomFile = pomFile; - this.problems = problems; + this.project = null; + this.problems = problems != null ? problems : Collections.emptyList(); + this.dependencyResolutionResult = null; } public String getProjectId() { @@ -84,10 +86,6 @@ public MavenProject getProject() { } public List getProblems() { - if (problems == null) { - problems = new ArrayList<>(); - } - return problems; } From 423fd39177f406e41c344111e947423cec8a6cb9 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 15 Sep 2022 05:17:11 +0200 Subject: [PATCH 3/5] Cache the injected list to avoid repetitive lookups # Conflicts: # maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java --- .../org/apache/maven/model/profile/DefaultProfileSelector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java index 980ccf2eb940..66a2b2bfe9b9 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java @@ -46,7 +46,7 @@ public class DefaultProfileSelector implements ProfileSelector { @Inject public DefaultProfileSelector(List activators) { - this.activators = activators; + this.activators = new ArrayList<>(activators); } public DefaultProfileSelector addProfileActivator(ProfileActivator profileActivator) { From eefa080475fd746524fba16cf48e9a84a8a8ed6f Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 15 Sep 2022 05:20:57 +0200 Subject: [PATCH 4/5] Lazily compute the MavenBuildTimestamp # Conflicts: # maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java --- .../model/interpolation/BuildTimestampValueSource.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java index 08014f725ffb..77f3b832b7da 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java @@ -23,17 +23,19 @@ import org.codehaus.plexus.interpolation.AbstractValueSource; class BuildTimestampValueSource extends AbstractValueSource { - private final MavenBuildTimestamp mavenBuildTimestamp; + private final Date startTime; + private final Map properties; BuildTimestampValueSource(Date startTime, Map properties) { super(false); - this.mavenBuildTimestamp = new MavenBuildTimestamp(startTime, properties); + this.startTime = startTime; + this.properties = properties; } @Override public Object getValue(String expression) { if ("build.timestamp".equals(expression) || "maven.build.timestamp".equals(expression)) { - return mavenBuildTimestamp.formattedTimestamp(); + return new MavenBuildTimestamp(startTime, properties).formattedTimestamp(); } return null; } From 301ee8447d182fe5fec3b70625c5aa4362c4b56e Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 15 Sep 2022 05:16:41 +0200 Subject: [PATCH 5/5] Use a single loop to select active profiles # Conflicts: # maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java --- .../model/profile/DefaultProfileSelector.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java index 66a2b2bfe9b9..47bbf03733b7 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java @@ -96,19 +96,17 @@ private boolean isActive(Profile profile, ProfileActivationContext context, Mode for (ProfileActivator activator : activators) { if (activator.presentInConfig(profile, context, problems)) { isActive = true; - } - } - for (ProfileActivator activator : activators) { - try { - if (activator.presentInConfig(profile, context, problems)) { - isActive &= activator.isActive(profile, context, problems); + try { + if (!activator.isActive(profile, context, problems)) { + return false; + } + } catch (RuntimeException e) { + problems.add(new ModelProblemCollectorRequest(Severity.ERROR, Version.BASE) + .setMessage("Failed to determine activation for profile " + profile.getId()) + .setLocation(profile.getLocation("")) + .setException(e)); + return false; } - } catch (RuntimeException e) { - problems.add(new ModelProblemCollectorRequest(Severity.ERROR, Version.BASE) - .setMessage("Failed to determine activation for profile " + profile.getId()) - .setLocation(profile.getLocation("")) - .setException(e)); - return false; } } return isActive;