Skip to content

Commit b140970

Browse files
pqCommit Queue
authored and
Commit Queue
committed
[wildcards] optimize initializer scope checking; test cleanup
Follow-up from: https://dart-review.googlesource.com/c/sdk/+/380160 Change-Id: I3268ba1a519ef295019679b87f773fd008379c75 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/380582 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Phil Quitslund <[email protected]>
1 parent 840729a commit b140970

File tree

3 files changed

+31
-27
lines changed

3 files changed

+31
-27
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ import 'package:analyzer/src/utilities/extensions/collection.dart';
1414
/// The scope for the initializers in a constructor.
1515
class ConstructorInitializerScope extends EnclosedScope {
1616
ConstructorInitializerScope(super.parent, ConstructorElement element) {
17-
var wildcardsEnabled = element.library.hasWildcardVariablesFeatureEnabled;
1817
for (var parameter in element.parameters) {
19-
if (!(wildcardsEnabled && parameter.name == '_')) {
20-
_addGetter(parameter);
18+
// Skip wildcards.
19+
if (parameter.name == '_' &&
20+
element.library.featureSet.isEnabled(Feature.wildcard_variables)) {
21+
continue;
2122
}
23+
_addGetter(parameter);
2224
}
2325
}
2426
}

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,32 @@ ConstructorName
4646
''');
4747
}
4848

49+
test_fieldShadowingWildcardParameter() async {
50+
await assertErrorsInCode(r'''
51+
class A {
52+
var v;
53+
var _;
54+
A(var _) : v = _;
55+
}
56+
''', [
57+
error(CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER, 45, 1),
58+
]);
59+
60+
var node = findNode.constructorFieldInitializer('v = _');
61+
assertResolvedNodeText(node, r'''
62+
ConstructorFieldInitializer
63+
fieldName: SimpleIdentifier
64+
token: v
65+
staticElement: <testLibraryFragment>::@class::A::@field::v
66+
staticType: null
67+
equals: =
68+
expression: SimpleIdentifier
69+
token: _
70+
staticElement: <testLibraryFragment>::@class::A::@getter::_
71+
staticType: dynamic
72+
''');
73+
}
74+
4975
test_formalParameterScope() async {
5076
await assertNoErrorsInCode('''
5177
class a {}

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

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -108,30 +108,6 @@ class A {
108108
]);
109109
}
110110

111-
test_constructorInitializer_field_shadowingWildcard() async {
112-
await assertErrorsInCode(r'''
113-
class A {
114-
var v;
115-
var _;
116-
A(var _) : v = _;
117-
}
118-
''', [
119-
error(CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER, 45, 1),
120-
]);
121-
}
122-
123-
test_constructorInitializer_fieldFormalWildcard() async {
124-
await assertErrorsInCode(r'''
125-
class C {
126-
var _;
127-
var f;
128-
C(this._) : f = _;
129-
}
130-
''', [
131-
error(CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER, 46, 1),
132-
]);
133-
}
134-
135111
test_constructorName() async {
136112
await assertNoErrorsInCode(r'''
137113
class A {

0 commit comments

Comments
 (0)