Issue 51172. Fix resolution for SwitchExpression as a top-level variable initializer.

Bug: https://github.com/dart-lang/sdk/issues/51172
Change-Id: Ie13b7395082ee4a587da4b3abb6c3efa07eb3133
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/280079
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index f3c9beb..31369f5 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -1211,12 +1211,14 @@
     node.expression.accept(this);
 
     for (var case_ in node.cases) {
-      _resolveGuardedPattern(
-        case_.guardedPattern,
-        then: () {
-          case_.expression.accept(this);
-        },
-      );
+      _withNameScope(() {
+        _resolveGuardedPattern(
+          case_.guardedPattern,
+          then: () {
+            case_.expression.accept(this);
+          },
+        );
+      });
     }
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart
index fdd4d60..e1b2b24 100644
--- a/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart
@@ -82,6 +82,69 @@
 ''');
   }
 
+  test_location_topLevel() async {
+    await assertNoErrorsInCode(r'''
+final a = switch (null) {
+  int(:var isEven) when isEven => 1,
+  _ => 0,
+};
+''');
+
+    final node = findNode.singleSwitchExpression;
+    assertResolvedNodeText(node, r'''
+SwitchExpression
+  switchKeyword: switch
+  leftParenthesis: (
+  expression: NullLiteral
+    literal: null
+    staticType: Null
+  rightParenthesis: )
+  leftBracket: {
+  cases
+    SwitchExpressionCase
+      guardedPattern: GuardedPattern
+        pattern: ObjectPattern
+          type: NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+          leftParenthesis: (
+          fields
+            RecordPatternField
+              fieldName: RecordPatternFieldName
+                colon: :
+              pattern: DeclaredVariablePattern
+                keyword: var
+                name: isEven
+                declaredElement: hasImplicitType isEven@37
+                  type: bool
+              fieldElement: dart:core::@class::int::@getter::isEven
+          rightParenthesis: )
+        whenClause: WhenClause
+          whenKeyword: when
+          expression: SimpleIdentifier
+            token: isEven
+            staticElement: isEven@37
+            staticType: bool
+      arrow: =>
+      expression: IntegerLiteral
+        literal: 1
+        staticType: int
+    SwitchExpressionCase
+      guardedPattern: GuardedPattern
+        pattern: WildcardPattern
+          name: _
+      arrow: =>
+      expression: IntegerLiteral
+        literal: 0
+        staticType: int
+  rightBracket: }
+  staticType: int
+''');
+  }
+
   test_rewrite_case_expression() async {
     await assertNoErrorsInCode(r'''
 void f(Object? x, int Function() a) {