From f5c0a9c8f30f6ab85584c251e881d777a47f9432 Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Fri, 28 Feb 2020 14:39:53 +0000 Subject: [PATCH] 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. Test: m nothing Bug: 150451422 Change-Id: I1f96986bb497cf9d9df9916e40065f66b35a4704 --- java/java.go | 64 +++++++++++++++++++--------------------------------- 1 file changed, 23 insertions(+), 41 deletions(-) diff --git a/java/java.go b/java/java.go index 8d58a9023..135ae514c 100644 --- a/java/java.go +++ b/java/java.go @@ -41,11 +41,17 @@ func init() { // Register sdk member types. android.RegisterSdkMemberType(javaHeaderLibsSdkMemberType) - android.RegisterSdkMemberType(&implLibrarySdkMemberType{ - librarySdkMemberType{ - android.SdkMemberTypeBase{ - PropertyName: "java_libs", - }, + android.RegisterSdkMemberType(&librarySdkMemberType{ + android.SdkMemberTypeBase{ + 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] }, }) @@ -1883,6 +1889,10 @@ func sdkSnapshotFilePathForMember(member android.SdkMember, suffix string) strin type librarySdkMemberType struct { 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) { @@ -1894,11 +1904,7 @@ func (mt *librarySdkMemberType) IsInstance(module android.Module) bool { return ok } -func (mt *librarySdkMemberType) buildSnapshot( - sdkModuleContext android.ModuleContext, - builder android.SnapshotBuilder, - member android.SdkMember, - jarToExportGetter func(j *Library) android.Path) { +func (mt *librarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) { variants := member.Variants() if len(variants) != 1 { @@ -1910,7 +1916,7 @@ func (mt *librarySdkMemberType) buildSnapshot( variant := variants[0] j := variant.(*Library) - exportedJar := jarToExportGetter(j) + exportedJar := mt.jarToExportGetter(j) snapshotRelativeJavaLibPath := sdkSnapshotFilePathForJar(member) builder.CopyToSnapshot(exportedJar, snapshotRelativeJavaLibPath) @@ -1926,43 +1932,19 @@ func (mt *librarySdkMemberType) buildSnapshot( module.AddProperty("jars", []string{snapshotRelativeJavaLibPath}) } -var javaHeaderLibsSdkMemberType android.SdkMemberType = &headerLibrarySdkMemberType{ - librarySdkMemberType{ - android.SdkMemberTypeBase{ - PropertyName: "java_header_libs", - SupportsSdk: true, - }, +var javaHeaderLibsSdkMemberType android.SdkMemberType = &librarySdkMemberType{ + android.SdkMemberTypeBase{ + PropertyName: "java_header_libs", + SupportsSdk: true, }, -} - -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 { + func(j *Library) android.Path { headerJars := j.HeaderJars() if len(headerJars) != 1 { panic(fmt.Errorf("there must be only one header jar from %q", j.Name())) } 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.