Record references for AssertInitializer.
R=brianwilkerson@google.com
Change-Id: Ic8d354781d4298c79edbd41d7ae9448462814931
Reviewed-on: https://dart-review.googlesource.com/c/86984
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
index dcc3838..4740d58 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
@@ -320,7 +320,7 @@
implTokenSignature,
enclosingClassName: enclosingClassName,
enclosingSuperClass: enclosingSuperClass,
- formalParametersForDefaultValues: node.parameters,
+ formalParametersForImpl: node.parameters,
constructorInitializers: node.initializers,
redirectedConstructor: node.redirectedConstructor,
functionBody: node.body,
@@ -434,7 +434,7 @@
var impl = referenceCollector.collect(
implTokenSignature,
thisNodeName: node.name.name,
- formalParametersForDefaultValues: functionExpression.parameters,
+ formalParametersForImpl: functionExpression.parameters,
functionBody: body,
);
@@ -551,7 +551,7 @@
implTokenSignature,
enclosingClassName: enclosingClassName,
thisNodeName: node.name.name,
- formalParametersForDefaultValues: node.parameters,
+ formalParametersForImpl: node.parameters,
functionBody: node.body,
);
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
index b191634..09b4dae 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
@@ -62,7 +62,7 @@
Expression expression,
ExtendsClause extendsClause,
FormalParameterList formalParameters,
- FormalParameterList formalParametersForDefaultValues,
+ FormalParameterList formalParametersForImpl,
FunctionBody functionBody,
ImplementsClause implementsClause,
OnClause onClause,
@@ -96,7 +96,7 @@
// Parts of executables.
_visitFormalParameterList(formalParameters);
- _visitFormalParameterListDefaults(formalParametersForDefaultValues);
+ _visitFormalParameterListImpl(formalParametersForImpl);
_visitTypeAnnotation(returnType);
_visitFunctionBody(functionBody);
@@ -254,7 +254,8 @@
for (var i = 0; i < initializers.length; i++) {
var initializer = initializers[i];
if (initializer is AssertInitializer) {
- // TODO(scheglov) implement
+ _visitExpression(initializer.condition);
+ _visitExpression(initializer.message);
} else if (initializer is ConstructorFieldInitializer) {
_visitExpression(initializer.expression);
} else if (initializer is SuperConstructorInvocation) {
@@ -417,14 +418,21 @@
}
}
- void _visitFormalParameterListDefaults(FormalParameterList node) {
+ void _visitFormalParameterListImpl(FormalParameterList node) {
if (node == null) return;
var parameters = node.parameters;
for (var i = 0; i < parameters.length; i++) {
FormalParameter parameter = parameters[i];
+
if (parameter is DefaultFormalParameter) {
- _visitExpression(parameter.defaultValue);
+ DefaultFormalParameter defaultParameter = parameter;
+ _visitExpression(defaultParameter.defaultValue);
+ parameter = defaultParameter.parameter;
+ }
+
+ if (parameter.identifier != null) {
+ _localScopes.add(parameter.identifier.name);
}
}
}
@@ -470,7 +478,7 @@
_localScopes.enter();
_visitTypeParameterList(node.typeParameters);
_visitFormalParameterList(node.parameters);
- _visitFormalParameterListDefaults(node.parameters);
+ _visitFormalParameterListImpl(node.parameters);
_visitFunctionBody(node.body);
_localScopes.exit();
}
diff --git a/pkg/analyzer/test/src/dart/analysis/dependency/reference_collector_test.dart b/pkg/analyzer/test/src/dart/analysis/dependency/reference_collector_test.dart
index f76fe69..aacbb42 100644
--- a/pkg/analyzer/test/src/dart/analysis/dependency/reference_collector_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/dependency/reference_collector_test.dart
@@ -1503,6 +1503,16 @@
memberOf: 'X', unprefixed: ['A']);
}
+ test_class_constructor_initializer_assert() async {
+ var library = await buildTestLibrary(a, r'''
+class C {
+ C.test(a) : assert(a > x, y);
+}
+''');
+ _assertImpl(library, 'test', NodeKind.CONSTRUCTOR,
+ memberOf: 'C', unprefixed: ['x', 'y']);
+ }
+
test_class_constructor_initializer_field() async {
var library = await buildTestLibrary(a, r'''
class C {
@@ -1733,6 +1743,20 @@
_assertImpl(library, 'test', NodeKind.CONSTRUCTOR, memberOf: 'X');
}
+ test_syntacticScope_class_constructor_parameters() async {
+ var library = await buildTestLibrary(a, r'''
+class X {
+ X.test(a, b, c) {
+ a; b; c;
+ d;
+ }
+}
+''');
+ _assertApi(library, 'test', NodeKind.CONSTRUCTOR, memberOf: 'X');
+ _assertImpl(library, 'test', NodeKind.CONSTRUCTOR,
+ memberOf: 'X', unprefixed: ['d']);
+ }
+
test_syntacticScope_class_field() async {
var library = await buildTestLibrary(a, r'''
class X {
@@ -1761,6 +1785,20 @@
memberOf: 'X', unprefixed: ['B']);
}
+ test_syntacticScope_class_method_parameters() async {
+ var library = await buildTestLibrary(a, r'''
+class X {
+ test(a, b, c) {
+ a; b; c;
+ d;
+ }
+}
+''');
+ _assertApi(library, 'test', NodeKind.METHOD, memberOf: 'X');
+ _assertImpl(library, 'test', NodeKind.METHOD,
+ memberOf: 'X', unprefixed: ['d']);
+ }
+
test_syntacticScope_class_typeParameter_ofClass() async {
var library = await buildTestLibrary(a, r'''
class X<T extends A<B, X, T>> {}
@@ -1787,6 +1825,17 @@
_assertImpl(library, 'test', NodeKind.FUNCTION, unprefixed: ['B']);
}
+ test_syntacticScope_unit_function_parameters() async {
+ var library = await buildTestLibrary(a, r'''
+test(a, b, {c}) {
+ a; b; c;
+ d;
+}
+''');
+ _assertApi(library, 'test', NodeKind.FUNCTION);
+ _assertImpl(library, 'test', NodeKind.FUNCTION, unprefixed: ['d']);
+ }
+
test_syntacticScope_unit_functionTypeAlias() async {
var library = await buildTestLibrary(a, r'''
typedef X(A a, X b);