Skip to content

Commit 5a62d02

Browse files
pqCommit Queue
authored and
Commit Queue
committed
[wildcards] fix constructor parameter initializer scope
See: #55680 Fixes: MissingCompileTimeError -> Pass (expected Pass) co19/LanguageFeatures/Wildcards/binding_A01_t02 co19/LanguageFeatures/Wildcards/initializing_formals_A02_t01 co19/LanguageFeatures/Wildcards/initializing_formals_A02_t03 MissingCompileTimeError -> Pass (expected Pass) language/wildcard_variables/initializing_formal_parameters/this_initializer_access_error_test Change-Id: I7c14757e312e7f426290ed63ed745eac4856bab3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/380160 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Phil Quitslund <[email protected]>
1 parent 4cea10f commit 5a62d02

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ 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-
element.parameters.forEach(_addGetter);
17+
var wildcardsEnabled = element.library.hasWildcardVariablesFeatureEnabled;
18+
for (var parameter in element.parameters) {
19+
if (!(wildcardsEnabled && parameter.name == '_')) {
20+
_addGetter(parameter);
21+
}
22+
}
1823
}
1924
}
2025

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,30 @@ 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+
111135
test_constructorName() async {
112136
await assertNoErrorsInCode(r'''
113137
class A {

0 commit comments

Comments
 (0)