diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/Android.bp | 2 | ||||
-rw-r--r-- | java/hiddenapi_singleton_test.go | 24 | ||||
-rw-r--r-- | java/java.go | 4 | ||||
-rw-r--r-- | java/java_test.go | 17 | ||||
-rw-r--r-- | java/platform_bootclasspath.go | 74 | ||||
-rw-r--r-- | java/platform_bootclasspath_test.go | 38 | ||||
-rw-r--r-- | java/sdk_test.go | 6 | ||||
-rw-r--r-- | java/testing.go | 55 |
8 files changed, 138 insertions, 82 deletions
diff --git a/java/Android.bp b/java/Android.bp index b6c14ac37..8334b85ec 100644 --- a/java/Android.bp +++ b/java/Android.bp @@ -50,6 +50,7 @@ bootstrap_go_package { "kotlin.go", "lint.go", "legacy_core_platform_api_usage.go", + "platform_bootclasspath.go", "platform_compat_config.go", "plugin.go", "prebuilt_apis.go", @@ -79,6 +80,7 @@ bootstrap_go_package { "java_test.go", "jdeps_test.go", "kotlin_test.go", + "platform_bootclasspath_test.go", "platform_compat_config_test.go", "plugin_test.go", "rro_test.go", diff --git a/java/hiddenapi_singleton_test.go b/java/hiddenapi_singleton_test.go index dc4e8aaff..5c449e506 100644 --- a/java/hiddenapi_singleton_test.go +++ b/java/hiddenapi_singleton_test.go @@ -39,7 +39,8 @@ var hiddenApiFixtureFactory = android.GroupFixturePreparers( prepareForJavaTest, PrepareForTestWithHiddenApiBuildComponents) func TestHiddenAPISingleton(t *testing.T) { - result := hiddenApiFixtureFactory.Extend( + result := android.GroupFixturePreparers( + hiddenApiFixtureFactory, fixtureSetBootJarsProductVariable("platform:foo"), ).RunTestWithBp(t, ` java_library { @@ -56,7 +57,8 @@ func TestHiddenAPISingleton(t *testing.T) { } func TestHiddenAPIIndexSingleton(t *testing.T) { - result := hiddenApiFixtureFactory.Extend( + result := android.GroupFixturePreparers( + hiddenApiFixtureFactory, PrepareForTestWithJavaSdkLibraryFiles, FixtureWithLastReleaseApis("bar"), fixtureSetBootJarsProductVariable("platform:foo", "platform:bar"), @@ -115,7 +117,8 @@ func TestHiddenAPISingletonWithSourceAndPrebuiltPreferredButNoDex(t *testing.T) " replaced by the prebuilt module \"prebuilt_foo\" but unfortunately it does not provide a" + " suitable boot dex jar" - hiddenApiFixtureFactory.Extend( + android.GroupFixturePreparers( + hiddenApiFixtureFactory, fixtureSetBootJarsProductVariable("platform:foo"), ).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(expectedErrorMessage)). RunTestWithBp(t, ` @@ -134,7 +137,8 @@ func TestHiddenAPISingletonWithSourceAndPrebuiltPreferredButNoDex(t *testing.T) } func TestHiddenAPISingletonWithPrebuilt(t *testing.T) { - result := hiddenApiFixtureFactory.Extend( + result := android.GroupFixturePreparers( + hiddenApiFixtureFactory, fixtureSetBootJarsProductVariable("platform:foo"), ).RunTestWithBp(t, ` java_import { @@ -151,7 +155,8 @@ func TestHiddenAPISingletonWithPrebuilt(t *testing.T) { } func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) { - result := hiddenApiFixtureFactory.Extend( + result := android.GroupFixturePreparers( + hiddenApiFixtureFactory, fixtureSetBootJarsProductVariable("platform:foo"), ).RunTestWithBp(t, ` java_library { @@ -178,7 +183,8 @@ func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) { } func TestHiddenAPISingletonWithPrebuiltOverrideSource(t *testing.T) { - result := hiddenApiFixtureFactory.Extend( + result := android.GroupFixturePreparers( + hiddenApiFixtureFactory, fixtureSetBootJarsProductVariable("platform:foo"), ).RunTestWithBp(t, ` java_library { @@ -236,7 +242,8 @@ func TestHiddenAPISingletonSdks(t *testing.T) { } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - result := hiddenApiFixtureFactory.Extend( + result := android.GroupFixturePreparers( + hiddenApiFixtureFactory, tc.preparer, android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { variables.Always_use_prebuilt_sdks = proptools.BoolPtr(tc.unbundledBuild) @@ -286,7 +293,8 @@ func TestHiddenAPISingletonWithPrebuiltCsvFile(t *testing.T) { // Where to find the prebuilt hiddenapi files: prebuiltHiddenApiDir := "path/to/prebuilt/hiddenapi" - result := hiddenApiFixtureFactory.Extend( + result := android.GroupFixturePreparers( + hiddenApiFixtureFactory, fixtureSetBootJarsProductVariable("platform:foo"), fixtureSetPrebuiltHiddenApiDirProductVariable(&prebuiltHiddenApiDir), ).RunTestWithBp(t, ` diff --git a/java/java.go b/java/java.go index a7fbed2cb..26e5091b6 100644 --- a/java/java.go +++ b/java/java.go @@ -33,12 +33,12 @@ import ( ) func init() { - RegisterJavaBuildComponents(android.InitRegistrationContext) + registerJavaBuildComponents(android.InitRegistrationContext) RegisterJavaSdkMemberTypes() } -func RegisterJavaBuildComponents(ctx android.RegistrationContext) { +func registerJavaBuildComponents(ctx android.RegistrationContext) { ctx.RegisterModuleType("java_defaults", DefaultsFactory) ctx.RegisterModuleType("java_library", LibraryFactory) diff --git a/java/java_test.go b/java/java_test.go index 3aafdda75..fdf757902 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -74,23 +74,6 @@ func testJavaError(t *testing.T, pattern string, bp string) (*android.TestContex return result.TestContext, result.Config } -// testJavaErrorWithConfig is a legacy way of running tests of java modules that expect errors. -// -// See testJava for an explanation as to how to stop using this deprecated method. -// -// deprecated -func testJavaErrorWithConfig(t *testing.T, pattern string, config android.Config) (*android.TestContext, android.Config) { - t.Helper() - // This must be done on the supplied config and not as part of the fixture because any changes to - // the fixture's config will be ignored when RunTestWithConfig replaces it. - pathCtx := android.PathContextForTesting(config) - dexpreopt.SetTestGlobalConfig(config, dexpreopt.GlobalConfigForTests(pathCtx)) - result := prepareForJavaTest. - ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(pattern)). - RunTestWithConfig(t, config) - return result.TestContext, result.Config -} - // testJavaWithFS runs tests using the prepareForJavaTest // // See testJava for an explanation as to how to stop using this deprecated method. diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go new file mode 100644 index 000000000..550707754 --- /dev/null +++ b/java/platform_bootclasspath.go @@ -0,0 +1,74 @@ +// Copyright 2021 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package java + +import ( + "android/soong/android" + "android/soong/dexpreopt" +) + +func init() { + registerPlatformBootclasspathBuildComponents(android.InitRegistrationContext) +} + +func registerPlatformBootclasspathBuildComponents(ctx android.RegistrationContext) { + ctx.RegisterModuleType("platform_bootclasspath", platformBootclasspathFactory) +} + +type platformBootclasspathModule struct { + android.ModuleBase +} + +func platformBootclasspathFactory() android.Module { + m := &platformBootclasspathModule{} + android.InitAndroidArchModule(m, android.DeviceSupported, android.MultilibCommon) + return m +} + +func (b *platformBootclasspathModule) DepsMutator(ctx android.BottomUpMutatorContext) { + if SkipDexpreoptBootJars(ctx) { + return + } + + // Add a dependency onto the dex2oat tool which is needed for creating the boot image. The + // path is retrieved from the dependency by GetGlobalSoongConfig(ctx). + dexpreopt.RegisterToolDeps(ctx) +} + +func (b *platformBootclasspathModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { + // Nothing to do if skipping the dexpreopt of boot image jars. + if SkipDexpreoptBootJars(ctx) { + return + } + + // Force the GlobalSoongConfig to be created and cached for use by the dex_bootjars + // GenerateSingletonBuildActions method as it cannot create it for itself. + dexpreopt.GetGlobalSoongConfig(ctx) + + imageConfig := b.getImageConfig(ctx) + if imageConfig == nil { + return + } + + // Construct the boot image info from the config. + info := BootImageInfo{imageConfig: imageConfig} + + // Make it available for other modules. + ctx.SetProvider(BootImageInfoProvider, info) +} + +func (b *platformBootclasspathModule) getImageConfig(ctx android.EarlyModuleContext) *bootImageConfig { + return defaultBootImageConfig(ctx) +} diff --git a/java/platform_bootclasspath_test.go b/java/platform_bootclasspath_test.go new file mode 100644 index 000000000..1c81cfdc2 --- /dev/null +++ b/java/platform_bootclasspath_test.go @@ -0,0 +1,38 @@ +// Copyright (C) 2021 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package java + +import ( + "testing" + + "android/soong/android" + "android/soong/dexpreopt" +) + +// Contains some simple tests for platform_bootclasspath. + +var prepareForTestWithPlatformBootclasspath = android.GroupFixturePreparers( + PrepareForTestWithJavaDefaultModules, + dexpreopt.PrepareForTestByEnablingDexpreopt, +) + +func TestPlatformBootclasspath(t *testing.T) { + prepareForTestWithPlatformBootclasspath. + RunTestWithBp(t, ` + platform_bootclasspath { + name: "platform-bootclasspath", + } + `) +} diff --git a/java/sdk_test.go b/java/sdk_test.go index e1ec41bdc..2b1846592 100644 --- a/java/sdk_test.go +++ b/java/sdk_test.go @@ -402,14 +402,16 @@ func TestClasspath(t *testing.T) { // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8 t.Run("REL + Java language level 8", func(t *testing.T) { - result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8) + result := android.GroupFixturePreparers( + fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8) checkClasspath(t, result, true /* isJava8 */) }) // Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9 t.Run("REL + Java language level 9", func(t *testing.T) { - result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bp) + result := android.GroupFixturePreparers( + fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bp) checkClasspath(t, result, false /* isJava8 */) }) diff --git a/java/testing.go b/java/testing.go index 221ceb118..80c107d12 100644 --- a/java/testing.go +++ b/java/testing.go @@ -160,28 +160,6 @@ func FixtureWithPrebuiltApis(release2Modules map[string][]string) android.Fixtur ) } -func TestConfig(buildDir string, env map[string]string, bp string, fs map[string][]byte) android.Config { - bp += GatherRequiredDepsForTest() - - mockFS := android.MockFS{} - - cc.GatherRequiredFilesForTest(mockFS) - - for k, v := range fs { - mockFS[k] = v - } - - if env == nil { - env = make(map[string]string) - } - if env["ANDROID_JAVA8_HOME"] == "" { - env["ANDROID_JAVA8_HOME"] = "jdk8" - } - config := android.TestArchConfig(buildDir, env, bp, mockFS) - - return config -} - func prebuiltApisFilesForLibs(apiLevels []string, sdkLibs []string) map[string][]byte { fs := make(map[string][]byte) for _, level := range apiLevels { @@ -200,19 +178,6 @@ func prebuiltApisFilesForLibs(apiLevels []string, sdkLibs []string) map[string][ return fs } -// Register build components provided by this package that are needed by tests. -// -// In particular this must register all the components that are used in the `Android.bp` snippet -// returned by GatherRequiredDepsForTest() -// -// deprecated: Use test fixtures instead, e.g. PrepareForTestWithJavaBuildComponents -func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) { - registerRequiredBuildComponentsForTest(ctx) - - // Make sure that any tool related module types needed by dexpreopt have been registered. - dexpreopt.RegisterToolModulesForTest(ctx) -} - // registerRequiredBuildComponentsForTest registers the build components used by // PrepareForTestWithJavaDefaultModules. // @@ -228,7 +193,8 @@ func registerRequiredBuildComponentsForTest(ctx android.RegistrationContext) { RegisterDexpreoptBootJarsComponents(ctx) RegisterDocsBuildComponents(ctx) RegisterGenRuleBuildComponents(ctx) - RegisterJavaBuildComponents(ctx) + registerJavaBuildComponents(ctx) + registerPlatformBootclasspathBuildComponents(ctx) RegisterPrebuiltApisBuildComponents(ctx) RegisterRuntimeResourceOverlayBuildComponents(ctx) RegisterSdkLibraryBuildComponents(ctx) @@ -236,23 +202,6 @@ func registerRequiredBuildComponentsForTest(ctx android.RegistrationContext) { RegisterSystemModulesBuildComponents(ctx) } -// Gather the module definitions needed by tests that depend upon code from this package. -// -// Returns an `Android.bp` snippet that defines the modules that are needed by this package. -// -// deprecated: Use test fixtures instead, e.g. PrepareForTestWithJavaDefaultModules -func GatherRequiredDepsForTest() string { - bp := gatherRequiredDepsForTest() - - // For class loader context and <uses-library> tests. - bp += dexpreopt.CompatLibDefinitionsForTest() - - // Make sure that any tools needed for dexpreopting are defined. - bp += dexpreopt.BpToolModulesForTest() - - return bp -} - // gatherRequiredDepsForTest gathers the module definitions used by // PrepareForTestWithJavaDefaultModules. // |