Revert "Initial support for member value propagation for instance fields"

This reverts commit ae1775c7857a04331a8f483bb26bb971ae534ad2.

Reason for revert: Possibly causes a runtime regression.

Change-Id: I165a513ec8885989a346c7531e4c73f04c04fea3
diff --git a/src/main/java/com/android/tools/r8/graph/DexClass.java b/src/main/java/com/android/tools/r8/graph/DexClass.java
index 0acef70..988bf75 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -560,11 +560,6 @@
     return lookupTarget(directMethods, method);
   }
 
-  /** Find direct method in this class matching {@param predicate}. */
-  public DexEncodedMethod lookupDirectMethod(Predicate<DexEncodedMethod> predicate) {
-    return PredicateUtils.findFirst(directMethods, predicate);
-  }
-
   /** Find virtual method in this class matching {@param method}. */
   public DexEncodedMethod lookupVirtualMethod(DexMethod method) {
     return lookupTarget(virtualMethods, method);
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java
index 35f6661..2c86c7b 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java
@@ -25,12 +25,12 @@
 import com.android.tools.r8.ir.code.BasicBlock;
 import com.android.tools.r8.ir.code.DominatorTree;
 import com.android.tools.r8.ir.code.DominatorTree.Assumption;
-import com.android.tools.r8.ir.code.FieldInstruction;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionIterator;
 import com.android.tools.r8.ir.code.InvokeDirect;
 import com.android.tools.r8.ir.code.NewInstance;
+import com.android.tools.r8.ir.code.StaticPut;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -56,11 +56,9 @@
       AppView<AppInfoWithLiveness> appView,
       IRCode code,
       OptimizationFeedback feedback,
-      DexProgramClass clazz,
       DexEncodedMethod method) {
-    assert clazz.type == method.method.holder;
     this.appView = appView;
-    this.clazz = clazz;
+    this.clazz = appView.definitionFor(method.method.holder).asProgramClass();
     this.code = code;
     this.feedback = feedback;
     this.method = method;
@@ -69,26 +67,11 @@
 
   public static void run(
       AppView<?> appView, IRCode code, OptimizationFeedback feedback, DexEncodedMethod method) {
-    if (!appView.enableWholeProgramOptimizations()) {
-      return;
+    if (appView.enableWholeProgramOptimizations() && method.isClassInitializer()) {
+      assert appView.appInfo().hasLiveness();
+      new FieldValueAnalysis(appView.withLiveness(), code, feedback, method)
+          .computeFieldOptimizationInfo();
     }
-    assert appView.appInfo().hasLiveness();
-    if (!method.isInitializer()) {
-      return;
-    }
-    DexProgramClass clazz = appView.definitionFor(method.method.holder).asProgramClass();
-    if (method.isInstanceInitializer()) {
-      DexEncodedMethod otherInstanceInitializer =
-          clazz.lookupDirectMethod(other -> other.isInstanceInitializer() && other != method);
-      if (otherInstanceInitializer != null) {
-        // Conservatively bail out.
-        // TODO(b/125282093): Handle multiple instance initializers on the same class.
-        return;
-      }
-    }
-
-    new FieldValueAnalysis(appView.withLiveness(), code, feedback, clazz, method)
-        .computeFieldOptimizationInfo();
   }
 
   private Map<BasicBlock, AbstractFieldSet> getOrCreateFieldsMaybeReadBeforeBlockInclusive() {
@@ -103,50 +86,54 @@
     AppInfoWithLiveness appInfo = appView.appInfo();
     DominatorTree dominatorTree = null;
 
-    DexType context = method.method.holder;
+    if (method.isClassInitializer()) {
+      DexType context = method.method.holder;
 
-    // Find all the static-put instructions that assign a field in the enclosing class which is
-    // guaranteed to be assigned only in the current initializer.
-    boolean isStraightLineCode = true;
-    Map<DexEncodedField, LinkedList<FieldInstruction>> putsPerField = new IdentityHashMap<>();
-    for (Instruction instruction : code.instructions()) {
-      if (instruction.isFieldPut()) {
-        FieldInstruction fieldPut = instruction.asFieldInstruction();
-        DexField field = fieldPut.getField();
-        DexEncodedField encodedField = appInfo.resolveField(field);
-        if (encodedField != null
-            && encodedField.field.holder == context
-            && appInfo.isFieldOnlyWrittenInMethod(encodedField, method)) {
-          putsPerField.computeIfAbsent(encodedField, ignore -> new LinkedList<>()).add(fieldPut);
+      // Find all the static-put instructions that assign a field in the enclosing class which is
+      // guaranteed to be assigned only in the current initializer.
+      boolean isStraightLineCode = true;
+      Map<DexEncodedField, LinkedList<StaticPut>> staticPutsPerField = new IdentityHashMap<>();
+      for (Instruction instruction : code.instructions()) {
+        if (instruction.isStaticPut()) {
+          StaticPut staticPut = instruction.asStaticPut();
+          DexField field = staticPut.getField();
+          DexEncodedField encodedField = appInfo.resolveField(field);
+          if (encodedField != null
+              && encodedField.field.holder == context
+              && appInfo.isStaticFieldWrittenOnlyInEnclosingStaticInitializer(encodedField)) {
+            staticPutsPerField
+                .computeIfAbsent(encodedField, ignore -> new LinkedList<>())
+                .add(staticPut);
+          }
+        }
+        if (instruction.isJumpInstruction()) {
+          if (!instruction.isGoto() && !instruction.isReturn()) {
+            isStraightLineCode = false;
+          }
         }
       }
-      if (instruction.isJumpInstruction()) {
-        if (!instruction.isGoto() && !instruction.isReturn()) {
-          isStraightLineCode = false;
-        }
-      }
-    }
 
-    List<BasicBlock> normalExitBlocks = code.computeNormalExitBlocks();
-    for (Entry<DexEncodedField, LinkedList<FieldInstruction>> entry : putsPerField.entrySet()) {
-      DexEncodedField encodedField = entry.getKey();
-      LinkedList<FieldInstruction> fieldPuts = entry.getValue();
-      if (fieldPuts.size() > 1) {
-        continue;
-      }
-      FieldInstruction fieldPut = fieldPuts.getFirst();
-      if (!isStraightLineCode) {
-        if (dominatorTree == null) {
-          dominatorTree = new DominatorTree(code, Assumption.NO_UNREACHABLE_BLOCKS);
-        }
-        if (!dominatorTree.dominatesAllOf(fieldPut.getBlock(), normalExitBlocks)) {
+      List<BasicBlock> normalExitBlocks = code.computeNormalExitBlocks();
+      for (Entry<DexEncodedField, LinkedList<StaticPut>> entry : staticPutsPerField.entrySet()) {
+        DexEncodedField encodedField = entry.getKey();
+        LinkedList<StaticPut> staticPuts = entry.getValue();
+        if (staticPuts.size() > 1) {
           continue;
         }
+        StaticPut staticPut = staticPuts.getFirst();
+        if (!isStraightLineCode) {
+          if (dominatorTree == null) {
+            dominatorTree = new DominatorTree(code, Assumption.NO_UNREACHABLE_BLOCKS);
+          }
+          if (!dominatorTree.dominatesAllOf(staticPut.getBlock(), normalExitBlocks)) {
+            continue;
+          }
+        }
+        if (fieldMaybeReadBeforeInstruction(encodedField, staticPut)) {
+          continue;
+        }
+        updateFieldOptimizationInfo(encodedField, staticPut.value());
       }
-      if (fieldMaybeReadBeforeInstruction(encodedField, fieldPut)) {
-        continue;
-      }
-      updateFieldOptimizationInfo(encodedField, fieldPut.value());
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 319cbaf..f5b0de8 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -758,24 +758,20 @@
     return false;
   }
 
-  public boolean isFieldOnlyWrittenInMethod(DexEncodedField field, DexEncodedMethod method) {
-    assert checkIfObsolete();
-    assert isFieldWritten(field) : "Expected field `" + field.toSourceString() + "` to be written";
-    if (!isPinned(field.field)) {
-      FieldAccessInfo fieldAccessInfo = fieldAccessInfoCollection.get(field.field);
-      return fieldAccessInfo != null
-          && fieldAccessInfo.isWritten()
-          && !fieldAccessInfo.isWrittenOutside(method);
-    }
-    return false;
-  }
-
   public boolean isStaticFieldWrittenOnlyInEnclosingStaticInitializer(DexEncodedField field) {
     assert checkIfObsolete();
     assert isFieldWritten(field) : "Expected field `" + field.toSourceString() + "` to be written";
-    DexEncodedMethod staticInitializer =
-        definitionFor(field.field.holder).asProgramClass().getClassInitializer();
-    return staticInitializer != null && isFieldOnlyWrittenInMethod(field, staticInitializer);
+    if (!isPinned(field.field)) {
+      DexEncodedMethod staticInitializer =
+          definitionFor(field.field.holder).asProgramClass().getClassInitializer();
+      if (staticInitializer != null) {
+        FieldAccessInfo fieldAccessInfo = fieldAccessInfoCollection.get(field.field);
+        return fieldAccessInfo != null
+            && fieldAccessInfo.isWritten()
+            && !fieldAccessInfo.isWrittenOutside(staticInitializer);
+      }
+    }
+    return false;
   }
 
   public boolean mayPropagateValueFor(DexReference reference) {
diff --git a/src/test/examples/shaking18/Options.java b/src/test/examples/shaking18/Options.java
index 7012340..edb9d77 100644
--- a/src/test/examples/shaking18/Options.java
+++ b/src/test/examples/shaking18/Options.java
@@ -4,7 +4,9 @@
 package shaking18;
 
 public class Options {
-  public boolean alwaysFalse = false;
+  // TODO(b/138913138): member value propagation can behave same with and without initialization.
+  // public boolean alwaysFalse = false;
+  public boolean alwaysFalse;
   public boolean dummy = false;
 
   public Options() {}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationTest.java
deleted file mode 100644
index a3d644f..0000000
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright (c) 2019, 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.ir.optimize.membervaluepropagation;
-
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.android.tools.r8.NeverClassInline;
-import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.utils.StringUtils;
-import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import com.android.tools.r8.utils.codeinspector.CodeInspector;
-import com.android.tools.r8.utils.codeinspector.InstructionSubject;
-import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-@RunWith(Parameterized.class)
-public class InstanceFieldValuePropagationTest extends TestBase {
-
-  private final TestParameters parameters;
-
-  @Parameterized.Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimesAndApiLevels().build();
-  }
-
-  public InstanceFieldValuePropagationTest(TestParameters parameters) {
-    this.parameters = parameters;
-  }
-
-  @Test
-  public void test() throws Exception {
-    testForR8(parameters.getBackend())
-        .addInnerClasses(InstanceFieldValuePropagationTest.class)
-        .addKeepMainRule(TestClass.class)
-        .enableClassInliningAnnotations()
-        .enableInliningAnnotations()
-        .setMinApi(parameters.getApiLevel())
-        .compile()
-        .inspect(this::inspect)
-        .run(parameters.getRuntime(), TestClass.class)
-        .assertSuccessWithOutput(
-            StringUtils.times(StringUtils.lines("A", "42", "Hello world!"), 2));
-  }
-
-  private void inspect(CodeInspector inspector) {
-    ClassSubject testClassSubject = inspector.clazz(TestClass.class);
-    assertThat(testClassSubject, isPresent());
-
-    // Verify that all instance-get instructions in testDefinitelyNotNull() has been removed by
-    // member value propagation.
-    MethodSubject testDefinitelyNotNullMethodSubject =
-        testClassSubject.uniqueMethodWithName("testDefinitelyNotNull");
-    assertThat(testDefinitelyNotNullMethodSubject, isPresent());
-    assertTrue(
-        testDefinitelyNotNullMethodSubject
-            .streamInstructions()
-            .noneMatch(InstructionSubject::isInstanceGet));
-    // TODO(b/125282093): Should be able to remove the new-instance instruction since the instance
-    //  ends up being unused.
-    assertTrue(
-        testDefinitelyNotNullMethodSubject
-            .streamInstructions()
-            .anyMatch(InstructionSubject::isNewInstance));
-
-    // Verify that all instance-get instructions in testMaybeNull() has been removed by member value
-    // propagation.
-    MethodSubject testMaybeNullMethodSubject =
-        testClassSubject.uniqueMethodWithName("testMaybeNull");
-    assertThat(testMaybeNullMethodSubject, isPresent());
-    // TODO(b/125282093): Should synthesize a null-check and still propagate the field values even
-    //  when the receiver is nullable.
-    assertTrue(
-        testMaybeNullMethodSubject
-            .streamInstructions()
-            .anyMatch(InstructionSubject::isInstanceGet));
-    // TODO(b/125282093): Should be able to remove the new-instance instruction since the instance
-    //  ends up being unused.
-    assertTrue(
-        testMaybeNullMethodSubject
-            .streamInstructions()
-            .anyMatch(InstructionSubject::isNewInstance));
-
-    ClassSubject aClassSubject = inspector.clazz(A.class);
-    assertThat(aClassSubject, isPresent());
-    // TODO(b/125282093): Need to remove the instance-put instructions in A.<init>(). This can not
-    //  be done safely by the time we process A.<init>(), so some kind of post-processing is needed.
-    assertEquals(3, aClassSubject.allInstanceFields().size());
-  }
-
-  static class TestClass {
-
-    public static void main(String[] args) {
-      testDefinitelyNotNull();
-      testMaybeNull();
-    }
-
-    @NeverInline
-    static void testDefinitelyNotNull() {
-      A a = new A();
-      System.out.println(a.e);
-      System.out.println(a.i);
-      System.out.println(a.s);
-    }
-
-    @NeverInline
-    static void testMaybeNull() {
-      A a = System.currentTimeMillis() >= 0 ? new A() : null;
-      System.out.println(a.e);
-      System.out.println(a.i);
-      System.out.println(a.s);
-    }
-  }
-
-  @NeverClassInline
-  static class A {
-
-    MyEnum e = MyEnum.A;
-    int i = 42;
-    String s = "Hello world!";
-  }
-
-  enum MyEnum {
-    A,
-    B
-  }
-}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java
deleted file mode 100644
index d2b739e..0000000
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2019, 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.ir.optimize.membervaluepropagation;
-
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-import com.android.tools.r8.NeverClassInline;
-import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import com.android.tools.r8.utils.codeinspector.CodeInspector;
-import com.android.tools.r8.utils.codeinspector.InstructionSubject;
-import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-@RunWith(Parameterized.class)
-public class InstanceFieldValuePropagationWithMultipleInstanceInitializersTest extends TestBase {
-
-  private final TestParameters parameters;
-
-  @Parameterized.Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimesAndApiLevels().build();
-  }
-
-  public InstanceFieldValuePropagationWithMultipleInstanceInitializersTest(
-      TestParameters parameters) {
-    this.parameters = parameters;
-  }
-
-  @Test
-  public void test() throws Exception {
-    testForR8(parameters.getBackend())
-        .addInnerClasses(InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.class)
-        .addKeepMainRule(TestClass.class)
-        .setMinApi(parameters.getApiLevel())
-        .compile()
-        .inspect(this::inspect)
-        .run(parameters.getRuntime(), TestClass.class)
-        .assertSuccessWithOutputLines("Hello world!");
-  }
-
-  private void inspect(CodeInspector inspector) {
-    ClassSubject testClassSubject = inspector.clazz(TestClass.class);
-    assertThat(testClassSubject, isPresent());
-
-    // Verify that the instance-get instruction in main() is still present in main(), since the
-    // value of `a.greeting` depends on the constructor being used.
-    MethodSubject mainMethodSubject = testClassSubject.mainMethod();
-    assertThat(mainMethodSubject, isPresent());
-    assertTrue(mainMethodSubject.streamInstructions().anyMatch(InstructionSubject::isInstanceGet));
-
-    // Verify that the `greeting` field is still present.
-    ClassSubject aClassSubject = inspector.clazz(A.class);
-    assertThat(aClassSubject, isPresent());
-    assertThat(aClassSubject.uniqueFieldWithName("greeting"), isPresent());
-  }
-
-  static class TestClass {
-
-    public static void main(String[] args) {
-      A a = System.currentTimeMillis() >= 0 ? new A() : new A(new Object());
-      System.out.println(a.greeting);
-    }
-  }
-
-  @NeverClassInline
-  static class A {
-
-    String greeting;
-
-    A() {
-      this.greeting = "Hello world!";
-    }
-
-    A(Object unused) {
-      this.greeting = ":-(";
-    }
-  }
-}
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
index 9da1f4a..5d110e4 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
@@ -82,7 +82,6 @@
       assertOrdinalReplacedWithConst(clazz.uniqueMethodWithName("inlined"), 1);
       assertOrdinalReplacedWithConst(clazz.uniqueMethodWithName("inSwitch"), 11);
       assertOrdinalReplacedWithConst(clazz.uniqueMethodWithName("differentTypeStaticField"), 1);
-      assertOrdinalReplacedWithConst(clazz.uniqueMethodWithName("nonStaticGet"), 1);
     } else {
       assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("simple"));
       assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("local"));
@@ -90,12 +89,12 @@
       assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("inlined"));
       assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("inSwitch"));
       assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("differentTypeStaticField"));
-      assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("nonStaticGet"));
     }
 
     assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("libraryType"));
     assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("nonValueStaticField"));
     assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("phi"));
