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

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

Rewrite code for creating versioned modules as a transformation

Moves the code for transforming an unversioned module into a
versioned module into a transformer.

This is preparation for enhancing the versioning tranformer to support
applying per property transformations. Specifically, to allow
properties to reference other libraries within the sdk.

Bug: 142940300
Test: m nothing
Change-Id: Ia6b5cff8e1b5cd7232e031769d9fc0019e815fcb
parent b4d9c1f0
Loading
Loading
Loading
Loading
+23 −3
Original line number Diff line number Diff line
@@ -194,12 +194,16 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext) android.OutputPath {
		member.memberType.BuildSnapshot(ctx, builder, member)
	}

	// Create a transformer that will transform an unversioned module into a versioned module.
	unversionedToVersionedTransformer := unversionedToVersionedTransformation{builder: builder}

	for _, unversioned := range builder.prebuiltOrder {
		// Copy the unversioned module so it can be modified to make it versioned.
		versioned := unversioned.deepCopy()
		name := versioned.properties["name"].(string)
		versioned.setProperty("name", builder.versionedSdkMemberName(name))
		versioned.insertAfter("name", "sdk_member_name", name)

		// Transform the unversioned module into a versioned one.
		versioned.transform(unversionedToVersionedTransformer)

		bpFile.AddModule(versioned)

		// Set prefer: false - this is not strictly required as that is the default.
@@ -281,6 +285,22 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext) android.OutputPath {
	return outputZipFile
}

type unversionedToVersionedTransformation struct {
	identityTransformation
	builder *snapshotBuilder
}

var _ bpTransformer = (*unversionedToVersionedTransformation)(nil)

func (t unversionedToVersionedTransformation) transformModule(module *bpModule) *bpModule {
	// Use a versioned name for the module but remember the original name for the
	// snapshot.
	name := module.getValue("name").(string)
	module.setProperty("name", t.builder.versionedSdkMemberName(name))
	module.insertAfter("name", "sdk_member_name", name)
	return module
}

func generateBpContents(contents *generatedContents, bpFile *bpFile) {
	contents.Printfln("// This is auto-generated. DO NOT EDIT.")
	for _, bpModule := range bpFile.order {