Merge changes Ic32f02a6,Ibe358542

* changes:
  Export classesJars initialized in hiddenAPIExtractInformation
  Generalize the platformBootclasspathDepsMutator
diff --git a/java/bootclasspath.go b/java/bootclasspath.go
index b140a30..6ca0f75 100644
--- a/java/bootclasspath.go
+++ b/java/bootclasspath.go
@@ -24,6 +24,33 @@
 
 // Contains code that is common to both platform_bootclasspath and bootclasspath_fragment.
 
+func init() {
+	registerBootclasspathBuildComponents(android.InitRegistrationContext)
+}
+
+func registerBootclasspathBuildComponents(ctx android.RegistrationContext) {
+	ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) {
+		ctx.BottomUp("bootclasspath_deps", bootclasspathDepsMutator)
+	})
+}
+
+// BootclasspathDepsMutator is the interface that a module must implement if it wants to add
+// dependencies onto APEX specific variants of bootclasspath fragments or bootclasspath contents.
+type BootclasspathDepsMutator interface {
+	// BootclasspathDepsMutator implementations should add dependencies using
+	// addDependencyOntoApexModulePair and addDependencyOntoApexVariants.
+	BootclasspathDepsMutator(ctx android.BottomUpMutatorContext)
+}
+
+// bootclasspathDepsMutator is called during the final deps phase after all APEX variants have
+// been created so can add dependencies onto specific APEX variants of modules.
+func bootclasspathDepsMutator(ctx android.BottomUpMutatorContext) {
+	m := ctx.Module()
+	if p, ok := m.(BootclasspathDepsMutator); ok {
+		p.BootclasspathDepsMutator(ctx)
+	}
+}
+
 // addDependencyOntoApexVariants adds dependencies onto the appropriate apex specific variants of
 // the module as specified in the ApexVariantReference list.
 func addDependencyOntoApexVariants(ctx android.BottomUpMutatorContext, propertyName string, refs []ApexVariantReference, tag blueprint.DependencyTag) {
diff --git a/java/hiddenapi.go b/java/hiddenapi.go
index e575085..bc3b474 100644
--- a/java/hiddenapi.go
+++ b/java/hiddenapi.go
@@ -84,6 +84,11 @@
 	// created by the unsupported app usage annotation processor during compilation of the class
 	// implementation jar.
 	indexCSVPath android.Path
+
+	// The paths to the classes jars that contain classes and class members annotated with
+	// the UnsupportedAppUsage annotation that need to be extracted as part of the hidden API
+	// processing.
+	classesJarPaths android.Paths
 }
 
 func (h *hiddenAPI) flagsCSV() android.Path {
@@ -102,11 +107,16 @@
 	return h.indexCSVPath
 }
 
+func (h *hiddenAPI) classesJars() android.Paths {
+	return h.classesJarPaths
+}
+
 type hiddenAPIIntf interface {
 	bootDexJar() android.Path
 	flagsCSV() android.Path
 	indexCSV() android.Path
 	metadataCSV() android.Path
+	classesJars() android.Paths
 }
 
 var _ hiddenAPIIntf = (*hiddenAPI)(nil)
@@ -244,6 +254,7 @@
 		javaInfo := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo)
 		classesJars = append(classesJars, javaInfo.ImplementationJars...)
 	})
+	h.classesJarPaths = classesJars
 
 	stubFlagsCSV := hiddenAPISingletonPaths(ctx).stubFlags
 
diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go
index 38ce985..b1a0ac4 100644
--- a/java/platform_bootclasspath.go
+++ b/java/platform_bootclasspath.go
@@ -27,10 +27,6 @@
 
 func registerPlatformBootclasspathBuildComponents(ctx android.RegistrationContext) {
 	ctx.RegisterModuleType("platform_bootclasspath", platformBootclasspathFactory)
-
-	ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) {
-		ctx.BottomUp("platform_bootclasspath_deps", platformBootclasspathDepsMutator)
-	})
 }
 
 // The tag used for the dependency between the platform bootclasspath and any configured boot jars.
@@ -126,25 +122,22 @@
 	hiddenAPIAddStubLibDependencies(ctx, sdkKindToStubLibModules)
 }
 
-func platformBootclasspathDepsMutator(ctx android.BottomUpMutatorContext) {
-	m := ctx.Module()
-	if p, ok := m.(*platformBootclasspathModule); ok {
-		// Add dependencies on all the modules configured in the "art" boot image.
-		artImageConfig := genBootImageConfigs(ctx)[artBootImageName]
-		addDependenciesOntoBootImageModules(ctx, artImageConfig.modules)
+func (b *platformBootclasspathModule) BootclasspathDepsMutator(ctx android.BottomUpMutatorContext) {
+	// Add dependencies on all the modules configured in the "art" boot image.
+	artImageConfig := genBootImageConfigs(ctx)[artBootImageName]
+	addDependenciesOntoBootImageModules(ctx, artImageConfig.modules)
 
-		// Add dependencies on all the modules configured in the "boot" boot image. That does not
-		// include modules configured in the "art" boot image.
-		bootImageConfig := p.getImageConfig(ctx)
-		addDependenciesOntoBootImageModules(ctx, bootImageConfig.modules)
+	// Add dependencies on all the modules configured in the "boot" boot image. That does not
+	// include modules configured in the "art" boot image.
+	bootImageConfig := b.getImageConfig(ctx)
+	addDependenciesOntoBootImageModules(ctx, bootImageConfig.modules)
 
-		// Add dependencies on all the updatable modules.
-		updatableModules := dexpreopt.GetGlobalConfig(ctx).UpdatableBootJars
-		addDependenciesOntoBootImageModules(ctx, updatableModules)
+	// Add dependencies on all the updatable modules.
+	updatableModules := dexpreopt.GetGlobalConfig(ctx).UpdatableBootJars
+	addDependenciesOntoBootImageModules(ctx, updatableModules)
 
-		// Add dependencies on all the fragments.
-		p.properties.BootclasspathFragmentsDepsProperties.addDependenciesOntoFragments(ctx)
-	}
+	// Add dependencies on all the fragments.
+	b.properties.BootclasspathFragmentsDepsProperties.addDependenciesOntoFragments(ctx)
 }
 
 func addDependenciesOntoBootImageModules(ctx android.BottomUpMutatorContext, modules android.ConfiguredJarList) {
diff --git a/java/testing.go b/java/testing.go
index 08a71b8..e9cdddc 100644
--- a/java/testing.go
+++ b/java/testing.go
@@ -232,6 +232,7 @@
 	RegisterAppBuildComponents(ctx)
 	RegisterAppImportBuildComponents(ctx)
 	RegisterAppSetBuildComponents(ctx)
+	registerBootclasspathBuildComponents(ctx)
 	RegisterBootImageBuildComponents(ctx)
 	RegisterDexpreoptBootJarsComponents(ctx)
 	RegisterDocsBuildComponents(ctx)