diff --git a/android/config.go b/android/config.go index 362501d64..dfc61a5a5 100644 --- a/android/config.go +++ b/android/config.go @@ -2063,8 +2063,15 @@ func (c *config) ApiSurfacesDir(s ApiSurface, version string) string { version) } +func (c *config) JavaCoverageEnabled() bool { + return c.IsEnvTrue("EMMA_INSTRUMENT") || c.IsEnvTrue("EMMA_INSTRUMENT_STATIC") || c.IsEnvTrue("EMMA_INSTRUMENT_FRAMEWORK") +} + func (c *config) BuildFromTextStub() bool { - return c.buildFromTextStub + // TODO: b/302320354 - Remove the coverage build specific logic once the + // robust solution for handling native properties in from-text stub build + // is implemented. + return c.buildFromTextStub && !c.JavaCoverageEnabled() } func (c *config) SetBuildFromTextStub(b bool) { diff --git a/java/java_test.go b/java/java_test.go index c4fc55bc4..c54c0e68f 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -2599,3 +2599,33 @@ func TestApiLibraryDroidstubsDependency(t *testing.T) { currentApiTimestampPath, ) } + +func TestDisableFromTextStubForCoverageBuild(t *testing.T) { + result := android.GroupFixturePreparers( + prepareForJavaTest, + PrepareForTestWithJavaSdkLibraryFiles, + PrepareForTestWithJacocoInstrumentation, + FixtureWithLastReleaseApis("foo"), + android.FixtureModifyConfig(func(config android.Config) { + config.SetApiLibraries([]string{"foo"}) + config.SetBuildFromTextStub(true) + }), + android.FixtureModifyEnv(func(env map[string]string) { + env["EMMA_INSTRUMENT"] = "true" + }), + ).RunTestWithBp(t, ` + java_sdk_library { + name: "foo", + srcs: ["A.java"], + } + `) + android.AssertBoolEquals(t, "stub module expected to depend on from-source stub", + true, CheckModuleHasDependency(t, result.TestContext, + apiScopePublic.stubsLibraryModuleName("foo"), "android_common", + apiScopePublic.sourceStubLibraryModuleName("foo"))) + + android.AssertBoolEquals(t, "stub module expected to not depend on from-text stub", + false, CheckModuleHasDependency(t, result.TestContext, + apiScopePublic.stubsLibraryModuleName("foo"), "android_common", + apiScopePublic.apiLibraryModuleName("foo"))) +}