Always use original type/signature when querying noObfuscation.
Bug: 130791310
Change-Id: Id3f0e517727075d5921c004683b9ea9cd1958496
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java b/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java
index ad50094..7093036 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java
@@ -281,7 +281,7 @@
return null;
}
- if (appView.options().isMinifying() && !appView.rootSet().noObfuscation.contains(holder)) {
+ if (appView.options().isMinifying() && !appView.rootSet().mayBeMinified(holder, appView)) {
if (invokedMethod == dexItemFactory.classMethods.getName) {
return new DexItemBasedValueString(holder, new ClassNameComputationInfo(NAME));
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
index aca25ac..58c7270 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
@@ -275,7 +275,7 @@
DexString name = null;
if (invokedMethod == factory.classMethods.getName) {
if (appView.options().isMinifying()
- && !appView.rootSet().noObfuscation.contains(holder.type)) {
+ && !appView.rootSet().mayBeMinified(holder.type, appView)) {
deferred =
new DexItemBasedConstString(
invoke.outValue(),
@@ -300,7 +300,7 @@
continue;
}
if (appView.options().isMinifying()
- && !appView.rootSet().noObfuscation.contains(holder.type)) {
+ && !appView.rootSet().mayBeMinified(holder.type, appView)) {
deferred =
new DexItemBasedConstString(
invoke.outValue(),
@@ -322,7 +322,7 @@
continue;
}
if (appView.options().isMinifying()
- && !appView.rootSet().noObfuscation.contains(holder.type)) {
+ && !appView.rootSet().mayBeMinified(holder.type, appView)) {
deferred =
new DexItemBasedConstString(
invoke.outValue(),
diff --git a/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java b/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
index 991805a..3c7bd2f 100644
--- a/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
@@ -114,8 +114,7 @@
return true;
}
if (!appView.options().getProguardConfiguration().hasApplyMappingFile()
- && appView.rootSet().noObfuscation.contains(
- appView.graphLense().getOriginalFieldSignature(field.field))) {
+ && appView.rootSet().mayBeMinified(field.field, appView)) {
return true;
}
return false;
diff --git a/src/main/java/com/android/tools/r8/naming/FieldNamingState.java b/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
index dce278b..9fc2b4a 100644
--- a/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
+++ b/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
@@ -60,7 +60,7 @@
return field.name;
}
if (!appView.options().getProguardConfiguration().hasApplyMappingFile()
- && appView.rootSet().noObfuscation.contains(encodedField.field)) {
+ && appView.rootSet().mayBeMinified(encodedField.field, appView)) {
return field.name;
}
}
diff --git a/src/main/java/com/android/tools/r8/naming/Minifier.java b/src/main/java/com/android/tools/r8/naming/Minifier.java
index 264167e..d0fcfa1 100644
--- a/src/main/java/com/android/tools/r8/naming/Minifier.java
+++ b/src/main/java/com/android/tools/r8/naming/Minifier.java
@@ -106,7 +106,7 @@
@Override
public boolean noObfuscation(DexType type) {
- return appView.rootSet().noObfuscation.contains(appView.graphLense().getOriginalType(type));
+ return appView.rootSet().mayBeMinified(type, appView);
}
}
@@ -168,14 +168,7 @@
@Override
public boolean noObfuscation(DexReference reference) {
- if (reference.isDexField()) {
- return appView.rootSet().noObfuscation.contains(
- appView.graphLense().getOriginalFieldSignature(reference.asDexField()));
- } else {
- assert reference.isDexMethod();
- return appView.rootSet().noObfuscation.contains(
- appView.graphLense().getOriginalMethodSignature(reference.asDexMethod()));
- }
+ return appView.rootSet().mayBeMinified(reference, appView);
}
}
}
diff --git a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
index 7ff727e..95aaf35 100644
--- a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
+++ b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
@@ -111,7 +111,7 @@
boolean wasSeen = methodPoolCollection.markIfNotSeen(holder, encodedMethod.method);
if (wasSeen) {
// We can't do anything further because even renaming is not allowed due to the keep rule.
- if (appView.rootSet().noObfuscation.contains(encodedMethod.method)) {
+ if (appView.rootSet().mayBeMinified(encodedMethod.method, appView)) {
return false;
}
// TODO(b/111118390): Renaming will enable more private instance methods to be publicized.
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 71c5bcd..80d34fb 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -1421,9 +1421,9 @@
DexEncodedMethod valuesMethod = clazz.lookupMethod(generatedEnumValuesMethod(clazz));
if (valuesMethod != null) {
// TODO(sgjesse): Does this have to be enqueued as a root item? Right now it is done as the
- // marking of not renaming is in the root set.
+ // marking of not renaming it in the root set.
enqueueRootItem(valuesMethod, reason);
- rootSet.noObfuscation.add(valuesMethod.toReference());
+ rootSet.shouldNotBeMinified(valuesMethod.toReference());
}
}
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
index a793cfb..144a463 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
@@ -1030,7 +1030,7 @@
public final Map<DexReference, Set<ProguardKeepRule>> noShrinking;
public final Set<DexReference> noOptimization;
- public final Set<DexReference> noObfuscation;
+ private final Set<DexReference> noObfuscation;
public final ImmutableList<DexReference> reasonAsked;
public final Set<DexReference> checkDiscarded;
public final Set<DexMethod> alwaysInline;
@@ -1187,6 +1187,24 @@
prune(original);
}
+ void shouldNotBeMinified(DexReference reference) {
+ noObfuscation.add(reference);
+ }
+
+ public boolean mayBeMinified(DexReference reference, AppView<?> appView) {
+ if (reference.isDexType()) {
+ return noObfuscation.contains(
+ appView.graphLense().getOriginalType(reference.asDexType()));
+ } else if (reference.isDexMethod()) {
+ return noObfuscation.contains(
+ appView.graphLense().getOriginalMethodSignature(reference.asDexMethod()));
+ } else {
+ assert reference.isDexField();
+ return noObfuscation.contains(
+ appView.graphLense().getOriginalFieldSignature(reference.asDexField()));
+ }
+ }
+
public boolean verifyKeptFieldsAreAccessedAndLive(AppInfoWithLiveness appInfo) {
for (DexReference reference : noShrinking.keySet()) {
if (reference.isDexField()) {
diff --git a/src/main/java/com/android/tools/r8/shaking/TreePruner.java b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
index fe5f3e2..588b90d 100644
--- a/src/main/java/com/android/tools/r8/shaking/TreePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
@@ -121,7 +121,7 @@
// If the class is a local class, it'll become an ordinary class by renaming.
// Invalidate its inner-class / enclosing-method attributes early.
if (appView.options().isMinifying()
- && !appView.rootSet().noObfuscation.contains(clazz.type)
+ && !appView.rootSet().mayBeMinified(clazz.type, appView)
&& clazz.isLocalClass()) {
assert clazz.getEnclosingMethod() != null;
assert clazz.getInnerClassAttributeForThisClass() != null;