bootclasspath_fragment: Require at least one hidden_api package property

Previously, the split_packages, single_packages and package_prefixes
properties were all optional and the split_packages defaulted to ["*"].
As that value conflicted with the other package properties that meant
that split_packages always had to be specified even if it was to just
set it to an empty array.

This change requires at least one of them to be specified and defaults
split_packages to an empty list which means it is not required,
although it can be helpful to make that explicit.

Bug: 194063708
Test: m nothing
Change-Id: I5a4c2d68e72e39f5c4a2441326dfce8685fc8ff2
This commit is contained in:
Paul Duffin 2022-03-31 15:42:30 +01:00
parent ff9b6faba2
commit 9fd564711e
8 changed files with 120 additions and 3 deletions

View file

@ -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 {
@ -8695,6 +8707,9 @@ func TestApexJavaCoverage(t *testing.T) {
name: "mybootclasspathfragment",
contents: ["mybootclasspathlib"],
apex_available: ["myapex"],
hidden_api: {
split_packages: ["*"],
},
}
java_library {
@ -9015,6 +9030,9 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) {
name: "mybootclasspathfragment",
contents: ["mybootclasspathlib"],
apex_available: ["myapex"],
hidden_api: {
split_packages: ["*"],
},
}
java_sdk_library {
@ -9115,6 +9133,9 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) {
name: "mybootclasspathfragment",
contents: ["mybootclasspathlib"],
apex_available: ["myapex"],
hidden_api: {
split_packages: ["*"],
},
}
java_sdk_library {
@ -9334,6 +9355,9 @@ func TestApexStrictUpdtabilityLintBcpFragmentDeps(t *testing.T) {
name: "mybootclasspathfragment",
contents: ["myjavalib"],
apex_available: ["myapex"],
hidden_api: {
split_packages: ["*"],
},
}
java_library {
name: "myjavalib",

View file

@ -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: ["*"],
},
}
`)

View file

@ -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 {

View file

@ -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 {

View file

@ -858,11 +858,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

View file

@ -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 {

View file

@ -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 {
@ -235,6 +238,9 @@ func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
// This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
stub_libs: ["mycoreplatform"],
},
hidden_api: {
split_packages: ["*"],
},
}
java_library {
@ -453,6 +459,9 @@ func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
contents: [
"myotherlib",
],
hidden_api: {
split_packages: ["*"],
},
}
java_library {
@ -482,6 +491,9 @@ func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
module: "myotherbootclasspathfragment"
},
],
hidden_api: {
split_packages: ["*"],
},
}
java_sdk_library {
@ -561,6 +573,9 @@ func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
image_name: "art",
contents: ["mybootlib"],
apex_available: ["myapex"],
hidden_api: {
split_packages: ["*"],
},
}
java_library {
@ -668,6 +683,7 @@ func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
unsupported_packages: [
"my-unsupported-packages.txt",
],
split_packages: ["*"],
},
}

View file

@ -473,6 +473,9 @@ java_import {
name: "mybootclasspathfragment",
apex_available: ["myapex"],
contents: ["mysdklibrary"],
hidden_api: {
split_packages: ["*"],
},
}
java_sdk_library {