diff options
author | Nan Zhang <nanzhang@google.com> | 2018-08-24 17:32:54 +0000 |
---|---|---|
committer | Nan Zhang <nanzhang@google.com> | 2018-08-24 11:37:33 -0700 |
commit | 2760dfc03c3e4bfd81861f92c615ded77ea89007 (patch) | |
tree | 1485acbbd9f9b315fc6fd34cccf4231c9b183f87 /java/droiddoc.go | |
parent | cde4e89c27a54c0c90cb5dbe6c0a2672b333899e (diff) | |
download | android_build_soong-2760dfc03c3e4bfd81861f92c615ded77ea89007.tar.gz android_build_soong-2760dfc03c3e4bfd81861f92c615ded77ea89007.tar.bz2 android_build_soong-2760dfc03c3e4bfd81861f92c615ded77ea89007.zip |
Revert "Revert "Make Metalava checkapi a seperate run.""
This reverts commit ec716b4151a27ed115cfa50fb10a6e1f9efaac93.
Reason for revert:
This is second attempt for Make Metalava checkapi a seperate run.
The first attept didn't work since Metalava also need sources,
classpath, and etc, not like how old Doclava apicheck works.
Test: cherry-pick go/ag/4832335 in internal master, and do 'm clean && m
-j checkapi', it failed with erros which is expected.
Bug: b/113126618, b/113131828
Change-Id: I664b7838d15615905a2e798b1df832218031dfe7
Diffstat (limited to 'java/droiddoc.go')
-rw-r--r-- | java/droiddoc.go | 122 |
1 files changed, 78 insertions, 44 deletions
diff --git a/java/droiddoc.go b/java/droiddoc.go index ac4f86f2..52db7057 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -88,6 +88,24 @@ var ( }, "outDir", "srcJarDir", "stubsDir", "docStubsDir", "srcJars", "javaVersion", "bootclasspathArgs", "classpathArgs", "sourcepath", "opts", "docZip") + + metalavaApiCheck = pctx.AndroidStaticRule("metalavaApiCheck", + blueprint.RuleParams{ + Command: `( rm -rf "$srcJarDir" && mkdir -p "$srcJarDir" && ` + + `${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 ` + + `$opts && touch $out ) || ` + + `( echo -e "$msg" ; exit 38 )`, + CommandDeps: []string{ + "${config.ZipSyncCmd}", + "${config.JavaCmd}", + "${config.MetalavaJar}", + }, + Rspfile: "$out.rsp", + RspfileContent: "$in", + }, + "srcJarDir", "srcJars", "javaVersion", "bootclasspathArgs", "classpathArgs", "sourcepath", "opts", "msg") ) func init() { @@ -288,10 +306,9 @@ type droiddocBuilderFlags struct { doclavaDocsFlags string postDoclavaCmds string - metalavaStubsFlags string - metalavaAnnotationsFlags string - metalavaJavadocFlags string - metalavaCompatibilityCheckFlags string + metalavaStubsFlags string + metalavaAnnotationsFlags string + metalavaJavadocFlags string metalavaDokkaFlags string } @@ -1014,38 +1031,6 @@ func (d *Droiddoc) collectMetalavaDokkaFlags(ctx android.ModuleContext, implicit docStubsDir + " " + classpathArgs + " -format dac -dacRoot /reference/kotlin -output " + outDir } -func (d *Droiddoc) collectMetalavaCompatibilityCheckFlags(ctx android.ModuleContext, - implicits *android.Paths) string { - var flags string - if d.checkCurrentApi() && !ctx.Config().IsPdkBuild() { - apiFile := ctx.ExpandSource(String(d.properties.Check_api.Current.Api_file), - "check_api.current.api_file") - removedApiFile := ctx.ExpandSource(String(d.properties.Check_api.Current.Removed_api_file), - "check_api.current_removed_api_file") - - *implicits = append(*implicits, apiFile) - *implicits = append(*implicits, removedApiFile) - - flags = " --check-compatibility:api:current " + apiFile.String() + - " --check-compatibility:removed:current " + removedApiFile.String() + " " - } - - if d.checkLastReleasedApi() && !ctx.Config().IsPdkBuild() { - apiFile := ctx.ExpandSource(String(d.properties.Check_api.Last_released.Api_file), - "check_api.last_released.api_file") - removedApiFile := ctx.ExpandSource(String(d.properties.Check_api.Last_released.Removed_api_file), - "check_api.last_released.removed_api_file") - - *implicits = append(*implicits, apiFile) - *implicits = append(*implicits, removedApiFile) - - flags = flags + " --check-compatibility:api:released " + apiFile.String() + - " --check-compatibility:removed:released " + removedApiFile.String() + " " - } - - return flags -} - func (d *Droiddoc) transformMetalava(ctx android.ModuleContext, implicits android.Paths, implicitOutputs android.WritablePaths, outDir, docStubsDir, javaVersion, bootclasspathArgs, classpathArgs, opts string) { @@ -1117,6 +1102,29 @@ func (d *Droiddoc) transformCheckApi(ctx android.ModuleContext, apiFile, removed }) } +func (d *Droiddoc) transformMetalavaCheckApi(ctx android.ModuleContext, apiFile, removedApiFile android.Path, + implicits android.Paths, javaVersion, bootclasspathArgs, classpathArgs, opts, msg string, + output android.WritablePath) { + ctx.Build(pctx, android.BuildParams{ + Rule: metalavaApiCheck, + Description: "Metalava Check API", + Output: output, + Inputs: d.Javadoc.srcFiles, + Implicits: append(android.Paths{apiFile, removedApiFile, d.apiFile, d.removedApiFile}, + implicits...), + Args: map[string]string{ + "srcJarDir": android.PathForModuleOut(ctx, "srcjars").String(), + "srcJars": strings.Join(d.Javadoc.srcJars.Strings(), " "), + "javaVersion": javaVersion, + "bootclasspathArgs": bootclasspathArgs, + "classpathArgs": classpathArgs, + "sourcepath": strings.Join(d.Javadoc.sourcepaths.Strings(), ":"), + "opts": opts, + "msg": msg, + }, + }) +} + func (d *Droiddoc) transformUpdateApi(ctx android.ModuleContext, apiFile, removedApiFile android.Path, output android.WritablePath) { ctx.Build(pctx, android.BuildParams{ @@ -1152,6 +1160,7 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { } flags, err := d.initBuilderFlags(ctx, &implicits, deps) + metalavaCheckApiImplicits := implicits if err != nil { return } @@ -1159,7 +1168,6 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { flags.doclavaStubsFlags, flags.metalavaStubsFlags = d.collectStubsFlags(ctx, &implicitOutputs) if Bool(d.properties.Metalava_enabled) { flags.metalavaAnnotationsFlags = d.collectMetalavaAnnotationsFlags(ctx, &implicits, &implicitOutputs) - flags.metalavaCompatibilityCheckFlags = d.collectMetalavaCompatibilityCheckFlags(ctx, &implicits) outDir := android.PathForModuleOut(ctx, "out").String() docStubsDir := android.PathForModuleOut(ctx, "docStubsDir").String() // TODO(nanzhang): Add a Soong property to handle documentation args. @@ -1169,7 +1177,7 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { flags.dokkaClasspathArgs, outDir, docStubsDir) d.transformMetalava(ctx, implicits, implicitOutputs, outDir, docStubsDir, javaVersion, flags.bootClasspathArgs, flags.classpathArgs, flags.metalavaStubsFlags+ - flags.metalavaAnnotationsFlags+" "+flags.metalavaCompatibilityCheckFlags+" "+ + flags.metalavaAnnotationsFlags+" "+ strings.Split(flags.args, "--generate-documentation")[0]+ flags.metalavaDokkaFlags+" "+strings.Split(flags.args, "--generate-documentation")[1]) } else { @@ -1178,7 +1186,7 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { flags.doclavaDocsFlags = d.collectDoclavaDocsFlags(ctx, &implicits, jsilver, doclava) d.transformMetalava(ctx, implicits, implicitOutputs, outDir, docStubsDir, javaVersion, flags.bootClasspathArgs, flags.classpathArgs, flags.metalavaStubsFlags+ - flags.metalavaAnnotationsFlags+" "+flags.metalavaCompatibilityCheckFlags+" "+ + flags.metalavaAnnotationsFlags+" "+ strings.Split(flags.args, "--generate-documentation")[0]+ flags.metalavaJavadocFlags+flags.doclavaDocsFlags+ " "+strings.Split(flags.args, "--generate-documentation")[1]) @@ -1186,8 +1194,7 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { } else { d.transformMetalava(ctx, implicits, implicitOutputs, outDir, docStubsDir, javaVersion, flags.bootClasspathArgs, flags.classpathArgs, - flags.metalavaStubsFlags+flags.metalavaAnnotationsFlags+" "+ - flags.metalavaCompatibilityCheckFlags+flags.args) + flags.metalavaStubsFlags+flags.metalavaAnnotationsFlags+" "+flags.args) } } else { flags.doclavaDocsFlags = d.collectDoclavaDocsFlags(ctx, &implicits, jsilver, doclava) @@ -1203,8 +1210,8 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { removedApiFile := ctx.ExpandSource(String(d.properties.Check_api.Current.Removed_api_file), "check_api.current_removed_api_file") + d.checkCurrentApiTimestamp = android.PathForModuleOut(ctx, "check_current_api.timestamp") if !Bool(d.properties.Metalava_enabled) { - d.checkCurrentApiTimestamp = android.PathForModuleOut(ctx, "check_current_api.timestamp") d.transformCheckApi(ctx, apiFile, removedApiFile, checkApiClasspath, fmt.Sprintf(`\n******************************\n`+ `You have tried to change the API from what has been previously approved.\n\n`+ @@ -1217,6 +1224,23 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { ` you will need approval.\n`+ `******************************\n`, ctx.ModuleName()), String(d.properties.Check_api.Current.Args), d.checkCurrentApiTimestamp) + } else { + opts := flags.args + " --check-compatibility:api:current " + apiFile.String() + + " --check-compatibility:removed:current " + removedApiFile.String() + " " + + d.transformMetalavaCheckApi(ctx, apiFile, removedApiFile, metalavaCheckApiImplicits, + javaVersion, flags.bootClasspathArgs, flags.classpathArgs, opts, + fmt.Sprintf(`\n******************************\n`+ + `You have tried to change the API from what has been previously approved.\n\n`+ + `To make these errors go away, you have two choices:\n`+ + ` 1. You can add '@hide' javadoc comments to the methods, etc. listed in the\n`+ + ` errors above.\n\n`+ + ` 2. You can update current.txt by executing the following command:\n`+ + ` make %s-update-current-api\n\n`+ + ` To submit the revised current.txt to the main Android repository,\n`+ + ` you will need approval.\n`+ + `******************************\n`, ctx.ModuleName()), + d.checkCurrentApiTimestamp) } d.updateCurrentApiTimestamp = android.PathForModuleOut(ctx, "update_current_api.timestamp") @@ -1229,15 +1253,25 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { removedApiFile := ctx.ExpandSource(String(d.properties.Check_api.Last_released.Removed_api_file), "check_api.last_released.removed_api_file") + d.checkLastReleasedApiTimestamp = android.PathForModuleOut(ctx, "check_last_released_api.timestamp") if !Bool(d.properties.Metalava_enabled) { - d.checkLastReleasedApiTimestamp = android.PathForModuleOut(ctx, "check_last_released_api.timestamp") - d.transformCheckApi(ctx, apiFile, removedApiFile, checkApiClasspath, `\n******************************\n`+ `You have tried to change the API from what has been previously released in\n`+ `an SDK. Please fix the errors listed above.\n`+ `******************************\n`, String(d.properties.Check_api.Last_released.Args), d.checkLastReleasedApiTimestamp) + } else { + opts := flags.args + " --check-compatibility:api:released " + apiFile.String() + + " --check-compatibility:removed:released " + removedApiFile.String() + " " + + d.transformMetalavaCheckApi(ctx, apiFile, removedApiFile, metalavaCheckApiImplicits, + javaVersion, flags.bootClasspathArgs, flags.classpathArgs, opts, + `\n******************************\n`+ + `You have tried to change the API from what has been previously released in\n`+ + `an SDK. Please fix the errors listed above.\n`+ + `******************************\n`, + d.checkLastReleasedApiTimestamp) } } } |