Add hidden API properties to java_sdk_library modules
Previously, hidden API properties were only allowed on
bootclasspath_fragment and platform_bootclasspath module types. This
change allows them to be specified on java_sdk_library modules too. It
involves the following changes:
1. Add the properties to the java.Module.
2. Populate and provide a HiddenAPIPropertyInfo struct from
java_sdk_library modules.
3. Modify bootclasspath_fragment to merge information gathered from its
content libraries as if it was specified on the fragment itself.
Bug: 240406019
Test: m nothing
packages/modules/common/build/mainline_modules_sdks.sh
# Ran the previous command with and without this change to make
# sure that this change does not change the sdk snapshot
# contents.
Change-Id: I64eb71c2039ddc14cf380689d0cec7ec221f5b88
(cherry picked from commit 3f1ae0b55a
)
Merged-In: I64eb71c2039ddc14cf380689d0cec7ec221f5b88
This commit is contained in:
committed by
Cherrypicker Worker
parent
067e12f46a
commit
b5e3c9802a
@@ -440,7 +440,18 @@ var hiddenAPIRemovedFlagFileCategory = &hiddenAPIFlagFileCategory{
|
||||
},
|
||||
}
|
||||
|
||||
var HiddenAPIFlagFileCategories = []*hiddenAPIFlagFileCategory{
|
||||
type hiddenAPIFlagFileCategories []*hiddenAPIFlagFileCategory
|
||||
|
||||
func (c hiddenAPIFlagFileCategories) byProperty(name string) *hiddenAPIFlagFileCategory {
|
||||
for _, category := range c {
|
||||
if category.PropertyName == name {
|
||||
return category
|
||||
}
|
||||
}
|
||||
panic(fmt.Errorf("no category exists with property name %q in %v", name, c))
|
||||
}
|
||||
|
||||
var HiddenAPIFlagFileCategories = hiddenAPIFlagFileCategories{
|
||||
// See HiddenAPIFlagFileProperties.Unsupported
|
||||
{
|
||||
PropertyName: "unsupported",
|
||||
@@ -517,13 +528,20 @@ var HiddenAPIFlagFileCategories = []*hiddenAPIFlagFileCategory{
|
||||
// FlagFilesByCategory maps a hiddenAPIFlagFileCategory to the paths to the files in that category.
|
||||
type FlagFilesByCategory map[*hiddenAPIFlagFileCategory]android.Paths
|
||||
|
||||
// append appends the supplied flags files to the corresponding category in this map.
|
||||
// append the supplied flags files to the corresponding category in this map.
|
||||
func (s FlagFilesByCategory) append(other FlagFilesByCategory) {
|
||||
for _, category := range HiddenAPIFlagFileCategories {
|
||||
s[category] = append(s[category], other[category]...)
|
||||
}
|
||||
}
|
||||
|
||||
// sort the paths for each category in this map.
|
||||
func (s FlagFilesByCategory) sort() {
|
||||
for category, value := range s {
|
||||
s[category] = android.SortedUniquePaths(value)
|
||||
}
|
||||
}
|
||||
|
||||
// HiddenAPIInfo contains information provided by the hidden API processing.
|
||||
//
|
||||
// That includes paths resolved from HiddenAPIFlagFileProperties and also generated by hidden API
|
||||
@@ -706,6 +724,8 @@ type HiddenAPIPropertyInfo struct {
|
||||
SplitPackages []string
|
||||
}
|
||||
|
||||
var hiddenAPIPropertyInfoProvider = blueprint.NewProvider(HiddenAPIPropertyInfo{})
|
||||
|
||||
// newHiddenAPIPropertyInfo creates a new initialized HiddenAPIPropertyInfo struct.
|
||||
func newHiddenAPIPropertyInfo() HiddenAPIPropertyInfo {
|
||||
return HiddenAPIPropertyInfo{
|
||||
@@ -730,6 +750,24 @@ func (i *HiddenAPIPropertyInfo) extractPackageRulesFromProperties(p *HiddenAPIPa
|
||||
i.SplitPackages = p.Hidden_api.Split_packages
|
||||
}
|
||||
|
||||
func (i *HiddenAPIPropertyInfo) gatherPropertyInfo(ctx android.ModuleContext, contents []android.Module) {
|
||||
for _, module := range contents {
|
||||
if ctx.OtherModuleHasProvider(module, hiddenAPIPropertyInfoProvider) {
|
||||
info := ctx.OtherModuleProvider(module, hiddenAPIPropertyInfoProvider).(HiddenAPIPropertyInfo)
|
||||
i.FlagFilesByCategory.append(info.FlagFilesByCategory)
|
||||
i.PackagePrefixes = append(i.PackagePrefixes, info.PackagePrefixes...)
|
||||
i.SinglePackages = append(i.SinglePackages, info.SinglePackages...)
|
||||
i.SplitPackages = append(i.SplitPackages, info.SplitPackages...)
|
||||
}
|
||||
}
|
||||
|
||||
// Dedup and sort the information to ensure consistent builds.
|
||||
i.FlagFilesByCategory.sort()
|
||||
i.PackagePrefixes = android.SortedUniqueStrings(i.PackagePrefixes)
|
||||
i.SinglePackages = android.SortedUniqueStrings(i.SinglePackages)
|
||||
i.SplitPackages = android.SortedUniqueStrings(i.SplitPackages)
|
||||
}
|
||||
|
||||
// HiddenAPIFlagInput encapsulates information obtained from a module and its dependencies that are
|
||||
// needed for hidden API flag generation.
|
||||
type HiddenAPIFlagInput struct {
|
||||
|
Reference in New Issue
Block a user