Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,21 @@ Model importManagement(
List<? extends DependencyManagement> sources,
ModelBuilderRequest request,
ModelProblemCollector problems);

/**
* Builder-accepting variant of {@link #importManagement}.
*
* @since 4.0.0
*/
default void importManagement(
Model.Builder builder,
List<? extends DependencyManagement> sources,
ModelBuilderRequest request,
ModelProblemCollector problems) {
Model built = builder.build();
Model result = importManagement(built, sources, request, problems);
if (result != built) {
builder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,24 @@ public interface DependencyManagementInjector {
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
*/
Model injectManagement(Model model, ModelBuilderRequest request, ModelProblemCollector problems);

/**
* Builder-accepting variant that operates on a {@link Model.Builder} directly,
* avoiding an intermediate {@code Model.build()} between pipeline stages.
* <p>
* The default implementation bridges to {@link #injectManagement(Model, ModelBuilderRequest, ModelProblemCollector)}
* by building the model, processing it, and resetting the builder to the result.
*
* @param builder The model builder to modify in place, must not be {@code null}.
* @param request The model building request, must not be {@code null}.
* @param problems The container used to collect problems, must not be {@code null}.
* @since 4.0.0
*/
default void injectManagement(Model.Builder builder, ModelBuilderRequest request, ModelProblemCollector problems) {
Model built = builder.build();
Model result = injectManagement(built, request, problems);
if (result != built) {
builder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,18 @@ public interface InheritanceAssembler {
*/
Model assembleModelInheritance(
Model child, Model parent, ModelBuilderRequest request, ModelProblemCollector problems);

/**
* Builder-accepting variant that merges parent values into the child builder directly.
*
* @since 4.0.0
*/
default void assembleModelInheritance(
Model.Builder childBuilder, Model parent, ModelBuilderRequest request, ModelProblemCollector problems) {
Model built = childBuilder.build();
Model result = assembleModelInheritance(built, parent, request, problems);
if (result != built) {
childBuilder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,21 @@ Model interpolateModel(
@Nullable Path projectDir,
@Nonnull ModelBuilderRequest request,
@Nonnull ModelProblemCollector problems);

/**
* Builder-accepting variant of {@link #interpolateModel}.
*
* @since 4.0.0
*/
default void interpolateModel(
@Nonnull Model.Builder builder,
@Nullable Path projectDir,
@Nonnull ModelBuilderRequest request,
@Nonnull ModelProblemCollector problems) {
Model built = builder.build();
Model result = interpolateModel(built, projectDir, request, problems);
if (result != built) {
builder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,31 @@ public interface ModelNormalizer {
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
*/
Model injectDefaultValues(Model model, ModelBuilderRequest request, ModelProblemCollector problems);

/**
* Builder-accepting variant of {@link #mergeDuplicates}.
*
* @since 4.0.0
*/
default void mergeDuplicates(Model.Builder builder, ModelBuilderRequest request, ModelProblemCollector problems) {
Model built = builder.build();
Model result = mergeDuplicates(built, request, problems);
if (result != built) {
builder.reset(result);
}
}

/**
* Builder-accepting variant of {@link #injectDefaultValues}.
*
* @since 4.0.0
*/
default void injectDefaultValues(
Model.Builder builder, ModelBuilderRequest request, ModelProblemCollector problems) {
Model built = builder.build();
Model result = injectDefaultValues(built, request, problems);
if (result != built) {
builder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,17 @@ public interface ModelPathTranslator {
* @since 4.0.0
*/
Model alignToBaseDirectory(Model model, Path basedir, ModelBuilderRequest request);

/**
* Builder-accepting variant of {@link #alignToBaseDirectory}.
*
* @since 4.0.0
*/
default void alignToBaseDirectory(Model.Builder builder, Path basedir, ModelBuilderRequest request) {
Model built = builder.build();
Model result = alignToBaseDirectory(built, basedir, request);
if (result != built) {
builder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,17 @@ public interface ModelUrlNormalizer {
* @param request The model building request that holds further settings, must not be {@code null}.
*/
Model normalize(Model model, ModelBuilderRequest request);

/**
* Builder-accepting variant of {@link #normalize}.
*
* @since 4.0.0
*/
default void normalize(Model.Builder builder, ModelBuilderRequest request) {
Model built = builder.build();
Model result = normalize(built, request);
if (result != built) {
builder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,18 @@ public interface PluginConfigurationExpander {
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
*/
Model expandPluginConfiguration(Model model, ModelBuilderRequest request, ModelProblemCollector problems);

/**
* Builder-accepting variant of {@link #expandPluginConfiguration}.
*
* @since 4.0.0
*/
default void expandPluginConfiguration(
Model.Builder builder, ModelBuilderRequest request, ModelProblemCollector problems) {
Model built = builder.build();
Model result = expandPluginConfiguration(built, request, problems);
if (result != built) {
builder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,17 @@ public interface PluginManagementInjector {
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
*/
Model injectManagement(Model model, ModelBuilderRequest request, ModelProblemCollector problems);

/**
* Builder-accepting variant of {@link #injectManagement}.
*
* @since 4.0.0
*/
default void injectManagement(Model.Builder builder, ModelBuilderRequest request, ModelProblemCollector problems) {
Model built = builder.build();
Model result = injectManagement(built, request, problems);
if (result != built) {
builder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,21 @@ default Model injectProfile(
*/
Model injectProfiles(
Model model, List<Profile> profiles, ModelBuilderRequest request, ModelProblemCollector problems);

/**
* Builder-accepting variant that injects profile values into the model builder directly.
*
* @since 4.0.0
*/
default void injectProfiles(
Model.Builder builder,
List<Profile> profiles,
ModelBuilderRequest request,
ModelProblemCollector problems) {
Model built = builder.build();
Model result = injectProfiles(built, profiles, request, problems);
if (result != built) {
builder.reset(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ class FileToRawModelMergerTest {
void testOverriddenMergeMethods() {
List<String> methodNames = Stream.of(MavenMerger.class.getDeclaredMethods())
.filter(m -> m.getName().startsWith("merge"))
// Exclude *ToBuilder variants and void methods whose first parameter
// is a Builder — only the object-returning merge methods need overriding
.filter(m -> !m.getName().endsWith("ToBuilder"))
.filter(m -> !m.getParameterTypes()[0].getSimpleName().equals("Builder"))
.filter(m -> {
String baseName = m.getName().substring(5 /* merge */);
String entity = baseName.substring(baseName.indexOf('_') + 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,26 +52,35 @@ public Model normalize(Model model, ModelBuilderRequest request) {
}

Model.Builder builder = Model.newBuilder(model);
builder.url(normalize(model.getUrl()));
normalizeBuilder(builder);
return builder.build();
}

@Override
public void normalize(Model.Builder builder, ModelBuilderRequest request) {
normalizeBuilder(builder);
}

private void normalizeBuilder(Model.Builder builder) {
builder.url(normalize(builder.getUrl()));

Scm scm = model.getScm();
Scm scm = builder.getScm();
if (scm != null) {
builder.scm(Scm.newBuilder(scm)
builder.getModifiableScm()
.url(normalize(scm.getUrl()))
.connection(normalize(scm.getConnection()))
.developerConnection(normalize(scm.getDeveloperConnection()))
.build());
.developerConnection(normalize(scm.getDeveloperConnection()));
}

DistributionManagement dist = model.getDistributionManagement();
DistributionManagement dist = builder.getDistributionManagement();
if (dist != null) {
Site site = dist.getSite();
if (site != null) {
builder.distributionManagement(dist.withSite(site.withUrl(normalize(site.getUrl()))));
builder.getModifiableDistributionManagement()
.getModifiableSite()
.url(normalize(site.getUrl()));
}
}

return builder.build();
}

private String normalize(String url) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,26 @@
@Singleton
public class DefaultPluginConfigurationExpander implements PluginConfigurationExpander {

@Override
public void expandPluginConfiguration(
Model.Builder builder, ModelBuilderRequest request, ModelProblemCollector problems) {

// Mutate the Build sub-builder in place to avoid intermediate immutable allocations
Build build = builder.getBuild();
if (build != null) {
Build.Builder bb = builder.getModifiableBuild();
bb.plugins(expandPlugin(build.getPlugins()));
PluginManagement pluginManagement = build.getPluginManagement();
if (pluginManagement != null) {
bb.getModifiablePluginManagement().plugins(expandPlugin(pluginManagement.getPlugins()));
}
}
Reporting reporting = builder.getReporting();
if (reporting != null) {
expandReport(reporting.getPlugins());
}
}

@Override
public Model expandPluginConfiguration(Model model, ModelBuilderRequest request, ModelProblemCollector problems) {
Build build = model.getBuild();
Expand Down
Loading
Loading