don't export systemserverclasspath_fragment if contents are empty

If a systemserverclasspath_fragment only contains libraries that have a
higher min_sdk_version than the target build release version, then we
should not export the systemserverclasspath_fragment. Before this
change, the fragment was exported with an empty `contents` property
which caused errors after being dropped as a prebuilt.

Bug: 289183551
Test: go test ./sdk
Change-Id: Ifefc6880228e4dd37f5e42b2bda31a83df785375
This commit is contained in:
Sam Delmerico
2023-06-30 14:40:10 -04:00
parent a56663f695
commit 35881365b4
4 changed files with 136 additions and 10 deletions

View File

@@ -455,11 +455,14 @@ be unnecessary as every module in the sdk already has its own licenses property.
for _, module := range builder.prebuiltOrder {
// Prune any empty property sets.
module = module.transform(pruneEmptySetTransformer{})
module = transformModule(module, pruneEmptySetTransformer{})
// Transform the module module to make it suitable for use in the snapshot.
module.transform(snapshotTransformer)
bpFile.AddModule(module)
module = transformModule(module, snapshotTransformer)
module = transformModule(module, emptyClasspathContentsTransformation{})
if module != nil {
bpFile.AddModule(module)
}
}
// generate Android.bp
@@ -835,9 +838,11 @@ type snapshotTransformation struct {
}
func (t snapshotTransformation) transformModule(module *bpModule) *bpModule {
// If the module is an internal member then use a unique name for it.
name := module.Name()
module.setProperty("name", t.builder.snapshotSdkMemberName(name, true))
if module != nil {
// If the module is an internal member then use a unique name for it.
name := module.Name()
module.setProperty("name", t.builder.snapshotSdkMemberName(name, true))
}
return module
}
@@ -850,6 +855,25 @@ func (t snapshotTransformation) transformProperty(_ string, value interface{}, t
}
}
type emptyClasspathContentsTransformation struct {
identityTransformation
}
func (t emptyClasspathContentsTransformation) transformModule(module *bpModule) *bpModule {
classpathModuleTypes := []string{
"prebuilt_bootclasspath_fragment",
"prebuilt_systemserverclasspath_fragment",
}
if module != nil && android.InList(module.moduleType, classpathModuleTypes) {
if contents, ok := module.bpPropertySet.properties["contents"].([]string); ok {
if len(contents) == 0 {
return nil
}
}
}
return module
}
type pruneEmptySetTransformer struct {
identityTransformation
}