Fix cast exception in OpTypeAstVisitor

Change-Id: I7fa9f9586a7d57ebc9707db3ee1532c462bbeccd
Reviewed-on: https://dart-review.googlesource.com/c/78712
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Brian Wilkerson 2018-10-09 18:40:19 +00:00 committed by commit-bot@chromium.org
parent 2cf6ba2996
commit 8fc80031ae
2 changed files with 21 additions and 3 deletions

View file

@ -464,7 +464,7 @@ class _OpTypeAstVisitor extends GeneralizingAstVisitor {
if (identical(entity, node.name)) {
TypeName type = node.type;
if (type != null) {
SimpleIdentifier prefix = type.name;
Identifier prefix = type.name;
if (prefix != null) {
optype.includeConstructorSuggestions = true;
optype.isPrefixed = true;
@ -784,9 +784,9 @@ class _OpTypeAstVisitor extends GeneralizingAstVisitor {
List<ParameterElement> parameters = element.parameters;
ParameterElement parameterElement = parameters.firstWhere((e) {
if (e is DefaultFieldFormalParameterElementImpl) {
return e.field?.name == node.name.label.name;
return e.field?.name == node.name.label?.name;
}
return e.isNamed && e.name == node.name.label.name;
return e.isNamed && e.name == node.name.label?.name;
}, orElse: () => null);
// Suggest tear-offs.
if (parameterElement?.type is FunctionType) {

View file

@ -1190,6 +1190,16 @@ class OpTypeTest extends OpTypeTestCommon {
await assertOpType(constructors: true);
}
test_ConstructorName_nameAndPrefix_resolved() async {
// SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
// InstanceCreationExpression
addTestSource('''
import 'dart:core' as core;
main() {new core.String.from^CharCodes([]);}
''');
await assertOpType(constructors: true, prefixed: true);
}
test_ConstructorName_resolved() async {
// SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
// InstanceCreationExpression
@ -1706,6 +1716,14 @@ class C2 {
await assertOpType(typeNames: true);
}
test_NamedExpression() async {
addTestSource('''
main() { f(3, ^); }
void f(int a, {int b}) {}
''');
await assertOpType(namedArgs: true);
}
test_OnClause() async {
// OnClause MixinDeclaration
addTestSource('mixin M on ^\n{}');