From 3a3920129dc42a143da1c28c440a25a74be78589 Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Wed, 17 Jan 2024 18:26:27 +0000 Subject: 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 " does not provide a dex jar" Test: m nothing --no-skip-soong-tests Change-Id: I80849fa7cca17d724ac53c94bb353b169175ee28 --- java/hiddenapi.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'java/hiddenapi.go') diff --git a/java/hiddenapi.go b/java/hiddenapi.go index e9ee3a2ea..5441a3b6e 100644 --- a/java/hiddenapi.go +++ b/java/hiddenapi.go @@ -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() -- cgit v1.2.3-59-g8ed1b