summaryrefslogtreecommitdiff
path: root/chromium/third_party/r8/local_modifications.diff
blob: 8b695e0753183b09710416b64ce0dded7b787b8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
diff --git a/src/main/java/com/android/tools/r8/D8CommandParser.java b/src/main/java/com/android/tools/r8/D8CommandParser.java
index f66fff8f3..c63f4f566 100644
--- a/src/main/java/com/android/tools/r8/D8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/D8CommandParser.java
@@ -205,7 +205,7 @@ public class D8CommandParser extends BaseCompilerCommandParser<D8Command, D8Comm
         }
         compilationMode = CompilationMode.RELEASE;
       } else if (arg.equals("--file-per-class")) {
-        outputMode = OutputMode.DexFilePerClass;
+        outputMode = OutputMode.DexFilePerClassFile;
       } else if (arg.equals("--output")) {
         if (outputPath != null) {
           builder.error(
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 4051f9cef..6d034d5b8 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -42,6 +42,8 @@ import java.util.function.BiPredicate;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
+import com.android.tools.r8.DexIndexedConsumer.DirectoryConsumer;
+
 /**
  * Immutable command structure for an invocation of the {@link R8} compiler.
  *
@@ -234,6 +236,15 @@ public final class R8Command extends BaseCompilerCommand {
       return self();
     }
 
+    public Builder addFeatureJar(Path inputJarPath, Path outputPath) {
+      addFeatureSplit(splitBuilder ->
+          splitBuilder
+            .addProgramResourceProvider(ArchiveProgramResourceProvider.fromArchive(inputJarPath))
+            .setProgramConsumer(new DirectoryConsumer(outputPath))
+            .build());
+      return self();
+    }
+
     /**
      * Set a consumer for receiving the proguard-map content.
      *
diff --git a/src/main/java/com/android/tools/r8/R8CommandParser.java b/src/main/java/com/android/tools/r8/R8CommandParser.java
index 22ebb5e42..b53e4c59e 100644
--- a/src/main/java/com/android/tools/r8/R8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/R8CommandParser.java
@@ -24,6 +24,7 @@ public class R8CommandParser extends BaseCompilerCommandParser<R8Command, R8Comm
           "--min-api",
           "--main-dex-rules",
           "--main-dex-list",
+          "--feature-jar",
           "--main-dex-list-output",
           "--pg-conf",
           "--pg-map-output",
@@ -205,6 +206,11 @@ public class R8CommandParser extends BaseCompilerCommandParser<R8Command, R8Comm
         builder.setDisableDesugaring(true);
       } else if (arg.equals("--main-dex-rules")) {
         builder.addMainDexRulesFiles(Paths.get(nextArg));
+      } else if (arg.equals("--feature-jar")) {
+        String[] argParts = nextArg.split(":");
+        String featureJarInputPath = argParts[0];
+        String featureJarOutputPath = argParts[1];
+        builder.addFeatureJar(Paths.get(featureJarInputPath), Paths.get(featureJarOutputPath));
       } else if (arg.equals("--main-dex-list")) {
         builder.addMainDexListFiles(Paths.get(nextArg));
       } else if (arg.equals("--main-dex-list-output")) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 0831e6d93..49c1a202b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -206,7 +206,7 @@ public final class LambdaClass {
   }
 
   public final boolean isStateless() {
-    return descriptor.isStateless();
+    return false;  // descriptor.isStateless();
   }
 
   void addSynthesizedFrom(DexProgramClass clazz) {
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 232b54a54..fd45dfe36 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -198,8 +198,8 @@ public class InternalOptions {
   public boolean enableFieldAssignmentTracker = true;
   public boolean enableFieldBitAccessAnalysis =
       System.getProperty("com.android.tools.r8.fieldBitAccessAnalysis") != null;
-  public boolean enableHorizontalClassMerging = true;
-  public boolean enableVerticalClassMerging = true;
+  public boolean enableHorizontalClassMerging = System.getProperty("com.android.tools.r8.enableHorizontalClassMerging") != null;
+  public boolean enableVerticalClassMerging = System.getProperty("com.android.tools.r8.enableVerticalClassMerging") != null;
   public boolean enableArgumentRemoval = true;
   public boolean enableUnusedArgumentRemoval = true;
   public boolean enableUnusedInterfaceRemoval = true;
@@ -956,7 +956,7 @@ public class InternalOptions {
     public static final String CLASS_NAME = "com.android.tools.r8.GeneratedOutlineSupport";
     public static final String METHOD_PREFIX = "outline";
 
-    public boolean enabled = true;
+    public boolean enabled = System.getProperty("com.android.tools.r8.disableOutlining") == null;
     public int minSize = 3;
     public int maxSize = 99;
     public int threshold = 20;
diff --git a/src/main/keep.txt b/src/main/keep.txt
index b0c58c916..5e4405175 100644
--- a/src/main/keep.txt
+++ b/src/main/keep.txt
@@ -27,4 +27,10 @@
 -keep public class com.android.tools.r8.compatproguard.CompatProguard { public static void main(java.lang.String[]); }
 
 # Compatibility command line program used by in google3.
--keep public class com.android.tools.r8.compatdx.CompatDx { public static void main(java.lang.String[]); }
\ No newline at end of file
+-keep public class com.android.tools.r8.compatdx.CompatDx { public static void main(java.lang.String[]); }
+
+-keep public class com.android.tools.r8.SwissArmyKnife { *; }
+
+# Chrome: We want to maintain stack traces from the R8 tool, so disable
+# optimizations.
+-dontoptimize