Add a temporary workaround to rename enums in generated keep rules
This should fix the test ApiTestingSetUpTest.testNonExistingApiUse.
Bug: b/377257156
Change-Id: Ibb8069e8f34ab118062c9595d6fe822e7fa8883d
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index 885332f..16fa3e8 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -335,6 +335,23 @@
}
fun Project.baseCompilerCommandLine(
+ jvmArgs: List<String> = listOf(), jar: File, compiler: String, args: List<String> = listOf(),
+) : List<String> {
+ // Execute r8 commands against a stable r8 with dependencies.
+ // TODO(b/139725780): See if we can remove or lower the heap size (-Xmx8g).
+ return listOf(
+ getJavaPath(Jdk.JDK_17),
+ "-Xmx8g",
+ "-ea"
+ ) + jvmArgs +
+ listOf(
+ "-cp",
+ "$jar",
+ "com.android.tools.r8.SwissArmyKnife",
+ compiler) + args
+}
+
+fun Project.baseCompilerCommandLine(
jar: File, compiler: String, args: List<String> = listOf(),
) : List<String> {
// Execute r8 commands against a stable r8 with dependencies.
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index f6ba92c..80bfd4e 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -163,6 +163,7 @@
argList.add("${it.getSingleOutputFile()}")
}
commandLine = baseCompilerCommandLine(
+ listOf("-Dcom.android.tools.r8.tracereferences.obfuscateAllEnums"),
r8WithRelocatedDepsJar,
"tracereferences",
argList
@@ -314,6 +315,7 @@
args.add("$testBaseJar")
}
commandLine = baseCompilerCommandLine(
+ listOf("-Dcom.android.tools.r8.tracereferences.obfuscateAllEnums"),
r8WithRelocatedDepsJar,
"r8",
args)
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index a90ac15..3abb2cc 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -626,6 +626,8 @@
// This must not be renamed, as the Java runtime will use Enum.valueOf to find the enum's
// referenced in annotations. See b/236691999 for details.
assert getNamingLens().lookupName(enumField) == enumField.name
+ || System.getProperty("com.android.tools.r8.tracereferences.obfuscateAllEnums")
+ != null
: "Enum field "
+ enumField.name
+ " renamed to "
diff --git a/src/main/java/com/android/tools/r8/tracereferences/KeepRuleFormatter.java b/src/main/java/com/android/tools/r8/tracereferences/KeepRuleFormatter.java
index 78580d9..ea9be1b 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/KeepRuleFormatter.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/KeepRuleFormatter.java
@@ -26,7 +26,10 @@
// Don't obfuscate enums as the Java runtime will use Enum.valueOf to find enum's referenced in
// annotations, see b/236691999.
append(
- allowObfuscation && !tracedClass.getAccessFlags().isEnum()
+ allowObfuscation
+ && (!tracedClass.getAccessFlags().isEnum()
+ || System.getProperty("com.android.tools.r8.tracereferences.obfuscateAllEnums")
+ != null)
? "-keep,allowobfuscation"
: "-keep");
if (tracedClass.getAccessFlags().isInterface()) {
diff --git a/tools/create_r8lib.py b/tools/create_r8lib.py
index 1f02869..2935a02 100755
--- a/tools/create_r8lib.py
+++ b/tools/create_r8lib.py
@@ -97,6 +97,7 @@
cmd.append('-Dcom.android.tools.r8.enableKeepAnnotations=1')
# TODO(b/356344563): Remove when this is default.
cmd.append('-Dcom.android.tools.r8.enableEmptyMemberRulesToDefaultInitRuleConversion=0')
+ cmd.append('-Dcom.android.tools.r8.tracereferences.obfuscateAllEnums')
cmd.extend(['-cp', args.r8compiler, 'com.android.tools.r8.R8'])
cmd.append(args.r8jar)
if args.debug_variant: