Expand neverallow for sdk_version: none

Allow the platform stubs to specify sdk_version: none,
and add generic support for a regexp matcher.

Bug: 144149403
Test: m
Change-Id: Icaece0d9797bace8ae9741f7a029b9ea57fcbbb9
This commit is contained in:
Anton Hansson
2020-04-09 14:18:21 +01:00
parent 0d4b9e32d0
commit 453764070d
2 changed files with 33 additions and 1 deletions

View File

@@ -17,6 +17,7 @@ package android
import ( import (
"path/filepath" "path/filepath"
"reflect" "reflect"
"regexp"
"strconv" "strconv"
"strings" "strings"
@@ -147,7 +148,8 @@ func createLibcoreRules() []Rule {
rules := []Rule{ rules := []Rule{
NeverAllow(). NeverAllow().
NotIn(coreLibraryProjects...). NotIn(coreLibraryProjects...).
With("sdk_version", "none"), With("sdk_version", "none").
WithoutMatcher("name", Regexp("^android_.*stubs_current$")),
} }
return rules return rules
@@ -286,6 +288,18 @@ func (m *startsWithMatcher) String() string {
return ".starts-with(" + m.prefix + ")" return ".starts-with(" + m.prefix + ")"
} }
type regexMatcher struct {
re *regexp.Regexp
}
func (m *regexMatcher) test(value string) bool {
return m.re.MatchString(value)
}
func (m *regexMatcher) String() string {
return ".regexp(" + m.re.String() + ")"
}
type isSetMatcher struct{} type isSetMatcher struct{}
func (m *isSetMatcher) test(value string) bool { func (m *isSetMatcher) test(value string) bool {
@@ -501,6 +515,14 @@ func StartsWith(prefix string) ValueMatcher {
return &startsWithMatcher{prefix} return &startsWithMatcher{prefix}
} }
func Regexp(re string) ValueMatcher {
r, err := regexp.Compile(re)
if err != nil {
panic(err)
}
return &regexMatcher{r}
}
// assorted utils // assorted utils
func cleanPaths(paths []string) []string { func cleanPaths(paths []string) []string {

View File

@@ -226,6 +226,16 @@ var neverallowTests = []struct {
}`), }`),
}, },
}, },
{
name: "sdk_version: \"none\" on android_*stubs_current stub",
fs: map[string][]byte{
"frameworks/base/Android.bp": []byte(`
java_library {
name: "android_stubs_current",
sdk_version: "none",
}`),
},
},
{ {
name: "sdk_version: \"none\" outside core libraries", name: "sdk_version: \"none\" outside core libraries",
fs: map[string][]byte{ fs: map[string][]byte{