diff options
| author | mosimchah <mosimchah@gmail.com> | 2025-12-02 09:27:38 -0500 |
|---|---|---|
| committer | mosimchah <mosimchah@gmail.com> | 2025-12-02 09:27:38 -0500 |
| commit | c7bade461dc55726f62997d13a48582f7c4b4655 (patch) | |
| tree | ea0588da76060a2038f54f67efd046ca77634b10 /java/jacoco.go | |
| parent | 0f5414d19317805e8bbbe7c4db5f0fd78769bad5 (diff) | |
| parent | 89d78cff8b00d3b20a90074635c3fe5a2ee49474 (diff) | |
Merge branch 'lineage-23.1' of https://github.com/LineageOS/android_build_soong into HEADw16.1
* 'lineage-23.1' of https://github.com/LineageOS/android_build_soong: (528 commits)
Revert "install_symlink: Make symlink target configurable"
Reapply "Clear as much of cc.Module as possible after GenerateBuildActions"
Revert "rust: config: Fix missing CPU variant LD flags in Rust"
Rename build-flag in outdir
Revert^4 "cipd: Default CIPD proxy server to on, add opt-out"
Convert check-vintf-all to phony with actions
Create a partial implementation of check-vintf-all for soong-only
Configure RBE rust pool based on build variant
Revert^3 "Add sdk version check to arr"
Add jdk.internal.invoke to the allowlist
Make droid always depend on symbols zip
Import Device and Odm skus
Don't install gob_gen in Soong
Remove bazel reference from run_integration_tests.sh
Fix bootstrap_test.sh
Don't panic in aconfig libraries when AllowMissingDependencies is set
Avoid returning nil paths from PathForModuleSrc
Revert "Flag controled clang version"
Rework module target dependencies on required deps
Revert^2 "Add sdk version check to arr"
...
Change-Id: I6e9a63fa14fda917a42e426e5dcebbad7f67e1de
Diffstat (limited to 'java/jacoco.go')
| -rw-r--r-- | java/jacoco.go | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/java/jacoco.go b/java/jacoco.go index 696a0cc37..7a80314c1 100644 --- a/java/jacoco.go +++ b/java/jacoco.go @@ -19,6 +19,7 @@ package java import ( "fmt" "path/filepath" + "slices" "strings" "github.com/google/blueprint" @@ -28,6 +29,10 @@ import ( "android/soong/java/config" ) +func init() { + android.InitRegistrationContext.RegisterParallelSingletonType("device_tests_jacoco_zip", deviceTestsJacocoZipSingletonFactory) +} + var ( jacoco = pctx.AndroidStaticRule("jacoco", blueprint.RuleParams{ Command: `rm -rf $tmpDir && mkdir -p $tmpDir && ` + @@ -167,3 +172,62 @@ func jacocoFilterToSpec(filter string) (string, error) { return spec, nil } + +type JacocoInfo struct { + ReportClassesFile android.Path + Class string + ModuleName string +} + +var ApexJacocoInfoProvider = blueprint.NewProvider[[]JacocoInfo]() + +type BuildJacocoZipContext interface { + android.BuilderContext + android.OtherModuleProviderContext +} + +func BuildJacocoZip(ctx BuildJacocoZipContext, modules []android.ModuleOrProxy, outputFile android.WritablePath) { + jacocoZipBuilder := android.NewRuleBuilder(pctx, ctx) + jacocoZipCmd := jacocoZipBuilder.Command().BuiltTool("soong_zip"). + FlagWithOutput("-o ", outputFile). + Flag("-L 0") + for _, m := range modules { + if javaInfo, ok := android.OtherModuleProvider(ctx, m, JavaInfoProvider); ok && javaInfo.JacocoInfo.ReportClassesFile != nil { + jacoco := javaInfo.JacocoInfo + jacocoZipCmd.FlagWithArg("-e ", fmt.Sprintf("out/target/common/obj/%s/%s_intermediates/jacoco-report-classes.jar", jacoco.Class, jacoco.ModuleName)). + FlagWithInput("-f ", jacoco.ReportClassesFile) + } else if info, ok := android.OtherModuleProvider(ctx, m, ApexJacocoInfoProvider); ok { + for _, jacoco := range info { + jacocoZipCmd.FlagWithArg("-e ", fmt.Sprintf("out/target/common/obj/%s/%s_intermediates/jacoco-report-classes.jar", jacoco.Class, jacoco.ModuleName)). + FlagWithInput("-f ", jacoco.ReportClassesFile) + } + } + } + + jacocoZipBuilder.Build("jacoco_report_classes_zip", "Building jacoco report zip") +} + +func deviceTestsJacocoZipSingletonFactory() android.Singleton { + return &deviceTestsJacocoZipSingleton{} +} + +type deviceTestsJacocoZipSingleton struct{} + +// GenerateBuildActions implements android.Singleton. +func (d *deviceTestsJacocoZipSingleton) GenerateBuildActions(ctx android.SingletonContext) { + var deviceTestModules []android.ModuleOrProxy + ctx.VisitAllModuleProxies(func(m android.ModuleProxy) { + if tsm, ok := android.OtherModuleProvider(ctx, m, android.TestSuiteInfoProvider); ok { + if slices.Contains(tsm.TestSuites, "device-tests") { + deviceTestModules = append(deviceTestModules, m) + } + } + }) + + jacocoZip := DeviceTestsJacocoReportZip(ctx) + BuildJacocoZip(ctx, deviceTestModules, jacocoZip) +} + +func DeviceTestsJacocoReportZip(ctx android.PathContext) android.WritablePath { + return android.PathForOutput(ctx, "device_tests_jacoco_report_classes_all.jar") +} |
