From 0757857b74d6c3e790814beb37e08f552f7de29a Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 26 Apr 2024 17:02:11 +0100 Subject: [PATCH] Stop calling getProject() when ExtractVersionConstraints is executing Closes gh-40550 --- .../ExtractVersionConstraints.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/constraints/ExtractVersionConstraints.java b/buildSrc/src/main/java/org/springframework/boot/build/constraints/ExtractVersionConstraints.java index 4d14b2977d4..4f1b6bcee3f 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/constraints/ExtractVersionConstraints.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/constraints/ExtractVersionConstraints.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,17 +26,20 @@ import java.util.TreeMap; import java.util.TreeSet; import org.gradle.api.DefaultTask; +import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.ComponentMetadataDetails; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.DependencyConstraint; import org.gradle.api.artifacts.DependencyConstraintMetadata; +import org.gradle.api.artifacts.DependencyConstraintSet; import org.gradle.api.artifacts.dsl.DependencyHandler; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.TaskAction; import org.gradle.platform.base.Platform; import org.springframework.boot.build.bom.BomExtension; +import org.springframework.boot.build.bom.BomPlugin; import org.springframework.boot.build.bom.Library; /** @@ -55,7 +58,9 @@ public class ExtractVersionConstraints extends DefaultTask { private final Set versionProperties = new TreeSet<>(); - private final List projectPaths = new ArrayList<>(); + private final List dependencyConstraintSets = new ArrayList<>(); + + private final List boms = new ArrayList<>(); public ExtractVersionConstraints() { DependencyHandler dependencies = getProject().getDependencies(); @@ -68,7 +73,12 @@ public class ExtractVersionConstraints extends DefaultTask { .add(getProject().getDependencies() .enforcedPlatform( getProject().getDependencies().project(Collections.singletonMap("path", projectPath)))); - this.projectPaths.add(projectPath); + Project project = getProject().project(projectPath); + project.getPlugins().withType(BomPlugin.class).all((plugin) -> { + this.boms.add(project.getExtensions().getByType(BomExtension.class)); + this.dependencyConstraintSets + .add(project.getConfigurations().getByName("apiElements").getAllDependencyConstraints()); + }); } @Internal @@ -89,12 +99,9 @@ public class ExtractVersionConstraints extends DefaultTask { @TaskAction void extractVersionConstraints() { this.configuration.resolve(); - for (String projectPath : this.projectPaths) { - extractVersionProperties(projectPath); - for (DependencyConstraint constraint : getProject().project(projectPath) - .getConfigurations() - .getByName("apiElements") - .getAllDependencyConstraints()) { + this.boms.forEach(this::extractVersionProperties); + for (DependencyConstraintSet constraints : this.dependencyConstraintSets) { + for (DependencyConstraint constraint : constraints) { this.versionConstraints.put(constraint.getGroup() + ":" + constraint.getName(), constraint.getVersionConstraint().toString()); this.constrainedVersions.add(new ConstrainedVersion(constraint.getGroup(), constraint.getName(), @@ -103,9 +110,7 @@ public class ExtractVersionConstraints extends DefaultTask { } } - private void extractVersionProperties(String projectPath) { - Object bom = getProject().project(projectPath).getExtensions().getByName("bom"); - BomExtension bomExtension = (BomExtension) bom; + private void extractVersionProperties(BomExtension bomExtension) { for (Library lib : bomExtension.getLibraries()) { String versionProperty = lib.getVersionProperty(); if (versionProperty != null) {