Fix exception thrown in ConditionalModification

Change-Id: I6e60bd74bc55cafca86a64a721455e0ed465a357
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106101
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
diff --git a/pkg/nnbd_migration/lib/src/potential_modification.dart b/pkg/nnbd_migration/lib/src/potential_modification.dart
index 6bc0d16..c6059e8 100644
--- a/pkg/nnbd_migration/lib/src/potential_modification.dart
+++ b/pkg/nnbd_migration/lib/src/potential_modification.dart
@@ -33,7 +33,7 @@
           discard,
           _KeepNode(node.condition),
           _KeepNode(node.thenStatement),
-          _KeepNode(node.elseStatement));
+          node.elseStatement == null ? null : _KeepNode(node.elseStatement));
     } else {
       throw new UnimplementedError('TODO(paulberry)');
     }
@@ -58,7 +58,7 @@
     if (discard.keepTrue) {
       keepNodes.add(thenStatement); // TODO(paulberry): test
     }
-    if (discard.keepFalse) {
+    if (discard.keepFalse && elseStatement != null) {
       keepNodes.add(elseStatement); // TODO(paulberry): test
     }
     // TODO(paulberry): test thoroughly
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index d836ce9..c378285 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -694,6 +694,22 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  test_ifStatement_nullCheck_noElse() async {
+    var content = '''
+int f(int x) {
+  if (x == null) return 0;
+  return x;
+}
+''';
+    var expected = '''
+int f(int x) {
+  if (x == null) return 0;
+  return x;
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   test_instanceCreation_noTypeArguments_noParameters() async {
     var content = '''
 void main() {