From 500d6dce3e55de3bdb0833154fb1593daf1234f3 Mon Sep 17 00:00:00 2001 From: Robinson Date: Mon, 12 Apr 2021 23:44:31 +0200 Subject: [PATCH] Code cleanup, added config.resolve() --- src/dorkbox/gradle/DependencyScanner.kt | 24 ++++++++++++++------- src/dorkbox/gradle/StaticMethodsAndTools.kt | 5 ++--- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/dorkbox/gradle/DependencyScanner.kt b/src/dorkbox/gradle/DependencyScanner.kt index da26df5..3f62181 100644 --- a/src/dorkbox/gradle/DependencyScanner.kt +++ b/src/dorkbox/gradle/DependencyScanner.kt @@ -24,6 +24,11 @@ object DependencyScanner { /** * THIS MUST BE IN "afterEvaluate" or run from a specific task. + * + * how to resolve dependencies + * NOTE: it is possible, when we have a project DEPEND on an older version of that project (ie: bootstrapped from an older version) + * we can have infinite recursion. + * This is a problem, so we limit how much a dependency can show up the the tree */ fun scan( project: Project, @@ -37,6 +42,8 @@ object DependencyScanner { return } + config.resolve() + config.resolvedConfiguration.lenientConfiguration.getFirstLevelModuleDependencies(org.gradle.api.specs.Specs.SATISFIES_ALL).forEach { dep -> // we know the FIRST series will exist val makeDepTree = makeDepTree(dep, existingNames) @@ -60,16 +67,17 @@ object DependencyScanner { val version = module.version if (!existingNames.contains("$group:$name")) { + existingNames.add("$group:$name") + // println("Searching: $group:$name:$version") - val artifacts: List = dep.moduleArtifacts.map { artifact: ResolvedArtifact -> + val artifacts: List = dep.moduleArtifacts.map { artifact: ResolvedArtifact -> val artifactModule = artifact.moduleVersion.id - DependencyInfo(artifactModule.group, artifactModule.name, artifactModule.version, artifact.file.absoluteFile) + Artifact(artifactModule.group, artifactModule.name, artifactModule.version, artifact.file.absoluteFile) } val children = mutableListOf() - dep.children.forEach { - existingNames.add("$group:$name") - val makeDep = makeDepTree(it, existingNames) + dep.children.forEach { child -> + val makeDep = makeDepTree(child, existingNames) if (makeDep != null) { children.add(makeDep) } @@ -102,7 +110,7 @@ object DependencyScanner { val group: String, val name: String, val version: String, - val artifacts: List, + val artifacts: List, val children: List ) { @@ -115,14 +123,14 @@ object DependencyScanner { } } - data class DependencyInfo(val group: String, val name: String, val version: String, val file: File) { + data class Artifact(val group: String, val name: String, val version: String, val file: File) { val id: String get() { return "$group:$name:$version" } } - data class MavenData(val group: String, val name: String, val version: String) { + data class Maven(val group: String, val name: String, val version: String) { val id: String get() { return "$group:$name:$version" diff --git a/src/dorkbox/gradle/StaticMethodsAndTools.kt b/src/dorkbox/gradle/StaticMethodsAndTools.kt index d634207..a0855e2 100644 --- a/src/dorkbox/gradle/StaticMethodsAndTools.kt +++ b/src/dorkbox/gradle/StaticMethodsAndTools.kt @@ -180,7 +180,7 @@ open class StaticMethodsAndTools(private val project: Project) { * * THIS MUST BE IN "afterEvaluate" or run from a specific task. */ - fun resolveBuildScriptDependencies(project: Project = this.project): List { + fun resolveBuildScriptDependencies(project: Project = this.project): List { val existingNames = mutableSetOf() return project.buildscript.configurations.flatMap { config -> @@ -188,7 +188,6 @@ open class StaticMethodsAndTools(private val project: Project) { .lenientConfiguration .getFirstLevelModuleDependencies(Specs.SATISFIES_ALL) .mapNotNull { dep -> - val module = dep.module.id val group = module.group val name = module.name @@ -197,7 +196,7 @@ open class StaticMethodsAndTools(private val project: Project) { if (!existingNames.contains(moduleName)) { existingNames.add(moduleName) - DependencyScanner.MavenData(group, name, version) + DependencyScanner.Maven(group, name, version) } else { null }