Don't dexpreopt when compile_dex but not installable

Modules shouldn't be dexpreopted and possibly stripped when
compile_dex is set but installable is not set.  This matches the
previous behavior when the dexpreopt rules were in Make.

Bug: 121317615
Test: dexpreopt_test.go
Change-Id: I6f80b7b37a990c475b91aa5d98a19a3baa85eb1b
diff --git a/java/dexpreopt.go b/java/dexpreopt.go
index de9c5f3..1dc3e9f 100644
--- a/java/dexpreopt.go
+++ b/java/dexpreopt.go
@@ -28,10 +28,11 @@
 type dexpreopter struct {
 	dexpreoptProperties DexpreoptProperties
 
-	installPath  android.OutputPath
-	isPrivApp    bool
-	isSDKLibrary bool
-	isTest       bool
+	installPath   android.OutputPath
+	isPrivApp     bool
+	isSDKLibrary  bool
+	isTest        bool
+	isInstallable bool
 
 	builtInstalled []string
 }
@@ -74,6 +75,10 @@
 		return true
 	}
 
+	if !d.isInstallable {
+		return true
+	}
+
 	// TODO: contains no java code
 
 	return false
diff --git a/java/dexpreopt_test.go b/java/dexpreopt_test.go
index e4c80dd..6838bd2 100644
--- a/java/dexpreopt_test.go
+++ b/java/dexpreopt_test.go
@@ -109,6 +109,16 @@
 				}`,
 			enabled: false,
 		},
+		{
+			name: "compile_dex",
+			bp: `
+				java_library {
+					name: "foo",
+					srcs: ["a.java"],
+					compile_dex: true,
+				}`,
+			enabled: false,
+		},
 	}
 
 	for _, test := range tests {
diff --git a/java/java.go b/java/java.go
index 12e724e..5e67193 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1326,6 +1326,7 @@
 
 		j.dexJarFile = dexOutputFile
 
+		j.dexpreopter.isInstallable = Bool(j.properties.Installable)
 		dexOutputFile = j.dexpreopt(ctx, dexOutputFile)
 
 		j.maybeStrippedDexJarFile = dexOutputFile