Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 4851720

Browse files
author
Dart CI
committed
Version 2.19.0-434.0.dev
Merge cdf2221 into dev
2 parents ae4b643 + cdf2221 commit 4851720

File tree

7 files changed

+81
-6
lines changed

7 files changed

+81
-6
lines changed

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9921,6 +9921,9 @@ class PatternVariableDeclarationImpl extends AnnotatedNodeImpl
99219921
@override
99229922
final DartPatternImpl pattern;
99239923

9924+
/// Variables declared in [pattern].
9925+
late final List<VariablePatternBindElementImpl> elements;
9926+
99249927
PatternVariableDeclarationImpl({
99259928
required this.keyword,
99269929
required this.pattern,

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -991,11 +991,15 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
991991
}
992992

993993
@override
994-
void visitPatternVariableDeclarationStatement(
995-
PatternVariableDeclarationStatement node) {
994+
void visitPatternVariableDeclaration(
995+
covariant PatternVariableDeclarationImpl node,
996+
) {
996997
_patternVariables.casePatternStart();
997-
super.visitPatternVariableDeclarationStatement(node);
998-
_patternVariables.casePatternFinish();
998+
super.visitPatternVariableDeclaration(node);
999+
var variablesMap = _patternVariables.casePatternFinish();
1000+
node.elements = variablesMap.values
1001+
.whereType<VariablePatternBindElementImpl>()
1002+
.toList();
9991003
}
10001004

10011005
@override

pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:analyzer/dart/ast/token.dart';
99
import 'package:analyzer/dart/element/element.dart';
1010
import 'package:analyzer/error/error.dart';
1111
import 'package:analyzer/error/listener.dart';
12+
import 'package:analyzer/src/dart/ast/ast.dart';
1213
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
1314
import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
1415
import 'package:analyzer/src/error/codes.dart';
@@ -290,6 +291,11 @@ class DuplicateDefinitionVerifier {
290291
statement.functionDeclaration.name,
291292
element: statement.functionDeclaration.declaredElement!,
292293
);
294+
} else if (statement is PatternVariableDeclarationStatementImpl) {
295+
for (var variable in statement.declaration.elements) {
296+
_checkDuplicateIdentifier(definedNames, variable.node.name,
297+
element: variable);
298+
}
293299
}
294300
}
295301
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2843,7 +2843,6 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
28432843
analyzePatternVariableDeclarationStatement(
28442844
node, declaration.pattern, declaration.expression,
28452845
isFinal: declaration.keyword.keyword == Keyword.FINAL, isLate: false);
2846-
// node.visitChildren(this);
28472846
popRewrite(); // expression
28482847
}
28492848

pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,6 +1421,58 @@ mixin M {
14211421

14221422
@reflectiveTest
14231423
class DuplicateDefinitionTest extends PubPackageResolutionTest {
1424+
test_block_localVariable_localVariable() async {
1425+
await assertErrorsInCode(r'''
1426+
void f() {
1427+
var a = 0;
1428+
var a = 1;
1429+
}
1430+
''', [
1431+
error(HintCode.UNUSED_LOCAL_VARIABLE, 17, 1),
1432+
error(HintCode.UNUSED_LOCAL_VARIABLE, 30, 1),
1433+
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 30, 1,
1434+
contextMessages: [message('/home/test/lib/test.dart', 17, 1)]),
1435+
]);
1436+
}
1437+
1438+
test_block_localVariable_patternVariable() async {
1439+
await assertErrorsInCode(r'''
1440+
void f() {
1441+
var a = 0;
1442+
var (var a) = 1;
1443+
}
1444+
''', [
1445+
error(HintCode.UNUSED_LOCAL_VARIABLE, 17, 1),
1446+
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 35, 1,
1447+
contextMessages: [message('/home/test/lib/test.dart', 17, 1)]),
1448+
]);
1449+
}
1450+
1451+
test_block_patternVariable_localVariable() async {
1452+
await assertErrorsInCode(r'''
1453+
void f() {
1454+
var (var a) = 1;
1455+
var a = 0;
1456+
}
1457+
''', [
1458+
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 36, 1,
1459+
contextMessages: [message('/home/test/lib/test.dart', 22, 1)]),
1460+
error(HintCode.UNUSED_LOCAL_VARIABLE, 36, 1),
1461+
]);
1462+
}
1463+
1464+
test_block_patternVariable_patternVariable() async {
1465+
await assertErrorsInCode(r'''
1466+
void f() {
1467+
var (var a) = 0;
1468+
var (var a) = 1;
1469+
}
1470+
''', [
1471+
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 41, 1,
1472+
contextMessages: [message('/home/test/lib/test.dart', 22, 1)]),
1473+
]);
1474+
}
1475+
14241476
test_catch() async {
14251477
await assertErrorsInCode(r'''
14261478
main() {

pkg/analyzer/test/src/diagnostics/duplicate_variable_pattern_test.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,15 @@ BinaryPattern
6969
type: int
7070
''');
7171
}
72+
73+
test_variableDeclaration() async {
74+
await assertErrorsInCode(r'''
75+
void f(x) {
76+
var (var a, var a) = x;
77+
}
78+
''', [
79+
error(CompileTimeErrorCode.DUPLICATE_VARIABLE_PATTERN, 30, 1,
80+
contextMessages: [message('/home/test/lib/test.dart', 23, 1)]),
81+
]);
82+
}
7283
}

tools/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ CHANNEL dev
2727
MAJOR 2
2828
MINOR 19
2929
PATCH 0
30-
PRERELEASE 433
30+
PRERELEASE 434
3131
PRERELEASE_PATCH 0

0 commit comments

Comments
 (0)