diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
index 5dbb300..f5b3098 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
@@ -36,18 +36,15 @@
   private Mode mode = Mode.UNSET;
 
   private final AppView<?> appView;
-  private final DexEncodedMethod context;
 
   private final Deque<Value> worklist = new ArrayDeque<>();
 
-  public TypeAnalysis(AppView<?> appView, DexEncodedMethod encodedMethod) {
-    this(appView, encodedMethod, false);
+  public TypeAnalysis(AppView<?> appView) {
+    this(appView, false);
   }
 
-  public TypeAnalysis(
-      AppView<?> appView, DexEncodedMethod encodedMethod, boolean mayHaveImpreciseTypes) {
+  public TypeAnalysis(AppView<?> appView, boolean mayHaveImpreciseTypes) {
     this.appView = appView;
-    this.context = encodedMethod;
     this.mayHaveImpreciseTypes = mayHaveImpreciseTypes;
   }
 
@@ -57,10 +54,10 @@
     }
   }
 
-  public void widening(DexEncodedMethod encodedMethod, IRCode code) {
+  public void widening(DexEncodedMethod context, DexEncodedMethod encodedMethod, IRCode code) {
     mode = Mode.WIDENING;
     assert worklist.isEmpty();
-    code.topologicallySortedBlocks().forEach(b -> analyzeBasicBlock(encodedMethod, b));
+    code.topologicallySortedBlocks().forEach(b -> analyzeBasicBlock(context, encodedMethod, b));
     analyze();
   }
 
@@ -89,7 +86,8 @@
     }
   }
 
-  public void analyzeBasicBlock(DexEncodedMethod encodedMethod, BasicBlock block) {
+  public void analyzeBasicBlock(
+      DexEncodedMethod context, DexEncodedMethod encodedMethod, BasicBlock block) {
     int argumentsSeen = encodedMethod.accessFlags.isStatic() ? 0 : -1;
     for (Instruction instruction : block.getInstructions()) {
       Value outValue = instruction.outValue();
diff --git a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java
index d4529ea..b33b894 100644
--- a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java
@@ -506,7 +506,7 @@
     assert entryBlock.getInstructions().stream().noneMatch(Instruction::isArgument);
 
     // Actual arguments are flown to the inlinee.
-    new TypeAnalysis(appView, inlinee.method).narrowing(argumentUsers);
+    new TypeAnalysis(appView).narrowing(argumentUsers);
 
     // The inline entry is the first block now the argument instructions are gone.
     BasicBlock inlineEntry = inlinee.entryBlock();
@@ -525,7 +525,7 @@
         Return returnInstruction = inlineeIterator.peekNext().asReturn();
         invoke.outValue().replaceUsers(returnInstruction.returnValue());
         // The return type is flown to the original context.
-        new TypeAnalysis(appView, code.method)
+        new TypeAnalysis(appView)
             .narrowing(
                 Iterables.concat(
                     ImmutableList.of(returnInstruction.returnValue()), affectedValues));
@@ -636,7 +636,7 @@
                 null,
                 RegisterReadType.NORMAL);
         phi.addOperands(operands);
-        new TypeAnalysis(appView, code.method).widening(ImmutableSet.of(phi));
+        new TypeAnalysis(appView).widening(ImmutableSet.of(phi));
         value = phi;
       }
       newReturn = new Return(value);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index 484f0aa..b287d0a 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -613,7 +613,7 @@
       assert source instanceof DexSourceCode;
       new TypeConstraintResolver(appView, this).resolve(impreciseInstructions, ir, method, context);
     } else {
-      new TypeAnalysis(appView, context).widening(method, ir);
+      new TypeAnalysis(appView).widening(context, method, ir);
     }
 
     assert ir.isConsistentSSA();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
index 772c70c..a8596b0 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
@@ -407,7 +407,7 @@
       code.removeUnreachableBlocks();
     }
     if (!newSSAValues.isEmpty()) {
-      new TypeAnalysis(appView, method).widening(newSSAValues);
+      new TypeAnalysis(appView).widening(newSSAValues);
     }
     assert code.isConsistentSSA();
     assert code.hasNoVerticallyMergedClasses(appView);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
index 8020323..6f01dd7 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
@@ -101,7 +101,7 @@
     List<Value> remainingImpreciseValues = resolveRoundOne(code);
     // Round two will resolve any remaining single and wide types. These can depend on the types
     // of array instructions, thus we need to complete the type fixed point prior to resolving.
-    new TypeAnalysis(appView, context, true).widening(method, code);
+    new TypeAnalysis(appView, true).widening(context, method, code);
     // Round two resolves any remaining imprecision and finally selects a final precise type for
     // any unconstrained imprecise type.
     resolveRoundTwo(code, impreciseInstructions, remainingImpreciseValues);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/AssumeDynamicTypeRemover.java b/src/main/java/com/android/tools/r8/ir/optimize/AssumeDynamicTypeRemover.java
