Skip to content

Commit 69b34f4

Browse files
authored
[MNG-8322] Use the new ToolchainsBuilder and SettingsBuilder (#1778)
1 parent 95e59f2 commit 69b34f4

File tree

13 files changed

+1668
-112
lines changed

13 files changed

+1668
-112
lines changed

api/maven-api-core/src/main/java/org/apache/maven/api/services/Interpolator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.util.Collection;
2222
import java.util.HashMap;
23+
import java.util.List;
2324
import java.util.Map;
2425
import java.util.Optional;
2526
import java.util.function.BiFunction;
@@ -138,6 +139,11 @@ static Function<String, String> chain(Collection<? extends Function<String, Stri
138139
};
139140
}
140141

142+
@SafeVarargs
143+
static Function<String, String> chain(Function<String, String>... functions) {
144+
return chain(List.of(functions));
145+
}
146+
141147
/**
142148
* Memoizes a given function that takes a String input and produces a String output.
143149
* This method creates a new function that caches the results of the original function,

api/maven-api-core/src/main/java/org/apache/maven/api/services/SettingsBuilderRequest.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.nio.file.Files;
2222
import java.nio.file.Path;
2323
import java.util.Optional;
24+
import java.util.function.Function;
2425

2526
import org.apache.maven.api.Session;
2627
import org.apache.maven.api.annotations.Experimental;
@@ -65,6 +66,14 @@ public interface SettingsBuilderRequest {
6566
@Nonnull
6667
Optional<Source> getUserSettingsSource();
6768

69+
/**
70+
* The optional interpolation source used for interpolation.
71+
*
72+
* @return the interpolation source for interpolation
73+
*/
74+
@Nonnull
75+
Optional<Function<String, String>> getInterpolationSource();
76+
6877
@Nonnull
6978
static SettingsBuilderRequest build(
7079
@Nonnull Session session, @Nonnull Source installationSettingsSource, @Nonnull Source userSettingsSource) {
@@ -125,6 +134,7 @@ class SettingsBuilderRequestBuilder {
125134
Source installationSettingsSource;
126135
Source projectSettingsSource;
127136
Source userSettingsSource;
137+
Function<String, String> interpolationSource;
128138

129139
public SettingsBuilderRequestBuilder session(Session session) {
130140
this.session = session;
@@ -146,26 +156,38 @@ public SettingsBuilderRequestBuilder userSettingsSource(Source userSettingsSourc
146156
return this;
147157
}
148158

159+
public SettingsBuilderRequestBuilder interpolationSource(Function<String, String> interpolationSource) {
160+
this.interpolationSource = interpolationSource;
161+
return this;
162+
}
163+
149164
public SettingsBuilderRequest build() {
150165
return new DefaultSettingsBuilderRequest(
151-
session, installationSettingsSource, projectSettingsSource, userSettingsSource);
166+
session,
167+
installationSettingsSource,
168+
projectSettingsSource,
169+
userSettingsSource,
170+
interpolationSource);
152171
}
153172

154173
private static class DefaultSettingsBuilderRequest extends BaseRequest implements SettingsBuilderRequest {
155174
private final Source installationSettingsSource;
156175
private final Source projectSettingsSource;
157176
private final Source userSettingsSource;
177+
private final Function<String, String> interpolationSource;
158178

159179
@SuppressWarnings("checkstyle:ParameterNumber")
160180
DefaultSettingsBuilderRequest(
161181
@Nonnull Session session,
162182
@Nullable Source installationSettingsSource,
163183
@Nullable Source projectSettingsSource,
164-
@Nullable Source userSettingsSource) {
184+
@Nullable Source userSettingsSource,
185+
@Nullable Function<String, String> interpolationSource) {
165186
super(session);
166187
this.installationSettingsSource = installationSettingsSource;
167188
this.projectSettingsSource = projectSettingsSource;
168189
this.userSettingsSource = userSettingsSource;
190+
this.interpolationSource = interpolationSource;
169191
}
170192

171193
@Nonnull
@@ -185,6 +207,12 @@ public Optional<Source> getProjectSettingsSource() {
185207
public Optional<Source> getUserSettingsSource() {
186208
return Optional.ofNullable(userSettingsSource);
187209
}
210+
211+
@Nonnull
212+
@Override
213+
public Optional<Function<String, String>> getInterpolationSource() {
214+
return Optional.ofNullable(interpolationSource);
215+
}
188216
}
189217
}
190218
}

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,14 @@ private Settings readSettings(
225225
}
226226

227227
private Settings interpolate(Settings settings, SettingsBuilderRequest request, List<BuilderProblem> problems) {
228-
Map<String, String> userProperties = request.getSession().getUserProperties();
229-
Map<String, String> systemProperties = request.getSession().getSystemProperties();
230-
Function<String, String> src = Interpolator.chain(List.of(userProperties::get, systemProperties::get));
228+
Function<String, String> src;
229+
if (request.getInterpolationSource().isPresent()) {
230+
src = request.getInterpolationSource().get();
231+
} else {
232+
Map<String, String> userProperties = request.getSession().getUserProperties();
233+
Map<String, String> systemProperties = request.getSession().getSystemProperties();
234+
src = Interpolator.chain(userProperties::get, systemProperties::get);
235+
}
231236
return new SettingsTransformer(value -> value != null ? interpolator.interpolate(value, src) : null)
232237
.visit(settings);
233238
}

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

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,16 @@ public class DefaultToolchainsBuilder implements ToolchainsBuilder {
5656

5757
private final Interpolator interpolator;
5858

59+
private final ToolchainsXmlFactory toolchainsXmlFactory;
60+
5961
public DefaultToolchainsBuilder() {
60-
this(new DefaultInterpolator());
62+
this(new DefaultInterpolator(), new DefaultToolchainsXmlFactory());
6163
}
6264

6365
@Inject
64-
public DefaultToolchainsBuilder(Interpolator interpolator) {
66+
public DefaultToolchainsBuilder(Interpolator interpolator, ToolchainsXmlFactory toolchainsXmlFactory) {
6567
this.interpolator = interpolator;
68+
this.toolchainsXmlFactory = toolchainsXmlFactory;
6669
}
6770

6871
@Override
@@ -110,25 +113,21 @@ private PersistedToolchains readToolchains(
110113
if (is == null) {
111114
return PersistedToolchains.newInstance();
112115
}
113-
toolchains = request.getSession()
114-
.getService(ToolchainsXmlFactory.class)
115-
.read(XmlReaderRequest.builder()
116-
.inputStream(is)
117-
.location(toolchainsSource.getLocation())
118-
.strict(true)
119-
.build());
116+
toolchains = toolchainsXmlFactory.read(XmlReaderRequest.builder()
117+
.inputStream(is)
118+
.location(toolchainsSource.getLocation())
119+
.strict(true)
120+
.build());
120121
} catch (XmlReaderException e) {
121122
InputStream is = toolchainsSource.openStream();
122123
if (is == null) {
123124
return PersistedToolchains.newInstance();
124125
}
125-
toolchains = request.getSession()
126-
.getService(ToolchainsXmlFactory.class)
127-
.read(XmlReaderRequest.builder()
128-
.inputStream(is)
129-
.location(toolchainsSource.getLocation())
130-
.strict(false)
131-
.build());
126+
toolchains = toolchainsXmlFactory.read(XmlReaderRequest.builder()
127+
.inputStream(is)
128+
.location(toolchainsSource.getLocation())
129+
.strict(false)
130+
.build());
132131
Location loc = e.getCause() instanceof XMLStreamException xe ? xe.getLocation() : null;
133132
problems.add(new DefaultBuilderProblem(
134133
toolchainsSource.getLocation(),
@@ -168,7 +167,7 @@ private PersistedToolchains interpolate(
168167
PersistedToolchains toolchains, ToolchainsBuilderRequest request, List<BuilderProblem> problems) {
169168
Map<String, String> userProperties = request.getSession().getUserProperties();
170169
Map<String, String> systemProperties = request.getSession().getSystemProperties();
171-
Function<String, String> src = Interpolator.chain(List.of(userProperties::get, systemProperties::get));
170+
Function<String, String> src = Interpolator.chain(userProperties::get, systemProperties::get);
172171
return new MavenToolchainsTransformer(value -> value != null ? interpolator.interpolate(value, src) : null)
173172
.visit(toolchains);
174173
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1741,7 +1741,7 @@ class ProfileInterpolator extends MavenTransformer implements UnaryOperator<Prof
17411741
try {
17421742
Map<String, String> map1 = context.getUserProperties();
17431743
Map<String, String> map2 = context.getSystemProperties();
1744-
return interpolator.interpolate(s, Interpolator.chain(List.of(map1::get, map2::get)));
1744+
return interpolator.interpolate(s, Interpolator.chain(map1::get, map2::get));
17451745
} catch (InterpolatorException e) {
17461746
problems.add(Severity.ERROR, Version.BASE, e.getMessage(), e);
17471747
}
@@ -1873,7 +1873,7 @@ private Model interpolateModel(Model model, ModelBuilderRequest request, ModelPr
18731873
Map<String, String> map1 = request.getSession().getUserProperties();
18741874
Map<String, String> map2 = model.getProperties();
18751875
Map<String, String> map3 = request.getSession().getSystemProperties();
1876-
Function<String, String> cb = Interpolator.chain(List.of(map1::get, map2::get, map3::get));
1876+
Function<String, String> cb = Interpolator.chain(map1::get, map2::get, map3::get);
18771877
try {
18781878
String interpolated =
18791879
interpolator.interpolate(interpolatedModel.getParent().getVersion(), cb);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ static Session newSession(RepositorySystem system, Lookup lookup) {
352352

353353
// local repository
354354
String localRepository = settings.getLocalRepository() != null
355+
&& !settings.getLocalRepository().isEmpty()
355356
? settings.getLocalRepository()
356357
: mavenUserHome.resolve("repository").toString();
357358
LocalRepositoryManager llm = system.newLocalRepositoryManager(rsession, new LocalRepository(localRepository));

0 commit comments

Comments
 (0)