Unified way to disable get*Name() computation for some tests.

Change-Id: I1136442257c7f22dc48be5318ce9edc12fd67a33
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 80963a7..11dd773 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
@@ -557,10 +557,6 @@
             || invokedMethod == appView.dexItemFactory().stringMethods.length) {
           return true;
         }
-        // Heuristic: if the call target has the same method name, it could be still local.
-        if (invokedMethod.name == context.name) {
-          return true;
-        }
         // Add more cases to filter out, if any.
         return false;
       }
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 0a34142..e318b47 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -31,8 +31,6 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.EnclosingMethodAttribute;
-import com.android.tools.r8.graph.InnerClassAttribute;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.optimize.Inliner;
 import com.android.tools.r8.origin.Origin;
@@ -42,6 +40,7 @@
 import com.android.tools.r8.shaking.ProguardConfigurationRule;
 import com.android.tools.r8.utils.IROrdering.IdentityIROrdering;
 import com.android.tools.r8.utils.IROrdering.NondeterministicIROrdering;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Equivalence.Wrapper;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -539,30 +538,6 @@
     return ImmutableSet.of();
   }
 
-  private static class InvalidNonMemberClassInfo {
-    final EnclosingMethodAttribute enclosingMember;
-    final InnerClassAttribute innerClassAttribute;
-
-    InvalidNonMemberClassInfo(
-        EnclosingMethodAttribute enclosingMember,
-        InnerClassAttribute innerClassAttribute) {
-      this.enclosingMember = enclosingMember;
-      this.innerClassAttribute = innerClassAttribute;
-    }
-
-    @Override
-    public String toString() {
-      List<String> attrs = new ArrayList<>();
-      if (enclosingMember != null) {
-        attrs.add("    EnclosingMethod: " + enclosingMember.toString());
-      }
-      if (innerClassAttribute != null) {
-        attrs.add("    InnerClasses: " + innerClassAttribute.toString());
-      }
-      return StringUtils.join(attrs, System.lineSeparator());
-    }
-  }
-
   public static class InvalidParameterAnnotationInfo {
 
     final DexMethod method;
@@ -1033,6 +1008,13 @@
     }
   }
 
+  @VisibleForTesting
+  public void disableNameReflectionOptimization() {
+    // Use this util to disable get*Name() computation if the main intention of tests is checking
+    // const-class, e.g., canonicalization, or some test classes' only usages are get*Name().
+    enableNameReflectionOptimization = false;
+  }
+
   private boolean hasMinApi(AndroidApiLevel level) {
     assert isGeneratingDex();
     return minApiLevel >= level.getLevel();
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationTest.java
index 8e6472a..1867272 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationTest.java
@@ -172,7 +172,7 @@
         testForD8()
             .debug()
             .addProgramClassesAndInnerClasses(MAIN)
-            .addOptionsModification(this::configure)
+            .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
             .setMinApi(parameters.getRuntime())
             .run(parameters.getRuntime(), MAIN)
             .assertSuccessWithOutput(JAVA_OUTPUT);
@@ -182,7 +182,7 @@
         testForD8()
             .release()
             .addProgramClassesAndInnerClasses(MAIN)
-            .addOptionsModification(this::configure)
+            .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
             .setMinApi(parameters.getRuntime())
             .run(parameters.getRuntime(), MAIN)
             .assertSuccessWithOutput(JAVA_OUTPUT);
@@ -197,7 +197,7 @@
             .addKeepMainRule(MAIN)
             .addKeepAllAttributes()
             .noMinification()
-            .addOptionsModification(this::configure)
+            .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
             .setMinApi(parameters.getRuntime())
             .run(parameters.getRuntime(), MAIN)
             .assertSuccessWithOutput(JAVA_OUTPUT);
@@ -211,9 +211,4 @@
         parameters.isCfRuntime() ? ORIGINAL_INNER_COUNT : CANONICALIZED_INNER_COUNT;
     test(result, expectedMainCount, expectedOuterCount, expectedInnerCount);
   }
-
-  private void configure(InternalOptions options) {
-    // Literally testing const-class canonicalization. Don't optimize its usage with get*Name().
-    options.enableNameReflectionOptimization = false;
-  }
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/IllegalAccessConstClassTest.java b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/IllegalAccessConstClassTest.java
index 85a02ee..7601389 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/IllegalAccessConstClassTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/IllegalAccessConstClassTest.java
@@ -75,7 +75,7 @@
             IllegalAccessConstClassTestDump.PackagePrivateClassDump.dump())
         .addProgramClassFileData(
             IllegalAccessConstClassTestDump.FakePackagePrivateClassConsumerDump.dump())
