Do not rewrite methods in the parser when doing resource shrinking
Bug: 156934674
Change-Id: I54a3ed8612d5e8f15a36a37d772ce6178ae6d0b7
diff --git a/foo.txt b/foo.txt
new file mode 100644
index 0000000..d896812
--- /dev/null
+++ b/foo.txt
@@ -0,0 +1,25 @@
+Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.AssertionError
+ at com.android.tools.r8.dex.a.a(SourceFile:298)
+ at com.android.tools.r8.dex.a.a(SourceFile:227)
+ at com.android.tools.r8.dex.a.a(SourceFile:217)
+ at com.android.tools.r8.dex.a.a(SourceFile:214)
+ at com.android.tools.r8.ResourceShrinker.run(ResourceShrinker.java:5)
+ at com.android.builder.dexing.R8ResourceShrinker.runResourceShrinkerAnalysis(r8ResourceShrinker.kt:33)
+ at com.android.build.gradle.tasks.ResourceUsageAnalyzer.recordClassUsages(ResourceUsageAnalyzer.java:1493)
+ at com.android.build.gradle.tasks.ResourceUsageAnalyzer.recordClassUsages(ResourceUsageAnalyzer.java:1412)
+ at com.android.build.gradle.tasks.ResourceUsageAnalyzer.recordClassUsages(ResourceUsageAnalyzer.java:1406)
+ at com.android.build.gradle.tasks.ResourceUsageAnalyzer.analyze(ResourceUsageAnalyzer.java:288)
+ at com.android.build.gradle.internal.transforms.ShrinkResourcesTransform.splitAction(ShrinkResourcesTransform.java:317)
+ at com.android.build.gradle.internal.transforms.ShrinkResourcesTransform.lambda$transform$0(ShrinkResourcesTransform.java:248)
+ at com.android.build.gradle.internal.scope.BuildElements$ExecutorBasedScheduler$transform$$inlined$forEach$lambda$1.call(BuildElements.kt:121)
+ at com.android.build.gradle.internal.scope.BuildElements$ExecutorBasedScheduler$transform$$inlined$forEach$lambda$1.call(BuildElements.kt:110)
+Caused by: java.util.concurrent.ExecutionException: java.lang.AssertionError
+ at com.android.tools.r8.utils.Y0.a(SourceFile:50)
+ at com.android.tools.r8.dex.a.a(SourceFile:278)
+ ... 13 more
+Caused by: java.lang.AssertionError
+ at com.android.tools.r8.graph.W$b.a(SourceFile:3)
+ at com.android.tools.r8.graph.W.o0(SourceFile:6)
+ at com.android.tools.r8.dex.n.a(SourceFile:707)
+ at com.android.tools.r8.dex.n.a(SourceFile:989)
+ at com.android.tools.r8.dex.a$a.a(SourceFile:90)
diff --git a/src/main/java/com/android/tools/r8/ResourceShrinker.java b/src/main/java/com/android/tools/r8/ResourceShrinker.java
index 0affffd..86859f7 100644
--- a/src/main/java/com/android/tools/r8/ResourceShrinker.java
+++ b/src/main/java/com/android/tools/r8/ResourceShrinker.java
@@ -102,7 +102,9 @@
@Override
InternalOptions getInternalOptions() {
- return new InternalOptions();
+ InternalOptions internalOptions = new InternalOptions();
+ internalOptions.isRunningDeprecatedResourceShrinker = true;
+ return internalOptions;
}
}
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index 2e37abb..4dba5c6 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -668,7 +668,9 @@
annotationIterator.getNextFor(method),
parameterAnnotationsIterator.getNextFor(method),
code);
- if (accessFlags.isAbstract() && ensureNonAbstract) {
+ if (accessFlags.isAbstract()
+ && ensureNonAbstract
+ && !options.isRunningDeprecatedResourceShrinker) {
accessFlags.unsetAbstract();
encodedMethod =
options.isGeneratingClassFiles()
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 9ebe673..997d4e9 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -482,6 +482,9 @@
// to disable the check that the build makes sense for multi-dexing.
public boolean enableMainDexListCheck = true;
+ // TODO(b/156934674): Remove when resource shrinker is removed.
+ public boolean isRunningDeprecatedResourceShrinker = false;
+
private final boolean enableTreeShaking;
private final boolean enableMinification;