Add a few module visiting methods that return ModuleProxy.
Change a few places to use these new methods when visiting dependencies.
Bug: 358427516
Test: Manual verified the generated mk and ninja files.
Change-Id: I7426843d76d79d41eb60fce5e796c14f968a0f1d
diff --git a/genrule/genrule.go b/genrule/genrule.go
index e5222a4..6eefb45 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -112,6 +112,12 @@
return target.IsReplacedByPrebuilt()
}
+func (t hostToolDependencyTag) AllowDisabledModuleDependencyProxy(
+ ctx android.OtherModuleProviderContext, target android.ModuleProxy) bool {
+ return android.OtherModuleProviderOrDefault(
+ ctx, target, android.CommonPropertiesProviderKey).ReplacedByPrebuilt
+}
+
var _ android.AllowDisabledModuleDependency = (*hostToolDependencyTag)(nil)
type generatorProperties struct {
@@ -316,21 +322,18 @@
var packagedTools []android.PackagingSpec
if len(g.properties.Tools) > 0 {
seenTools := make(map[string]bool)
-
- ctx.VisitDirectDepsAllowDisabled(func(module android.Module) {
- switch tag := ctx.OtherModuleDependencyTag(module).(type) {
+ ctx.VisitDirectDepsProxyAllowDisabled(func(proxy android.ModuleProxy) {
+ switch tag := ctx.OtherModuleDependencyTag(proxy).(type) {
case hostToolDependencyTag:
- tool := ctx.OtherModuleName(module)
// Necessary to retrieve any prebuilt replacement for the tool, since
// toolDepsMutator runs too late for the prebuilt mutators to have
// replaced the dependency.
- module = android.PrebuiltGetPreferred(ctx, module)
-
- switch t := module.(type) {
- case android.HostToolProvider:
+ module := android.PrebuiltGetPreferred(ctx, proxy)
+ tool := ctx.OtherModuleName(module)
+ if h, ok := android.OtherModuleProvider(ctx, module, android.HostToolProviderKey); ok {
// A HostToolProvider provides the path to a tool, which will be copied
// into the sandbox.
- if !t.(android.Module).Enabled(ctx) {
+ if !android.OtherModuleProviderOrDefault(ctx, module, android.CommonPropertiesProviderKey).Enabled {
if ctx.Config().AllowMissingDependencies() {
ctx.AddMissingDependencies([]string{tool})
} else {
@@ -338,13 +341,13 @@
}
return
}
- path := t.HostToolPath()
+ path := h.HostToolPath
if !path.Valid() {
ctx.ModuleErrorf("host tool %q missing output file", tool)
return
}
if specs := android.OtherModuleProviderOrDefault(
- ctx, t, android.InstallFilesProvider).TransitivePackagingSpecs.ToList(); specs != nil {
+ ctx, module, android.InstallFilesProvider).TransitivePackagingSpecs.ToList(); specs != nil {
// If the HostToolProvider has PackgingSpecs, which are definitions of the
// required relative locations of the tool and its dependencies, use those
// instead. They will be copied to those relative locations in the sbox
@@ -366,7 +369,7 @@
tools = append(tools, path.Path())
addLocationLabel(tag.label, toolLocation{android.Paths{path.Path()}})
}
- default:
+ } else {
ctx.ModuleErrorf("%q is not a host tool provider", tool)
return
}