Merge changes from topics "soong_logtags", "droiddoc_srcjars"

* changes:
  Fix genrules depending on Go tools
  Use logtags without merged file
  Export extract-srcjars.sh to Make
  Remove partial javastream proto support
  Add support for .srcjar files from genrules and srcs
  Fix java AIDL properties to match C/C++
  Fix proto flags in java
diff --git a/android/module.go b/android/module.go
index 2a8837b..66859fa 100644
--- a/android/module.go
+++ b/android/module.go
@@ -108,6 +108,7 @@
 
 	ModuleSubDir() string
 
+	VisitDirectDepsBlueprint(visit func(blueprint.Module))
 	VisitDirectDeps(visit func(Module))
 	VisitDirectDepsIf(pred func(Module) bool, visit func(Module))
 	VisitDepsDepthFirst(visit func(Module))
@@ -686,6 +687,10 @@
 	return aModule
 }
 
+func (a *androidModuleContext) VisitDirectDepsBlueprint(visit func(blueprint.Module)) {
+	a.ModuleContext.VisitDirectDeps(visit)
+}
+
 func (a *androidModuleContext) VisitDirectDeps(visit func(Module)) {
 	a.ModuleContext.VisitDirectDeps(func(module blueprint.Module) {
 		if aModule := a.validateAndroidModule(module); aModule != nil {
diff --git a/genrule/genrule.go b/genrule/genrule.go
index c5b7e1d..c142c53 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -158,7 +158,7 @@
 	tools := map[string]android.Path{}
 
 	if len(g.properties.Tools) > 0 {
-		ctx.VisitDirectDeps(func(module android.Module) {
+		ctx.VisitDirectDepsBlueprint(func(module blueprint.Module) {
 			switch ctx.OtherModuleDependencyTag(module) {
 			case android.SourceDepTag:
 				// Nothing to do
@@ -167,6 +167,14 @@
 				var path android.OptionalPath
 
 				if t, ok := module.(HostToolProvider); ok {
+					if !t.(android.Module).Enabled() {
+						if ctx.AConfig().AllowMissingDependencies() {
+							ctx.AddMissingDependencies([]string{tool})
+						} else {
+							ctx.ModuleErrorf("depends on disabled module %q", tool)
+						}
+						break
+					}
 					path = t.HostToolPath()
 				} else if t, ok := module.(bootstrap.GoBinaryTool); ok {
 					if s, err := filepath.Rel(android.PathForOutput(ctx).String(), t.InstallPath()); err == nil {
diff --git a/java/builder.go b/java/builder.go
index 45e59a4..d2e02fd 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -186,7 +186,7 @@
 	kotlincFlags     string
 	kotlincClasspath classpath
 
-	protoFlags   string
+	protoFlags   []string
 	protoOutFlag string
 }
 
diff --git a/java/config/config.go b/java/config/config.go
index d4994a1..3cd2841 100644
--- a/java/config/config.go
+++ b/java/config/config.go
@@ -70,7 +70,7 @@
 	pctx.SourcePathVariable("JrtFsJar", "${JavaHome}/lib/jrt-fs.jar")
 	pctx.SourcePathVariable("Ziptime", "prebuilts/build-tools/${hostPrebuiltTag}/bin/ziptime")
 
-	pctx.SourcePathVariable("ExtractSrcJarsCmd", "build/soong/scripts/extract-src-jars.sh")
+	pctx.SourcePathVariable("ExtractSrcJarsCmd", "build/soong/scripts/extract-srcjars.sh")
 	pctx.SourcePathVariable("JarArgsCmd", "build/soong/scripts/jar-args.sh")
 	pctx.HostBinToolVariable("SoongZipCmd", "soong_zip")
 	pctx.HostBinToolVariable("MergeZipsCmd", "merge_zips")
diff --git a/java/config/makevars.go b/java/config/makevars.go
index 96fa92b..dabf2e7 100644
--- a/java/config/makevars.go
+++ b/java/config/makevars.go
@@ -61,4 +61,5 @@
 	}
 
 	ctx.Strict("SOONG_JAVAC_WRAPPER", "${SoongJavacWrapper}")
+	ctx.Strict("EXTRACT_SRCJARS", "${ExtractSrcJarsCmd}")
 }
diff --git a/java/gen.go b/java/gen.go
index 8fa199e..b5973ec 100644
--- a/java/gen.go
+++ b/java/gen.go
@@ -42,7 +42,7 @@
 
 	logtags = pctx.AndroidStaticRule("logtags",
 		blueprint.RuleParams{
-			Command:     "$logtagsCmd -o $out $in $allLogtagsFile",
+			Command:     "$logtagsCmd -o $out $in",
 			CommandDeps: []string{"$logtagsCmd"},
 		})
 
@@ -85,7 +85,7 @@
 }
 
 func (j *Module) genSources(ctx android.ModuleContext, srcFiles android.Paths,
-	flags javaBuilderFlags) (android.Paths, android.Paths) {
+	flags javaBuilderFlags) android.Paths {
 
 	var protoFiles android.Paths
 	outSrcFiles := make(android.Paths, 0, len(srcFiles))
@@ -106,17 +106,15 @@
 		}
 	}
 
-	var outSrcJars android.Paths
-
 	if len(protoFiles) > 0 {
-		protoSrcJar := android.PathForModuleGen(ctx, "proto.src.jar")
+		protoSrcJar := android.PathForModuleGen(ctx, "proto.srcjar")
 		genProto(ctx, protoSrcJar, protoFiles,
 			flags.protoFlags, flags.protoOutFlag, "")
 
-		outSrcJars = append(outSrcJars, protoSrcJar)
+		outSrcFiles = append(outSrcFiles, protoSrcJar)
 	}
 
-	return outSrcFiles, outSrcJars
+	return outSrcFiles
 }
 
 func LogtagsSingleton() blueprint.Singleton {
diff --git a/java/java.go b/java/java.go
index 432e816..b2bd2b0 100644
--- a/java/java.go
+++ b/java/java.go
@@ -136,12 +136,17 @@
 	// if not blank, set to the version of the sdk to compile against
 	Sdk_version *string
 
-	// directories to pass to aidl tool
-	Aidl_includes []string
+	Aidl struct {
+		// Top level directories to pass to aidl tool
+		Include_dirs []string
 
-	// directories that should be added as include directories
-	// for any aidl sources of modules that depend on this module
-	Export_aidl_include_dirs []string
+		// Directories rooted at the Android.bp file to pass to aidl tool
+		Local_include_dirs []string
+
+		// directories that should be added as include directories for any aidl sources of modules
+		// that depend on this module, as well as to aidl for this module.
+		Export_include_dirs []string
+	}
 
 	// If true, export a copy of the module as a -hostdex module for host testing.
 	Hostdex *bool
@@ -377,7 +382,11 @@
 func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.OptionalPath,
 	aidlIncludeDirs android.Paths) []string {
 
-	localAidlIncludes := android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl_includes)
+	aidlIncludes := android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl.Local_include_dirs)
+	aidlIncludes = append(aidlIncludes,
+		android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl.Export_include_dirs)...)
+	aidlIncludes = append(aidlIncludes,
+		android.PathsForSource(ctx, j.deviceProperties.Aidl.Include_dirs)...)
 
 	var flags []string
 	if aidlPreprocess.Valid() {
@@ -387,7 +396,7 @@
 	}
 
 	flags = append(flags, android.JoinWithPrefix(j.exportAidlIncludeDirs.Strings(), "-I"))
-	flags = append(flags, android.JoinWithPrefix(localAidlIncludes.Strings(), "-I"))
+	flags = append(flags, android.JoinWithPrefix(aidlIncludes.Strings(), "-I"))
 	flags = append(flags, "-I"+android.PathForModuleSrc(ctx).String())
 	if src := android.ExistentPathForSource(ctx, "", ctx.ModuleDir(), "src"); src.Valid() {
 		flags = append(flags, "-I"+src.String())
@@ -528,7 +537,7 @@
 
 func (j *Module) compile(ctx android.ModuleContext) {
 
-	j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.deviceProperties.Export_aidl_include_dirs)
+	j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl.Export_include_dirs)
 
 	deps := j.collectDeps(ctx)
 	flags := j.collectBuilderFlags(ctx, deps)
@@ -541,8 +550,9 @@
 		flags = protoFlags(ctx, &j.protoProperties, flags)
 	}
 
-	var srcJars android.Paths
-	srcFiles, srcJars = j.genSources(ctx, srcFiles, flags)
+	srcFiles = j.genSources(ctx, srcFiles, flags)
+
+	srcJars := srcFiles.FilterByExt(".srcjar")
 	srcJars = append(srcJars, deps.srcJars...)
 	srcJars = append(srcJars, j.ExtraSrcJars...)
 
diff --git a/java/proto.go b/java/proto.go
index 1077fd6..17f02a3 100644
--- a/java/proto.go
+++ b/java/proto.go
@@ -15,6 +15,8 @@
 package java
 
 import (
+	"strings"
+
 	"github.com/google/blueprint"
 	"github.com/google/blueprint/proptools"
 
@@ -39,7 +41,7 @@
 )
 
 func genProto(ctx android.ModuleContext, outputSrcJar android.WritablePath,
-	protoFiles android.Paths, protoFlags string, protoOut, protoOutFlags string) {
+	protoFiles android.Paths, protoFlags []string, protoOut, protoOutFlags string) {
 
 	ctx.Build(pctx, android.BuildParams{
 		Rule:        proto,
@@ -50,7 +52,7 @@
 			"outDir":        android.ProtoDir(ctx).String(),
 			"protoOut":      protoOut,
 			"protoOutFlags": protoOutFlags,
-			"protoFlags":    protoFlags,
+			"protoFlags":    strings.Join(protoFlags, " "),
 		},
 	})
 }
@@ -61,10 +63,6 @@
 		ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-micro")
 	case "nano":
 		ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-nano")
-	case "stream":
-		// TODO(ccross): add dependency on protoc-gen-java-stream binary
-		ctx.PropertyErrorf("proto.type", `"stream" not supported yet`)
-		// No library for stream protobufs
 	case "lite", "":
 		ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-lite")
 	case "full":
@@ -85,13 +83,14 @@
 		flags.protoOutFlag = "--javamicro_out"
 	case "nano":
 		flags.protoOutFlag = "--javanano_out"
-	case "stream":
-		flags.protoOutFlag = "--javastream_out"
 	case "lite", "full", "":
 		flags.protoOutFlag = "--java_out"
 	default:
 		ctx.PropertyErrorf("proto.type", "unknown proto type %q",
 			proptools.String(p.Proto.Type))
 	}
+
+	flags.protoFlags = android.ProtoFlags(ctx, p)
+
 	return flags
 }
diff --git a/scripts/extract-src-jars.sh b/scripts/extract-srcjars.sh
similarity index 100%
rename from scripts/extract-src-jars.sh
rename to scripts/extract-srcjars.sh