Changed droiddoc.go to compile Metalava based android.jar

Test: m -j metalava_android_stubs_current
Bug: b/78245848
Change-Id: Ibce139a93a40e412d8def1b26660446b0a7a24ff
diff --git a/java/droiddoc.go b/java/droiddoc.go
index ca99e76..308c141 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -70,8 +70,8 @@
 			Command: `rm -rf "$outDir" "$srcJarDir" "$stubsDir" && mkdir -p "$outDir" "$srcJarDir" "$stubsDir" && ` +
 				`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
 				`${config.JavaCmd} -jar ${config.MetalavaJar} -encoding UTF-8 -source 1.8 @$out.rsp @$srcJarDir/list ` +
-				`$bootclasspathArgs $classpathArgs -sourcepath $sourcepath --no-banner --color ` +
-				`--stubs $stubsDir --quiet --write-stubs-source-list $outDir/stubs_src_list $opts && ` +
+				`$bootclasspathArgs $classpathArgs -sourcepath $sourcepath --no-banner --color --quiet ` +
+				`--stubs $stubsDir $opts && ` +
 				`${config.SoongZipCmd} -write_if_changed -d -o $docZip -C $outDir -D $outDir && ` +
 				`${config.SoongZipCmd} -write_if_changed -jar -o $out -C $stubsDir -D $stubsDir`,
 			CommandDeps: []string{
@@ -240,7 +240,7 @@
 	// is set to true, Metalava will allow framework SDK to contain annotations.
 	Metalava_annotations_enabled *bool
 
-	// a XML files set to merge annotations.
+	// a top level directory contains XML files set to merge annotations.
 	Metalava_merge_annotations_dir *string
 }
 
@@ -854,7 +854,7 @@
 		if String(d.properties.Metalava_previous_api) != "" {
 			previousApi = ctx.ExpandSource(String(d.properties.Metalava_previous_api),
 				"metalava_previous_api")
-			opts += " --check-compatibility  --previous-api " + previousApi.String()
+			opts += " --previous-api " + previousApi.String()
 			implicits = append(implicits, previousApi)
 		}
 
@@ -873,19 +873,19 @@
 					"has to be non-empty if annotations was enabled!")
 			}
 
-			mergeAnnotationsDir := android.PathForModuleSrc(ctx,
-				String(d.properties.Metalava_merge_annotations_dir))
-			implicits = append(implicits, ctx.Glob(mergeAnnotationsDir.Join(ctx, "**/*").String(), nil)...)
+			mergeAnnotationsDir := android.PathForSource(ctx, String(d.properties.Metalava_merge_annotations_dir))
 
 			opts += " --extract-annotations " + annotationsZip.String() + " --merge-annotations " + mergeAnnotationsDir.String()
 			// TODO(tnorbye): find owners to fix these warnings when annotation was enabled.
-			opts += "--hide HiddenTypedefConstant --hide SuperfluousPrefix --hide AnnotationExtraction"
+			opts += " --hide HiddenTypedefConstant --hide SuperfluousPrefix --hide AnnotationExtraction"
 		}
 
 		if genDocsForMetalava {
-			opts += " --generate-documentation ${config.JavadocCmd} -encoding UTF-8 STUBS_SOURCE_LIST " +
+			opts += " --doc-stubs " + android.PathForModuleOut(ctx, "docs", "docStubsDir").String() +
+				" --write-doc-stubs-source-list $outDir/doc_stubs_src_list " +
+				" --generate-documentation ${config.JavadocCmd} -encoding UTF-8 DOC_STUBS_SOURCE_LIST " +
 				doclavaOpts + docArgsForMetalava + bootClasspathArgs + " " + classpathArgs + " " + " -sourcepath " +
-				strings.Join(d.Javadoc.sourcepaths.Strings(), ":") + " -quiet -d $outDir "
+				android.PathForModuleOut(ctx, "docs", "docStubsDir").String() + " -quiet -d $outDir "
 			implicits = append(implicits, jsilver)
 			implicits = append(implicits, doclava)
 		}
diff --git a/java/java.go b/java/java.go
index 1fefcab..00ee531 100644
--- a/java/java.go
+++ b/java/java.go
@@ -507,7 +507,10 @@
 		}
 		if ctx.ModuleName() == "android_stubs_current" ||
 			ctx.ModuleName() == "android_system_stubs_current" ||
-			ctx.ModuleName() == "android_test_stubs_current" {
+			ctx.ModuleName() == "android_test_stubs_current" ||
+			ctx.ModuleName() == "metalava_android_stubs_current" ||
+			ctx.ModuleName() == "metalava_android_system_stubs_current" ||
+			ctx.ModuleName() == "metalava_android_test_stubs_current" {
 			ctx.AddDependency(ctx.Module(), frameworkApkTag, "framework-res")
 		}
 	}
@@ -628,13 +631,13 @@
 	ver := String(m.deviceProperties.Sdk_version)
 	noStdLibs := Bool(m.properties.No_standard_libs)
 	switch {
-	case name == "core.current.stubs" || ver == "core_current" || noStdLibs:
+	case name == "core.current.stubs" || ver == "core_current" || noStdLibs || name == "stub-annotations":
 		return javaCore
-	case name == "android_system_stubs_current" || strings.HasPrefix(ver, "system_"):
+	case name == "android_system_stubs_current" || strings.HasPrefix(ver, "system_") || name == "metalava_android_system_stubs_current":
 		return javaSystem
-	case name == "android_test_stubs_current" || strings.HasPrefix(ver, "test_"):
+	case name == "android_test_stubs_current" || strings.HasPrefix(ver, "test_") || name == "metalava_android_test_stubs_current":
 		return javaPlatform
-	case name == "android_stubs_current" || ver == "current":
+	case name == "android_stubs_current" || ver == "current" || name == "metalava_android_stubs_current":
 		return javaSdk
 	case ver == "":
 		return javaPlatform
@@ -724,7 +727,10 @@
 			case frameworkApkTag:
 				if ctx.ModuleName() == "android_stubs_current" ||
 					ctx.ModuleName() == "android_system_stubs_current" ||
-					ctx.ModuleName() == "android_test_stubs_current" {
+					ctx.ModuleName() == "android_test_stubs_current" ||
+					ctx.ModuleName() == "metalava_android_stubs_current" ||
+					ctx.ModuleName() == "metalava_android_system_stubs_current" ||
+					ctx.ModuleName() == "metalava_android_test_stubs_current" {
 					// framework stubs.jar need to depend on framework-res.apk, in order to pull the
 					// resource files out of there for aapt.
 					//