Revert "Remove `prebuilt_apex_module_creator` mutator"

This reverts commit 309a612c9f602c9021989c607a91917194d18e77.

Reason for revert: DroidMonitor created revert due to b/369260559.

Change-Id: I1d5c7b8fa8847f5a8dfd510456e8fd9fb2754511
diff --git a/apex/apex.go b/apex/apex.go
index 9e9b9f2..9e3f288 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -49,10 +49,15 @@
 	ctx.RegisterModuleType("override_apex", OverrideApexFactory)
 	ctx.RegisterModuleType("apex_set", apexSetFactory)
 
+	ctx.PreArchMutators(registerPreArchMutators)
 	ctx.PreDepsMutators(RegisterPreDepsMutators)
 	ctx.PostDepsMutators(RegisterPostDepsMutators)
 }
 
+func registerPreArchMutators(ctx android.RegisterMutatorsContext) {
+	ctx.BottomUp("prebuilt_apex_module_creator", prebuiltApexModuleCreatorMutator).Parallel()
+}
+
 func RegisterPreDepsMutators(ctx android.RegisterMutatorsContext) {
 	ctx.BottomUp("apex_vndk_deps", apexVndkDepsMutator).Parallel()
 }
diff --git a/apex/prebuilt.go b/apex/prebuilt.go
index 9cd5688..d3f14f9 100644
--- a/apex/prebuilt.go
+++ b/apex/prebuilt.go
@@ -253,6 +253,28 @@
 	return entriesList
 }
 
+// DEPRECATED. // TODO (spandandas): Remove this interface.
+
+// prebuiltApexModuleCreator defines the methods that need to be implemented by prebuilt_apex and
+// apex_set in order to create the modules needed to provide access to the prebuilt .apex file.
+type prebuiltApexModuleCreator interface {
+	createPrebuiltApexModules(ctx android.BottomUpMutatorContext)
+}
+
+// prebuiltApexModuleCreatorMutator is the mutator responsible for invoking the
+// prebuiltApexModuleCreator's createPrebuiltApexModules method.
+//
+// It is registered as a pre-arch mutator as it must run after the ComponentDepsMutator because it
+// will need to access dependencies added by that (exported modules) but must run before the
+// DepsMutator so that the deapexer module it creates can add dependencies onto itself from the
+// exported modules.
+func prebuiltApexModuleCreatorMutator(ctx android.BottomUpMutatorContext) {
+	module := ctx.Module()
+	if creator, ok := module.(prebuiltApexModuleCreator); ok {
+		creator.createPrebuiltApexModules(ctx)
+	}
+}
+
 func (p *prebuiltCommon) hasExportedDeps() bool {
 	return len(p.prebuiltCommonProperties.Exported_bootclasspath_fragments) > 0 ||
 		len(p.prebuiltCommonProperties.Exported_systemserverclasspath_fragments) > 0