API: Add baseline file for API check

Bug: 139128921
Test: m apicheck
Change-Id: Ia10c51fdca10e2a3d1cc3a7bc6d798d447c7b729
Merged-In: Ia10c51fdca10e2a3d1cc3a7bc6d798d447c7b729
This commit is contained in:
Adrian Roos 2019-08-12 17:54:09 +02:00
parent 43377eeb38
commit 4937c4a8ba
1 changed files with 33 additions and 9 deletions

View File

@ -227,6 +227,9 @@ type ApiToCheck struct {
// :module syntax). // :module syntax).
Removed_api_file *string `android:"path"` Removed_api_file *string `android:"path"`
// If not blank, path to the baseline txt file for approved API check violations.
Baseline_file *string `android:"path"`
// Arguments to the apicheck tool. // Arguments to the apicheck tool.
Args *string Args *string
} }
@ -1562,16 +1565,25 @@ func (d *Droidstubs) transformMetalava(ctx android.ModuleContext, implicits andr
} }
func (d *Droidstubs) transformCheckApi(ctx android.ModuleContext, func (d *Droidstubs) transformCheckApi(ctx android.ModuleContext,
apiFile, removedApiFile android.Path, implicits android.Paths, apiFile, removedApiFile android.Path, baselineFile android.OptionalPath, updatedBaselineOut android.WritablePath, implicits android.Paths,
javaVersion, bootclasspathArgs, classpathArgs, sourcepathArgs, opts, subdir, msg string, javaVersion, bootclasspathArgs, classpathArgs, sourcepathArgs, opts, subdir, msg string,
output android.WritablePath) { output android.WritablePath) {
implicits = append(android.Paths{apiFile, removedApiFile, d.apiFile, d.removedApiFile}, implicits...)
var implicitOutputs android.WritablePaths
if baselineFile.Valid() {
implicits = append(implicits, baselineFile.Path())
implicitOutputs = append(implicitOutputs, updatedBaselineOut)
}
ctx.Build(pctx, android.BuildParams{ ctx.Build(pctx, android.BuildParams{
Rule: metalavaApiCheck, Rule: metalavaApiCheck,
Description: "Metalava Check API", Description: "Metalava Check API",
Output: output, Output: output,
Inputs: d.Javadoc.srcFiles, Inputs: d.Javadoc.srcFiles,
Implicits: append(android.Paths{apiFile, removedApiFile, d.apiFile, d.removedApiFile}, Implicits: implicits,
implicits...), ImplicitOutputs: implicitOutputs,
Args: map[string]string{ Args: map[string]string{
"srcJarDir": android.PathForModuleOut(ctx, subdir, "srcjars").String(), "srcJarDir": android.PathForModuleOut(ctx, subdir, "srcjars").String(),
"srcJars": strings.Join(d.Javadoc.srcJars.Strings(), " "), "srcJars": strings.Join(d.Javadoc.srcJars.Strings(), " "),
@ -1655,13 +1667,19 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
"check_api.current.api_file") "check_api.current.api_file")
removedApiFile := ctx.ExpandSource(String(d.properties.Check_api.Current.Removed_api_file), removedApiFile := ctx.ExpandSource(String(d.properties.Check_api.Current.Removed_api_file),
"check_api.current_removed_api_file") "check_api.current_removed_api_file")
baselineFile := ctx.ExpandOptionalSource(d.properties.Check_api.Current.Baseline_file,
"check_api.current.baseline_file")
d.checkCurrentApiTimestamp = android.PathForModuleOut(ctx, "check_current_api.timestamp") d.checkCurrentApiTimestamp = android.PathForModuleOut(ctx, "check_current_api.timestamp")
opts := " " + d.Javadoc.args + " --check-compatibility:api:current " + apiFile.String() + opts := " " + d.Javadoc.args + " --check-compatibility:api:current " + apiFile.String() +
" --check-compatibility:removed:current " + removedApiFile.String() + " --check-compatibility:removed:current " + removedApiFile.String() +
flags.metalavaInclusionAnnotationsFlags + flags.metalavaMergeAnnoDirFlags + " " flags.metalavaInclusionAnnotationsFlags + flags.metalavaMergeAnnoDirFlags + " "
baselineOut := android.PathForModuleOut(ctx, "current_baseline.txt")
if baselineFile.Valid() {
opts = opts + "--baseline " + baselineFile.String() + " --update-baseline " + baselineOut.String() + " "
}
d.transformCheckApi(ctx, apiFile, removedApiFile, metalavaCheckApiImplicits, d.transformCheckApi(ctx, apiFile, removedApiFile, baselineFile, baselineOut, metalavaCheckApiImplicits,
javaVersion, flags.bootClasspathArgs, flags.classpathArgs, flags.sourcepathArgs, opts, "current-apicheck", javaVersion, flags.bootClasspathArgs, flags.classpathArgs, flags.sourcepathArgs, opts, "current-apicheck",
fmt.Sprintf(`\n******************************\n`+ fmt.Sprintf(`\n******************************\n`+
`You have tried to change the API from what has been previously approved.\n\n`+ `You have tried to change the API from what has been previously approved.\n\n`+
@ -1686,13 +1704,19 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
"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), removedApiFile := ctx.ExpandSource(String(d.properties.Check_api.Last_released.Removed_api_file),
"check_api.last_released.removed_api_file") "check_api.last_released.removed_api_file")
baselineFile := ctx.ExpandOptionalSource(d.properties.Check_api.Last_released.Baseline_file,
"check_api.last_released.baseline_file")
d.checkLastReleasedApiTimestamp = android.PathForModuleOut(ctx, "check_last_released_api.timestamp") d.checkLastReleasedApiTimestamp = android.PathForModuleOut(ctx, "check_last_released_api.timestamp")
opts := " " + d.Javadoc.args + " --check-compatibility:api:released " + apiFile.String() + opts := " " + d.Javadoc.args + " --check-compatibility:api:released " + apiFile.String() +
flags.metalavaInclusionAnnotationsFlags + " --check-compatibility:removed:released " + flags.metalavaInclusionAnnotationsFlags + " --check-compatibility:removed:released " +
removedApiFile.String() + flags.metalavaMergeAnnoDirFlags + " " removedApiFile.String() + flags.metalavaMergeAnnoDirFlags + " "
baselineOut := android.PathForModuleOut(ctx, "last_released_baseline.txt")
if baselineFile.Valid() {
opts = opts + "--baseline " + baselineFile.String() + " --update-baseline " + baselineOut.String() + " "
}
d.transformCheckApi(ctx, apiFile, removedApiFile, metalavaCheckApiImplicits, d.transformCheckApi(ctx, apiFile, removedApiFile, baselineFile, baselineOut, metalavaCheckApiImplicits,
javaVersion, flags.bootClasspathArgs, flags.classpathArgs, flags.sourcepathArgs, opts, "last-apicheck", javaVersion, flags.bootClasspathArgs, flags.classpathArgs, flags.sourcepathArgs, opts, "last-apicheck",
`\n******************************\n`+ `\n******************************\n`+
`You have tried to change the API from what has been previously released in\n`+ `You have tried to change the API from what has been previously released in\n`+