Simplify java library sdk member code

Adds the accessor function for retrieving the impl/header jars to the
librarySdkMemberType structure instead of passing it into its
buildSnapshot() method.

That enabled:
* The removal of the [header/impl]LibrarySdkMemberType structs.
* The removal of their implementations of BuildSnapshot.
* Replacing buildSnapshot() with BuildSnapshot()

This will make subsequent refactoring of the SdkMemberType interface
a little simpler.

Bug: 153306490
Test: m nothing
Bug: 150451422
Merged-In: I1f96986bb497cf9d9df9916e40065f66b35a4704
Change-Id: I1f96986bb497cf9d9df9916e40065f66b35a4704
This commit is contained in:
Paul Duffin
2020-02-28 14:39:53 +00:00
parent b0cbec3ada
commit 2b9e3d39d9

View File

@@ -39,11 +39,17 @@ func init() {
// Register sdk member types. // Register sdk member types.
android.RegisterSdkMemberType(javaHeaderLibsSdkMemberType) android.RegisterSdkMemberType(javaHeaderLibsSdkMemberType)
android.RegisterSdkMemberType(&implLibrarySdkMemberType{ android.RegisterSdkMemberType(&librarySdkMemberType{
librarySdkMemberType{ android.SdkMemberTypeBase{
android.SdkMemberTypeBase{ PropertyName: "java_libs",
PropertyName: "java_libs", },
}, func(j *Library) android.Path {
implementationJars := j.ImplementationJars()
if len(implementationJars) != 1 {
panic(fmt.Errorf("there must be only one implementation jar from %q", j.Name()))
}
return implementationJars[0]
}, },
}) })
@@ -1870,6 +1876,10 @@ func sdkSnapshotFilePathForMember(member android.SdkMember, suffix string) strin
type librarySdkMemberType struct { type librarySdkMemberType struct {
android.SdkMemberTypeBase android.SdkMemberTypeBase
// Function to retrieve the appropriate output jar (implementation or header) from
// the library.
jarToExportGetter func(j *Library) android.Path
} }
func (mt *librarySdkMemberType) AddDependencies(mctx android.BottomUpMutatorContext, dependencyTag blueprint.DependencyTag, names []string) { func (mt *librarySdkMemberType) AddDependencies(mctx android.BottomUpMutatorContext, dependencyTag blueprint.DependencyTag, names []string) {
@@ -1881,11 +1891,7 @@ func (mt *librarySdkMemberType) IsInstance(module android.Module) bool {
return ok return ok
} }
func (mt *librarySdkMemberType) buildSnapshot( func (mt *librarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) {
sdkModuleContext android.ModuleContext,
builder android.SnapshotBuilder,
member android.SdkMember,
jarToExportGetter func(j *Library) android.Path) {
variants := member.Variants() variants := member.Variants()
if len(variants) != 1 { if len(variants) != 1 {
@@ -1897,7 +1903,7 @@ func (mt *librarySdkMemberType) buildSnapshot(
variant := variants[0] variant := variants[0]
j := variant.(*Library) j := variant.(*Library)
exportedJar := jarToExportGetter(j) exportedJar := mt.jarToExportGetter(j)
snapshotRelativeJavaLibPath := sdkSnapshotFilePathForJar(member) snapshotRelativeJavaLibPath := sdkSnapshotFilePathForJar(member)
builder.CopyToSnapshot(exportedJar, snapshotRelativeJavaLibPath) builder.CopyToSnapshot(exportedJar, snapshotRelativeJavaLibPath)
@@ -1913,43 +1919,19 @@ func (mt *librarySdkMemberType) buildSnapshot(
module.AddProperty("jars", []string{snapshotRelativeJavaLibPath}) module.AddProperty("jars", []string{snapshotRelativeJavaLibPath})
} }
var javaHeaderLibsSdkMemberType android.SdkMemberType = &headerLibrarySdkMemberType{ var javaHeaderLibsSdkMemberType android.SdkMemberType = &librarySdkMemberType{
librarySdkMemberType{ android.SdkMemberTypeBase{
android.SdkMemberTypeBase{ PropertyName: "java_header_libs",
PropertyName: "java_header_libs", SupportsSdk: true,
SupportsSdk: true,
},
}, },
} func(j *Library) android.Path {
type headerLibrarySdkMemberType struct {
librarySdkMemberType
}
func (mt *headerLibrarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) {
mt.librarySdkMemberType.buildSnapshot(sdkModuleContext, builder, member, func(j *Library) android.Path {
headerJars := j.HeaderJars() headerJars := j.HeaderJars()
if len(headerJars) != 1 { if len(headerJars) != 1 {
panic(fmt.Errorf("there must be only one header jar from %q", j.Name())) panic(fmt.Errorf("there must be only one header jar from %q", j.Name()))
} }
return headerJars[0] return headerJars[0]
}) },
}
type implLibrarySdkMemberType struct {
librarySdkMemberType
}
func (mt *implLibrarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) {
mt.librarySdkMemberType.buildSnapshot(sdkModuleContext, builder, member, func(j *Library) android.Path {
implementationJars := j.ImplementationJars()
if len(implementationJars) != 1 {
panic(fmt.Errorf("there must be only one implementation jar from %q", j.Name()))
}
return implementationJars[0]
})
} }
// java_library builds and links sources into a `.jar` file for the device, and possibly for the host as well. // java_library builds and links sources into a `.jar` file for the device, and possibly for the host as well.