Migration: fix detection of variable/parameter reference inside parentheses.

Change-Id: Ifebbb834de278a38c30f8e555175515220706a1b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106423
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/nnbd_migration/lib/src/graph_builder.dart b/pkg/nnbd_migration/lib/src/graph_builder.dart
index 97b1092..b673ac5 100644
--- a/pkg/nnbd_migration/lib/src/graph_builder.dart
+++ b/pkg/nnbd_migration/lib/src/graph_builder.dart
@@ -852,6 +852,7 @@
   }
 
   bool _isVariableOrParameterReference(Expression expression) {
+    expression = expression.unParenthesized;
     if (expression is SimpleIdentifier) {
       var element = expression.staticElement;
       if (element is LocalVariableElement) return true;
diff --git a/pkg/nnbd_migration/test/migration_visitor_test.dart b/pkg/nnbd_migration/test/migration_visitor_test.dart
index 85e574a..cb2e1e0 100644
--- a/pkg/nnbd_migration/test/migration_visitor_test.dart
+++ b/pkg/nnbd_migration/test/migration_visitor_test.dart
@@ -1230,9 +1230,8 @@
 }
 ''');
 
-    // TODO(paulberry): this is wrong.  It should be a hard edge.
     assertNullCheck(checkExpression('c).x'),
-        assertEdge(decoratedTypeAnnotation('C c').node, never, hard: false));
+        assertEdge(decoratedTypeAnnotation('C c').node, never, hard: true));
   }
 
   test_return_implicit_null() async {