index f53b81a..0c1ffad 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/AssumeDynamicTypeRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/AssumeDynamicTypeRemover.java
@@ -103,7 +103,7 @@
 
   public void finish() {
     if (!affectedValues.isEmpty()) {
-      new TypeAnalysis(appView, code.method).narrowing(affectedValues);
+      new TypeAnalysis(appView).narrowing(affectedValues);
     }
   }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index 63acc0a..0ae4af9 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -219,7 +219,7 @@
     }
 
     if (!valuesThatRequireWidening.isEmpty()) {
-      new TypeAnalysis(appView, code.method).widening(valuesThatRequireWidening);
+      new TypeAnalysis(appView).widening(valuesThatRequireWidening);
     }
 
     assert Streams.stream(code.instructions()).noneMatch(Instruction::isAssume);
@@ -1814,7 +1814,7 @@
       code.removeAllTrivialPhis();
     }
     if (!needToWidenValues.isEmpty() || !needToNarrowValues.isEmpty()) {
-      TypeAnalysis analysis = new TypeAnalysis(appView, code.method);
+      TypeAnalysis analysis = new TypeAnalysis(appView);
       // If out value of invoke < argument (e.g., losing non-null info), widen users type.
       if (!needToWidenValues.isEmpty()) {
         analysis.widening(needToWidenValues);
@@ -2008,7 +2008,7 @@
     // CheckCast at line 4 unless we update v7 with the most precise information by narrowing the
     // affected values of v5. We therefore have to run the type analysis after each CheckCast
     // removal.
-    TypeAnalysis typeAnalysis = new TypeAnalysis(appView, code.method);
+    TypeAnalysis typeAnalysis = new TypeAnalysis(appView);
     Set<Value> affectedValues = Sets.newIdentityHashSet();
     InstructionIterator it = code.instructionIterator();
     boolean needToRemoveTrivialPhis = false;
@@ -3135,7 +3135,7 @@
     }
     Set<Value> affectedValues = code.removeUnreachableBlocks();
     if (!affectedValues.isEmpty()) {
-      new TypeAnalysis(appView, code.method).narrowing(affectedValues);
+      new TypeAnalysis(appView).narrowing(affectedValues);
     }
     assert code.isConsistentSSA();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
index 817e00a..998de0d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
@@ -222,7 +222,7 @@
       }
     }
     if (!affectedValues.isEmpty()) {
-      new TypeAnalysis(appView, code.method).narrowing(affectedValues);
+      new TypeAnalysis(appView).narrowing(affectedValues);
     }
     assert code.isConsistentSSA();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
index b9d0990..758a0b7 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
@@ -486,7 +486,7 @@
       }
     }
     if (!affectedValues.isEmpty()) {
-      new TypeAnalysis(appView, code.method).narrowing(affectedValues);
+      new TypeAnalysis(appView).narrowing(affectedValues);
     }
     assert code.isConsistentSSA();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
index 098cd04..a47dfe0 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
@@ -214,7 +214,7 @@
       }
     }
     if (!affectedValues.isEmpty()) {
-      new TypeAnalysis(appView, code.method).narrowing(affectedValues);
+      new TypeAnalysis(appView).narrowing(affectedValues);
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
index 65b20fa..54fdfb9 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
@@ -497,7 +497,7 @@
         fieldValueHelper.replaceValue(value, newValue);
       }
       assert value.numberOfAllUsers() == 0;
-      new TypeAnalysis(appView, code.method).widening(code.method, code);
+      new TypeAnalysis(appView).widening(code.method, code.method, code);
     }
     removeInstruction(fieldRead);
   }
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java
index 4b8f0dfb..03031f8 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java
@@ -53,8 +53,8 @@
     DexEncodedMethod foo = codeInspector.clazz(mainClass.getName()).method(signature).getMethod();
     IRCode irCode = fooSubject.buildIR();
     new NonNullTracker(appView).addNonNull(irCode);
-    TypeAnalysis analysis = new TypeAnalysis(appView, foo);
-    analysis.widening(foo, irCode);
+    TypeAnalysis analysis = new TypeAnalysis(appView);
+    analysis.widening(foo, foo, irCode);
     inspector.accept(appView, irCode);
     verifyLastInvoke(irCode, npeCaught);
   }
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
index 085b933..38ddb85 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
@@ -142,8 +142,8 @@
                 new MethodSignature("subtractConstants8bitRegisters", "int", ImmutableList.of()));
     DexEncodedMethod subtract = subtractSubject.getMethod();
     IRCode irCode = subtractSubject.buildIR();
