Remove additional 'docs' Dir when genearate Soong droiddoc

Test: m -j core-docs
Bug: b/70351683
Change-Id: Icb0b096e24ee8e498532ca32c9e9e74c2803191d
diff --git a/java/droiddoc.go b/java/droiddoc.go
index 137eaaf..577897d 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -67,7 +67,8 @@
 
 	metalava = pctx.AndroidStaticRule("metalava",
 		blueprint.RuleParams{
-			Command: `rm -rf "$outDir" "$srcJarDir" "$stubsDir" && mkdir -p "$outDir" "$srcJarDir" "$stubsDir" && ` +
+			Command: `rm -rf "$outDir" "$srcJarDir" "$stubsDir" "$docStubsDir" && ` +
+				`mkdir -p "$outDir" "$srcJarDir" "$stubsDir" "$docStubsDir" && ` +
 				`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
 				`${config.JavaCmd} -jar ${config.MetalavaJar} -encoding UTF-8 -source $javaVersion @$out.rsp @$srcJarDir/list ` +
 				`$bootclasspathArgs $classpathArgs -sourcepath $sourcepath --no-banner --color --quiet ` +
@@ -85,7 +86,7 @@
 			RspfileContent: "$in",
 			Restat:         true,
 		},
-		"outDir", "srcJarDir", "stubsDir", "srcJars", "javaVersion", "bootclasspathArgs",
+		"outDir", "srcJarDir", "stubsDir", "docStubsDir", "srcJars", "javaVersion", "bootclasspathArgs",
 		"classpathArgs", "sourcepath", "opts", "docZip")
 )
 
@@ -572,9 +573,9 @@
 		Inputs:         j.srcFiles,
 		Implicits:      implicits,
 		Args: map[string]string{
-			"outDir":            android.PathForModuleOut(ctx, "docs", "out").String(),
-			"srcJarDir":         android.PathForModuleOut(ctx, "docs", "srcjars").String(),
-			"stubsDir":          android.PathForModuleOut(ctx, "docs", "stubsDir").String(),
+			"outDir":            android.PathForModuleOut(ctx, "out").String(),
+			"srcJarDir":         android.PathForModuleOut(ctx, "srcjars").String(),
+			"stubsDir":          android.PathForModuleOut(ctx, "stubsDir").String(),
 			"srcJars":           strings.Join(j.srcJars.Strings(), " "),
 			"opts":              opts,
 			"bootclasspathArgs": bootClasspathArgs,
@@ -899,11 +900,11 @@
 	}
 
 	if BoolDefault(d.properties.Create_stubs, true) {
-		doclavaFlags += " -stubs " + android.PathForModuleOut(ctx, "docs", "stubsDir").String()
+		doclavaFlags += " -stubs " + android.PathForModuleOut(ctx, "stubsDir").String()
 	}
 
 	if Bool(d.properties.Write_sdk_values) {
-		doclavaFlags += " -sdkvalues " + android.PathForModuleOut(ctx, "docs", "out").String()
+		doclavaFlags += " -sdkvalues " + android.PathForModuleOut(ctx, "out").String()
 	}
 	return doclavaFlags, MetalavaFlags
 }
@@ -915,7 +916,7 @@
 			"static_doc_index_redirect")
 		*implicits = append(*implicits, static_doc_index_redirect)
 		cmds = cmds + " && cp " + static_doc_index_redirect.String() + " " +
-			android.PathForModuleOut(ctx, "docs", "out", "index.html").String()
+			android.PathForModuleOut(ctx, "out", "index.html").String()
 	}
 
 	if String(d.properties.Static_doc_properties) != "" {
@@ -923,7 +924,7 @@
 			"static_doc_properties")
 		*implicits = append(*implicits, static_doc_properties)
 		cmds = cmds + " && cp " + static_doc_properties.String() + " " +
-			android.PathForModuleOut(ctx, "docs", "out", "source.properties").String()
+			android.PathForModuleOut(ctx, "out", "source.properties").String()
 	}
 	return cmds
 }
@@ -931,18 +932,16 @@
 func (d *Droiddoc) collectMetalavaAnnotationsFlags(
 	ctx android.ModuleContext, implicits *android.Paths, implicitOutputs *android.WritablePaths) string {
 	var flags string
-	if String(d.properties.Metalava_previous_api) != "" {
-		previousApi := ctx.ExpandSource(String(d.properties.Metalava_previous_api),
-			"metalava_previous_api")
-		flags += " --previous-api " + previousApi.String()
-		*implicits = append(*implicits, previousApi)
-	}
-
 	if Bool(d.properties.Metalava_annotations_enabled) {
 		if String(d.properties.Metalava_previous_api) == "" {
 			ctx.PropertyErrorf("metalava_previous_api",
 				"has to be non-empty if annotations was enabled!")
 		}
+		previousApi := ctx.ExpandSource(String(d.properties.Metalava_previous_api),
+			"metalava_previous_api")
+		*implicits = append(*implicits, previousApi)
+		flags += " --previous-api " + previousApi.String()
+
 		flags += " --include-annotations --migrate-nullness"
 
 		d.annotationsZip = android.PathForModuleOut(ctx, ctx.ModuleName()+"_annotations.zip")
@@ -971,12 +970,12 @@
 }
 
 func (d *Droiddoc) collectMetalavaDocsFlags(ctx android.ModuleContext,
-	bootClasspathArgs, classpathArgs string) string {
-	return " --doc-stubs " + android.PathForModuleOut(ctx, "docs", "docStubsDir").String() +
-		" --write-doc-stubs-source-list $outDir/doc_stubs_src_list " +
+	bootClasspathArgs, classpathArgs, outDir, docStubsDir string) string {
+	return " --doc-stubs " + docStubsDir +
+		" --write-doc-stubs-source-list " + android.PathForModuleOut(ctx, "doc_stubs.srclist").String() +
 		" --generate-documentation ${config.JavadocCmd} -encoding UTF-8 DOC_STUBS_SOURCE_LIST " +
 		bootClasspathArgs + " " + classpathArgs + " " + " -sourcepath " +
-		android.PathForModuleOut(ctx, "docs", "docStubsDir").String() + " -quiet -d $outDir "
+		docStubsDir + " -quiet -d " + outDir
 }
 
 func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) {
@@ -1009,15 +1008,18 @@
 		return
 	}
 
+	outDir := android.PathForModuleOut(ctx, "out").String()
 	flags.doclavaStubsFlags, flags.metalavaStubsFlags = d.collectStubsFlags(ctx, &implicitOutputs)
 	if Bool(d.properties.Metalava_enabled) {
 		opts := flags.metalavaStubsFlags
 		flags.metalavaAnnotationsFlags = d.collectMetalavaAnnotationsFlags(ctx, &implicits, &implicitOutputs)
 		opts += flags.metalavaAnnotationsFlags
+		docStubsDir := android.PathForModuleOut(ctx, "docStubsDir").String()
 		if strings.Contains(flags.args, "--generate-documentation") {
 			// TODO(nanzhang): Add a Soong property to handle documentation args.
 			flags.doclavaDocsFlags = d.collectDoclavaDocsFlags(ctx, &implicits, javaVersion, jsilver, doclava)
-			flags.metalavaDocsFlags = d.collectMetalavaDocsFlags(ctx, flags.bootClasspathArgs, flags.classpathArgs)
+			flags.metalavaDocsFlags = d.collectMetalavaDocsFlags(ctx,
+				flags.bootClasspathArgs, flags.classpathArgs, outDir, docStubsDir)
 			opts += " " + strings.Split(flags.args, "--generate-documentation")[0] + " " +
 				flags.metalavaDocsFlags + flags.doclavaDocsFlags +
 				" " + strings.Split(flags.args, "--generate-documentation")[1]
@@ -1032,9 +1034,10 @@
 			Implicits:       implicits,
 			ImplicitOutputs: implicitOutputs,
 			Args: map[string]string{
-				"outDir":            android.PathForModuleOut(ctx, "docs", "out").String(),
-				"srcJarDir":         android.PathForModuleOut(ctx, "docs", "srcjars").String(),
-				"stubsDir":          android.PathForModuleOut(ctx, "docs", "stubsDir").String(),
+				"outDir":            outDir,
+				"srcJarDir":         android.PathForModuleOut(ctx, "srcjars").String(),
+				"stubsDir":          android.PathForModuleOut(ctx, "stubsDir").String(),
+				"docStubsDir":       docStubsDir,
 				"srcJars":           strings.Join(d.Javadoc.srcJars.Strings(), " "),
 				"javaVersion":       javaVersion,
 				"bootclasspathArgs": flags.bootClasspathArgs,
@@ -1055,9 +1058,9 @@
 			Implicits:       implicits,
 			ImplicitOutputs: implicitOutputs,
 			Args: map[string]string{
-				"outDir":            android.PathForModuleOut(ctx, "docs", "out").String(),
-				"srcJarDir":         android.PathForModuleOut(ctx, "docs", "srcjars").String(),
-				"stubsDir":          android.PathForModuleOut(ctx, "docs", "stubsDir").String(),
+				"outDir":            outDir,
+				"srcJarDir":         android.PathForModuleOut(ctx, "srcjars").String(),
+				"stubsDir":          android.PathForModuleOut(ctx, "stubsDir").String(),
 				"srcJars":           strings.Join(d.Javadoc.srcJars.Strings(), " "),
 				"opts":              flags.doclavaDocsFlags + flags.doclavaStubsFlags + " " + flags.args,
 				"bootclasspathArgs": flags.bootClasspathArgs,