diff options
Diffstat (limited to 'java')
| -rw-r--r-- | java/base.go | 5 | ||||
| -rw-r--r-- | java/bootclasspath_fragment_test.go | 20 | ||||
| -rw-r--r-- | java/config/config.go | 39 | ||||
| -rw-r--r-- | java/droiddoc.go | 1 | ||||
| -rw-r--r-- | java/droidstubs.go | 26 | ||||
| -rw-r--r-- | java/droidstubs_test.go | 30 |
6 files changed, 114 insertions, 7 deletions
diff --git a/java/base.go b/java/base.go index cf3b3d510..53f0f52c2 100644 --- a/java/base.go +++ b/java/base.go @@ -169,6 +169,8 @@ type CommonProperties struct { Output_params []string } + // If true, then jacocoagent is automatically added as a libs dependency so that + // r8 will not strip instrumentation classes out of dexed libraries. Instrument bool `blueprint:"mutated"` // If true, then the module supports statically including the jacocoagent // into the library. @@ -787,6 +789,9 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) { } else if j.shouldInstrumentStatic(ctx) { ctx.AddVariationDependencies(nil, staticLibTag, "jacocoagent") } + if j.shouldInstrument(ctx) { + ctx.AddVariationDependencies(nil, libTag, "jacocoagent") + } if j.useCompose() { ctx.AddVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), kotlinPluginTag, diff --git a/java/bootclasspath_fragment_test.go b/java/bootclasspath_fragment_test.go index f95c83fe7..2bfb255af 100644 --- a/java/bootclasspath_fragment_test.go +++ b/java/bootclasspath_fragment_test.go @@ -96,10 +96,22 @@ func TestBootclasspathFragmentInconsistentArtConfiguration_ApexMixture(t *testin } func TestBootclasspathFragment_Coverage(t *testing.T) { - prepareForTestWithFrameworkCoverage := android.FixtureMergeEnv(map[string]string{ - "EMMA_INSTRUMENT": "true", - "EMMA_INSTRUMENT_FRAMEWORK": "true", - }) + 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(` bootclasspath_fragment { diff --git a/java/config/config.go b/java/config/config.go index 3ca9bad3e..b026d73cf 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -124,6 +124,10 @@ func init() { // This is set up and guaranteed by soong_ui return ctx.Config().Getenv("ANDROID_JAVA_HOME") }) + pctx.VariableFunc("Java11Home", func(ctx android.PackageVarContext) string { + // This is set up and guaranteed by soong_ui + return ctx.Config().Getenv("ANDROID_JAVA11_HOME") + }) pctx.VariableFunc("JlinkVersion", func(ctx android.PackageVarContext) string { if override := ctx.Config().Getenv("OVERRIDE_JLINK_VERSION_NUMBER"); override != "" { return override @@ -137,18 +141,19 @@ func init() { }) pctx.SourcePathVariable("JavaToolchain", "${JavaHome}/bin") + pctx.SourcePathVariable("Java11Toolchain", "${Java11Home}/bin") pctx.SourcePathVariableWithEnvOverride("JavacCmd", "${JavaToolchain}/javac", "ALTERNATE_JAVAC") pctx.SourcePathVariable("JavaCmd", "${JavaToolchain}/java") pctx.SourcePathVariable("JarCmd", "${JavaToolchain}/jar") - pctx.SourcePathVariable("JavadocCmd", "${JavaToolchain}/javadoc") + pctx.SourcePathVariable("JavadocCmd", "${Java11Toolchain}/javadoc") pctx.SourcePathVariable("JlinkCmd", "${JavaToolchain}/jlink") pctx.SourcePathVariable("JmodCmd", "${JavaToolchain}/jmod") pctx.SourcePathVariable("JrtFsJar", "${JavaHome}/lib/jrt-fs.jar") pctx.SourcePathVariable("JavaKytheExtractorJar", "prebuilts/build-tools/common/framework/javac_extractor.jar") pctx.SourcePathVariable("Ziptime", "prebuilts/build-tools/${hostPrebuiltTag}/bin/ziptime") - pctx.HostBinToolVariable("GenKotlinBuildFileCmd", "gen-kotlin-build-file.py") + pctx.HostBinToolVariable("GenKotlinBuildFileCmd", "gen-kotlin-build-file") pctx.SourcePathVariable("JarArgsCmd", "build/soong/scripts/jar-args.sh") pctx.SourcePathVariable("PackageCheckCmd", "build/soong/scripts/package-check.sh") @@ -267,7 +272,7 @@ func JavaCmd(ctx android.PathContext) android.SourcePath { // JavadocCmd returns a SourcePath object with the path to the java command. func JavadocCmd(ctx android.PathContext) android.SourcePath { - return javaTool(ctx, "javadoc") + return java11Tool(ctx, "javadoc") } func javaTool(ctx android.PathContext, tool string) android.SourcePath { @@ -281,6 +286,17 @@ func javaTool(ctx android.PathContext, tool string) android.SourcePath { } +func java11Tool(ctx android.PathContext, tool string) android.SourcePath { + type javaToolKey string + + key := android.NewCustomOnceKey(javaToolKey(tool)) + + return ctx.Config().OnceSourcePath(key, func() android.SourcePath { + return java11Toolchain(ctx).Join(ctx, tool) + }) + +} + var javaToolchainKey = android.NewOnceKey("javaToolchain") func javaToolchain(ctx android.PathContext) android.SourcePath { @@ -289,6 +305,14 @@ func javaToolchain(ctx android.PathContext) android.SourcePath { }) } +var java11ToolchainKey = android.NewOnceKey("java11Toolchain") + +func java11Toolchain(ctx android.PathContext) android.SourcePath { + return ctx.Config().OnceSourcePath(java11ToolchainKey, func() android.SourcePath { + return java11Home(ctx).Join(ctx, "bin") + }) +} + var javaHomeKey = android.NewOnceKey("javaHome") func javaHome(ctx android.PathContext) android.SourcePath { @@ -297,3 +321,12 @@ func javaHome(ctx android.PathContext) android.SourcePath { return android.PathForSource(ctx, ctx.Config().Getenv("ANDROID_JAVA_HOME")) }) } + +var java11HomeKey = android.NewOnceKey("java11Home") + +func java11Home(ctx android.PathContext) android.SourcePath { + return ctx.Config().OnceSourcePath(java11HomeKey, func() android.SourcePath { + // This is set up and guaranteed by soong_ui + return android.PathForSource(ctx, ctx.Config().Getenv("ANDROID_JAVA11_HOME")) + }) +} diff --git a/java/droiddoc.go b/java/droiddoc.go index 9b1f43b4c..fc95184f1 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -755,6 +755,7 @@ func dokkaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, return rule.Command(). BuiltTool("dokka"). Flag(config.JavacVmFlags). + Flag("-J--add-opens=java.base/java.lang=ALL-UNNAMED"). Flag(srcJarDir.String()). FlagWithInputList("-classpath ", dokkaClasspath, ":"). FlagWithArg("-format ", "dac"). diff --git a/java/droidstubs.go b/java/droidstubs.go index 12590ca50..d9efb408f 100644 --- a/java/droidstubs.go +++ b/java/droidstubs.go @@ -17,6 +17,7 @@ package java import ( "fmt" "path/filepath" + "regexp" "strings" "github.com/google/blueprint/proptools" @@ -142,6 +143,10 @@ type DroidstubsProperties struct { // if set to true, collect the values used by the Dev tools and // write them in files packaged with the SDK. Defaults to false. Write_sdk_values *bool + + // path or filegroup to file defining extension an SDK name <-> numerical ID mapping and + // what APIs exist in which SDKs; passed to metalava via --sdk-extensions-info + Extensions_info_file *string `android:"path"` } // Used by xsd_config @@ -398,9 +403,20 @@ func (d *Droidstubs) apiLevelsGenerationFlags(ctx android.ModuleContext, cmd *an filename := proptools.StringDefault(d.properties.Api_levels_jar_filename, "android.jar") var dirs []string + var extensions_dir string ctx.VisitDirectDepsWithTag(metalavaAPILevelsAnnotationsDirTag, func(m android.Module) { if t, ok := m.(*ExportedDroiddocDir); ok { + extRegex := regexp.MustCompile(t.dir.String() + `/extensions/[0-9]+/public/.*\.jar`) + + // Grab the first extensions_dir and we find while scanning ExportedDroiddocDir.deps; + // ideally this should be read from prebuiltApis.properties.Extensions_* for _, dep := range t.deps { + if extRegex.MatchString(dep.String()) && d.properties.Extensions_info_file != nil { + if extensions_dir == "" { + extensions_dir = t.dir.String() + "/extensions" + } + cmd.Implicit(dep) + } if dep.Base() == filename { cmd.Implicit(dep) } @@ -445,6 +461,16 @@ func (d *Droidstubs) apiLevelsGenerationFlags(ctx android.ModuleContext, cmd *an cmd.FlagWithArg("--android-jar-pattern ", fmt.Sprintf("%s/%%/%s/%s", dir, sdkDir, filename)) } } + + if d.properties.Extensions_info_file != nil { + if extensions_dir == "" { + ctx.ModuleErrorf("extensions_info_file set, but no SDK extension dirs found") + } + info_file := android.PathForModuleSrc(ctx, *d.properties.Extensions_info_file) + cmd.Implicit(info_file) + cmd.FlagWithArg("--sdk-extensions-root ", extensions_dir) + cmd.FlagWithArg("--sdk-extensions-info ", info_file.String()) + } } func metalavaUseRbe(ctx android.ModuleContext) bool { diff --git a/java/droidstubs_test.go b/java/droidstubs_test.go index 9fdfddeb1..24436921c 100644 --- a/java/droidstubs_test.go +++ b/java/droidstubs_test.go @@ -259,3 +259,33 @@ func checkSystemModulesUseByDroidstubs(t *testing.T, ctx *android.TestContext, m t.Errorf("inputs of %q must be []string{%q}, but was %#v.", moduleName, systemJar, systemJars) } } + +func TestDroidstubsWithSdkExtensions(t *testing.T) { + ctx, _ := testJavaWithFS(t, ` + droiddoc_exported_dir { + name: "sdk-dir", + path: "sdk", + } + + droidstubs { + name: "baz-stubs", + api_levels_annotations_dirs: ["sdk-dir"], + api_levels_annotations_enabled: true, + extensions_info_file: ":info-file", + } + + filegroup { + name: "info-file", + srcs: ["sdk/extensions/info.txt"], + } + `, + map[string][]byte{ + "sdk/extensions/1/public/some-mainline-module-stubs.jar": nil, + "sdk/extensions/info.txt": nil, + }) + m := ctx.ModuleForTests("baz-stubs", "android_common") + manifest := m.Output("metalava.sbox.textproto") + cmdline := String(android.RuleBuilderSboxProtoForTests(t, manifest).Commands[0].Command) + android.AssertStringDoesContain(t, "sdk-extensions-root present", cmdline, "--sdk-extensions-root sdk/extensions") + android.AssertStringDoesContain(t, "sdk-extensions-info present", cmdline, "--sdk-extensions-info sdk/extensions/info.txt") +} |