Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5c0a9c8 authored by Paul Duffin's avatar Paul Duffin
Browse files

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
parent 1356d8c0
Loading
Loading
Loading
Loading
+23 −41
Original line number Diff line number Diff line
@@ -41,11 +41,17 @@ func init() {
	// Register sdk member types.
	android.RegisterSdkMemberType(javaHeaderLibsSdkMemberType)

	android.RegisterSdkMemberType(&implLibrarySdkMemberType{
		librarySdkMemberType{
	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{
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.