Make bootclasspath_fragment hidden API package checks exhaustive
Previously, the bootclasspath_fragment's hidden_api.split_packages and hidden_api.package_prefixes properties did not specify an exhaustive set of packages that were provided by the fragment. They excluded packages which were either not split or which could not be used as a package prefix because it would match sub-packages provided by other bootclasspath modules. This change adds the hidden_api.single_packages list to specify those additional packages and then uses that information to verify that any bootclasspath_fragment that specifies at least one of split_packages, single_packages or package_prefixes properties only contains classes from a package that matches one of those properties. That will prevent a module from accidentally including unexpected classes, such as might happen when statically including a common utility library. It also adds coverage specific versions of the properties as additional packages are added to the art-bootclasspath-fragment when building coverage builds. Bug: 194063708 Test: atest signature_patterns_test m out/soong/hiddenapi/hiddenapi-flags.csv m EMMA_INSTRUMENT=true EMMA_INSTRUMENT_FRAMEWORK=true out/soong/hiddenapi/hiddenapi-flags.csv # Breaks without corresponding change to add android.system to # the art-bootclasspath-fragment. /usr/bin/pylint --rcfile $ANDROID_BUILD_TOP/tools/repohooks/tools/pylintrc scripts/hiddenapi/signature_patterns*.py pyformat -s 4 --force_quote_type single -i scripts/hiddenapi/signature_patterns*.py Change-Id: Iddf6c59cd4dc8c36dde7943a9840ccef5794b320
This commit is contained in:
@@ -140,7 +140,7 @@ type bootclasspathFragmentProperties struct {
|
||||
BootclasspathFragmentsDepsProperties
|
||||
}
|
||||
|
||||
type SourceOnlyBootclasspathProperties struct {
|
||||
type HiddenApiPackageProperties struct {
|
||||
Hidden_api struct {
|
||||
// Contains prefixes of a package hierarchy that is provided solely by this
|
||||
// bootclasspath_fragment.
|
||||
@@ -149,6 +149,14 @@ type SourceOnlyBootclasspathProperties struct {
|
||||
// hidden API flags. See split_packages property for more details.
|
||||
Package_prefixes []string
|
||||
|
||||
// A list of individual packages that are provided solely by this
|
||||
// bootclasspath_fragment but which cannot be listed in package_prefixes
|
||||
// because there are sub-packages which are provided by other modules.
|
||||
//
|
||||
// This should only be used for legacy packages. New packages should be
|
||||
// covered by a package prefix.
|
||||
Single_packages []string
|
||||
|
||||
// The list of split packages provided by this bootclasspath_fragment.
|
||||
//
|
||||
// A split package is one that contains classes which are provided by multiple
|
||||
@@ -208,6 +216,11 @@ type SourceOnlyBootclasspathProperties struct {
|
||||
}
|
||||
}
|
||||
|
||||
type SourceOnlyBootclasspathProperties struct {
|
||||
HiddenApiPackageProperties
|
||||
Coverage HiddenApiPackageProperties
|
||||
}
|
||||
|
||||
type BootclasspathFragmentModule struct {
|
||||
android.ModuleBase
|
||||
android.ApexModuleBase
|
||||
@@ -271,6 +284,12 @@ func bootclasspathFragmentFactory() android.Module {
|
||||
ctx.PropertyErrorf("coverage", "error trying to append coverage specific properties: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = proptools.AppendProperties(&m.sourceOnlyProperties.HiddenApiPackageProperties, &m.sourceOnlyProperties.Coverage, nil)
|
||||
if err != nil {
|
||||
ctx.PropertyErrorf("coverage", "error trying to append hidden api coverage specific properties: %s", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize the contents property from the image_name.
|
||||
@@ -731,7 +750,8 @@ func (b *BootclasspathFragmentModule) generateHiddenAPIBuildActions(ctx android.
|
||||
// TODO(b/192868581): Remove once the source and prebuilts provide a signature patterns file of
|
||||
// their own.
|
||||
if output.SignaturePatternsPath == nil {
|
||||
output.SignaturePatternsPath = buildRuleSignaturePatternsFile(ctx, output.AllFlagsPath, []string{"*"}, nil)
|
||||
output.SignaturePatternsPath = buildRuleSignaturePatternsFile(
|
||||
ctx, output.AllFlagsPath, []string{"*"}, nil, nil)
|
||||
}
|
||||
|
||||
// Initialize a HiddenAPIInfo structure.
|
||||
@@ -806,11 +826,13 @@ func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleC
|
||||
// signature patterns.
|
||||
splitPackages := b.sourceOnlyProperties.Hidden_api.Split_packages
|
||||
packagePrefixes := b.sourceOnlyProperties.Hidden_api.Package_prefixes
|
||||
if splitPackages != nil || packagePrefixes != nil {
|
||||
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)
|
||||
output.SignaturePatternsPath = buildRuleSignaturePatternsFile(
|
||||
ctx, output.AllFlagsPath, splitPackages, packagePrefixes, singlePackages)
|
||||
}
|
||||
|
||||
return output
|
||||
|
Reference in New Issue
Block a user