Skip to content

Commit 80e6626

Browse files
[MENFORCER-503] Pass context to ProfileActivator - fix NPE in Maven 3.9.7
1 parent 5c7d0bc commit 80e6626

File tree

2 files changed

+40
-8
lines changed

2 files changed

+40
-8
lines changed

enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequireOS.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,12 @@
2626
import org.apache.maven.enforcer.rule.api.EnforcerRuleError;
2727
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
2828
import org.apache.maven.enforcer.rules.utils.OSUtil;
29+
import org.apache.maven.execution.MavenSession;
2930
import org.apache.maven.model.Activation;
3031
import org.apache.maven.model.ActivationOS;
3132
import org.apache.maven.model.Profile;
33+
import org.apache.maven.model.profile.DefaultProfileActivationContext;
34+
import org.apache.maven.model.profile.ProfileActivationContext;
3235
import org.apache.maven.model.profile.activation.ProfileActivator;
3336
import org.codehaus.plexus.util.Os;
3437
import org.codehaus.plexus.util.StringUtils;
@@ -43,6 +46,8 @@
4346
public final class RequireOS extends AbstractStandardEnforcerRule {
4447
private final ProfileActivator activator;
4548

49+
private final ProfileActivationContext profileActivationContext;
50+
4651
/**
4752
* The OS family type desired<br />
4853
* Possible values:
@@ -85,8 +90,20 @@ public final class RequireOS extends AbstractStandardEnforcerRule {
8590
* Instantiates a new RequireOS.
8691
*/
8792
@Inject
88-
RequireOS(@Named("os") ProfileActivator activator) {
93+
RequireOS(@Named("os") ProfileActivator activator, MavenSession session) {
8994
this.activator = Objects.requireNonNull(activator);
95+
this.profileActivationContext = createProfileActivationContext(session);
96+
}
97+
98+
private ProfileActivationContext createProfileActivationContext(MavenSession session) {
99+
DefaultProfileActivationContext context = new DefaultProfileActivationContext();
100+
context.setActiveProfileIds(session.getRequest().getActiveProfiles());
101+
context.setInactiveProfileIds(session.getRequest().getInactiveProfiles());
102+
context.setProjectDirectory(session.getCurrentProject().getBasedir());
103+
context.setProjectProperties(session.getCurrentProject().getProperties());
104+
context.setSystemProperties(System.getProperties());
105+
context.setUserProperties(session.getUserProperties());
106+
return context;
90107
}
91108

92109
@Override
@@ -143,7 +160,8 @@ private void displayOSInfo() {
143160
* @return true if the version is allowed.
144161
*/
145162
public boolean isAllowed() {
146-
return activator.isActive(createProfile(), null, null);
163+
// empty lambda as problems collector
164+
return activator.isActive(createProfile(), profileActivationContext, (req -> {}));
147165
}
148166

149167
/**

enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestRequireOS.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,20 @@
2222

2323
import org.apache.maven.enforcer.rule.api.EnforcerLogger;
2424
import org.apache.maven.enforcer.rule.api.EnforcerRuleError;
25+
import org.apache.maven.execution.MavenExecutionRequest;
26+
import org.apache.maven.execution.MavenSession;
2527
import org.apache.maven.model.profile.activation.OperatingSystemProfileActivator;
2628
import org.apache.maven.plugin.logging.Log;
2729
import org.apache.maven.plugin.logging.SystemStreamLog;
30+
import org.apache.maven.project.MavenProject;
2831
import org.codehaus.plexus.util.Os;
32+
import org.junit.jupiter.api.BeforeEach;
2933
import org.junit.jupiter.api.Test;
30-
import org.mockito.Mockito;
3134

3235
import static org.assertj.core.api.Assertions.assertThat;
3336
import static org.assertj.core.api.Assertions.assertThatCode;
37+
import static org.mockito.Mockito.mock;
38+
import static org.mockito.Mockito.when;
3439

3540
/**
3641
* Exhaustively check the OS mojo.
@@ -39,14 +44,23 @@
3944
*/
4045
class TestRequireOS {
4146

47+
private MavenSession mavenSession;
48+
49+
@BeforeEach
50+
void setup() {
51+
mavenSession = mock(MavenSession.class);
52+
when(mavenSession.getRequest()).thenReturn(mock(MavenExecutionRequest.class));
53+
when(mavenSession.getCurrentProject()).thenReturn(mock(MavenProject.class));
54+
}
55+
4256
/**
4357
* Test os.
4458
*/
4559
@Test
46-
public void testOS() {
60+
void testOS() {
4761
Log log = new SystemStreamLog();
4862

49-
RequireOS rule = new RequireOS(new OperatingSystemProfileActivator());
63+
RequireOS rule = new RequireOS(new OperatingSystemProfileActivator(), mavenSession);
5064

5165
Iterator<String> iter = Os.getValidFamilies().iterator();
5266
String validFamily;
@@ -107,8 +121,8 @@ public void testOS() {
107121

108122
@Test
109123
void testInvalidFamily() {
110-
RequireOS rule = new RequireOS(new OperatingSystemProfileActivator());
111-
rule.setLog(Mockito.mock(EnforcerLogger.class));
124+
RequireOS rule = new RequireOS(new OperatingSystemProfileActivator(), mavenSession);
125+
rule.setLog(mock(EnforcerLogger.class));
112126

113127
rule.setFamily("junk");
114128
assertThatCode(rule::execute)
@@ -118,7 +132,7 @@ void testInvalidFamily() {
118132

119133
@Test
120134
void testId() {
121-
RequireOS rule = new RequireOS(new OperatingSystemProfileActivator());
135+
RequireOS rule = new RequireOS(new OperatingSystemProfileActivator(), mavenSession);
122136
rule.setVersion("1.2");
123137
assertThat(rule.getCacheId()).isNotEmpty();
124138
}

0 commit comments

Comments
 (0)