Inherit default_visibility from parent package
Enhances the visibility mechanism to use the default_visibility
property of the closest ancestor package that has the property
specified.
Bug: 133290645
Test: m droid
Change-Id: I7248e9034a73894ac8d514f913316438c4d7c079
diff --git a/android/visibility.go b/android/visibility.go
index 2e01ff6..94af343 100644
--- a/android/visibility.go
+++ b/android/visibility.go
@@ -413,11 +413,7 @@
if ok {
rule = value.(compositeRule)
} else {
- packageQualifiedId := depQualified.getContainingPackageId()
- value, ok = moduleToVisibilityRule.Load(packageQualifiedId)
- if ok {
- rule = value.(compositeRule)
- }
+ rule = packageDefaultVisibility(ctx, depQualified)
}
if rule != nil && !rule.matches(qualified) {
ctx.ModuleErrorf("depends on %s which is not visible to this module", depQualified)
@@ -431,3 +427,20 @@
qualified := qualifiedModuleName{dir, moduleName}
return qualified
}
+
+func packageDefaultVisibility(ctx BaseModuleContext, moduleId qualifiedModuleName) compositeRule {
+ moduleToVisibilityRule := moduleToVisibilityRuleMap(ctx)
+ packageQualifiedId := moduleId.getContainingPackageId()
+ for {
+ value, ok := moduleToVisibilityRule.Load(packageQualifiedId)
+ if ok {
+ return value.(compositeRule)
+ }
+
+ if packageQualifiedId.isRootPackage() {
+ return nil
+ }
+
+ packageQualifiedId = packageQualifiedId.getContainingPackageId()
+ }
+}