@@ -25,8 +25,9 @@ import org.gradle.api.artifacts.type.ArtifactTypeDefinition
2525import org.gradle.api.attributes.Attribute
2626import org.gradle.api.plugins.JavaPlugin
2727import org.gradle.api.plugins.JavaPluginExtension
28+ import org.gradle.api.provider.ListProperty
29+ import org.gradle.api.provider.Property
2830import org.gradle.api.tasks.SourceSet
29- import java.util.concurrent.atomic.AtomicBoolean
3031
3132public open class JakartaEeMigrationExtension (
3233 private val project : Project ,
@@ -84,21 +85,22 @@ public open class JakartaEeMigrationExtension(
8485 )
8586 }
8687
87- private val configuredCapabilities = AtomicBoolean ()
88- private val registeredTransform = AtomicBoolean ()
89- private val excludeSpecificationsTransform = AtomicBoolean ()
90- private val transformInMemory = AtomicBoolean ()
91- private val preventTransformOfProductionConfigurations = AtomicBoolean ()
92- private val included = mutableListOf<ArtifactCoordinate >()
93- private val excluded = mutableListOf<ArtifactCoordinate >()
88+ private val configuredCapabilities: Property <Boolean > = project.objects.property(Boolean ::class .java).convention(false )
89+ private val registeredTransform: Property <Boolean > = project.objects.property(Boolean ::class .java).convention(false )
90+ private val excludeSpecificationsTransform: Property <Boolean > = project.objects.property(Boolean ::class .java).convention(false )
91+ private val transformInMemory: Property <Boolean > = project.objects.property(Boolean ::class .java).convention(false )
92+ private val preventTransformOfProductionConfigurations: Property <Boolean > = project.objects.property(Boolean ::class .java).convention(false )
93+ private val included: ListProperty <ArtifactCoordinate > = project.objects.listProperty(ArtifactCoordinate ::class .java).empty()
94+ private val excluded: ListProperty <ArtifactCoordinate > = project.objects.listProperty(ArtifactCoordinate ::class .java).convention(
95+ ARTIFACTS_WITH_INTENTIONAL_JAVAX .map {
96+ val split = it.split(" :" )
97+ ArtifactCoordinate (split[0 ], split[1 ])
98+ }
99+ )
94100
95101 private val configurations = project.configurations
96102 private val dependencies = project.dependencies
97103
98- init {
99- ARTIFACTS_WITH_INTENTIONAL_JAVAX .forEach(::excludeTransform)
100- }
101-
102104 /* *
103105 * Enable automatic migration.
104106 */
@@ -109,18 +111,22 @@ public open class JakartaEeMigrationExtension(
109111 private fun applyToConfigurations (action : (Configuration ) -> Unit ) {
110112 val javaExtension = project.extensions.findByType(JavaPluginExtension ::class .java)
111113 check(javaExtension != null ) { " The Java plugin extension is not present on this project" }
112- javaExtension.sourceSets.configureEach { sourceSet ->
113- val configurationNames = CLASSPATH_NAME_ACCESSORS .map { it(sourceSet) }
114- project.configurations.configureEach { configuration ->
115- if (configurationNames.contains(configuration.name)) {
116- action(configuration)
117- }
118- }
114+
115+ // Build the set of applicable configuration names lazily
116+ val applicableConfigurationNames = project.provider {
117+ val sourceSetConfigs = javaExtension.sourceSets.flatMap { sourceSet ->
118+ CLASSPATH_NAME_ACCESSORS .map { accessor -> accessor(sourceSet) }
119+ }.toSet()
120+
121+ sourceSetConfigs + SPRING_BOOT_CONFIGURATION_NAMES
119122 }
120- project.configurations.configureEach {configuration ->
121- if (SPRING_BOOT_CONFIGURATION_NAMES .contains(configuration.name)) {
122- action(configuration)
123- } else if (INCLUDED_SUFFIXES .any { configuration.name.endsWith(it) }) {
123+
124+ project.configurations.configureEach { configuration ->
125+ // Check if this configuration should have the action applied
126+ val shouldApply = applicableConfigurationNames.get().contains(configuration.name) ||
127+ INCLUDED_SUFFIXES .any { configuration.name.endsWith(it) }
128+
129+ if (shouldApply) {
124130 action(configuration)
125131 }
126132 }
@@ -132,7 +138,9 @@ public open class JakartaEeMigrationExtension(
132138 * @param configurationName the name of the configuration to be migrated
133139 */
134140 public fun migrate (configurationName : String ) {
135- migrate(configurations.getByName(configurationName))
141+ configurations.named(configurationName).configure { configuration ->
142+ migrate(configuration)
143+ }
136144 }
137145
138146 /* *
@@ -157,7 +165,8 @@ public open class JakartaEeMigrationExtension(
157165 * Configure capabilities for the project.
158166 */
159167 public fun configureCapabilities () {
160- if (configuredCapabilities.compareAndSet(false , true )) {
168+ if (! configuredCapabilities.get()) {
169+ configuredCapabilities.set(true )
161170 IMPLEMENTATIONS .forEach { specification ->
162171 specification.configureCapabilities(dependencies)
163172 }
@@ -170,7 +179,9 @@ public open class JakartaEeMigrationExtension(
170179 * @param configurationName the configuration to configure
171180 */
172181 public fun resolveCapabilityConflicts (configurationName : String ) {
173- resolveCapabilityConflicts(configurations.getByName(configurationName))
182+ configurations.named(configurationName).configure { configuration ->
183+ resolveCapabilityConflicts(configuration)
184+ }
174185 }
175186
176187 /* *
@@ -198,7 +209,9 @@ public open class JakartaEeMigrationExtension(
198209 * @param configurationName the configuration to configure
199210 */
200211 public fun substitute (configurationName : String ) {
201- substitute(configurations.getByName(configurationName))
212+ configurations.named(configurationName).configure { configuration ->
213+ substitute(configuration)
214+ }
202215 }
203216
204217 /* *
@@ -225,7 +238,9 @@ public open class JakartaEeMigrationExtension(
225238 * @param configurationName the name of the configuration to transform
226239 */
227240 public fun transform (configurationName : String ) {
228- transform(configurations.getByName(configurationName))
241+ configurations.named(configurationName).configure { configuration ->
242+ transform(configuration)
243+ }
229244 }
230245
231246 /* *
@@ -234,7 +249,8 @@ public open class JakartaEeMigrationExtension(
234249 * @param configuration the configuration to transform
235250 */
236251 public fun transform (configuration : Configuration ) {
237- if (registeredTransform.compareAndSet(false , true )) {
252+ if (! registeredTransform.get()) {
253+ registeredTransform.set(true )
238254 registerTransform()
239255 }
240256 if (preventTransformOfProductionConfigurations.get() && PRODUCTION_CONFIGURATION_NAMES .contains(configuration.name)) {
@@ -251,7 +267,7 @@ public open class JakartaEeMigrationExtension(
251267 public fun excludeTransform (notation : String ) {
252268 val split = notation.split(" :" )
253269 check(split.size == 2 ) { " Invalid notation, should be in the form group:module" }
254- excluded + = ArtifactCoordinate (split[0 ], split[1 ])
270+ excluded.add( ArtifactCoordinate (split[0 ], split[1 ]) )
255271 }
256272
257273 /* *
@@ -262,18 +278,19 @@ public open class JakartaEeMigrationExtension(
262278 public fun includeTransform (notation : String ) {
263279 val split = notation.split(" :" )
264280 check(split.size == 2 ) { " Invalid notation, should be in the form group:module" }
265- included + = ArtifactCoordinate (split[0 ], split[1 ])
281+ included.add( ArtifactCoordinate (split[0 ], split[1 ]) )
266282 }
267283
268284 /* *
269285 * Exclude all specification artifacts from transformation.
270286 */
271287 public fun excludeSpecificationsTransform () {
272- if (excludeSpecificationsTransform.compareAndSet(false , true )) {
288+ if (! excludeSpecificationsTransform.get()) {
289+ excludeSpecificationsTransform.set(true )
273290 val specificationArtifacts = IMPLEMENTATIONS
274291 .flatMap { specification -> specification.coordinates }
275292 .distinct()
276- excluded + = specificationArtifacts
293+ excluded.addAll( specificationArtifacts)
277294 }
278295 }
279296
@@ -301,9 +318,9 @@ public open class JakartaEeMigrationExtension(
301318 .attribute(ARTIFACT_TYPE_ATTRIBUTE , artifactType)
302319 to.attribute(JAKARTAEE_ATTRIBUTE , true )
303320 .attribute(ARTIFACT_TYPE_ATTRIBUTE , artifactType)
304- parameters.setIncludedArtifacts (included)
305- parameters.setExcludedArtifacts (excluded)
306- parameters.setTransformInMemory (transformInMemory)
321+ parameters.includedArtifacts.set (included)
322+ parameters.excludedArtifacts.set (excluded)
323+ parameters.transformInMemory.set (transformInMemory)
307324 }
308325 }
309326 }
0 commit comments