diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-07-12 14:25:54 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-07-12 14:25:54 +0000 |
commit | f285e54c6fe5078c656997ad334587fdf8b79b2e (patch) | |
tree | a73dc72f9e08ecba67fb78ba7fcaf6c31d48381a | |
parent | 68a7a2b33305d36fa3a4960b0b739d0774f3ba00 (diff) | |
parent | 3532c556ed4d24084e1eeeb97f2d865748dbd739 (diff) | |
download | soong-f285e54c6fe5078c656997ad334587fdf8b79b2e.tar.gz |
Merge changes from topic "cherrypicker-L07900000955432058:N23200001279006695" into tm-mainline-prod
* changes:
bootclasspath_fragment: Require at least one hidden_api package property
bootclasspath_fragment: Treat some specific modules as test
bootclasspath_fragment: Add test specific module type
-rw-r--r-- | apex/apex_test.go | 24 | ||||
-rw-r--r-- | apex/bootclasspath_fragment_test.go | 33 | ||||
-rw-r--r-- | apex/classpath_element_test.go | 6 | ||||
-rw-r--r-- | apex/platform_bootclasspath_test.go | 22 | ||||
-rw-r--r-- | java/bootclasspath_fragment.go | 43 | ||||
-rw-r--r-- | java/bootclasspath_fragment_test.go | 67 | ||||
-rw-r--r-- | sdk/bootclasspath_fragment_sdk_test.go | 16 | ||||
-rw-r--r-- | sdk/sdk_test.go | 3 |
8 files changed, 211 insertions, 3 deletions
diff --git a/apex/apex_test.go b/apex/apex_test.go index 49b2b2d4d..dbe918010 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -6227,6 +6227,9 @@ func TestOverrideApex(t *testing.T) { name: "mybootclasspath_fragment", contents: ["bcplib"], apex_available: ["myapex"], + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -6241,6 +6244,9 @@ func TestOverrideApex(t *testing.T) { name: "override_bootclasspath_fragment", contents: ["override_bcplib"], apex_available: ["myapex"], + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -7294,6 +7300,9 @@ func testNoUpdatableJarsInBootImage(t *testing.T, errmsg string, preparer androi apex_available: [ "some-non-updatable-apex", ], + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -7352,6 +7361,9 @@ func testNoUpdatableJarsInBootImage(t *testing.T, errmsg string, preparer androi apex_available: [ "com.android.art.debug", ], + hidden_api: { + split_packages: ["*"], + }, } apex_key { @@ -8796,6 +8808,9 @@ func TestApexJavaCoverage(t *testing.T) { name: "mybootclasspathfragment", contents: ["mybootclasspathlib"], apex_available: ["myapex"], + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -9116,6 +9131,9 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) { name: "mybootclasspathfragment", contents: ["mybootclasspathlib"], apex_available: ["myapex"], + hidden_api: { + split_packages: ["*"], + }, } java_sdk_library { @@ -9216,6 +9234,9 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) { name: "mybootclasspathfragment", contents: ["mybootclasspathlib"], apex_available: ["myapex"], + hidden_api: { + split_packages: ["*"], + }, } java_sdk_library { @@ -9435,6 +9456,9 @@ func TestApexStrictUpdtabilityLintBcpFragmentDeps(t *testing.T) { name: "mybootclasspathfragment", contents: ["myjavalib"], apex_available: ["myapex"], + hidden_api: { + split_packages: ["*"], + }, } java_library { name: "myjavalib", diff --git a/apex/bootclasspath_fragment_test.go b/apex/bootclasspath_fragment_test.go index ce6b7f730..b298dac5d 100644 --- a/apex/bootclasspath_fragment_test.go +++ b/apex/bootclasspath_fragment_test.go @@ -110,6 +110,9 @@ func TestBootclasspathFragments(t *testing.T) { apex_available: [ "com.android.art", ], + hidden_api: { + split_packages: ["*"], + }, } `, ) @@ -209,6 +212,9 @@ func TestBootclasspathFragments_FragmentDependency(t *testing.T) { apex_available: [ "com.android.art", ], + hidden_api: { + split_packages: ["*"], + }, } bootclasspath_fragment { @@ -220,6 +226,9 @@ func TestBootclasspathFragments_FragmentDependency(t *testing.T) { module: "art-bootclasspath-fragment", }, ], + hidden_api: { + split_packages: ["*"], + }, } `, ) @@ -361,6 +370,9 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) { apex_available: [ "com.android.art", ], + hidden_api: { + split_packages: ["*"], + }, } `, contentsInsert(contents)) @@ -853,6 +865,9 @@ func TestBootclasspathFragmentContentsNoName(t *testing.T) { apex_available: [ "myapex", ], + hidden_api: { + split_packages: ["*"], + }, } `) @@ -959,6 +974,9 @@ func TestBootclasspathFragment_HiddenAPIList(t *testing.T) { apex_available: [ "com.android.art", ], + hidden_api: { + split_packages: ["*"], + }, } apex { @@ -1010,6 +1028,9 @@ func TestBootclasspathFragment_HiddenAPIList(t *testing.T) { module: "art-bootclasspath-fragment", }, ], + hidden_api: { + split_packages: ["*"], + }, } `) @@ -1123,6 +1144,9 @@ func TestBootclasspathFragment_AndroidNonUpdatable(t *testing.T) { apex_available: [ "com.android.art", ], + hidden_api: { + split_packages: ["*"], + }, } apex { @@ -1175,6 +1199,9 @@ func TestBootclasspathFragment_AndroidNonUpdatable(t *testing.T) { module: "art-bootclasspath-fragment", }, ], + hidden_api: { + split_packages: ["*"], + }, } `) @@ -1282,6 +1309,9 @@ func TestBootclasspathFragment_AndroidNonUpdatable_AlwaysUsePrebuiltSdks(t *test apex_available: [ "com.android.art", ], + hidden_api: { + split_packages: ["*"], + }, } apex { @@ -1334,6 +1364,9 @@ func TestBootclasspathFragment_AndroidNonUpdatable_AlwaysUsePrebuiltSdks(t *test module: "art-bootclasspath-fragment", }, ], + hidden_api: { + split_packages: ["*"], + }, } `) diff --git a/apex/classpath_element_test.go b/apex/classpath_element_test.go index 60f18bd57..9142eed99 100644 --- a/apex/classpath_element_test.go +++ b/apex/classpath_element_test.go @@ -88,6 +88,9 @@ func TestCreateClasspathElements(t *testing.T) { "baz", "quuz", ], + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -134,6 +137,9 @@ func TestCreateClasspathElements(t *testing.T) { contents: [ "bar", ], + hidden_api: { + split_packages: ["*"], + }, } java_library { diff --git a/apex/platform_bootclasspath_test.go b/apex/platform_bootclasspath_test.go index 06c39ee4b..4b48da8e2 100644 --- a/apex/platform_bootclasspath_test.go +++ b/apex/platform_bootclasspath_test.go @@ -125,6 +125,7 @@ func TestPlatformBootclasspath_Fragments(t *testing.T) { unsupported_packages: [ "bar-unsupported-packages.txt", ], + split_packages: ["*"], }, } @@ -274,6 +275,9 @@ func TestPlatformBootclasspathDependencies(t *testing.T) { "baz", "quuz", ], + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -317,6 +321,9 @@ func TestPlatformBootclasspathDependencies(t *testing.T) { name: "my-bootclasspath-fragment", contents: ["bar"], apex_available: ["myapex"], + hidden_api: { + split_packages: ["*"], + }, } apex_key { @@ -482,6 +489,9 @@ func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) { contents: [ "foo", "bar", ], + hidden_api: { + split_packages: ["*"], + }, } prebuilt_bootclasspath_fragment { @@ -599,6 +609,9 @@ func TestPlatformBootclasspath_IncludesRemainingApexJars(t *testing.T) { generate_classpaths_proto: false, contents: ["foo"], apex_available: ["myapex"], + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -656,6 +669,9 @@ func TestBootJarNotInApex(t *testing.T) { contents: [ "foo", ], + hidden_api: { + split_packages: ["*"], + }, } platform_bootclasspath { @@ -696,6 +712,9 @@ func TestBootFragmentNotInApex(t *testing.T) { bootclasspath_fragment { name: "not-in-apex-fragment", contents: ["foo"], + hidden_api: { + split_packages: ["*"], + }, } platform_bootclasspath { @@ -746,6 +765,9 @@ func TestNonBootJarInFragment(t *testing.T) { name: "apex-fragment", contents: ["foo", "bar"], apex_available:[ "myapex" ], + hidden_api: { + split_packages: ["*"], + }, } platform_bootclasspath { diff --git a/java/bootclasspath_fragment.go b/java/bootclasspath_fragment.go index 1c77fdb43..b6b179cdf 100644 --- a/java/bootclasspath_fragment.go +++ b/java/bootclasspath_fragment.go @@ -37,6 +37,7 @@ func init() { func registerBootclasspathFragmentBuildComponents(ctx android.RegistrationContext) { ctx.RegisterModuleType("bootclasspath_fragment", bootclasspathFragmentFactory) + ctx.RegisterModuleType("bootclasspath_fragment_test", testBootclasspathFragmentFactory) ctx.RegisterModuleType("prebuilt_bootclasspath_fragment", prebuiltBootclasspathFragmentFactory) } @@ -231,6 +232,9 @@ type BootclasspathFragmentModule struct { android.SdkBase ClasspathFragmentBase + // True if this fragment is for testing purposes. + testFragment bool + properties bootclasspathFragmentProperties sourceOnlyProperties SourceOnlyBootclasspathProperties @@ -302,6 +306,12 @@ func bootclasspathFragmentFactory() android.Module { return m } +func testBootclasspathFragmentFactory() android.Module { + m := bootclasspathFragmentFactory().(*BootclasspathFragmentModule) + m.testFragment = true + return m +} + // bootclasspathFragmentInitContentsFromImage will initialize the contents property from the image_name if // necessary. func bootclasspathFragmentInitContentsFromImage(ctx android.EarlyModuleContext, m *BootclasspathFragmentModule) { @@ -823,6 +833,26 @@ func (b *BootclasspathFragmentModule) createHiddenAPIFlagInput(ctx android.Modul return input } +// isTestFragment returns true if the current module is a test bootclasspath_fragment. +func (b *BootclasspathFragmentModule) isTestFragment() bool { + if b.testFragment { + return true + } + + // TODO(b/194063708): Once test fragments all use bootclasspath_fragment_test + // Some temporary exceptions until all test fragments use the + // bootclasspath_fragment_test module type. + name := b.BaseModuleName() + if strings.HasPrefix(name, "test_") { + return true + } + if name == "apex.apexd_test_bootclasspath-fragment" { + return true + } + + return false +} + // produceHiddenAPIOutput produces the hidden API all-flags.csv file (and supporting files) // for the fragment as well as encoding the flags in the boot dex jars. func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput) *HiddenAPIOutput { @@ -836,11 +866,18 @@ func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleC packagePrefixes := b.sourceOnlyProperties.Hidden_api.Package_prefixes singlePackages := b.sourceOnlyProperties.Hidden_api.Single_packages if splitPackages != nil || packagePrefixes != nil || singlePackages != nil { - if splitPackages == nil { - splitPackages = []string{"*"} - } output.SignaturePatternsPath = buildRuleSignaturePatternsFile( ctx, output.AllFlagsPath, splitPackages, packagePrefixes, singlePackages) + } else if !b.isTestFragment() { + ctx.ModuleErrorf(`Must specify at least one of the split_packages, package_prefixes and single_packages properties + If this is a new bootclasspath_fragment or you are unsure what to do add the + the following to the bootclasspath_fragment: + hidden_api: {split_packages: ["*"]}, + and then run the following: + m analyze_bcpf && analyze_bcpf --bcpf %q + it will analyze the bootclasspath_fragment and provide hints as to what you + should specify here. If you are happy with its suggestions then you can add + the --fix option and it will fix them for you.`, b.BaseModuleName()) } return output diff --git a/java/bootclasspath_fragment_test.go b/java/bootclasspath_fragment_test.go index d3de675d8..83beb6d23 100644 --- a/java/bootclasspath_fragment_test.go +++ b/java/bootclasspath_fragment_test.go @@ -121,6 +121,9 @@ func TestBootclasspathFragment_Coverage(t *testing.T) { ], }, }, + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -201,6 +204,9 @@ func TestBootclasspathFragment_StubLibs(t *testing.T) { core_platform_api: { stub_libs: ["mycoreplatform.stubs"], }, + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -278,3 +284,64 @@ func TestBootclasspathFragment_StubLibs(t *testing.T) { android.AssertPathsRelativeToTopEquals(t, "widest dex stubs jar", expectedWidestPaths, info.TransitiveStubDexJarsByScope.StubDexJarsForWidestAPIScope()) } + +func TestBootclasspathFragment_Test(t *testing.T) { + result := android.GroupFixturePreparers( + prepareForTestWithBootclasspathFragment, + PrepareForTestWithJavaSdkLibraryFiles, + FixtureWithLastReleaseApis("mysdklibrary"), + ).RunTestWithBp(t, ` + bootclasspath_fragment { + name: "myfragment", + contents: ["mysdklibrary"], + hidden_api: { + split_packages: [], + }, + } + + bootclasspath_fragment { + name: "test_fragment", + contents: ["mysdklibrary"], + hidden_api: { + split_packages: [], + }, + } + + bootclasspath_fragment { + name: "apex.apexd_test_bootclasspath-fragment", + contents: ["mysdklibrary"], + hidden_api: { + split_packages: [], + }, + } + + bootclasspath_fragment_test { + name: "a_test_fragment", + contents: ["mysdklibrary"], + hidden_api: { + split_packages: [], + }, + } + + + java_sdk_library { + name: "mysdklibrary", + srcs: ["a.java"], + shared_library: false, + public: {enabled: true}, + system: {enabled: true}, + } + `) + + fragment := result.Module("myfragment", "android_common").(*BootclasspathFragmentModule) + android.AssertBoolEquals(t, "not a test fragment", false, fragment.isTestFragment()) + + fragment = result.Module("test_fragment", "android_common").(*BootclasspathFragmentModule) + android.AssertBoolEquals(t, "is a test fragment by prefix", true, fragment.isTestFragment()) + + fragment = result.Module("a_test_fragment", "android_common").(*BootclasspathFragmentModule) + android.AssertBoolEquals(t, "is a test fragment by type", true, fragment.isTestFragment()) + + fragment = result.Module("apex.apexd_test_bootclasspath-fragment", "android_common").(*BootclasspathFragmentModule) + android.AssertBoolEquals(t, "is a test fragment by name", true, fragment.isTestFragment()) +} diff --git a/sdk/bootclasspath_fragment_sdk_test.go b/sdk/bootclasspath_fragment_sdk_test.go index 7283cf050..13ddbe768 100644 --- a/sdk/bootclasspath_fragment_sdk_test.go +++ b/sdk/bootclasspath_fragment_sdk_test.go @@ -101,6 +101,9 @@ func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) { image_name: "art", contents: ["mybootlib"], apex_available: ["com.android.art"], + hidden_api: { + split_packages: ["*"], + }, } apex_key { @@ -223,6 +226,9 @@ func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, co // This should be automatically added to the sdk_snapshot as a java_sdk_libs module. stub_libs: ["mycoreplatform"], }, + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -507,6 +513,9 @@ func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) { contents: [ "myotherlib", ], + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -536,6 +545,9 @@ func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) { module: "myotherbootclasspathfragment" }, ], + hidden_api: { + split_packages: ["*"], + }, } java_sdk_library { @@ -615,6 +627,9 @@ func TestBasicSdkWithBootclasspathFragment(t *testing.T) { image_name: "art", contents: ["mybootlib"], apex_available: ["myapex"], + hidden_api: { + split_packages: ["*"], + }, } java_library { @@ -722,6 +737,7 @@ func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) { unsupported_packages: [ "my-unsupported-packages.txt", ], + split_packages: ["*"], }, } diff --git a/sdk/sdk_test.go b/sdk/sdk_test.go index e230d5c0b..1ec12c346 100644 --- a/sdk/sdk_test.go +++ b/sdk/sdk_test.go @@ -473,6 +473,9 @@ java_import { name: "mybootclasspathfragment", apex_available: ["myapex"], contents: ["mysdklibrary"], + hidden_api: { + split_packages: ["*"], + }, } java_sdk_library { |