Merge "add jacocoagent by default to Java modules" am: 43c0eb17ae
am: 7fd3c3b1f9
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2208216 Change-Id: I76bfac4bf1c9848190e47e7a0e3163a00185ba45 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -8843,19 +8843,7 @@ func TestApexJavaCoverage(t *testing.T) {
|
|||||||
android.FixtureWithRootAndroidBp(bp),
|
android.FixtureWithRootAndroidBp(bp),
|
||||||
dexpreopt.FixtureSetApexBootJars("myapex:mybootclasspathlib"),
|
dexpreopt.FixtureSetApexBootJars("myapex:mybootclasspathlib"),
|
||||||
dexpreopt.FixtureSetApexSystemServerJars("myapex:mysystemserverclasspathlib"),
|
dexpreopt.FixtureSetApexSystemServerJars("myapex:mysystemserverclasspathlib"),
|
||||||
android.FixtureMergeEnv(map[string]string{
|
java.PrepareForTestWithJacocoInstrumentation,
|
||||||
"EMMA_INSTRUMENT": "true",
|
|
||||||
}),
|
|
||||||
// need to mock jacocoagent here to satisfy dependency added for
|
|
||||||
// instrumented libraries at build time
|
|
||||||
android.FixtureAddFile("jacocoagent/Android.bp", []byte(`
|
|
||||||
java_library {
|
|
||||||
name: "jacocoagent",
|
|
||||||
srcs: ["Test.java"],
|
|
||||||
system_modules: "none",
|
|
||||||
sdk_version: "none",
|
|
||||||
}
|
|
||||||
`)),
|
|
||||||
).RunTest(t)
|
).RunTest(t)
|
||||||
|
|
||||||
// Make sure jacoco ran on both mylib and mybootclasspathlib
|
// Make sure jacoco ran on both mylib and mybootclasspathlib
|
||||||
|
11
java/base.go
11
java/base.go
@@ -650,6 +650,10 @@ func (j *Module) shouldInstrumentInApex(ctx android.BaseModuleContext) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (j *Module) setInstrument(value bool) {
|
||||||
|
j.properties.Instrument = value
|
||||||
|
}
|
||||||
|
|
||||||
func (j *Module) SdkVersion(ctx android.EarlyModuleContext) android.SdkSpec {
|
func (j *Module) SdkVersion(ctx android.EarlyModuleContext) android.SdkSpec {
|
||||||
return android.SdkSpecFrom(ctx, String(j.deviceProperties.Sdk_version))
|
return android.SdkSpecFrom(ctx, String(j.deviceProperties.Sdk_version))
|
||||||
}
|
}
|
||||||
@@ -789,9 +793,6 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) {
|
|||||||
} else if j.shouldInstrumentStatic(ctx) {
|
} else if j.shouldInstrumentStatic(ctx) {
|
||||||
ctx.AddVariationDependencies(nil, staticLibTag, "jacocoagent")
|
ctx.AddVariationDependencies(nil, staticLibTag, "jacocoagent")
|
||||||
}
|
}
|
||||||
if j.shouldInstrument(ctx) {
|
|
||||||
ctx.AddVariationDependencies(nil, libTag, "jacocoagent")
|
|
||||||
}
|
|
||||||
|
|
||||||
if j.useCompose() {
|
if j.useCompose() {
|
||||||
ctx.AddVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), kotlinPluginTag,
|
ctx.AddVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), kotlinPluginTag,
|
||||||
@@ -1435,10 +1436,6 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
|||||||
j.headerJarFile = j.implementationJarFile
|
j.headerJarFile = j.implementationJarFile
|
||||||
}
|
}
|
||||||
|
|
||||||
if j.shouldInstrumentInApex(ctx) {
|
|
||||||
j.properties.Instrument = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// enforce syntax check to jacoco filters for any build (http://b/183622051)
|
// enforce syntax check to jacoco filters for any build (http://b/183622051)
|
||||||
specs := j.jacocoModuleToZipCommand(ctx)
|
specs := j.jacocoModuleToZipCommand(ctx)
|
||||||
if ctx.Failed() {
|
if ctx.Failed() {
|
||||||
|
@@ -96,23 +96,6 @@ func TestBootclasspathFragmentInconsistentArtConfiguration_ApexMixture(t *testin
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBootclasspathFragment_Coverage(t *testing.T) {
|
func TestBootclasspathFragment_Coverage(t *testing.T) {
|
||||||
prepareForTestWithFrameworkCoverage := android.GroupFixturePreparers(
|
|
||||||
android.FixtureMergeEnv(map[string]string{
|
|
||||||
"EMMA_INSTRUMENT": "true",
|
|
||||||
"EMMA_INSTRUMENT_FRAMEWORK": "true",
|
|
||||||
}),
|
|
||||||
// need to mock jacocoagent here to satisfy dependency added for
|
|
||||||
// instrumented libraries at build time
|
|
||||||
android.FixtureAddFile("jacocoagent/Android.bp", []byte(`
|
|
||||||
java_library {
|
|
||||||
name: "jacocoagent",
|
|
||||||
srcs: ["Test.java"],
|
|
||||||
system_modules: "none",
|
|
||||||
sdk_version: "none",
|
|
||||||
}
|
|
||||||
`)),
|
|
||||||
)
|
|
||||||
|
|
||||||
prepareWithBp := android.FixtureWithRootAndroidBp(`
|
prepareWithBp := android.FixtureWithRootAndroidBp(`
|
||||||
bootclasspath_fragment {
|
bootclasspath_fragment {
|
||||||
name: "myfragment",
|
name: "myfragment",
|
||||||
@@ -191,7 +174,7 @@ func TestBootclasspathFragment_Coverage(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("with coverage", func(t *testing.T) {
|
t.Run("with coverage", func(t *testing.T) {
|
||||||
result := android.GroupFixturePreparers(
|
result := android.GroupFixturePreparers(
|
||||||
prepareForTestWithFrameworkCoverage,
|
prepareForTestWithFrameworkJacocoInstrumentation,
|
||||||
preparer,
|
preparer,
|
||||||
).RunTest(t)
|
).RunTest(t)
|
||||||
checkContents(t, result, "mybootlib", "coveragelib")
|
checkContents(t, result, "mybootlib", "coveragelib")
|
||||||
|
@@ -47,6 +47,34 @@ var (
|
|||||||
"strippedJar", "stripSpec", "tmpDir", "tmpJar")
|
"strippedJar", "stripSpec", "tmpDir", "tmpJar")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func jacocoDepsMutator(ctx android.BottomUpMutatorContext) {
|
||||||
|
type instrumentable interface {
|
||||||
|
shouldInstrument(ctx android.BaseModuleContext) bool
|
||||||
|
shouldInstrumentInApex(ctx android.BaseModuleContext) bool
|
||||||
|
setInstrument(value bool)
|
||||||
|
}
|
||||||
|
|
||||||
|
j, ok := ctx.Module().(instrumentable)
|
||||||
|
if !ctx.Module().Enabled() || !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if j.shouldInstrumentInApex(ctx) {
|
||||||
|
j.setInstrument(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
if j.shouldInstrument(ctx) && ctx.ModuleName() != "jacocoagent" {
|
||||||
|
// We can use AddFarVariationDependencies here because, since this dep
|
||||||
|
// is added as libs only (i.e. a compiletime CLASSPATH entry only),
|
||||||
|
// the first variant of jacocoagent is sufficient to prevent
|
||||||
|
// compile time errors.
|
||||||
|
// At this stage in the build, AddVariationDependencies is not always
|
||||||
|
// able to procure a variant of jacocoagent that matches the calling
|
||||||
|
// module.
|
||||||
|
ctx.AddFarVariationDependencies(ctx.Module().Target().Variations(), libTag, "jacocoagent")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Instruments a jar using the Jacoco command line interface. Uses stripSpec to extract a subset
|
// Instruments a jar using the Jacoco command line interface. Uses stripSpec to extract a subset
|
||||||
// of the classes in inputJar into strippedJar, instruments strippedJar into tmpJar, and then
|
// of the classes in inputJar into strippedJar, instruments strippedJar into tmpJar, and then
|
||||||
// combines the classes in tmpJar with inputJar (preferring the instrumented classes in tmpJar)
|
// combines the classes in tmpJar with inputJar (preferring the instrumented classes in tmpJar)
|
||||||
|
@@ -66,6 +66,8 @@ func registerJavaBuildComponents(ctx android.RegistrationContext) {
|
|||||||
// to support the checks in dexpreoptDisabled().
|
// to support the checks in dexpreoptDisabled().
|
||||||
ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("dexpreopt_tool_deps", dexpreoptToolDepsMutator).Parallel()
|
ctx.BottomUp("dexpreopt_tool_deps", dexpreoptToolDepsMutator).Parallel()
|
||||||
|
// needs access to ApexInfoProvider which is available after variant creation
|
||||||
|
ctx.BottomUp("jacoco_deps", jacocoDepsMutator).Parallel()
|
||||||
})
|
})
|
||||||
|
|
||||||
ctx.RegisterSingletonType("logtags", LogtagsSingleton)
|
ctx.RegisterSingletonType("logtags", LogtagsSingleton)
|
||||||
|
@@ -59,11 +59,9 @@ var PrepareForTestWithJavaBuildComponents = android.GroupFixturePreparers(
|
|||||||
}.AddToFixture(),
|
}.AddToFixture(),
|
||||||
)
|
)
|
||||||
|
|
||||||
// Test fixture preparer that will define all default java modules except the
|
var prepareForTestWithFrameworkDeps = android.GroupFixturePreparers(
|
||||||
// fake_tool_binary for dex2oatd.
|
// The java default module definitions.
|
||||||
var PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd = android.GroupFixturePreparers(
|
android.FixtureAddTextFile(defaultJavaDir+"/Android.bp", gatherRequiredDepsForTest()),
|
||||||
// Make sure that all the module types used in the defaults are registered.
|
|
||||||
PrepareForTestWithJavaBuildComponents,
|
|
||||||
// Additional files needed when test disallows non-existent source.
|
// Additional files needed when test disallows non-existent source.
|
||||||
android.MockFS{
|
android.MockFS{
|
||||||
// Needed for framework-res
|
// Needed for framework-res
|
||||||
@@ -77,8 +75,14 @@ var PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd = android.GroupFixtu
|
|||||||
"build/make/core/proguard.flags": nil,
|
"build/make/core/proguard.flags": nil,
|
||||||
"build/make/core/proguard_basic_keeps.flags": nil,
|
"build/make/core/proguard_basic_keeps.flags": nil,
|
||||||
}.AddToFixture(),
|
}.AddToFixture(),
|
||||||
// The java default module definitions.
|
)
|
||||||
android.FixtureAddTextFile(defaultJavaDir+"/Android.bp", gatherRequiredDepsForTest()),
|
|
||||||
|
// Test fixture preparer that will define all default java modules except the
|
||||||
|
// fake_tool_binary for dex2oatd.
|
||||||
|
var PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd = android.GroupFixturePreparers(
|
||||||
|
// Make sure that all the module types used in the defaults are registered.
|
||||||
|
PrepareForTestWithJavaBuildComponents,
|
||||||
|
prepareForTestWithFrameworkDeps,
|
||||||
// Add dexpreopt compat libs (android.test.base, etc.) and a fake dex2oatd module.
|
// Add dexpreopt compat libs (android.test.base, etc.) and a fake dex2oatd module.
|
||||||
dexpreopt.PrepareForTestWithDexpreoptCompatLibs,
|
dexpreopt.PrepareForTestWithDexpreoptCompatLibs,
|
||||||
)
|
)
|
||||||
@@ -141,6 +145,30 @@ var PrepareForTestWithPrebuiltsOfCurrentApi = FixtureWithPrebuiltApis(map[string
|
|||||||
"30": {},
|
"30": {},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
var prepareForTestWithFrameworkJacocoInstrumentation = android.GroupFixturePreparers(
|
||||||
|
android.FixtureMergeEnv(map[string]string{
|
||||||
|
"EMMA_INSTRUMENT_FRAMEWORK": "true",
|
||||||
|
}),
|
||||||
|
PrepareForTestWithJacocoInstrumentation,
|
||||||
|
)
|
||||||
|
|
||||||
|
// PrepareForTestWithJacocoInstrumentation creates a mock jacocoagent library that can be
|
||||||
|
// depended on as part of the build process for instrumented Java modules.
|
||||||
|
var PrepareForTestWithJacocoInstrumentation = android.GroupFixturePreparers(
|
||||||
|
android.FixtureMergeEnv(map[string]string{
|
||||||
|
"EMMA_INSTRUMENT": "true",
|
||||||
|
}),
|
||||||
|
android.FixtureAddFile("jacocoagent/Test.java", nil),
|
||||||
|
android.FixtureAddFile("jacocoagent/Android.bp", []byte(`
|
||||||
|
java_library {
|
||||||
|
name: "jacocoagent",
|
||||||
|
host_supported: true,
|
||||||
|
srcs: ["Test.java"],
|
||||||
|
sdk_version: "current",
|
||||||
|
}
|
||||||
|
`)),
|
||||||
|
)
|
||||||
|
|
||||||
// FixtureWithPrebuiltApis creates a preparer that will define prebuilt api modules for the
|
// FixtureWithPrebuiltApis creates a preparer that will define prebuilt api modules for the
|
||||||
// specified releases and modules.
|
// specified releases and modules.
|
||||||
//
|
//
|
||||||
|
Reference in New Issue
Block a user