Merge "Pass --sdk-extensions-{root,info} to metalava"

This commit is contained in:
Mårten Kongstad
2022-09-08 06:08:43 +00:00
committed by Gerrit Code Review
2 changed files with 56 additions and 0 deletions

View File

@@ -17,6 +17,7 @@ package java
import (
"fmt"
"path/filepath"
"regexp"
"strings"
"github.com/google/blueprint/proptools"
@@ -142,6 +143,10 @@ type DroidstubsProperties struct {
// if set to true, collect the values used by the Dev tools and
// write them in files packaged with the SDK. Defaults to false.
Write_sdk_values *bool
// path or filegroup to file defining extension an SDK name <-> numerical ID mapping and
// what APIs exist in which SDKs; passed to metalava via --sdk-extensions-info
Extensions_info_file *string `android:"path"`
}
// Used by xsd_config
@@ -398,9 +403,20 @@ func (d *Droidstubs) apiLevelsGenerationFlags(ctx android.ModuleContext, cmd *an
filename := proptools.StringDefault(d.properties.Api_levels_jar_filename, "android.jar")
var dirs []string
var extensions_dir string
ctx.VisitDirectDepsWithTag(metalavaAPILevelsAnnotationsDirTag, func(m android.Module) {
if t, ok := m.(*ExportedDroiddocDir); ok {
extRegex := regexp.MustCompile(t.dir.String() + `/extensions/[0-9]+/public/.*\.jar`)
// Grab the first extensions_dir and we find while scanning ExportedDroiddocDir.deps;
// ideally this should be read from prebuiltApis.properties.Extensions_*
for _, dep := range t.deps {
if extRegex.MatchString(dep.String()) && d.properties.Extensions_info_file != nil {
if extensions_dir == "" {
extensions_dir = t.dir.String() + "/extensions"
}
cmd.Implicit(dep)
}
if dep.Base() == filename {
cmd.Implicit(dep)
}
@@ -445,6 +461,16 @@ func (d *Droidstubs) apiLevelsGenerationFlags(ctx android.ModuleContext, cmd *an
cmd.FlagWithArg("--android-jar-pattern ", fmt.Sprintf("%s/%%/%s/%s", dir, sdkDir, filename))
}
}
if d.properties.Extensions_info_file != nil {
if extensions_dir == "" {
ctx.ModuleErrorf("extensions_info_file set, but no SDK extension dirs found")
}
info_file := android.PathForModuleSrc(ctx, *d.properties.Extensions_info_file)
cmd.Implicit(info_file)
cmd.FlagWithArg("--sdk-extensions-root ", extensions_dir)
cmd.FlagWithArg("--sdk-extensions-info ", info_file.String())
}
}
func metalavaUseRbe(ctx android.ModuleContext) bool {

View File

@@ -259,3 +259,33 @@ func checkSystemModulesUseByDroidstubs(t *testing.T, ctx *android.TestContext, m
t.Errorf("inputs of %q must be []string{%q}, but was %#v.", moduleName, systemJar, systemJars)
}
}
func TestDroidstubsWithSdkExtensions(t *testing.T) {
ctx, _ := testJavaWithFS(t, `
droiddoc_exported_dir {
name: "sdk-dir",
path: "sdk",
}
droidstubs {
name: "baz-stubs",
api_levels_annotations_dirs: ["sdk-dir"],
api_levels_annotations_enabled: true,
extensions_info_file: ":info-file",
}
filegroup {
name: "info-file",
srcs: ["sdk/extensions/info.txt"],
}
`,
map[string][]byte{
"sdk/extensions/1/public/some-mainline-module-stubs.jar": nil,
"sdk/extensions/info.txt": nil,
})
m := ctx.ModuleForTests("baz-stubs", "android_common")
manifest := m.Output("metalava.sbox.textproto")
cmdline := String(android.RuleBuilderSboxProtoForTests(t, manifest).Commands[0].Command)
android.AssertStringDoesContain(t, "sdk-extensions-root present", cmdline, "--sdk-extensions-root sdk/extensions")
android.AssertStringDoesContain(t, "sdk-extensions-info present", cmdline, "--sdk-extensions-info sdk/extensions/info.txt")
}