From 03f3a9c1466f85105d3eba813a2b3ebbb96b402f Mon Sep 17 00:00:00 2001 From: Chris Gross Date: Wed, 1 Jul 2020 13:21:14 +0000 Subject: [PATCH] Use a default exclude filter for JaCoCo in Soong. Instrumented builds should exclude certain classes from instrumenation by default. (e.g. JaCoCo itself) Leverage the existing DefaultJacocoExclusionFilter to do this. Note: Two different default filters exist now (one for Make and one for Soong), as they have different wildcard rules. Test: EMMA_INSTRUMENT=true EMMA_INSTRUMENT_STATIC=true m -j32 TeleService and inspected the resulting temporary jar that was instrumented to confirm that anything from org/jacoco was excluded. Bug: 159748844 Change-Id: I5466b0a03957edfbe53971d5d1a7729fdb8337db Merged-In: I5466b0a03957edfbe53971d5d1a7729fdb8337db --- android/config.go | 2 +- java/config/config.go | 3 ++- java/config/makevars.go | 2 +- java/jacoco.go | 4 +++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/android/config.go b/android/config.go index b6ef26848..3541f831e 100644 --- a/android/config.go +++ b/android/config.go @@ -1053,7 +1053,7 @@ func (c *deviceConfig) SamplingPGO() bool { // represents any path. func (c *deviceConfig) JavaCoverageEnabledForPath(path string) bool { coverage := false - if c.config.productVariables.JavaCoveragePaths == nil || + if len(c.config.productVariables.JavaCoveragePaths) == 0 || InList("*", c.config.productVariables.JavaCoveragePaths) || HasAnyPrefix(path, c.config.productVariables.JavaCoveragePaths) { coverage = true diff --git a/java/config/config.go b/java/config/config.go index 337355d80..95add017d 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -34,7 +34,8 @@ var ( DefaultLambdaStubsLibrary = "core-lambda-stubs" SdkLambdaStubsPath = "prebuilts/sdk/tools/core-lambda-stubs.jar" - DefaultJacocoExcludeFilter = []string{"org.junit.*", "org.jacoco.*", "org.mockito.*"} + DefaultMakeJacocoExcludeFilter = []string{"org.junit.*", "org.jacoco.*", "org.mockito.*"} + DefaultJacocoExcludeFilter = []string{"org.junit.**", "org.jacoco.**", "org.mockito.**"} InstrumentFrameworkModules = []string{ "framework", diff --git a/java/config/makevars.go b/java/config/makevars.go index 981a73638..b355fad87 100644 --- a/java/config/makevars.go +++ b/java/config/makevars.go @@ -64,7 +64,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) { ctx.Strict("ZIPSYNC", "${ZipSyncCmd}") ctx.Strict("JACOCO_CLI_JAR", "${JacocoCLIJar}") - ctx.Strict("DEFAULT_JACOCO_EXCLUDE_FILTER", strings.Join(DefaultJacocoExcludeFilter, ",")) + ctx.Strict("DEFAULT_JACOCO_EXCLUDE_FILTER", strings.Join(DefaultMakeJacocoExcludeFilter, ",")) ctx.Strict("EXTRACT_JAR_PACKAGES", "${ExtractJarPackagesCmd}") diff --git a/java/jacoco.go b/java/jacoco.go index bce9822f4..9162161d3 100644 --- a/java/jacoco.go +++ b/java/jacoco.go @@ -25,6 +25,7 @@ import ( "github.com/google/blueprint/proptools" "android/soong/android" + "android/soong/java/config" ) var ( @@ -76,7 +77,8 @@ func (j *Module) jacocoModuleToZipCommand(ctx android.ModuleContext) string { if err != nil { ctx.PropertyErrorf("jacoco.include_filter", "%s", err.Error()) } - excludes, err := jacocoFiltersToSpecs(j.properties.Jacoco.Exclude_filter) + // Also include the default list of classes to exclude from instrumentation. + excludes, err := jacocoFiltersToSpecs(append(j.properties.Jacoco.Exclude_filter, config.DefaultJacocoExcludeFilter...)) if err != nil { ctx.PropertyErrorf("jacoco.exclude_filter", "%s", err.Error()) }