Use Rule-local implicit dependencies

Depends on https://github.com/google/blueprint/pull/78

This uses the new CommandDeps field to move implicit dependencies
embedded in the Command string next to the definition, instead of having
to specify them in every BuildParam struct. This should make it easier
to verify dependencies.

Change-Id: I2711b160920e22fa962a436e1f7041272166f50f
diff --git a/java/app_builder.go b/java/app_builder.go
index 8e907d2..4b3d315 100644
--- a/java/app_builder.go
+++ b/java/app_builder.go
@@ -34,6 +34,7 @@
 				`$aaptCmd package -m $aaptFlags -P $publicResourcesFile -G $proguardOptionsFile ` +
 				`-J $javaDir || ( rm -rf "$javaDir/*"; exit 41 ) && ` +
 				`find $javaDir -name "*.java" > $javaFileList`,
+			CommandDeps: []string{"$aaptCmd"},
 			Description: "aapt create R.java $out",
 		},
 		"aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList")
@@ -41,6 +42,7 @@
 	aaptCreateAssetsPackage = pctx.StaticRule("aaptCreateAssetsPackage",
 		blueprint.RuleParams{
 			Command:     `rm -f $out && $aaptCmd package $aaptFlags -F $out`,
+			CommandDeps: []string{"$aaptCmd"},
 			Description: "aapt export package $out",
 		},
 		"aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList")
@@ -49,6 +51,7 @@
 		blueprint.RuleParams{
 			// TODO: add-jni-shared-libs-to-package
 			Command:     `cp -f $in $out.tmp && $aaptCmd package -u $aaptFlags -F $out.tmp && mv $out.tmp $out`,
+			CommandDeps: []string{"$aaptCmd"},
 			Description: "aapt package $out",
 		},
 		"aaptFlags")
@@ -56,6 +59,7 @@
 	zipalign = pctx.StaticRule("zipalign",
 		blueprint.RuleParams{
 			Command:     `$zipalignCmd -f $zipalignFlags 4 $in $out`,
+			CommandDeps: []string{"$zipalignCmd"},
 			Description: "zipalign $out",
 		},
 		"zipalignFlags")
@@ -63,6 +67,7 @@
 	signapk = pctx.StaticRule("signapk",
 		blueprint.RuleParams{
 			Command:     `java -jar $signapkCmd $certificates $in $out`,
+			CommandDeps: []string{"$signapkCmd"},
 			Description: "signapk $out",
 		},
 		"certificates")
@@ -71,6 +76,7 @@
 		blueprint.RuleParams{
 			Command: "java -classpath $androidManifestMergerCmd com.android.manifmerger.Main merge " +
 				"--main $in --libs $libsManifests --out $out",
+			CommandDeps: []string{"$androidManifestMergerCmd"},
 			Description: "merge manifest files $out",
 		},
 		"libsManifests")
@@ -96,8 +102,6 @@
 	publicResourcesFile := filepath.Join(common.ModuleOutDir(ctx), "public_resources.xml")
 	proguardOptionsFile := filepath.Join(common.ModuleOutDir(ctx), "proguard.options")
 
