@@ -5,6 +5,7 @@ import com.netflix.nebula.interop.selectedId
55import com.netflix.nebula.interop.selectedModuleVersion
66import com.netflix.nebula.interop.selectedVersion
77import org.gradle.api.Action
8+ import org.gradle.api.GradleException
89import org.gradle.api.Project
910import org.gradle.api.artifacts.*
1011import org.gradle.api.artifacts.ModuleVersionIdentifier
@@ -299,53 +300,57 @@ data class AlignRules(val aligns: List<AlignRule>) : Rule {
299300 }
300301
301302 private fun alignedRange (rule : AlignRule , moduleVersions : List <ModuleVersionIdentifier >, configuration : Configuration ): VersionWithSelector {
302- val versions = moduleVersions.mapToSet { VersionWithSelector (it.version) }
303- check(versions.all { ! it.asSelector().isDynamic }) { " A dynamic version was included in $versions for $rule " }
304- val highestVersion = versions.max()!!
305-
306- val forcedModules = moduleVersions.flatMap { moduleVersion ->
307- configuration.resolutionStrategy.forcedModules.filter {
308- it.group == moduleVersion.group && it.name == moduleVersion.name
303+ try {
304+ val versions = moduleVersions.mapToSet { VersionWithSelector (it.version) }
305+ check(versions.all { ! it.asSelector().isDynamic }) { " A dynamic version was included in $versions for $rule " }
306+ val highestVersion = versions.max()!!
307+
308+ val forcedModules = moduleVersions.flatMap { moduleVersion ->
309+ configuration.resolutionStrategy.forcedModules.filter {
310+ it.group == moduleVersion.group && it.name == moduleVersion.name
311+ }
309312 }
310- }
311313
312- val forcedDependencies = moduleVersions.flatMap { moduleVersion ->
313- configuration.dependencies.filter {
314- it is ExternalDependency && it.isForce && it.group == moduleVersion.group && it.name == moduleVersion.name
314+ val forcedDependencies = moduleVersions.flatMap { moduleVersion ->
315+ configuration.dependencies.filter {
316+ it is ExternalDependency && it.isForce && it.group == moduleVersion.group && it.name == moduleVersion.name
317+ }
318+ }.map {
319+ val moduleIdentifier = DefaultModuleIdentifier .newId(it.group, it.name)
320+ DefaultModuleVersionSelector .newSelector(moduleIdentifier, it.version)
315321 }
316- }.map {
317- val moduleIdentifier = DefaultModuleIdentifier .newId(it.group, it.name)
318- DefaultModuleVersionSelector .newSelector(moduleIdentifier, it.version)
319- }
320322
321- val forced = forcedModules + forcedDependencies
322- if (forced.isNotEmpty()) {
323- val (dynamic , static) = forced
324- .mapToSet { VersionWithSelector (it.version!! ) }
325- .partition { it.asSelector().isDynamic }
326- return if (static.isNotEmpty()) {
327- val forcedVersion = static.min()!!
328- logger.debug(" Found force(s) $forced that supersede resolution rule $rule . Will use $forcedVersion " ) // FIXME: What about locks?
329- forcedVersion
330- } else {
331- val mostSpecific = dynamic .minBy {
332- when (it.asSelector().javaClass.kotlin) {
333- LatestVersionSelector ::class -> 2
334- SubVersionSelector ::class -> 1
335- VersionRangeSelector ::class -> 0
336- else -> throw IllegalArgumentException (" Unknown selector type $it " )
337- }
338- }!!
339- val forcedVersion = if (mostSpecific.asSelector() is LatestVersionSelector ) {
340- highestVersion
323+ val forced = forcedModules + forcedDependencies
324+ if (forced.isNotEmpty()) {
325+ val (dynamic , static) = forced
326+ .mapToSet { VersionWithSelector (it.version!! ) }
327+ .partition { it.asSelector().isDynamic }
328+ return if (static.isNotEmpty()) {
329+ val forcedVersion = static.min()!!
330+ logger.debug(" Found force(s) $forced that supersede resolution rule $rule . Will use $forcedVersion " ) // FIXME: What about locks?
331+ forcedVersion
341332 } else {
342- versions.filter { mostSpecific.asSelector().accept(it.stringVersion) }.max()!!
333+ val mostSpecific = dynamic .minBy {
334+ when (it.asSelector().javaClass.kotlin) {
335+ LatestVersionSelector ::class -> 2
336+ SubVersionSelector ::class -> 1
337+ VersionRangeSelector ::class -> 0
338+ else -> throw IllegalArgumentException (" Unknown selector type $it " )
339+ }
340+ }!!
341+ val forcedVersion = if (mostSpecific.asSelector() is LatestVersionSelector ) {
342+ highestVersion
343+ } else {
344+ versions.filter { mostSpecific.asSelector().accept(it.stringVersion) }.max()!!
345+ }
346+ logger.debug(" Found force(s) $forced that supersede resolution rule $rule . Will use highest dynamic version $forcedVersion that matches most specific selector $mostSpecific " ) // FIXME: What about locks?
347+ forcedVersion
343348 }
344- logger.debug(" Found force(s) $forced that supersede resolution rule $rule . Will use highest dynamic version $forcedVersion that matches most specific selector $mostSpecific " ) // FIXME: What about locks?
345- forcedVersion
346349 }
347- }
348350
349- return highestVersion
351+ return highestVersion
352+ } catch (e: Exception ) {
353+ throw GradleException (" Could not apply alignment rule ${rule.name} | Reason: ${e.message} " , e)
354+ }
350355 }
351356}
0 commit comments