Add better error handling to bootDexJar function

aosp/2876754 missed adding error handling to one of the places which
consumes the dex jar deapexed from prebuilt apexes. This CL ensures that
when we have multiple prebuilt apexes _without_ flagging, the hiddenapi
processing code emits a more descriptive error "Multiple deapxers..."
rather than a cryptic error "<module> does not provide a dex jar"

Test: m nothing --no-skip-soong-tests

Change-Id: I80849fa7cca17d724ac53c94bb353b169175ee28
This commit is contained in:
Spandan Das
2024-01-17 18:26:27 +00:00
parent 1c4cc3d40e
commit 3a3920129d
5 changed files with 93 additions and 4 deletions

View File

@@ -44,7 +44,8 @@ type hiddenAPI struct {
//
// This must be the path to the unencoded dex jar as the encoded dex jar indirectly depends on
// this file so using the encoded dex jar here would result in a cycle in the ninja rules.
bootDexJarPath OptionalDexJarPath
bootDexJarPath OptionalDexJarPath
bootDexJarPathErr error
// The paths to the classes jars that contain classes and class members annotated with
// the UnsupportedAppUsage annotation that need to be extracted as part of the hidden API
@@ -56,7 +57,10 @@ type hiddenAPI struct {
uncompressDexState *bool
}
func (h *hiddenAPI) bootDexJar() OptionalDexJarPath {
func (h *hiddenAPI) bootDexJar(ctx android.ModuleErrorfContext) OptionalDexJarPath {
if h.bootDexJarPathErr != nil {
ctx.ModuleErrorf(h.bootDexJarPathErr.Error())
}
return h.bootDexJarPath
}
@@ -77,7 +81,7 @@ type hiddenAPIModule interface {
}
type hiddenAPIIntf interface {
bootDexJar() OptionalDexJarPath
bootDexJar(ctx android.ModuleErrorfContext) OptionalDexJarPath
classesJars() android.Paths
uncompressDex() *bool
}
@@ -126,6 +130,11 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.ModuleContext, dexJar OptionalDexJ
h.active = isModuleInBootClassPath(ctx, module)
}
// Store any error encountered during the initialization of hiddenapi structure (e.g. unflagged co-existing prebuilt apexes)
func (h *hiddenAPI) initHiddenAPIError(err error) {
h.bootDexJarPathErr = err
}
func isModuleInBootClassPath(ctx android.BaseModuleContext, module android.Module) bool {
// Get the configured platform and apex boot jars.
nonApexBootJars := ctx.Config().NonApexBootJars()