aboutsummaryrefslogtreecommitdiff
path: root/gradle/src
diff options
context:
space:
mode:
authorAdam Murdoch <adam@gradle.biz>2012-09-26 15:21:59 +1000
committerAdam Murdoch <adam@gradle.biz>2012-09-26 15:21:59 +1000
commit2aada3069b9cae7675d5c4c12330ae6577146883 (patch)
treeddf0bacd2c3f981a256cdb514776d5d74fd9b226 /gradle/src
parentbae32dac8b9ed55d3ea27c3c02e1bacb52cd0ccd (diff)
downloadbuild-2aada3069b9cae7675d5c4c12330ae6577146883.tar.gz
Reworked dependency graph traversal
This ensures that all transitive dependencies are visited, so that the AndroidDependency and JarDependency information attached to VariantConfiguration is correct. Change-Id: Ib1074fb8f18231799cb7ff68762d1bbba11f25ef
Diffstat (limited to 'gradle/src')
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy37
1 files changed, 28 insertions, 9 deletions
diff --git a/gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy
index 003fc63..9061754 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy
@@ -36,7 +36,9 @@ import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ModuleVersionIdentifier
import org.gradle.api.artifacts.ProjectDependency
-import org.gradle.api.artifacts.ResolvedDependency
+import org.gradle.api.artifacts.ResolvedArtifact
+import org.gradle.api.artifacts.result.ResolvedDependencyResult
+import org.gradle.api.artifacts.result.ResolvedModuleVersionResult
import org.gradle.api.logging.LogLevel
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.plugins.JavaBasePlugin
@@ -497,9 +499,11 @@ abstract class AndroidBasePlugin {
// TODO - build the library dependency graph
List<AndroidDependency> bundles = []
List<JarDependency> jars = []
- Map<ModuleVersionIdentifier, Object> modules = [:]
- compileClasspath.resolvedConfiguration.firstLevelModuleDependencies.each { ResolvedDependency dependency ->
- addDependency(dependency, prepareDependenciesTask, bundles, jars, modules)
+ Map<ModuleVersionIdentifier, List<AndroidDependency>> modules = [:]
+ Map<ModuleVersionIdentifier, List<ResolvedArtifact>> artifacts = [:]
+ collectArtifacts(compileClasspath, artifacts)
+ compileClasspath.resolvedConfiguration.resolutionResult.root.dependencies.each { ResolvedDependencyResult dep ->
+ addDependency(dep.selected, prepareDependenciesTask, bundles, jars, modules, artifacts)
}
variant.config.androidDependencies = bundles
@@ -517,19 +521,34 @@ abstract class AndroidBasePlugin {
}
}
- def addDependency(ResolvedDependency dependency, PrepareDependenciesTask prepareDependenciesTask, Collection<AndroidDependency> bundles, Collection<JarDependency> jars, Map<ModuleVersionIdentifier, Object> modules) {
- def id = dependency.module.id
+ def collectArtifacts(Configuration configuration, Map<ModuleVersionIdentifier, List<ResolvedArtifact>> artifacts) {
+ configuration.resolvedConfiguration.resolvedArtifacts.each { ResolvedArtifact artifact ->
+ def id = artifact.moduleVersion.id
+ List<ResolvedArtifact> moduleArtifacts = artifacts[id]
+ if (moduleArtifacts == null) {
+ moduleArtifacts = []
+ artifacts[id] = moduleArtifacts
+ }
+ moduleArtifacts << artifact
+ }
+ }
+
+ def addDependency(ResolvedModuleVersionResult moduleVersion, PrepareDependenciesTask prepareDependenciesTask, Collection<AndroidDependency> bundles,
+ Collection<JarDependency> jars, Map<ModuleVersionIdentifier, List<AndroidDependency>> modules,
+ Map<ModuleVersionIdentifier, List<ResolvedArtifact>> artifacts) {
+ def id = moduleVersion.id
List<AndroidDependency> bundlesForThisModule = modules[id]
if (bundlesForThisModule == null) {
bundlesForThisModule = []
modules[id] = bundlesForThisModule
def nestedBundles = []
- dependency.children.each { ResolvedDependency child ->
- addDependency(child, prepareDependenciesTask, nestedBundles, jars, modules)
+ moduleVersion.dependencies.each { ResolvedDependencyResult dep ->
+ addDependency(dep.selected, prepareDependenciesTask, nestedBundles, jars, modules, artifacts)
}
- dependency.moduleArtifacts.each { artifact ->
+ def moduleArtifacts = artifacts[id]
+ moduleArtifacts?.each { artifact ->
if (artifact.type == 'alb') {
def explodedDir = project.file("$project.buildDir/exploded-bundles/$artifact.file.name")
bundlesForThisModule << new AndroidDependencyImpl(explodedDir, nestedBundles)