Merge changes Ib0389900,Ib2d69dea

* changes:
  Fix hiddenapi issue when REMOVE_ATB_FROM_BCP=true
  Improve hiddenapi processing so it does not require white list
diff --git a/java/config/config.go b/java/config/config.go
index 75be9e2..7cc249c 100644
--- a/java/config/config.go
+++ b/java/config/config.go
@@ -33,12 +33,6 @@
 	DefaultLambdaStubsLibrary     = "core-lambda-stubs"
 	SdkLambdaStubsPath            = "prebuilts/sdk/tools/core-lambda-stubs.jar"
 
-	// A list of the jars that provide information about usages of the hidden API.
-	HiddenAPIExtraAppUsageJars = []string{
-		// The core-oj-hiddenapi provides information for the core-oj jar.
-		"core-oj-hiddenapi",
-	}
-
 	DefaultJacocoExcludeFilter = []string{"org.junit.*", "org.jacoco.*", "org.mockito.*"}
 
 	InstrumentFrameworkModules = []string{
diff --git a/java/hiddenapi.go b/java/hiddenapi.go
index 51ed3dd..6020aba 100644
--- a/java/hiddenapi.go
+++ b/java/hiddenapi.go
@@ -15,10 +15,11 @@
 package java
 
 import (
+	"strings"
+
 	"github.com/google/blueprint"
 
 	"android/soong/android"
-	"android/soong/java/config"
 )
 
 var hiddenAPIGenerateCSVRule = pctx.AndroidStaticRule("hiddenAPIGenerateCSV", blueprint.RuleParams{
@@ -56,20 +57,39 @@
 	uncompressDex bool) android.ModuleOutPath {
 
 	if !ctx.Config().IsEnvTrue("UNSAFE_DISABLE_HIDDENAPI_FLAGS") {
-		isBootJar := inList(ctx.ModuleName(), ctx.Config().BootJars())
-		if isBootJar || inList(ctx.ModuleName(), config.HiddenAPIExtraAppUsageJars) {
+		name := ctx.ModuleName()
+
+		// Modules whose names are of the format <x>-hiddenapi provide hiddenapi information
+		// for the boot jar module <x>. Otherwise, the module provides information for itself.
+		// Either way extract the name of the boot jar module.
+		bootJarName := strings.TrimSuffix(name, "-hiddenapi")
+
+		// If this module is on the boot jars list (or providing information for a module
+		// on the list) then extract the hiddenapi information from it, and if necessary
+		// encode that information in the generated dex file.
+		//
+		// It is important that hiddenapi information is only gathered for/from modules on
+		// that are actually on the boot jars list because the runtime only enforces access
+		// to the hidden API for the bootclassloader. If information is gathered for modules
+		// not on the list then that will cause failures in the CtsHiddenApiBlacklist...
+		// tests.
+		if inList(bootJarName, ctx.Config().BootJars()) {
 			// Derive the greylist from classes jar.
 			flagsCSV := android.PathForModuleOut(ctx, "hiddenapi", "flags.csv")
 			metadataCSV := android.PathForModuleOut(ctx, "hiddenapi", "metadata.csv")
 			hiddenAPIGenerateCSV(ctx, flagsCSV, metadataCSV, implementationJar)
 			h.flagsCSVPath = flagsCSV
 			h.metadataCSVPath = metadataCSV
-		}
-		if isBootJar {
-			hiddenAPIJar := android.PathForModuleOut(ctx, "hiddenapi", ctx.ModuleName()+".jar")
-			h.bootDexJarPath = dexJar
-			hiddenAPIEncodeDex(ctx, hiddenAPIJar, dexJar, uncompressDex)
-			dexJar = hiddenAPIJar
+
+			// If this module is actually on the boot jars list and not providing
+			// hiddenapi information for a module on the boot jars list then encode
+			// the gathered information in the generated dex file.
+			if name == bootJarName {
+				hiddenAPIJar := android.PathForModuleOut(ctx, "hiddenapi", name+".jar")
+				h.bootDexJarPath = dexJar
+				hiddenAPIEncodeDex(ctx, hiddenAPIJar, dexJar, uncompressDex)
+				dexJar = hiddenAPIJar
+			}
 		}
 	}
 
diff --git a/java/hiddenapi_singleton.go b/java/hiddenapi_singleton.go
index 23f6cb0..ceafb59 100644
--- a/java/hiddenapi_singleton.go
+++ b/java/hiddenapi_singleton.go
@@ -89,7 +89,13 @@
 	// Public API stubs
 	publicStubModules := []string{
 		"android_stubs_current",
-		"android.test.base.stubs",
+	}
+
+	// Add the android.test.base to the set of stubs only if the android.test.base module is on
+	// the boot jars list as the runtime will only enforce hiddenapi access against modules on
+	// that list.
+	if inList("android.test.base", ctx.Config().BootJars()) {
+		publicStubModules = append(publicStubModules, "android.test.base.stubs")
 	}
 
 	// System API stubs