-        .addOptionsModification(this::configure)
+        .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
         .setMinApi(parameters.getRuntime())
         .compile()
         .inspect(this::inspect)
@@ -92,7 +92,7 @@
             IllegalAccessConstClassTestDump.FakePackagePrivateClassConsumerDump.dump())
         .addKeepMainRule(MAIN)
         .noMinification()
-        .addOptionsModification(this::configure)
+        .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
         .setMinApi(parameters.getRuntime())
         .compile()
         .inspect(this::inspect)
@@ -113,9 +113,4 @@
         2,
         mainMethod.streamInstructions().filter(InstructionSubject::isConstClass).count());
   }
-
-  private void configure(InternalOptions options) {
-    // Testing if const-class is not canonicalized. Don't optimize its usage with get*Name().
-    options.enableNameReflectionOptimization = false;
-  }
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/UnresolvableLibraryConstClassTest.java b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/UnresolvableLibraryConstClassTest.java
index dca1940..47ae6be 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/UnresolvableLibraryConstClassTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/UnresolvableLibraryConstClassTest.java
@@ -98,7 +98,7 @@
     testForD8()
         .release()
         .addProgramClasses(ProgramClass1.class, ProgramClass2.class, ProgramSubClass.class, MAIN)
-        .addOptionsModification(this::configure)
+        .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
         .setMinApi(parameters.getRuntime())
         .compile()
         .inspect(this::inspect)
@@ -115,7 +115,7 @@
         .addKeepMainRule(MAIN)
         .noMinification()
         .enableMergeAnnotations()
-        .addOptionsModification(this::configure)
+        .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
         .setMinApi(parameters.getRuntime())
         .compile()
         .inspect(this::inspect)
@@ -140,9 +140,4 @@
         6,
         mainMethod.streamInstructions().filter(InstructionSubject::isConstClass).count());
   }
-
-  private void configure(InternalOptions options) {
-    // Testing if const-class is not canonicalized. Don't optimize its usage with get*Name().
-    options.enableNameReflectionOptimization = false;
-  }
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/InnerClassNameTestRunner.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/InnerClassNameTestRunner.java
index 6a27101..8896197 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/InnerClassNameTestRunner.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/InnerClassNameTestRunner.java
@@ -187,7 +187,7 @@
     D8TestCompileResult d8CompileResult =
         testForD8()
             .addProgramClassFileData(InnerClassNameTestDump.dump(config, parameters))
-            .addOptionsModification(this::configure)
+            .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
             .setMinApi(parameters.getRuntime())
             .compile();
     checkWarningsAboutMalformedAttribute(d8CompileResult);
@@ -212,7 +212,7 @@
             .addKeepRules("-keepattributes InnerClasses,EnclosingMethod")
             .addProgramClassFileData(InnerClassNameTestDump.dump(config, parameters))
             .minification(minify)
-            .addOptionsModification(this::configure)
+            .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
             .setMinApi(parameters.getRuntime())
             .compile();
     checkWarningsAboutMalformedAttribute(r8CompileResult);
@@ -303,9 +303,4 @@
     return getExpected(
         innerClassTypeFinal, outerClassTypeFinal + "." + innerNameFinal, innerNameFinal);
   }
-
-  private void configure(InternalOptions options) {
-    // Literally testing inner-name computation. Don't optimize get*Name().
-    options.enableNameReflectionOptimization = false;
-  }
 }
diff --git a/src/test/java/com/android/tools/r8/proguard/rules/InnerClassNameSeparatorTest.java b/src/test/java/com/android/tools/r8/proguard/rules/InnerClassNameSeparatorTest.java
index 426b16f..6da44a5 100644
--- a/src/test/java/com/android/tools/r8/proguard/rules/InnerClassNameSeparatorTest.java
+++ b/src/test/java/com/android/tools/r8/proguard/rules/InnerClassNameSeparatorTest.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRunResult;
 import com.android.tools.r8.TestShrinkerBuilder;
+import com.android.tools.r8.utils.InternalOptions;
 import com.google.common.collect.ImmutableList;
 import java.util.List;
 import org.junit.Test;
@@ -39,11 +40,9 @@
     TestRunResult<?> result =
         runTest(
             testForR8(parameters.getBackend())
+                .addOptionsModification(InternalOptions::disableNameReflectionOptimization)
                 .addOptionsModification(
                     options -> {
-                      // Otherwise, Inner can be shrunk after its only reference, .class.getName(),
-                      // is optimized away.
-                      options.enableNameReflectionOptimization = false;
                       if (separator.equals(".")) {
                         // R8 currently does not recognize the '.' as an inner class name separator.
                         options.testing.allowUnusedProguardConfigurationRules = true;