Treat java libraries in classpath fragments as directly in apex
Coverage is applied to java libraries that are directly in an apex. Mark java libraries that are in an apex through a bootclasspath_fragment or a systemserverclasspath_fragment as directly in the apex by implementing CopyDirectlyInAnyApexTag on the dependency tags used for their contents. Bug: 183759446 Test: TestApexJavaCoverage Change-Id: I0116f5f415083b5194000988cb257454ef115200 Merged-In: I0116f5f415083b5194000988cb257454ef115200 (cherry picked from commit c33e5216f1eb3f837dee89cc65208eff058e9c5e)
This commit is contained in:
parent
3225be468a
commit
cbb2b8172d
|
@ -7439,6 +7439,80 @@ func TestPrebuiltStubLibDep(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestApexJavaCoverage(t *testing.T) {
|
||||
bp := `
|
||||
apex {
|
||||
name: "myapex",
|
||||
key: "myapex.key",
|
||||
java_libs: ["mylib"],
|
||||
bootclasspath_fragments: ["mybootclasspathfragment"],
|
||||
systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
|
||||
updatable: false,
|
||||
}
|
||||
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "mylib",
|
||||
srcs: ["mylib.java"],
|
||||
apex_available: ["myapex"],
|
||||
compile_dex: true,
|
||||
}
|
||||
|
||||
bootclasspath_fragment {
|
||||
name: "mybootclasspathfragment",
|
||||
contents: ["mybootclasspathlib"],
|
||||
apex_available: ["myapex"],
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "mybootclasspathlib",
|
||||
srcs: ["mybootclasspathlib.java"],
|
||||
apex_available: ["myapex"],
|
||||
compile_dex: true,
|
||||
}
|
||||
|
||||
systemserverclasspath_fragment {
|
||||
name: "mysystemserverclasspathfragment",
|
||||
contents: ["mysystemserverclasspathlib"],
|
||||
apex_available: ["myapex"],
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "mysystemserverclasspathlib",
|
||||
srcs: ["mysystemserverclasspathlib.java"],
|
||||
apex_available: ["myapex"],
|
||||
compile_dex: true,
|
||||
}
|
||||
`
|
||||
|
||||
result := android.GroupFixturePreparers(
|
||||
PrepareForTestWithApexBuildComponents,
|
||||
prepareForTestWithMyapex,
|
||||
java.PrepareForTestWithJavaDefaultModules,
|
||||
android.PrepareForTestWithAndroidBuildComponents,
|
||||
android.FixtureWithRootAndroidBp(bp),
|
||||
android.FixtureMergeEnv(map[string]string{
|
||||
"EMMA_INSTRUMENT": "true",
|
||||
}),
|
||||
).RunTest(t)
|
||||
|
||||
// Make sure jacoco ran on both mylib and mybootclasspathlib
|
||||
if result.ModuleForTests("mylib", "android_common_apex10000").MaybeRule("jacoco").Rule == nil {
|
||||
t.Errorf("Failed to find jacoco rule for mylib")
|
||||
}
|
||||
if result.ModuleForTests("mybootclasspathlib", "android_common_apex10000").MaybeRule("jacoco").Rule == nil {
|
||||
t.Errorf("Failed to find jacoco rule for mybootclasspathlib")
|
||||
}
|
||||
if result.ModuleForTests("mysystemserverclasspathlib", "android_common_apex10000").MaybeRule("jacoco").Rule == nil {
|
||||
t.Errorf("Failed to find jacoco rule for mysystemserverclasspathlib")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
os.Exit(m.Run())
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
|
||||
"android/soong/android"
|
||||
"android/soong/dexpreopt"
|
||||
|
||||
"github.com/google/blueprint/proptools"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
|
@ -76,12 +77,17 @@ func (b bootclasspathFragmentContentDependencyTag) ExportMember() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
// Contents of bootclasspath fragments in an apex are considered to be directly in the apex, as if
|
||||
// they were listed in java_libs.
|
||||
func (b bootclasspathFragmentContentDependencyTag) CopyDirectlyInAnyApex() {}
|
||||
|
||||
// The tag used for the dependency between the bootclasspath_fragment module and its contents.
|
||||
var bootclasspathFragmentContentDepTag = bootclasspathFragmentContentDependencyTag{}
|
||||
|
||||
var _ android.ExcludeFromVisibilityEnforcementTag = bootclasspathFragmentContentDepTag
|
||||
var _ android.ReplaceSourceWithPrebuilt = bootclasspathFragmentContentDepTag
|
||||
var _ android.SdkMemberTypeDependencyTag = bootclasspathFragmentContentDepTag
|
||||
var _ android.CopyDirectlyInAnyApexTag = bootclasspathFragmentContentDepTag
|
||||
|
||||
func IsBootclasspathFragmentContentDepTag(tag blueprint.DependencyTag) bool {
|
||||
return tag == bootclasspathFragmentContentDepTag
|
||||
|
|
|
@ -17,6 +17,7 @@ package java
|
|||
import (
|
||||
"android/soong/android"
|
||||
"android/soong/dexpreopt"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
)
|
||||
|
||||
|
@ -118,6 +119,12 @@ type systemServerClasspathFragmentContentDependencyTag struct {
|
|||
blueprint.BaseDependencyTag
|
||||
}
|
||||
|
||||
// Contents of system server fragments in an apex are considered to be directly in the apex, as if
|
||||
// they were listed in java_libs.
|
||||
func (systemServerClasspathFragmentContentDependencyTag) CopyDirectlyInAnyApex() {}
|
||||
|
||||
var _ android.CopyDirectlyInAnyApexTag = systemServerClasspathFragmentContentDepTag
|
||||
|
||||
// The tag used for the dependency between the systemserverclasspath_fragment module and its contents.
|
||||
var systemServerClasspathFragmentContentDepTag = systemServerClasspathFragmentContentDependencyTag{}
|
||||
|
||||
|
|
Loading…
Reference in New Issue