From 4937c4a8ba86ba9ceb7600f3d89e69a843756421 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Mon, 12 Aug 2019 17:54:09 +0200 Subject: API: Add baseline file for API check Bug: 139128921 Test: m apicheck Change-Id: Ia10c51fdca10e2a3d1cc3a7bc6d798d447c7b729 Merged-In: Ia10c51fdca10e2a3d1cc3a7bc6d798d447c7b729 --- java/droiddoc.go | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/java/droiddoc.go b/java/droiddoc.go index fd7e2a48..6bac5bb7 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -227,6 +227,9 @@ type ApiToCheck struct { // :module syntax). 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. Args *string } @@ -1562,16 +1565,25 @@ func (d *Droidstubs) transformMetalava(ctx android.ModuleContext, implicits andr } 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, 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{ - Rule: metalavaApiCheck, - Description: "Metalava Check API", - Output: output, - Inputs: d.Javadoc.srcFiles, - Implicits: append(android.Paths{apiFile, removedApiFile, d.apiFile, d.removedApiFile}, - implicits...), + Rule: metalavaApiCheck, + Description: "Metalava Check API", + Output: output, + Inputs: d.Javadoc.srcFiles, + Implicits: implicits, + ImplicitOutputs: implicitOutputs, Args: map[string]string{ "srcJarDir": android.PathForModuleOut(ctx, subdir, "srcjars").String(), "srcJars": strings.Join(d.Javadoc.srcJars.Strings(), " "), @@ -1655,13 +1667,19 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { "check_api.current.api_file") removedApiFile := ctx.ExpandSource(String(d.properties.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") opts := " " + d.Javadoc.args + " --check-compatibility:api:current " + apiFile.String() + " --check-compatibility:removed:current " + removedApiFile.String() + 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", fmt.Sprintf(`\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") removedApiFile := ctx.ExpandSource(String(d.properties.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") opts := " " + d.Javadoc.args + " --check-compatibility:api:released " + apiFile.String() + flags.metalavaInclusionAnnotationsFlags + " --check-compatibility:removed:released " + 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", `\n******************************\n`+ `You have tried to change the API from what has been previously released in\n`+ -- cgit v1.2.3