+    assertOrdinalWasNotReplaced(clazz.uniqueMethodWithName("nonStaticGet"));
   }
 
   @Test
@@ -126,14 +125,12 @@
       assertNameReplacedWithConst(clazz.uniqueMethodWithName("multipleUsages"), expectedConst);
       assertNameReplacedWithConst(clazz.uniqueMethodWithName("inlined"), "TWO");
       assertNameReplacedWithConst(clazz.uniqueMethodWithName("differentTypeStaticField"), "DOWN");
-      assertNameReplacedWithConst(clazz.uniqueMethodWithName("nonStaticGet"), "TWO");
     } else {
       assertNameWasNotReplaced(clazz.uniqueMethodWithName("simple"));
       assertNameWasNotReplaced(clazz.uniqueMethodWithName("local"));
       assertNameWasNotReplaced(clazz.uniqueMethodWithName("multipleUsages"));
       assertNameWasNotReplaced(clazz.uniqueMethodWithName("inlined"));
       assertNameWasNotReplaced(clazz.uniqueMethodWithName("differentTypeStaticField"));
-      assertNameWasNotReplaced(clazz.uniqueMethodWithName("nonStaticGet"));
     }
 
     // TODO(jakew) this should be allowed!
@@ -141,6 +138,7 @@
 
     assertNameWasNotReplaced(clazz.uniqueMethodWithName("nonValueStaticField"));
     assertNameWasNotReplaced(clazz.uniqueMethodWithName("phi"));