-    TypeAnalysis analysis = new TypeAnalysis(appView, subtract);
-    analysis.widening(subtract, irCode);
+    TypeAnalysis analysis = new TypeAnalysis(appView);
+    analysis.widening(subtract, subtract, irCode);
     forEachOutValue(irCode, (v, l) -> {
       // v9 <- 9 (INT_OR_FLOAT), which is never used later, hence imprecise.
       assertEither(l, SINGLE, INT, NULL);
@@ -158,8 +158,8 @@
             .method(new MethodSignature("fibonacci", "int", ImmutableList.of("int")));
     DexEncodedMethod fib = fibSubject.getMethod();
     IRCode irCode = fibSubject.buildIR();
-    TypeAnalysis analysis = new TypeAnalysis(appView, fib);
-    analysis.widening(fib, irCode);
+    TypeAnalysis analysis = new TypeAnalysis(appView);
+    analysis.widening(fib, fib, irCode);
     forEachOutValue(irCode, (v, l) -> assertEither(l, INT, NULL));
   }
 
@@ -169,8 +169,8 @@
         inspector.clazz("Test").method(new MethodSignature("test1", "int[]", ImmutableList.of()));
     DexEncodedMethod test1 = test1Subject.getMethod();
     IRCode irCode = test1Subject.buildIR();
-    TypeAnalysis analysis = new TypeAnalysis(appView, test1);
-    analysis.widening(test1, irCode);
+    TypeAnalysis analysis = new TypeAnalysis(appView);
+    analysis.widening(test1, test1, irCode);
     Value array = null;
     InstructionIterator iterator = irCode.instructionIterator();
     while (iterator.hasNext()) {
@@ -199,8 +199,8 @@
         inspector.clazz("Test").method(new MethodSignature("test4", "int[]", ImmutableList.of()));
     DexEncodedMethod test4 = test4Subject.getMethod();
     IRCode irCode = test4Subject.buildIR();
-    TypeAnalysis analysis = new TypeAnalysis(appView, test4);
-    analysis.widening(test4, irCode);
+    TypeAnalysis analysis = new TypeAnalysis(appView);
+    analysis.widening(test4, test4, irCode);
     Value array = null;
     InstructionIterator iterator = irCode.instructionIterator();
     while (iterator.hasNext()) {
@@ -229,8 +229,8 @@
         inspector.clazz("Test").method(new MethodSignature("loop2", "void", ImmutableList.of()));
     DexEncodedMethod loop2 = loop2Subject.getMethod();
     IRCode irCode = loop2Subject.buildIR();
-    TypeAnalysis analysis = new TypeAnalysis(appView, loop2);
-    analysis.widening(loop2, irCode);
+    TypeAnalysis analysis = new TypeAnalysis(appView);
+    analysis.widening(loop2, loop2, irCode);
     forEachOutValue(irCode, (v, l) -> {
       if (l.isClassType()) {
         ClassTypeLatticeElement lattice = l.asClassTypeLatticeElement();
@@ -249,8 +249,8 @@
             .method(new MethodSignature("test2_throw", "int", ImmutableList.of()));
     DexEncodedMethod test2 = test2Subject.getMethod();
     IRCode irCode = test2Subject.buildIR();
-    TypeAnalysis analysis = new TypeAnalysis(appView, test2);
-    analysis.widening(test2, irCode);
+    TypeAnalysis analysis = new TypeAnalysis(appView);
+    analysis.widening(test2, test2, irCode);
     forEachOutValue(irCode, (v, l) -> {
       if (l.isClassType()) {
         ClassTypeLatticeElement lattice = l.asClassTypeLatticeElement();
@@ -276,8 +276,8 @@
             CheckCast.class, TypeLatticeElement.fromDexType(test, maybeNull(), appView),
             NewInstance.class, TypeLatticeElement.fromDexType(test, definitelyNotNull(), appView));
     IRCode irCode = methodSubject.buildIR();
-    TypeAnalysis analysis = new TypeAnalysis(appView, method);
-    analysis.widening(method, irCode);
+    TypeAnalysis analysis = new TypeAnalysis(appView);
+    analysis.widening(method, method, irCode);
     forEachOutValue(irCode, (v, l) -> {
       verifyTypeEnvironment(expectedLattices, v, l);
       // There are double-to-int, long-to-int, and int-to-long conversions in this example.
@@ -306,8 +306,8 @@
             InstanceOf.class, INT,
             StaticGet.class, TypeLatticeElement.fromDexType(test, maybeNull(), appView));
     IRCode irCode = methodSubject.buildIR();
-    TypeAnalysis analysis = new TypeAnalysis(appView, method);
-    analysis.widening(method, irCode);
+    TypeAnalysis analysis = new TypeAnalysis(appView);
+    analysis.widening(method, method, irCode);
     forEachOutValue(irCode, (v, l) -> verifyTypeEnvironment(expectedLattices, v, l));
   }
 
