Consolidate baseContext, BaseContext, and BaseModuleContext

blueprint.BaseModuleContext is the set of methods available to all
module-specific calls (GenerateBuildActions or mutators).  The
android package split the same functionality across baseContext (nee
androidBaseContext), BaseModuleContext, and BaseContext.
Consolidate all of them into android.BaseModuleContext.

Test: m checkbuild
Change-Id: I2d7f5c56fd4424032cb93edff6dc730ff33e4f1e
diff --git a/android/module.go b/android/module.go
index c3d5f6a..9d73859 100644
--- a/android/module.go
+++ b/android/module.go
@@ -56,7 +56,30 @@
 
 type ModuleBuildParams BuildParams
 
-type baseContext interface {
+// BaseModuleContext is the same as blueprint.BaseModuleContext except that Config() returns
+// a Config instead of an interface{}, plus some extra methods that return Android-specific information
+// about the current module.
+type BaseModuleContext interface {
+	ModuleName() string
+	ModuleDir() string
+	ModuleType() string
+	Config() Config
+
+	ContainsProperty(name string) bool
+	Errorf(pos scanner.Position, fmt string, args ...interface{})
+	ModuleErrorf(fmt string, args ...interface{})
+	PropertyErrorf(property, fmt string, args ...interface{})
+	Failed() bool
+
+	// GlobWithDeps returns a list of files that match the specified pattern but do not match any
+	// of the patterns in excludes.  It also adds efficient dependencies to rerun the primary
+	// builder whenever a file matching the pattern as added or removed, without rerunning if a
+	// file that does not match the pattern is added to a searched directory.
+	GlobWithDeps(pattern string, excludes []string) ([]string, error)
+
+	Fs() pathtools.FileSystem
+	AddNinjaFileDeps(deps ...string)
+
 	Target() Target
 	TargetPrimary() bool
 	MultiTargets() []Target
@@ -78,37 +101,12 @@
 	DeviceConfig() DeviceConfig
 }
 
+// Deprecated: use BaseModuleContext instead
 type BaseContext interface {
 	BaseModuleContext
-	baseContext
-}
-
-// BaseModuleContext is the same as blueprint.BaseModuleContext except that Config() returns
-// a Config instead of an interface{}.
-type BaseModuleContext interface {
-	ModuleName() string
-	ModuleDir() string
-	ModuleType() string
-	Config() Config
-
-	ContainsProperty(name string) bool
-	Errorf(pos scanner.Position, fmt string, args ...interface{})
-	ModuleErrorf(fmt string, args ...interface{})
-	PropertyErrorf(property, fmt string, args ...interface{})
-	Failed() bool
-
-	// GlobWithDeps returns a list of files that match the specified pattern but do not match any
-	// of the patterns in excludes.  It also adds efficient dependencies to rerun the primary
-	// builder whenever a file matching the pattern as added or removed, without rerunning if a
-	// file that does not match the pattern is added to a searched directory.
-	GlobWithDeps(pattern string, excludes []string) ([]string, error)
-
-	Fs() pathtools.FileSystem
-	AddNinjaFileDeps(deps ...string)
 }
 
 type ModuleContext interface {
-	baseContext
 	BaseModuleContext
 
 	// Deprecated: use ModuleContext.Build instead.
@@ -826,25 +824,26 @@
 	}
 }
 
