From 56dc66e2ea9611ef21bfd9a457e46d345417c7c5 Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Mon, 1 Mar 2021 13:18:44 +0000 Subject: [PATCH] Stop deapexer module type from being treated as a prebuilt Previously, the private deapexer module type was treated as a prebuilt as that was the quickest way to implement it. However, there is no reason why it should be as there is no corresponding source module type which it might replace. This change removes the prebuilt support to simplify the module type in preparation for future work. As part of that it extracts the logic for retrieving a single path from a PrebuiltSrcsSupplier to ensure consistent behavior. Bug: 181267622 Test: m droid Change-Id: I1b2bb49601c13a3fff99a0026c235eaa70d2e612 --- android/prebuilt.go | 31 +++++++++++++++++++++---------- apex/deapexer.go | 12 +----------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/android/prebuilt.go b/android/prebuilt.go index 817629948..2fc4782be 100644 --- a/android/prebuilt.go +++ b/android/prebuilt.go @@ -99,22 +99,24 @@ func (p *Prebuilt) Prefer() bool { return proptools.Bool(p.properties.Prefer) } -// The below source-related functions and the srcs, src fields are based on an assumption that -// prebuilt modules have a static source property at the moment. Currently there is only one -// exception, android_app_import, which chooses a source file depending on the product's DPI -// preference configs. We'll want to add native support for dynamic source cases if we end up having -// more modules like this. -func (p *Prebuilt) SingleSourcePath(ctx ModuleContext) Path { - if p.srcsSupplier != nil { - srcs := p.srcsSupplier(ctx, ctx.Module()) +// SingleSourcePathFromSupplier invokes the supplied supplier for the current module in the +// supplied context to retrieve a list of file paths, ensures that the returned list of file paths +// contains a single value and then assumes that is a module relative file path and converts it to +// a Path accordingly. +// +// Any issues, such as nil supplier or not exactly one file path will be reported as errors on the +// supplied context and this will return nil. +func SingleSourcePathFromSupplier(ctx ModuleContext, srcsSupplier PrebuiltSrcsSupplier, srcsPropertyName string) Path { + if srcsSupplier != nil { + srcs := srcsSupplier(ctx, ctx.Module()) if len(srcs) == 0 { - ctx.PropertyErrorf(p.srcsPropertyName, "missing prebuilt source file") + ctx.PropertyErrorf(srcsPropertyName, "missing prebuilt source file") return nil } if len(srcs) > 1 { - ctx.PropertyErrorf(p.srcsPropertyName, "multiple prebuilt source files") + ctx.PropertyErrorf(srcsPropertyName, "multiple prebuilt source files") return nil } @@ -128,6 +130,15 @@ func (p *Prebuilt) SingleSourcePath(ctx ModuleContext) Path { } } +// The below source-related functions and the srcs, src fields are based on an assumption that +// prebuilt modules have a static source property at the moment. Currently there is only one +// exception, android_app_import, which chooses a source file depending on the product's DPI +// preference configs. We'll want to add native support for dynamic source cases if we end up having +// more modules like this. +func (p *Prebuilt) SingleSourcePath(ctx ModuleContext) Path { + return SingleSourcePathFromSupplier(ctx, p.srcsSupplier, p.srcsPropertyName) +} + func (p *Prebuilt) UsePrebuilt() bool { return p.properties.UsePrebuilt } diff --git a/apex/deapexer.go b/apex/deapexer.go index 46ce41f4d..e7aa5514a 100644 --- a/apex/deapexer.go +++ b/apex/deapexer.go @@ -51,7 +51,6 @@ type DeapexerProperties struct { type Deapexer struct { android.ModuleBase - prebuilt android.Prebuilt properties DeapexerProperties apexFileProperties ApexFileProperties @@ -65,19 +64,10 @@ func privateDeapexerFactory() android.Module { &module.properties, &module.apexFileProperties, ) - android.InitPrebuiltModuleWithSrcSupplier(module, module.apexFileProperties.prebuiltApexSelector, "src") android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon) return module } -func (p *Deapexer) Prebuilt() *android.Prebuilt { - return &p.prebuilt -} - -func (p *Deapexer) Name() string { - return p.prebuilt.Name(p.ModuleBase.Name()) -} - func (p *Deapexer) DepsMutator(ctx android.BottomUpMutatorContext) { // Add dependencies from the java modules to which this exports files from the `.apex` file onto // this module so that they can access the `DeapexerInfo` object that this provides. @@ -88,7 +78,7 @@ func (p *Deapexer) DepsMutator(ctx android.BottomUpMutatorContext) { } func (p *Deapexer) GenerateAndroidBuildActions(ctx android.ModuleContext) { - p.inputApex = p.Prebuilt().SingleSourcePath(ctx) + p.inputApex = android.SingleSourcePathFromSupplier(ctx, p.apexFileProperties.prebuiltApexSelector, "src") // Create and remember the directory into which the .apex file's contents will be unpacked. deapexerOutput := android.PathForModuleOut(ctx, "deapexer")