-	deps = append([]string{"$aaptCmd"}, deps...)
-
 	ctx.Build(pctx, blueprint.BuildParams{
 		Rule:      aaptCreateResourceJavaFile,
 		Outputs:   []string{publicResourcesFile, proguardOptionsFile, javaFileList},
@@ -117,8 +121,6 @@
 func CreateExportPackage(ctx common.AndroidModuleContext, flags []string, deps []string) string {
 	outputFile := filepath.Join(common.ModuleOutDir(ctx), "package-export.apk")
 
-	deps = append([]string{"$aaptCmd"}, deps...)
-
 	ctx.Build(pctx, blueprint.BuildParams{
 		Rule:      aaptCreateAssetsPackage,
 		Outputs:   []string{outputFile},
@@ -137,10 +139,9 @@
 	resourceApk := filepath.Join(common.ModuleOutDir(ctx), "resources.apk")
 
 	ctx.Build(pctx, blueprint.BuildParams{
-		Rule:      aaptAddResources,
-		Outputs:   []string{resourceApk},
-		Inputs:    []string{jarFile},
-		Implicits: []string{"$aaptCmd"},
+		Rule:    aaptAddResources,
+		Outputs: []string{resourceApk},
+		Inputs:  []string{jarFile},
 		Args: map[string]string{
 			"aaptFlags": strings.Join(flags, " "),
 		},
@@ -154,10 +155,9 @@
 	}
 
 	ctx.Build(pctx, blueprint.BuildParams{
-		Rule:      signapk,
-		Outputs:   []string{signedApk},
-		Inputs:    []string{resourceApk},
-		Implicits: []string{"$signapkCmd"},
+		Rule:    signapk,
+		Outputs: []string{signedApk},
+		Inputs:  []string{resourceApk},
 		Args: map[string]string{
 			"certificates": strings.Join(certificateArgs, " "),
 		},
@@ -166,10 +166,9 @@
 	outputFile := filepath.Join(common.ModuleOutDir(ctx), "package.apk")
 
 	ctx.Build(pctx, blueprint.BuildParams{
-		Rule:      zipalign,
-		Outputs:   []string{outputFile},
-		Inputs:    []string{signedApk},
-		Implicits: []string{"$zipalignCmd"},
+		Rule:    zipalign,
+		Outputs: []string{outputFile},
+		Inputs:  []string{signedApk},
 		Args: map[string]string{
 			"zipalignFlags": "",
 		},
diff --git a/java/builder.go b/java/builder.go
index 4eda6adf..36506ae 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -52,6 +52,7 @@
 	jar = pctx.StaticRule("jar",
 		blueprint.RuleParams{
 			Command:     `$jarCmd -o $out $jarArgs`,
+			CommandDeps: []string{"$jarCmd"},
 			Description: "jar $out",
 		},
 		"jarCmd", "jarArgs")
@@ -61,6 +62,7 @@
 			Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
 				`$dxCmd --dex --output=$outDir $dxFlags $in || ( rm -rf "$outDir"; exit 41 ) && ` +
 				`find "$outDir" -name "classes*.dex" > $out`,
+			CommandDeps: []string{"$dxCmd"},
 			Description: "dex $out",
 		},
 		"outDir", "dxFlags")
@@ -68,6 +70,7 @@
 	jarjar = pctx.StaticRule("jarjar",
 		blueprint.RuleParams{
 			Command:     "java -jar $jarjarCmd process $rulesFile $in $out",
+			CommandDeps: []string{"$jarjarCmd", "$rulesFile"},
 			Description: "jarjar $out",
 		},
 		"rulesFile")
@@ -156,8 +159,6 @@
 		jarArgs = append(jarArgs, "-m "+manifest)
 	}
 
-	deps = append(deps, "$jarCmd")
-
 	ctx.Build(pctx, blueprint.BuildParams{
 		Rule:      jar,
 		Outputs:   []string{outputFile},
@@ -177,10 +178,9 @@
 	outputFile := filepath.Join(common.ModuleOutDir(ctx), "dex.filelist")
 
 	ctx.Build(pctx, blueprint.BuildParams{
-		Rule:      dx,
-		Outputs:   []string{outputFile},
-		Inputs:    []string{classesJar},
-		Implicits: []string{"$dxCmd"},
+		Rule:    dx,
+		Outputs: []string{outputFile},
+		Inputs:  []string{classesJar},
 		Args: map[string]string{
 			"dxFlags": flags.dxFlags,
 			"outDir":  outDir,
@@ -205,8 +205,6 @@
 	deps = append(deps, dexJarSpec.fileList)
 	jarArgs = append(jarArgs, dexJarSpec.soongJarArgs())
 
-	deps = append(deps, "$jarCmd")
-
 	ctx.Build(pctx, blueprint.BuildParams{
 		Rule:      jar,
 		Outputs:   []string{outputFile},
@@ -222,10 +220,9 @@
 func TransformJarJar(ctx common.AndroidModuleContext, classesJar string, rulesFile string) string {
 	outputFile := filepath.Join(common.ModuleOutDir(ctx), "classes-jarjar.jar")
 	ctx.Build(pctx, blueprint.BuildParams{
-		Rule:      jarjar,
-		Outputs:   []string{outputFile},
-		Inputs:    []string{classesJar},
-		Implicits: []string{"$jarjarCmd"},
+		Rule:    jarjar,
+		Outputs: []string{outputFile},
+		Inputs:  []string{classesJar},
 		Args: map[string]string{
 			"rulesFile": rulesFile,
 		},
diff --git a/java/gen.go b/java/gen.go
index 6e8313a..f989875 100644
--- a/java/gen.go
+++ b/java/gen.go
@@ -44,6 +44,7 @@
 	aidl = pctx.StaticRule("aidl",
 		blueprint.RuleParams{
 			Command:     "$aidlCmd -d$depFile $aidlFlags $in $out",
+			CommandDeps: []string{"$aidlCmd"},
 			Description: "aidl $out",
 		},
 		"depFile", "aidlFlags")
@@ -51,12 +52,14 @@
 	logtags = pctx.StaticRule("logtags",
 		blueprint.RuleParams{
 			Command:     "$logtagsCmd -o $out $in $allLogtagsFile",
+			CommandDeps: []string{"$logtagsCmd"},
 			Description: "logtags $out",
 		})
 
 	mergeLogtags = pctx.StaticRule("mergeLogtags",
 		blueprint.RuleParams{
 			Command:     "$mergeLogtagsCmd -o $out $in",
+			CommandDeps: []string{"$mergeLogtagsCmd"},
 			Description: "merge logtags $out",
 		})
 )
@@ -68,10 +71,9 @@
 	depFile := javaFile + ".d"
 
 	ctx.Build(pctx, blueprint.BuildParams{
-		Rule:      aidl,
-		Outputs:   []string{javaFile},
-		Inputs:    []string{aidlFile},
-		Implicits: []string{"$aidlCmd"},
+		Rule:    aidl,
+		Outputs: []string{javaFile},
+		Inputs:  []string{aidlFile},
 		Args: map[string]string{
 			"depFile":   depFile,
 			"aidlFlags": aidlFlags,
@@ -87,10 +89,9 @@
 	javaFile = pathtools.ReplaceExtension(javaFile, "java")
 
 	ctx.Build(pctx, blueprint.BuildParams{
-		Rule:      logtags,
-		Outputs:   []string{javaFile},
-		Inputs:    []string{logtagsFile},
-		Implicits: []string{"$logtagsCmd"},
+		Rule:    logtags,
+		Outputs: []string{javaFile},
+		Inputs:  []string{logtagsFile},
 	})
 
 	return javaFile