+    assertNameWasNotReplaced(clazz.uniqueMethodWithName("nonStaticGet"));
   }
 
   @Test
@@ -180,7 +178,6 @@
       assertToStringReplacedWithConst(clazz.uniqueMethodWithName("nonValueStaticField"), "TWO");
       assertToStringReplacedWithConst(
           clazz.uniqueMethodWithName("differentTypeStaticField"), "DOWN");
-      assertToStringReplacedWithConst(clazz.uniqueMethodWithName("nonStaticGet"), "TWO");
     } else {
       assertToStringWasNotReplaced(clazz.uniqueMethodWithName("noToString"));
       assertToStringWasNotReplaced(clazz.uniqueMethodWithName("local"));
@@ -188,11 +185,11 @@
       assertToStringWasNotReplaced(clazz.uniqueMethodWithName("inlined"));
       assertToStringWasNotReplaced(clazz.uniqueMethodWithName("nonValueStaticField"));
       assertToStringWasNotReplaced(clazz.uniqueMethodWithName("differentTypeStaticField"));
-      assertToStringWasNotReplaced(clazz.uniqueMethodWithName("nonStaticGet"));
     }
 
     assertToStringWasNotReplaced(clazz.uniqueMethodWithName("libraryType"));
     assertToStringWasNotReplaced(clazz.uniqueMethodWithName("phi"));
