Merge "Pass API surface specific extension jars to Metalava" into main am: 6f581637c1
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/3061686 Change-Id: Iaa1c79e57f5aba0e21fc2811b28e670539b8357f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -614,11 +614,36 @@ func (d *Droidstubs) apiLevelsGenerationFlags(ctx android.ModuleContext, cmd *an
|
|||||||
|
|
||||||
filename := proptools.StringDefault(d.properties.Api_levels_jar_filename, "android.jar")
|
filename := proptools.StringDefault(d.properties.Api_levels_jar_filename, "android.jar")
|
||||||
|
|
||||||
|
// TODO: Avoid the duplication of API surfaces, reuse apiScope.
|
||||||
|
// Add all relevant --android-jar-pattern patterns for Metalava.
|
||||||
|
// When parsing a stub jar for a specific version, Metalava picks the first pattern that defines
|
||||||
|
// an actual file present on disk (in the order the patterns were passed). For system APIs for
|
||||||
|
// privileged apps that are only defined since API level 21 (Lollipop), fallback to public stubs
|
||||||
|
// for older releases. Similarly, module-lib falls back to system API.
|
||||||
|
var sdkDirs []string
|
||||||
|
switch proptools.StringDefault(d.properties.Api_levels_sdk_type, "public") {
|
||||||
|
case "system-server":
|
||||||
|
sdkDirs = []string{"system-server", "module-lib", "system", "public"}
|
||||||
|
case "module-lib":
|
||||||
|
sdkDirs = []string{"module-lib", "system", "public"}
|
||||||
|
case "system":
|
||||||
|
sdkDirs = []string{"system", "public"}
|
||||||
|
case "public":
|
||||||
|
sdkDirs = []string{"public"}
|
||||||
|
default:
|
||||||
|
ctx.PropertyErrorf("api_levels_sdk_type", "needs to be one of %v", allowedApiLevelSdkTypes)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use the first item in the sdkDirs array as that is the sdk type for the target API levels
|
||||||
|
// being generated but has the advantage over `Api_levels_sdk_type` as it has been validated.
|
||||||
|
extensionsPattern := fmt.Sprintf(`/extensions/[0-9]+/%s/.*\.jar`, sdkDirs[0])
|
||||||
|
|
||||||
var dirs []string
|
var dirs []string
|
||||||
var extensions_dir string
|
var extensions_dir string
|
||||||
ctx.VisitDirectDepsWithTag(metalavaAPILevelsAnnotationsDirTag, func(m android.Module) {
|
ctx.VisitDirectDepsWithTag(metalavaAPILevelsAnnotationsDirTag, func(m android.Module) {
|
||||||
if t, ok := m.(*ExportedDroiddocDir); ok {
|
if t, ok := m.(*ExportedDroiddocDir); ok {
|
||||||
extRegex := regexp.MustCompile(t.dir.String() + `/extensions/[0-9]+/public/.*\.jar`)
|
extRegex := regexp.MustCompile(t.dir.String() + extensionsPattern)
|
||||||
|
|
||||||
// Grab the first extensions_dir and we find while scanning ExportedDroiddocDir.deps;
|
// Grab the first extensions_dir and we find while scanning ExportedDroiddocDir.deps;
|
||||||
// ideally this should be read from prebuiltApis.properties.Extensions_*
|
// ideally this should be read from prebuiltApis.properties.Extensions_*
|
||||||
@@ -650,26 +675,6 @@ func (d *Droidstubs) apiLevelsGenerationFlags(ctx android.ModuleContext, cmd *an
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Add all relevant --android-jar-pattern patterns for Metalava.
|
|
||||||
// When parsing a stub jar for a specific version, Metalava picks the first pattern that defines
|
|
||||||
// an actual file present on disk (in the order the patterns were passed). For system APIs for
|
|
||||||
// privileged apps that are only defined since API level 21 (Lollipop), fallback to public stubs
|
|
||||||
// for older releases. Similarly, module-lib falls back to system API.
|
|
||||||
var sdkDirs []string
|
|
||||||
switch proptools.StringDefault(d.properties.Api_levels_sdk_type, "public") {
|
|
||||||
case "system-server":
|
|
||||||
sdkDirs = []string{"system-server", "module-lib", "system", "public"}
|
|
||||||
case "module-lib":
|
|
||||||
sdkDirs = []string{"module-lib", "system", "public"}
|
|
||||||
case "system":
|
|
||||||
sdkDirs = []string{"system", "public"}
|
|
||||||
case "public":
|
|
||||||
sdkDirs = []string{"public"}
|
|
||||||
default:
|
|
||||||
ctx.PropertyErrorf("api_levels_sdk_type", "needs to be one of %v", allowedApiLevelSdkTypes)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, sdkDir := range sdkDirs {
|
for _, sdkDir := range sdkDirs {
|
||||||
for _, dir := range dirs {
|
for _, dir := range dirs {
|
||||||
cmd.FlagWithArg("--android-jar-pattern ", fmt.Sprintf("%s/%%/%s/%s", dir, sdkDir, filename))
|
cmd.FlagWithArg("--android-jar-pattern ", fmt.Sprintf("%s/%%/%s/%s", dir, sdkDir, filename))
|
||||||
|
Reference in New Issue
Block a user