Skip to content

Commit 2f2c079

Browse files
scheglovCommit Queue
authored andcommitted
Issue 60168. Set enclosingFragment for JoinPatternVariableElementImpl when merging LogicalOrPattern.
Bug: #60168 Change-Id: Id77cd5975c6a090237eb011bb4eca91e18fedf2b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/410840 Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent fa1a605 commit 2f2c079

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7914,6 +7914,10 @@ class LocalVariableElementImpl extends NonParameterVariableElementImpl
79147914
@override
79157915
Fragment get enclosingFragment => enclosingElement3 as Fragment;
79167916

7917+
set enclosingFragment(Fragment value) {
7918+
enclosingElement3 = value as Element;
7919+
}
7920+
79177921
@override
79187922
String get identifier {
79197923
return '$name$nameOffset';

pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1991,8 +1991,7 @@ class _VariableBinder
19911991
.map((e) => e.inconsistency),
19921992
),
19931993
)
1994-
..enclosingElement3 =
1995-
first.firstFragment.enclosingFragment!.element.asElement!
1994+
..enclosingFragment = first.firstFragment.enclosingFragment!
19961995
..type = InvalidTypeImpl.instance)
19971996
.element;
19981997
}

pkg/analyzer/test/src/dart/resolution/logical_or_pattern_test.dart

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,43 @@ LogicalOrPattern
7474
name: _
7575
matchedValueType: dynamic
7676
matchedValueType: dynamic
77+
''');
78+
}
79+
80+
test_switchCase_topLevel3() async {
81+
// https://github.com/dart-lang/sdk/issues/60168
82+
await resolveTestCode(r'''
83+
var _ = switch (0) {
84+
var a || var a || var a => 0,
85+
};
86+
''');
87+
88+
var node = findNode.singleGuardedPattern.pattern;
89+
assertResolvedNodeText(node, r'''
90+
LogicalOrPattern
91+
leftOperand: LogicalOrPattern
92+
leftOperand: DeclaredVariablePattern
93+
keyword: var
94+
name: a
95+
declaredElement: hasImplicitType a@27
96+
type: int
97+
matchedValueType: int
98+
operator: ||
99+
rightOperand: DeclaredVariablePattern
100+
keyword: var
101+
name: a
102+
declaredElement: hasImplicitType a@36
103+
type: int
104+
matchedValueType: int
105+
matchedValueType: int
106+
operator: ||
107+
rightOperand: DeclaredVariablePattern
108+
keyword: var
109+
name: a
110+
declaredElement: hasImplicitType a@45
111+
type: int
112+
matchedValueType: int
113+
matchedValueType: int
77114
''');
78115
}
79116
}

0 commit comments

Comments
 (0)