-func (m *ModuleBase) baseContextFactory(ctx blueprint.BaseModuleContext) baseContextImpl {
-	return baseContextImpl{
-		target:        m.commonProperties.CompileTarget,
-		targetPrimary: m.commonProperties.CompilePrimary,
-		multiTargets:  m.commonProperties.CompileMultiTargets,
-		kind:          determineModuleKind(m, ctx),
-		config:        ctx.Config().(Config),
+func (m *ModuleBase) baseModuleContextFactory(ctx blueprint.BaseModuleContext) baseModuleContext {
+	return baseModuleContext{
+		BaseModuleContext: ctx,
+		target:            m.commonProperties.CompileTarget,
+		targetPrimary:     m.commonProperties.CompilePrimary,
+		multiTargets:      m.commonProperties.CompileMultiTargets,
+		kind:              determineModuleKind(m, ctx),
+		config:            ctx.Config().(Config),
 	}
 }
 
 func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) {
 	ctx := &moduleContext{
-		module:          m.module,
-		ModuleContext:   blueprintCtx,
-		baseContextImpl: m.baseContextFactory(blueprintCtx),
-		installDeps:     m.computeInstallDeps(blueprintCtx),
-		installFiles:    m.installFiles,
-		missingDeps:     blueprintCtx.GetMissingDependencies(),
-		variables:       make(map[string]string),
+		module:            m.module,
+		ModuleContext:     blueprintCtx,
+		baseModuleContext: m.baseModuleContextFactory(blueprintCtx),
+		installDeps:       m.computeInstallDeps(blueprintCtx),
+		installFiles:      m.installFiles,
+		missingDeps:       blueprintCtx.GetMissingDependencies(),
+		variables:         make(map[string]string),
 	}
 
 	if ctx.config.captureBuild {
@@ -917,7 +916,8 @@
 	m.variables = ctx.variables
 }
 
-type baseContextImpl struct {
+type baseModuleContext struct {
+	blueprint.BaseModuleContext
 	target        Target
 	multiTargets  []Target
 	targetPrimary bool
@@ -928,7 +928,7 @@
 
 type moduleContext struct {
 	blueprint.ModuleContext
-	baseContextImpl
+	baseModuleContext
 	installDeps     Paths
 	installFiles    Paths
 	checkbuildFiles Paths
@@ -1210,82 +1210,82 @@
 	return m.ModuleContext.FinalModule().(Module)
 }
 
-func (b *baseContextImpl) Target() Target {
+func (b *baseModuleContext) Target() Target {
 	return b.target
 }
 
-func (b *baseContextImpl) TargetPrimary() bool {
+func (b *baseModuleContext) TargetPrimary() bool {
 	return b.targetPrimary
 }
 
-func (b *baseContextImpl) MultiTargets() []Target {
+func (b *baseModuleContext) MultiTargets() []Target {
 	return b.multiTargets
 }
 
-func (b *baseContextImpl) Arch() Arch {
+func (b *baseModuleContext) Arch() Arch {
 	return b.target.Arch
 }
 
-func (b *baseContextImpl) Os() OsType {
+func (b *baseModuleContext) Os() OsType {
 	return b.target.Os
 }
 
-func (b *baseContextImpl) Host() bool {
+func (b *baseModuleContext) Host() bool {
 	return b.target.Os.Class == Host || b.target.Os.Class == HostCross
 }
 
-func (b *baseContextImpl) Device() bool {
+func (b *baseModuleContext) Device() bool {
 	return b.target.Os.Class == Device
 }
 
-func (b *baseContextImpl) Darwin() bool {
+func (b *baseModuleContext) Darwin() bool {
 	return b.target.Os == Darwin
 }
 
-func (b *baseContextImpl) Fuchsia() bool {
+func (b *baseModuleContext) Fuchsia() bool {
 	return b.target.Os == Fuchsia
 }
 
-func (b *baseContextImpl) Windows() bool {
+func (b *baseModuleContext) Windows() bool {
 	return b.target.Os == Windows
 }
 
-func (b *baseContextImpl) Debug() bool {
+func (b *baseModuleContext) Debug() bool {
 	return b.debug
 }
 
-func (b *baseContextImpl) PrimaryArch() bool {
+func (b *baseModuleContext) PrimaryArch() bool {
 	if len(b.config.Targets[b.target.Os]) <= 1 {
 		return true
 	}
 	return b.target.Arch.ArchType == b.config.Targets[b.target.Os][0].Arch.ArchType
 }
 
-func (b *baseContextImpl) AConfig() Config {
+func (b *baseModuleContext) AConfig() Config {
 	return b.config
 }
 
-func (b *baseContextImpl) DeviceConfig() DeviceConfig {
+func (b *baseModuleContext) DeviceConfig() DeviceConfig {
 	return DeviceConfig{b.config.deviceConfig}
 }
 
-func (b *baseContextImpl) Platform() bool {
+func (b *baseModuleContext) Platform() bool {
 	return b.kind == platformModule
 }
 
-func (b *baseContextImpl) DeviceSpecific() bool {
+func (b *baseModuleContext) DeviceSpecific() bool {
 	return b.kind == deviceSpecificModule
 }
 
-func (b *baseContextImpl) SocSpecific() bool {
+func (b *baseModuleContext) SocSpecific() bool {
 	return b.kind == socSpecificModule
 }
 
-func (b *baseContextImpl) ProductSpecific() bool {
+func (b *baseModuleContext) ProductSpecific() bool {
 	return b.kind == productSpecificModule
 }
 
-func (b *baseContextImpl) ProductServicesSpecific() bool {
+func (b *baseModuleContext) ProductServicesSpecific() bool {
 	return b.kind == productServicesSpecificModule
 }