Merge "Support UNSAFE_DISABLE_HIDDENAPI_FLAGS in platform_bootclasspath"
diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go
index fa13332..d98ce67 100644
--- a/java/platform_bootclasspath.go
+++ b/java/platform_bootclasspath.go
@@ -73,13 +73,13 @@
 	fragments []android.Module
 
 	// Path to the monolithic hiddenapi-flags.csv file.
-	hiddenAPIFlagsCSV android.Path
+	hiddenAPIFlagsCSV android.OutputPath
 
 	// Path to the monolithic hiddenapi-index.csv file.
-	hiddenAPIIndexCSV android.Path
+	hiddenAPIIndexCSV android.OutputPath
 
 	// Path to the monolithic hiddenapi-unsupported.csv file.
-	hiddenAPIMetadataCSV android.Path
+	hiddenAPIMetadataCSV android.OutputPath
 }
 
 // ApexVariantReference specifies a particular apex variant of a module.
@@ -266,6 +266,20 @@
 	b.hiddenAPIIndexCSV = hiddenAPISingletonPaths(ctx).index
 	b.hiddenAPIMetadataCSV = hiddenAPISingletonPaths(ctx).metadata
 
+	// Don't run any hiddenapi rules if UNSAFE_DISABLE_HIDDENAPI_FLAGS=true. This is a performance
+	// optimization that can be used to reduce the incremental build time but as its name suggests it
+	// can be unsafe to use, e.g. when the changes affect anything that goes on the bootclasspath.
+	if ctx.Config().IsEnvTrue("UNSAFE_DISABLE_HIDDENAPI_FLAGS") {
+		paths := android.OutputPaths{b.hiddenAPIFlagsCSV, b.hiddenAPIIndexCSV, b.hiddenAPIMetadataCSV}
+		for _, path := range paths {
+			ctx.Build(pctx, android.BuildParams{
+				Rule:   android.Touch,
+				Output: path,
+			})
+		}
+		return
+	}
+
 	moduleSpecificFlagsPaths := android.Paths{}
 	for _, module := range modules {
 		if h, ok := module.(hiddenAPIIntf); ok {