Skip to content

Commit 8685029

Browse files
committed
Use a lazy lookup of the session instead of an inner session scoped bean
1 parent b168dbe commit 8685029

File tree

6 files changed

+32
-149
lines changed

6 files changed

+32
-149
lines changed

maven-api-impl/src/main/java/org/apache/maven/internal/impl/CIFriendlyVersionModelTransformer.java

Lines changed: 25 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@
1818
*/
1919
package org.apache.maven.internal.impl;
2020

21+
import java.util.Map;
2122
import java.util.regex.Matcher;
2223
import java.util.regex.Pattern;
2324

2425
import org.apache.maven.api.Session;
2526
import org.apache.maven.api.di.Inject;
2627
import org.apache.maven.api.di.Named;
27-
import org.apache.maven.api.di.SessionScoped;
2828
import org.apache.maven.api.di.Singleton;
29-
import org.apache.maven.api.di.Typed;
3029
import org.apache.maven.api.model.Model;
3130
import org.apache.maven.api.model.Parent;
3231
import org.apache.maven.api.services.Lookup;
@@ -37,6 +36,8 @@
3736
@Singleton
3837
public class CIFriendlyVersionModelTransformer implements ModelTransformer {
3938

39+
private static final Pattern REGEX = Pattern.compile("\\$\\{([^}]+)}");
40+
4041
private final Lookup lookup;
4142

4243
@Inject
@@ -46,60 +47,37 @@ public CIFriendlyVersionModelTransformer(Lookup lookup) {
4647

4748
@Override
4849
public Model transformFileModel(Model model) throws ModelTransformerException {
49-
return lookup.lookup(CIFriendlyVersionInner.class).transformFileModel(model);
50+
return model.with()
51+
.version(replaceCiFriendlyVersion(model.getVersion()))
52+
.parent(replaceParent(model.getParent()))
53+
.build();
5054
}
5155

52-
public interface CIFriendlyVersionInner {
53-
Model transformFileModel(Model model) throws ModelTransformerException;
56+
private Parent replaceParent(Parent parent) {
57+
return parent != null ? parent.withVersion(replaceCiFriendlyVersion(parent.getVersion())) : null;
5458
}
5559

56-
@SessionScoped
57-
@Named
58-
@Typed
59-
public static class CIFriendlyVersionInnerImpl implements CIFriendlyVersionInner {
60-
61-
private static final Pattern REGEX = Pattern.compile("\\$\\{([^}]+)}");
62-
63-
private final Session session;
64-
65-
@Inject
66-
public CIFriendlyVersionInnerImpl(Session session) {
67-
this.session = session;
68-
}
69-
70-
@Override
71-
public Model transformFileModel(Model model) throws ModelTransformerException {
72-
return model.with()
73-
.version(replaceCiFriendlyVersion(model.getVersion()))
74-
.parent(replaceParent(model.getParent()))
75-
.build();
76-
}
77-
78-
private Parent replaceParent(Parent parent) {
79-
return parent != null ? parent.withVersion(replaceCiFriendlyVersion(parent.getVersion())) : null;
80-
}
81-
82-
protected String replaceCiFriendlyVersion(String version) {
83-
// TODO: we're using a simple regex here, but we should probably use
84-
// a proper interpolation service to do the replacements
85-
// once one is available in maven-api-impl
86-
// https://issues.apache.org/jira/browse/MNG-8262
87-
if (version != null && version.contains("${")) {
60+
protected String replaceCiFriendlyVersion(String version) {
61+
// TODO: we're using a simple regex here, but we should probably use
62+
// a proper interpolation service to do the replacements
63+
// once one is available in maven-api-impl
64+
// https://issues.apache.org/jira/browse/MNG-8262
65+
if (version != null) {
66+
Matcher matcher = REGEX.matcher(version);
67+
if (matcher.find()) {
68+
Map<String, String> properties = lookup.lookup(Session.class).getUserProperties();
8869
StringBuilder result = new StringBuilder();
89-
Matcher matcher = REGEX.matcher(version);
90-
while (matcher.find()) {
91-
String key = matcher.group(1); // extract the key inside ${}
92-
String replacement = session.getUserProperties()
93-
.getOrDefault(
94-
key,
95-
matcher.group(
96-
0)); // get replacement from the map, or use the original ${xy} if not found
70+
do {
71+
// extract the key inside ${}
72+
String key = matcher.group(1);
73+
// get replacement from the map, or use the original ${xy} if not found
74+
String replacement = properties.getOrDefault(key, "\\" + matcher.group(0));
9775
matcher.appendReplacement(result, replacement);
98-
}
76+
} while (matcher.find());
9977
matcher.appendTail(result); // Append the remaining part of the string
10078
return result.toString();
10179
}
102-
return version;
10380
}
81+
return version;
10482
}
10583
}

maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/TestApiStandalone.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,10 @@
2525
import org.apache.maven.api.DownloadedArtifact;
2626
import org.apache.maven.api.Node;
2727
import org.apache.maven.api.Session;
28-
import org.apache.maven.api.di.Named;
29-
import org.apache.maven.api.di.Priority;
30-
import org.apache.maven.api.di.Typed;
31-
import org.apache.maven.api.model.Model;
3228
import org.apache.maven.api.services.ModelBuilder;
3329
import org.apache.maven.api.services.ModelBuilderRequest;
3430
import org.apache.maven.api.services.ModelBuilderResult;
3531
import org.apache.maven.api.services.ModelSource;
36-
import org.apache.maven.api.services.ModelTransformerException;
37-
import org.apache.maven.internal.impl.CIFriendlyVersionModelTransformer;
3832
import org.junit.jupiter.api.Test;
3933

4034
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -66,18 +60,4 @@ void testStandalone() {
6660
assertNotNull(node);
6761
assertEquals(8, node.getChildren().size());
6862
}
69-
70-
/**
71-
* Disables the CIFriendlyVersionModelTransformer as it requires a session scope
72-
* which is not available in this test.
73-
*/
74-
@Named
75-
@Typed
76-
@Priority(100)
77-
public static class CIFriendlyVersionInnerImpl implements CIFriendlyVersionModelTransformer.CIFriendlyVersionInner {
78-
@Override
79-
public Model transformFileModel(Model model) throws ModelTransformerException {
80-
return model;
81-
}
82-
}
8363
}

maven-compat/src/test/java/org/apache/maven/CIFriendlyVersionInnerImpl.java

Lines changed: 0 additions & 41 deletions
This file was deleted.

maven-core/src/test/java/org/apache/maven/CIFriendlyVersionInnerImpl.java

Lines changed: 0 additions & 41 deletions
This file was deleted.

maven-core/src/test/java/org/apache/maven/internal/transformation/AbstractRepositoryTestCase.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.List;
2525

2626
import org.apache.maven.SimpleLookup;
27+
import org.apache.maven.api.Session;
2728
import org.apache.maven.execution.DefaultMavenExecutionRequest;
2829
import org.apache.maven.execution.DefaultMavenExecutionResult;
2930
import org.apache.maven.execution.MavenSession;
@@ -60,6 +61,7 @@ public abstract class AbstractRepositoryTestCase {
6061
@BeforeEach
6162
public void setUp() throws Exception {
6263
session = newMavenRepositorySystemSession(system);
64+
container.addComponent(InternalSession.from(session), Session.class, null);
6365
}
6466

6567
protected PlexusContainer getContainer() {

maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@
2525
import java.nio.file.StandardCopyOption;
2626
import java.util.List;
2727

28+
import org.apache.maven.api.Session;
2829
import org.apache.maven.artifact.Artifact;
2930
import org.apache.maven.artifact.repository.ArtifactRepository;
3031
import org.junit.jupiter.api.BeforeEach;
3132
import org.junit.jupiter.api.Disabled;
3233
import org.junit.jupiter.api.Test;
3334
import org.junit.jupiter.api.io.TempDir;
35+
import org.mockito.Mockito;
3436

3537
import static org.apache.maven.project.ProjectBuildingResultWithProblemMessageMatcher.projectBuildingResultWithProblemMessage;
3638
import static org.codehaus.plexus.testing.PlexusExtension.getTestFile;
@@ -58,6 +60,9 @@ class DefaultMavenProjectBuilderTest extends AbstractMavenProjectTestCase {
5860
@BeforeEach
5961
public void setUp() throws Exception {
6062
projectBuilder = getContainer().lookup(ProjectBuilder.class);
63+
64+
Session session = Mockito.mock(Session.class);
65+
getContainer().addComponent(session, Session.class, null);
6166
}
6267

6368
protected MavenProject getProject(Artifact pom, boolean allowStub) throws Exception {

0 commit comments

Comments
 (0)