+    assertToStringWasNotReplaced(clazz.uniqueMethodWithName("nonStaticGet"));
   }
 
   private static void assertOrdinalReplacedWithConst(MethodSubject method, int expectedConst) {
diff --git a/src/test/java/com/android/tools/r8/shaking/EffectivelyFinalInstanceFieldsTest.java b/src/test/java/com/android/tools/r8/shaking/EffectivelyFinalInstanceFieldsTest.java
index 92d16ae..ea96ead 100644
--- a/src/test/java/com/android/tools/r8/shaking/EffectivelyFinalInstanceFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/EffectivelyFinalInstanceFieldsTest.java
@@ -56,50 +56,43 @@
         .enableMergeAnnotations()
         .setMinApi(parameters.getRuntime())
         .compile()
-        .inspect(
-            codeInspector -> {
-              ClassSubject main = codeInspector.clazz(MAIN);
-              assertThat(main, isPresent());
+        .inspect(codeInspector -> {
+          ClassSubject main = codeInspector.clazz(MAIN);
+          assertThat(main, isPresent());
 
-              MethodSubject mainMethod = main.mainMethod();
-              assertThat(mainMethod, isPresent());
+          MethodSubject mainMethod = main.mainMethod();
+          assertThat(mainMethod, isPresent());
 
-              assertTrue(
-                  mainMethod
-                      .streamInstructions()
-                      .noneMatch(i -> i.isConstString("Dead code: 1", JumboStringMode.ALLOW)));
-              assertTrue(
-                  mainMethod
-                      .streamInstructions()
-                      .noneMatch(i -> i.isConstString("Dead code: 2", JumboStringMode.ALLOW)));
-              // TODO(b/138913138): not trivial; assigned only once in <init>
-              assertFalse(
-                  mainMethod
-                      .streamInstructions()
-                      .noneMatch(i -> i.isConstString("Dead code: 3", JumboStringMode.ALLOW)));
-              assertTrue(
-                  mainMethod
-                      .streamInstructions()
-                      .noneMatch(i -> i.isConstString("Dead code: 4", JumboStringMode.ALLOW)));
-              assertTrue(
-                  mainMethod
-                      .streamInstructions()
-                      .noneMatch(i -> i.isConstString("Dead code: 5", JumboStringMode.ALLOW)));
-              // TODO(b/138913138): not trivial; assigned multiple times, but within a certain
-              // range.
-              assertFalse(
-                  mainMethod
-                      .streamInstructions()
-                      .noneMatch(i -> i.isConstString("Dead code: 6", JumboStringMode.ALLOW)));
-              assertTrue(
-                  mainMethod
-                      .streamInstructions()
-                      .noneMatch(i -> i.isConstString("Dead code: 7", JumboStringMode.ALLOW)));
-              assertTrue(
-                  mainMethod
-                      .streamInstructions()
-                      .noneMatch(i -> i.isConstString("Dead code: 8", JumboStringMode.ALLOW)));
-            })
+          assertTrue(
+              mainMethod.streamInstructions().noneMatch(
+                  i -> i.isConstString("Dead code: 1", JumboStringMode.ALLOW)));
+          // TODO(b/138913138): effectively final, and default value is set.
+          assertFalse(
+              mainMethod.streamInstructions().noneMatch(
+                  i -> i.isConstString("Dead code: 2", JumboStringMode.ALLOW)));
+          // TODO(b/138913138): not trivial; assigned only once in <init>
+          assertFalse(
+              mainMethod.streamInstructions().noneMatch(
+                  i -> i.isConstString("Dead code: 3", JumboStringMode.ALLOW)));
+          assertTrue(
+              mainMethod.streamInstructions().noneMatch(
+                  i -> i.isConstString("Dead code: 4", JumboStringMode.ALLOW)));
+          // TODO(b/138913138): effectively final, and default value is set.
+          assertFalse(
+              mainMethod.streamInstructions().noneMatch(
+                  i -> i.isConstString("Dead code: 5", JumboStringMode.ALLOW)));
+          // TODO(b/138913138): not trivial; assigned multiple times, but within a certain range.
+          assertFalse(
+              mainMethod.streamInstructions().noneMatch(
+                  i -> i.isConstString("Dead code: 6", JumboStringMode.ALLOW)));
+          assertTrue(
+              mainMethod.streamInstructions().noneMatch(
+                  i -> i.isConstString("Dead code: 7", JumboStringMode.ALLOW)));
+          // TODO(b/138913138): effectively final, and default value is set.
+          assertFalse(
+              mainMethod.streamInstructions().noneMatch(
+                  i -> i.isConstString("Dead code: 8", JumboStringMode.ALLOW)));
+        })
         .run(parameters.getRuntime(), MAIN)
         .assertSuccessWithOutputLines("The end");
   }