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
This commit is contained in:
Paul Duffin
2019-06-20 16:38:08 +01:00
parent e2453c705f
commit e484f47a63
4 changed files with 106 additions and 11 deletions

View File

@@ -413,11 +413,7 @@ func visibilityRuleEnforcer(ctx TopDownMutatorContext) {
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 @@ func createQualifiedModuleName(ctx BaseModuleContext) qualifiedModuleName {
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()
}
}