diff --git a/android/neverallow.go b/android/neverallow.go index be396fc18..8355bb3b8 100644 --- a/android/neverallow.go +++ b/android/neverallow.go @@ -175,6 +175,8 @@ func neverallowMutator(ctx BottomUpMutatorContext) { dir := ctx.ModuleDir() + "/" properties := m.GetProperties() + osClass := ctx.Module().Target().Os.Class + for _, r := range neverallows { n := r.(*rule) if !n.appliesToPath(dir) { @@ -189,6 +191,10 @@ func neverallowMutator(ctx BottomUpMutatorContext) { continue } + if !n.appliesToOsClass(osClass) { + continue + } + if !n.appliesToDirectDeps(ctx) { continue } @@ -252,6 +258,8 @@ type Rule interface { InDirectDeps(deps ...string) Rule + WithOsClass(osClasses ...OsClass) Rule + ModuleType(types ...string) Rule NotModuleType(types ...string) Rule @@ -276,6 +284,8 @@ type rule struct { directDeps map[string]bool + osClasses []OsClass + moduleTypes []string unlessModuleTypes []string @@ -305,6 +315,11 @@ func (r *rule) InDirectDeps(deps ...string) Rule { return r } +func (r *rule) WithOsClass(osClasses ...OsClass) Rule { + r.osClasses = append(r.osClasses, osClasses...) + return r +} + func (r *rule) ModuleType(types ...string) Rule { r.moduleTypes = append(r.moduleTypes, types...) return r @@ -374,6 +389,9 @@ func (r *rule) String() string { for k := range r.directDeps { s += " deps:" + k } + for _, v := range r.osClasses { + s += " os:" + v.String() + } if len(r.reason) != 0 { s += " which is restricted because " + r.reason } @@ -402,6 +420,20 @@ func (r *rule) appliesToDirectDeps(ctx BottomUpMutatorContext) bool { return matches } +func (r *rule) appliesToOsClass(osClass OsClass) bool { + if len(r.osClasses) == 0 { + return true + } + + for _, c := range r.osClasses { + if c == osClass { + return true + } + } + + return false +} + func (r *rule) appliesToModuleType(moduleType string) bool { return (len(r.moduleTypes) == 0 || InList(moduleType, r.moduleTypes)) && !InList(moduleType, r.unlessModuleTypes) }