From 05fc4542aca7e2f260e5d1194f5c0dba1884cf8d Mon Sep 17 00:00:00 2001 From: Nan Zhang Date: Thu, 25 Jan 2018 13:53:22 -0800 Subject: [PATCH] Change the syntax for jacoco filter wildcard parameters. originally: .* -> /**/*.class now: .* -> /*.class .** -> /**/*.class Also add NinjaAndShellEscape to allow filtering inner classes with $ in the name. Test: unittests. Bug: b/71889972 Change-Id: Ifb8d7daa22bee02346885171edb15180af18f0de --- java/jacoco.go | 20 +++++++++++++++----- java/jacoco_test.go | 14 ++++++++++++-- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/java/jacoco.go b/java/jacoco.go index 8f1ceb261..541a84af7 100644 --- a/java/jacoco.go +++ b/java/jacoco.go @@ -22,6 +22,7 @@ import ( "strings" "github.com/google/blueprint" + "github.com/google/blueprint/proptools" "android/soong/android" ) @@ -105,13 +106,22 @@ func jacocoFiltersToSpecs(filters []string) ([]string, error) { return nil, err } } - return specs, nil + return proptools.NinjaAndShellEscape(specs), nil } func jacocoFilterToSpec(filter string) (string, error) { - wildcard := strings.HasSuffix(filter, "*") - filter = strings.TrimSuffix(filter, "*") - recursiveWildcard := wildcard && (strings.HasSuffix(filter, ".") || filter == "") + recursiveWildcard := strings.HasSuffix(filter, "**") + nonRecursiveWildcard := false + if !recursiveWildcard { + nonRecursiveWildcard = strings.HasSuffix(filter, "*") + filter = strings.TrimSuffix(filter, "*") + } else { + filter = strings.TrimSuffix(filter, "**") + } + + if recursiveWildcard && !(strings.HasSuffix(filter, ".") || filter == "") { + return "", fmt.Errorf("only '**' or '.**' is supported as recursive wildcard in a filter") + } if strings.ContainsRune(filter, '*') { return "", fmt.Errorf("'*' is only supported as the last character in a filter") @@ -121,7 +131,7 @@ func jacocoFilterToSpec(filter string) (string, error) { if recursiveWildcard { spec += "**/*.class" - } else if wildcard { + } else if nonRecursiveWildcard { spec += "*.class" } else { spec += ".class" diff --git a/java/jacoco_test.go b/java/jacoco_test.go index 6e8b02653..91f05535a 100644 --- a/java/jacoco_test.go +++ b/java/jacoco_test.go @@ -33,13 +33,23 @@ func TestJacocoFilterToSpecs(t *testing.T) { { name: "package wildcard", in: "package.*", + out: "package/*.class", + }, + { + name: "package recursive wildcard", + in: "package.**", out: "package/**/*.class", }, { - name: "all wildcard", - in: "*", + name: "recursive wildcard only", + in: "**", out: "**/*.class", }, + { + name: "single wildcard only", + in: "*", + out: "*.class", + }, } for _, testCase := range testCases {