Skip to content

Commit 131cde8

Browse files
Fix #31107, crash using generic function syntax in field formal params.
Only fails under the new analysis driver. Flipped all resolver_test_cases to run under the new analysis mode by default since that's the default case these days. Aside from that, the change is pretty small/simple/safe: just had to resolve type declarations in FieldFormalParameters in two places to handle both named and non-named forms. Bug: 31107 Change-Id: I45352f921085e32b53bda1ebcf74a0d51b82e67a Reviewed-on: https://dart-review.googlesource.com/20561 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Mike Fairhurst <[email protected]>
1 parent 28e0c35 commit 131cde8

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ class DeclarationResolver extends RecursiveAstVisitor<Object> {
136136
normalParameter.element = element;
137137
_setGenericFunctionType(normalParameter.type, element.type);
138138
}
139+
if (normalParameter is FieldFormalParameterImpl) {
140+
_setGenericFunctionType(normalParameter.type, element.type);
141+
}
139142

140143
Expression defaultValue = node.defaultValue;
141144
if (defaultValue != null) {
@@ -215,6 +218,7 @@ class DeclarationResolver extends RecursiveAstVisitor<Object> {
215218
super.visitFieldFormalParameter(node);
216219
});
217220
_resolveMetadata(node, node.metadata, element);
221+
_setGenericFunctionType(node.type, element.type);
218222
return null;
219223
} else {
220224
return super.visitFieldFormalParameter(node);

pkg/analyzer/test/generated/non_error_resolver_test.dart

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2216,6 +2216,32 @@ class C {
22162216
verify([source]);
22172217
}
22182218

2219+
test_fieldFormalParameter_genericFunctionTyped() async {
2220+
Source source = addSource(r'''
2221+
class C {
2222+
final Object Function(int, double) field;
2223+
2224+
C(String Function(num, Object) this.field);
2225+
}
2226+
''');
2227+
await computeAnalysisResult(source);
2228+
assertNoErrors(source);
2229+
verify([source]);
2230+
}
2231+
2232+
test_fieldFormalParameter_genericFunctionTyped_named() async {
2233+
Source source = addSource(r'''
2234+
class C {
2235+
final Object Function(int, double) field;
2236+
2237+
C({String Function(num, Object) this.field});
2238+
}
2239+
''');
2240+
await computeAnalysisResult(source);
2241+
assertNoErrors(source);
2242+
verify([source]);
2243+
}
2244+
22192245
test_fieldInitializedByMultipleInitializers() async {
22202246
Source source = addSource(r'''
22212247
class A {

0 commit comments

Comments
 (0)