diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
index e2d6df6..765d3d5 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
@@ -277,7 +277,8 @@
   void recordStaticType(ExpressionImpl expression, DartType type) {
     var hooks = _migrationResolutionHooks;
     if (hooks != null) {
-      type = hooks.modifyExpressionType(expression, type);
+      type = hooks.modifyExpressionType(
+          expression, type, InferenceContext.getContext(expression));
     }
 
     expression.staticType = type;
diff --git a/pkg/analyzer/lib/src/generated/migration.dart b/pkg/analyzer/lib/src/generated/migration.dart
index 6bd94fa..0da672d 100644
--- a/pkg/analyzer/lib/src/generated/migration.dart
+++ b/pkg/analyzer/lib/src/generated/migration.dart
@@ -23,7 +23,8 @@
   /// Called after the resolver has determined the type of an expression node.
   /// Should return the type that the expression has after migrations have been
   /// applied.
-  DartType modifyExpressionType(Expression expression, DartType dartType);
+  DartType modifyExpressionType(
+      Expression expression, DartType dartType, DartType? contextType);
 
   /// Called after the resolver has inferred the type of a function literal
   /// parameter.  Should return the type that the parameter has after migrations
@@ -31,6 +32,11 @@
   DartType modifyInferredParameterType(
       ParameterElement parameter, DartType type);
 
+  /// Called at the beginning of visiting a binary expression, to report the
+  /// context type of the binary expression.
+  void reportBinaryExpressionContext(
+      BinaryExpression node, DartType? contextType);
+
   /// Called after the resolver has determined the read and write types
   /// of the assignment expression.
   void setCompoundAssignmentExpressionTypes(CompoundAssignmentExpression node);
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 046824e..ee635b2 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1214,6 +1214,11 @@
 
   @override
   void visitBinaryExpression(BinaryExpression node) {
+    var migrationResolutionHooks = this.migrationResolutionHooks;
+    if (migrationResolutionHooks != null) {
+      migrationResolutionHooks.reportBinaryExpressionContext(
+          node, InferenceContext.getContext(node));
+    }
     _binaryExpressionResolver.resolve(node as BinaryExpressionImpl);
     insertGenericFunctionInstantiation(node);
   }
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index 0caee26..8da2940 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -331,6 +331,8 @@
   final Map<MethodInvocation, DartType Function(DartType)>
       _deferredMethodInvocationProcessing = {};
 
+  final Map<Expression, DartType?> _contextTypes = {};
+
   TypeProvider get typeProvider => _fixBuilder!.typeProvider;
 
   @override
@@ -514,8 +516,10 @@
   }
 
   @override
-  DartType modifyExpressionType(Expression node, DartType type) =>
+  DartType modifyExpressionType(
+          Expression node, DartType type, DartType? contextType) =>
       _wrapExceptions(node, () => type, () {
+        _contextTypes[node] = contextType;
         if (node is NamedExpression) {
           // Do not attempt to modify named expressions.  We should already have
           // been called for [node.expression], and we should have made the
@@ -554,6 +558,12 @@
   }
 
   @override
+  void reportBinaryExpressionContext(
+      BinaryExpression node, DartType? contextType) {
+    _contextTypes[node] = contextType;
+  }
+
+  @override
   void setCompoundAssignmentExpressionTypes(CompoundAssignmentExpression node) {
     assert(_assignmentLikeExpressionHandlers[node] == null);
     if (node is AssignmentExpression) {
@@ -720,8 +730,7 @@
     }
     if (type.isDynamic) return type;
     var ancestor = _findNullabilityContextAncestor(node);
-    context ??=
-        InferenceContext.getContext(ancestor) ?? DynamicTypeImpl.instance;
+    context ??= _contextTypes[ancestor] ?? DynamicTypeImpl.instance;
     if (!_isSubtypeOrCoercible(type, context)) {
       var transformationInfo =
           _fixBuilder!._whereOrNullTransformer.tryTransformOrElseArgument(node);
diff --git a/tools/VERSION b/tools/VERSION
index d842f12..3aaae4e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 47
+PRERELEASE 48
 PRERELEASE_PATCH 0
\ No newline at end of file
