Merge "Keep synthesized '$r8$twr$utility' utility class source method."
diff --git a/src/main/java/com/android/tools/r8/KeepSubclassesForCodeGeneration.java b/src/main/java/com/android/tools/r8/KeepSubclassesForCodeGeneration.java
new file mode 100644
index 0000000..5f20584
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/KeepSubclassesForCodeGeneration.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8;
+
+@Keep
+public @interface KeepSubclassesForCodeGeneration {}
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/TemplateMethodCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/TemplateMethodCode.java
index fdca28c..5162b6f 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/TemplateMethodCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/TemplateMethodCode.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.ir.synthetic;
+import com.android.tools.r8.KeepSubclassesForCodeGeneration;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexProgramClass;
@@ -17,6 +18,7 @@
import java.util.function.BiFunction;
// Source code representing code of a method generated based on a template.
+@KeepSubclassesForCodeGeneration
public abstract class TemplateMethodCode extends JarCode {
private final String templateMethodName;
private final String templateMethodDesc;
diff --git a/src/main/keep.txt b/src/main/keep.txt
index 4b987e8..61b2b14 100644
--- a/src/main/keep.txt
+++ b/src/main/keep.txt
@@ -4,6 +4,8 @@
-keep @com.android.tools.r8.Keep class * { public *; }
-keep @com.android.tools.r8.KeepForSubclassing class * { public *; protected *; }
+-keep class * extends @com.android.tools.r8.KeepSubclassesForCodeGeneration * { public *; }
+
-keep public class com.android.tools.r8.D8 { public static void main(java.lang.String[]); }
-keep public class com.android.tools.r8.R8 { public static void main(java.lang.String[]); }