jamesfredley commented on code in PR #15467:
URL: https://github.com/apache/grails-core/pull/15467#discussion_r3342079379


##########
build-logic/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy:
##########
@@ -259,91 +261,229 @@ abstract class ExtractDependenciesTask extends 
DefaultTask {
     Properties populatePlatformDependencies(CoordinateVersionHolder 
bomCoordinates, List<CoordinateHolder> exclusionRules, Map<CoordinateHolder, 
ExtractedDependencyConstraint> constraints, boolean error = true, int level = 
0) {
         Dependency bomDependency = 
dependencyHandler.create("${bomCoordinates.coordinates}@pom")
         Configuration dependencyConfiguration = 
configurationContainer.detachedConfiguration(bomDependency)
+        dependencyConfiguration.transitive = false
         File bomPomFile = dependencyConfiguration.singleFile
 
-        MavenXpp3Reader reader = new MavenXpp3Reader()
-        Model model = reader.read(new FileReader(bomPomFile))
-
+        Document doc = parsePom(bomPomFile)
         Properties versionProperties = new Properties()
-        if (model.parent) {
-            // Need to populate the parent bom if it's present first
-            CoordinateVersionHolder parentBom = new CoordinateVersionHolder(
-                    groupId: model.parent.groupId,
-                    artifactId: model.parent.artifactId,
-                    version: model.parent.version
-            )
+
+        // Parent POM populated first so its properties can be overridden by 
the child
+        CoordinateVersionHolder parentBom = readParentCoordinates(doc)
+        if (parentBom) {
             populatePlatformDependencies(parentBom, exclusionRules, 
constraints, false, level + 1)?.entrySet()?.each { Map.Entry<Object, Object> 
entry ->
                 versionProperties.put(entry.key, entry.value)
             }
         }
-        model.properties.entrySet().each { Map.Entry<Object, Object> entry ->
-            versionProperties.put(entry.key, entry.value)
+
+        readProperties(doc).each { String name, String value ->
+            versionProperties.put(name, value)
         }
         versionProperties.put('project.groupId', bomCoordinates.groupId)
         versionProperties.put('project.version', bomCoordinates.version)
 
-        if (model.dependencyManagement && 
model.dependencyManagement.dependencies) {
-            for 
(io.spring.gradle.dependencymanagement.org.apache.maven.model.Dependency 
depItem : model.dependencyManagement.dependencies) {
-                CoordinateHolder baseCoordinates = new CoordinateHolder(
-                        groupId: depItem.groupId,
-                        artifactId: depItem.artifactId
-                )
-
-                CoordinateHolder resolvedCoordinates = new CoordinateHolder(
-                        groupId: 
resolveMavenProperty(baseCoordinates.coordinatesWithoutVersion, 
depItem.groupId, versionProperties),
-                        artifactId: 
resolveMavenProperty(baseCoordinates.coordinatesWithoutVersion, 
depItem.artifactId, versionProperties)
-                )
-
-                if (!constraints.containsKey(resolvedCoordinates)) {
-                    boolean isExcluded = exclusionRules.any { CoordinateHolder 
excludedCoordinate ->
-                        if (excludedCoordinate.groupId && 
excludedCoordinate.artifactId) {
-                            return resolvedCoordinates == excludedCoordinate
-                        }
-
-                        if (excludedCoordinate.groupId && 
!excludedCoordinate.artifactId) {
-                            return depItem.groupId == 
excludedCoordinate.groupId
-                        }
-
-                        if (!excludedCoordinate.groupId && 
excludedCoordinate.artifactId) {
-                            return depItem.artifactId == 
excludedCoordinate.artifactId
-                        }
-
-                        false
-                    }
-
-                    if (!isExcluded) {
-                        String resolvedVersion = 
resolveMavenProperty(resolvedCoordinates.coordinatesWithoutVersion, 
depItem.version, versionProperties)
-                        String propertyName = depItem.version.contains('$') ? 
depItem.version : null
-                        ExtractedDependencyConstraint constraint = new 
ExtractedDependencyConstraint(
-                                groupId: resolvedCoordinates.groupId, 
artifactId: resolvedCoordinates.artifactId,
-                                version: resolvedVersion, 
versionPropertyReference: propertyName, source: bomCoordinates.artifactId
-                        )
-                        if (depItem.scope == 'import') {
-                            constraints.put(resolvedCoordinates, constraint)
-
-                            CoordinateVersionHolder resolvedBomCoordinates = 
new CoordinateVersionHolder(
-                                    groupId: resolvedCoordinates.groupId,
-                                    artifactId: resolvedCoordinates.artifactId,
-                                    version: resolvedVersion
-                            )
-                            
populatePlatformDependencies(resolvedBomCoordinates, exclusionRules, 
constraints, error, level + 1)
-                        } else {
-                            constraints.put(resolvedCoordinates, constraint)
-                        }
-                    }
-                }
-            }
-        } else {
+        List<ManagedDependency> managedDependencies = 
readManagedDependencies(doc)
+        if (managedDependencies.isEmpty()) {
             if (error) {
                 // only the boms we directly include need to error since we 
expect a dependency management;
                 // parent boms are sometimes use to share properties so we 
need to not error on these cases
                 throw new GradleException("BOM ${bomCoordinates.coordinates} 
has no dependencyManagement section.")
             }
+            return versionProperties
+        }
+
+        for (ManagedDependency depItem : managedDependencies) {
+            CoordinateHolder baseCoordinates = new CoordinateHolder(

Review Comment:
   Done in c2ac4a6948.



##########
build-logic/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy:
##########
@@ -259,91 +261,229 @@ abstract class ExtractDependenciesTask extends 
DefaultTask {
     Properties populatePlatformDependencies(CoordinateVersionHolder 
bomCoordinates, List<CoordinateHolder> exclusionRules, Map<CoordinateHolder, 
ExtractedDependencyConstraint> constraints, boolean error = true, int level = 
0) {
         Dependency bomDependency = 
dependencyHandler.create("${bomCoordinates.coordinates}@pom")
         Configuration dependencyConfiguration = 
configurationContainer.detachedConfiguration(bomDependency)
+        dependencyConfiguration.transitive = false
         File bomPomFile = dependencyConfiguration.singleFile
 
-        MavenXpp3Reader reader = new MavenXpp3Reader()
-        Model model = reader.read(new FileReader(bomPomFile))
-
+        Document doc = parsePom(bomPomFile)
         Properties versionProperties = new Properties()
-        if (model.parent) {
-            // Need to populate the parent bom if it's present first
-            CoordinateVersionHolder parentBom = new CoordinateVersionHolder(
-                    groupId: model.parent.groupId,
-                    artifactId: model.parent.artifactId,
-                    version: model.parent.version
-            )
+
+        // Parent POM populated first so its properties can be overridden by 
the child
+        CoordinateVersionHolder parentBom = readParentCoordinates(doc)
+        if (parentBom) {
             populatePlatformDependencies(parentBom, exclusionRules, 
constraints, false, level + 1)?.entrySet()?.each { Map.Entry<Object, Object> 
entry ->
                 versionProperties.put(entry.key, entry.value)
             }
         }
-        model.properties.entrySet().each { Map.Entry<Object, Object> entry ->
-            versionProperties.put(entry.key, entry.value)
+
+        readProperties(doc).each { String name, String value ->
+            versionProperties.put(name, value)
         }
         versionProperties.put('project.groupId', bomCoordinates.groupId)
         versionProperties.put('project.version', bomCoordinates.version)
 
-        if (model.dependencyManagement && 
model.dependencyManagement.dependencies) {
-            for 
(io.spring.gradle.dependencymanagement.org.apache.maven.model.Dependency 
depItem : model.dependencyManagement.dependencies) {
-                CoordinateHolder baseCoordinates = new CoordinateHolder(
-                        groupId: depItem.groupId,
-                        artifactId: depItem.artifactId
-                )
-
-                CoordinateHolder resolvedCoordinates = new CoordinateHolder(
-                        groupId: 
resolveMavenProperty(baseCoordinates.coordinatesWithoutVersion, 
depItem.groupId, versionProperties),
-                        artifactId: 
resolveMavenProperty(baseCoordinates.coordinatesWithoutVersion, 
depItem.artifactId, versionProperties)
-                )
-
-                if (!constraints.containsKey(resolvedCoordinates)) {
-                    boolean isExcluded = exclusionRules.any { CoordinateHolder 
excludedCoordinate ->
-                        if (excludedCoordinate.groupId && 
excludedCoordinate.artifactId) {
-                            return resolvedCoordinates == excludedCoordinate
-                        }
-
-                        if (excludedCoordinate.groupId && 
!excludedCoordinate.artifactId) {
-                            return depItem.groupId == 
excludedCoordinate.groupId
-                        }
-
-                        if (!excludedCoordinate.groupId && 
excludedCoordinate.artifactId) {
-                            return depItem.artifactId == 
excludedCoordinate.artifactId
-                        }
-
-                        false
-                    }
-
-                    if (!isExcluded) {
-                        String resolvedVersion = 
resolveMavenProperty(resolvedCoordinates.coordinatesWithoutVersion, 
depItem.version, versionProperties)
-                        String propertyName = depItem.version.contains('$') ? 
depItem.version : null
-                        ExtractedDependencyConstraint constraint = new 
ExtractedDependencyConstraint(
-                                groupId: resolvedCoordinates.groupId, 
artifactId: resolvedCoordinates.artifactId,
-                                version: resolvedVersion, 
versionPropertyReference: propertyName, source: bomCoordinates.artifactId
-                        )
-                        if (depItem.scope == 'import') {
-                            constraints.put(resolvedCoordinates, constraint)
-
-                            CoordinateVersionHolder resolvedBomCoordinates = 
new CoordinateVersionHolder(
-                                    groupId: resolvedCoordinates.groupId,
-                                    artifactId: resolvedCoordinates.artifactId,
-                                    version: resolvedVersion
-                            )
-                            
populatePlatformDependencies(resolvedBomCoordinates, exclusionRules, 
constraints, error, level + 1)
-                        } else {
-                            constraints.put(resolvedCoordinates, constraint)
-                        }
-                    }
-                }
-            }
-        } else {
+        List<ManagedDependency> managedDependencies = 
readManagedDependencies(doc)
+        if (managedDependencies.isEmpty()) {
             if (error) {
                 // only the boms we directly include need to error since we 
expect a dependency management;
                 // parent boms are sometimes use to share properties so we 
need to not error on these cases
                 throw new GradleException("BOM ${bomCoordinates.coordinates} 
has no dependencyManagement section.")
             }
+            return versionProperties
+        }
+
+        for (ManagedDependency depItem : managedDependencies) {
+            CoordinateHolder baseCoordinates = new CoordinateHolder(
+                    groupId: depItem.groupId,
+                    artifactId: depItem.artifactId
+            )
+
+            CoordinateHolder resolvedCoordinates = new CoordinateHolder(

Review Comment:
   Done in c2ac4a6948.



##########
build-logic/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy:
##########
@@ -259,91 +261,229 @@ abstract class ExtractDependenciesTask extends 
DefaultTask {
     Properties populatePlatformDependencies(CoordinateVersionHolder 
bomCoordinates, List<CoordinateHolder> exclusionRules, Map<CoordinateHolder, 
ExtractedDependencyConstraint> constraints, boolean error = true, int level = 
0) {
         Dependency bomDependency = 
dependencyHandler.create("${bomCoordinates.coordinates}@pom")
         Configuration dependencyConfiguration = 
configurationContainer.detachedConfiguration(bomDependency)
+        dependencyConfiguration.transitive = false
         File bomPomFile = dependencyConfiguration.singleFile
 
-        MavenXpp3Reader reader = new MavenXpp3Reader()
-        Model model = reader.read(new FileReader(bomPomFile))
-
+        Document doc = parsePom(bomPomFile)
         Properties versionProperties = new Properties()
-        if (model.parent) {
-            // Need to populate the parent bom if it's present first
-            CoordinateVersionHolder parentBom = new CoordinateVersionHolder(
-                    groupId: model.parent.groupId,
-                    artifactId: model.parent.artifactId,
-                    version: model.parent.version
-            )
+
+        // Parent POM populated first so its properties can be overridden by 
the child
+        CoordinateVersionHolder parentBom = readParentCoordinates(doc)
+        if (parentBom) {
             populatePlatformDependencies(parentBom, exclusionRules, 
constraints, false, level + 1)?.entrySet()?.each { Map.Entry<Object, Object> 
entry ->
                 versionProperties.put(entry.key, entry.value)
             }
         }
-        model.properties.entrySet().each { Map.Entry<Object, Object> entry ->
-            versionProperties.put(entry.key, entry.value)
+
+        readProperties(doc).each { String name, String value ->
+            versionProperties.put(name, value)
         }
         versionProperties.put('project.groupId', bomCoordinates.groupId)
         versionProperties.put('project.version', bomCoordinates.version)
 
-        if (model.dependencyManagement && 
model.dependencyManagement.dependencies) {
-            for 
(io.spring.gradle.dependencymanagement.org.apache.maven.model.Dependency 
depItem : model.dependencyManagement.dependencies) {
-                CoordinateHolder baseCoordinates = new CoordinateHolder(
-                        groupId: depItem.groupId,
-                        artifactId: depItem.artifactId
-                )
-
-                CoordinateHolder resolvedCoordinates = new CoordinateHolder(
-                        groupId: 
resolveMavenProperty(baseCoordinates.coordinatesWithoutVersion, 
depItem.groupId, versionProperties),
-                        artifactId: 
resolveMavenProperty(baseCoordinates.coordinatesWithoutVersion, 
depItem.artifactId, versionProperties)
-                )
-
-                if (!constraints.containsKey(resolvedCoordinates)) {
-                    boolean isExcluded = exclusionRules.any { CoordinateHolder 
excludedCoordinate ->
-                        if (excludedCoordinate.groupId && 
excludedCoordinate.artifactId) {
-                            return resolvedCoordinates == excludedCoordinate
-                        }
-
-                        if (excludedCoordinate.groupId && 
!excludedCoordinate.artifactId) {
-                            return depItem.groupId == 
excludedCoordinate.groupId
-                        }
-
-                        if (!excludedCoordinate.groupId && 
excludedCoordinate.artifactId) {
-                            return depItem.artifactId == 
excludedCoordinate.artifactId
-                        }
-
-                        false
-                    }
-
-                    if (!isExcluded) {
-                        String resolvedVersion = 
resolveMavenProperty(resolvedCoordinates.coordinatesWithoutVersion, 
depItem.version, versionProperties)
-                        String propertyName = depItem.version.contains('$') ? 
depItem.version : null
-                        ExtractedDependencyConstraint constraint = new 
ExtractedDependencyConstraint(
-                                groupId: resolvedCoordinates.groupId, 
artifactId: resolvedCoordinates.artifactId,
-                                version: resolvedVersion, 
versionPropertyReference: propertyName, source: bomCoordinates.artifactId
-                        )
-                        if (depItem.scope == 'import') {
-                            constraints.put(resolvedCoordinates, constraint)
-
-                            CoordinateVersionHolder resolvedBomCoordinates = 
new CoordinateVersionHolder(
-                                    groupId: resolvedCoordinates.groupId,
-                                    artifactId: resolvedCoordinates.artifactId,
-                                    version: resolvedVersion
-                            )
-                            
populatePlatformDependencies(resolvedBomCoordinates, exclusionRules, 
constraints, error, level + 1)
-                        } else {
-                            constraints.put(resolvedCoordinates, constraint)
-                        }
-                    }
-                }
-            }
-        } else {
+        List<ManagedDependency> managedDependencies = 
readManagedDependencies(doc)

Review Comment:
   Done in c2ac4a6948.



##########
build-logic/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy:
##########
@@ -259,91 +261,229 @@ abstract class ExtractDependenciesTask extends 
DefaultTask {
     Properties populatePlatformDependencies(CoordinateVersionHolder 
bomCoordinates, List<CoordinateHolder> exclusionRules, Map<CoordinateHolder, 
ExtractedDependencyConstraint> constraints, boolean error = true, int level = 
0) {
         Dependency bomDependency = 
dependencyHandler.create("${bomCoordinates.coordinates}@pom")
         Configuration dependencyConfiguration = 
configurationContainer.detachedConfiguration(bomDependency)
+        dependencyConfiguration.transitive = false
         File bomPomFile = dependencyConfiguration.singleFile
 
-        MavenXpp3Reader reader = new MavenXpp3Reader()
-        Model model = reader.read(new FileReader(bomPomFile))
-
+        Document doc = parsePom(bomPomFile)
         Properties versionProperties = new Properties()
-        if (model.parent) {
-            // Need to populate the parent bom if it's present first
-            CoordinateVersionHolder parentBom = new CoordinateVersionHolder(
-                    groupId: model.parent.groupId,
-                    artifactId: model.parent.artifactId,
-                    version: model.parent.version
-            )
+
+        // Parent POM populated first so its properties can be overridden by 
the child
+        CoordinateVersionHolder parentBom = readParentCoordinates(doc)

Review Comment:
   Done in c2ac4a6948.



##########
build-logic/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy:
##########
@@ -259,91 +261,229 @@ abstract class ExtractDependenciesTask extends 
DefaultTask {
     Properties populatePlatformDependencies(CoordinateVersionHolder 
bomCoordinates, List<CoordinateHolder> exclusionRules, Map<CoordinateHolder, 
ExtractedDependencyConstraint> constraints, boolean error = true, int level = 
0) {
         Dependency bomDependency = 
dependencyHandler.create("${bomCoordinates.coordinates}@pom")
         Configuration dependencyConfiguration = 
configurationContainer.detachedConfiguration(bomDependency)
+        dependencyConfiguration.transitive = false
         File bomPomFile = dependencyConfiguration.singleFile
 
-        MavenXpp3Reader reader = new MavenXpp3Reader()
-        Model model = reader.read(new FileReader(bomPomFile))
-
+        Document doc = parsePom(bomPomFile)
         Properties versionProperties = new Properties()

Review Comment:
   Done in c2ac4a6948 - `doc` and `versionProperties` now use `def`.



##########
build-logic/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy:
##########
@@ -259,91 +261,229 @@ abstract class ExtractDependenciesTask extends 
DefaultTask {
     Properties populatePlatformDependencies(CoordinateVersionHolder 
bomCoordinates, List<CoordinateHolder> exclusionRules, Map<CoordinateHolder, 
ExtractedDependencyConstraint> constraints, boolean error = true, int level = 
0) {
         Dependency bomDependency = 
dependencyHandler.create("${bomCoordinates.coordinates}@pom")

Review Comment:
   Done in c2ac4a6948.



##########
build-logic/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy:
##########
@@ -259,91 +261,229 @@ abstract class ExtractDependenciesTask extends 
DefaultTask {
     Properties populatePlatformDependencies(CoordinateVersionHolder 
bomCoordinates, List<CoordinateHolder> exclusionRules, Map<CoordinateHolder, 
ExtractedDependencyConstraint> constraints, boolean error = true, int level = 
0) {
         Dependency bomDependency = 
dependencyHandler.create("${bomCoordinates.coordinates}@pom")
         Configuration dependencyConfiguration = 
configurationContainer.detachedConfiguration(bomDependency)
+        dependencyConfiguration.transitive = false

Review Comment:
   Done in c2ac4a6948 - applied your `detachedConfiguration(...).tap {}` 
suggestion.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to