Fix for NPE when an argument does not correspond to a constructor parameter.

R=brianwilkerson@google.com

Change-Id: I97ba245398e4375e0e132cc3280db0357859e494
Reviewed-on: https://dart-review.googlesource.com/40104
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Konstantin Shcheglov 2018-02-08 21:38:57 +00:00
parent 357f457059
commit 330ad8d287
2 changed files with 22 additions and 2 deletions

View file

@ -38,6 +38,9 @@ class FlutterOutlineComputer {
/// Flutter attribute, add it to the [attributes].
void _addAttribute(List<protocol.FlutterOutlineAttribute> attributes,
Expression argument, ParameterElement parameter) {
if (parameter == null) {
return;
}
if (argument is NamedExpression) {
argument = (argument as NamedExpression).expression;
}
@ -88,8 +91,6 @@ class FlutterOutlineComputer {
var attributes = <protocol.FlutterOutlineAttribute>[];
var children = <protocol.FlutterOutline>[];
for (var argument in node.argumentList.arguments) {
ParameterElement parameter = argument.staticParameterElement;
bool isWidgetArgument = isWidgetType(argument.staticType);
bool isWidgetListArgument = isListOfWidgetsType(argument.staticType);
@ -119,6 +120,7 @@ class FlutterOutlineComputer {
}
}
} else {
ParameterElement parameter = argument.staticParameterElement;
_addAttribute(attributes, argument, parameter);
}
}

View file

@ -159,6 +159,24 @@ class MyWidget extends StatelessWidget {
expect(attribute.literalValueString, 'my text');
}
test_attributes_unresolved() async {
FlutterOutline unitOutline = await _computeOutline('''
import 'package:flutter/widgets.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const Row(1, foo: 2)
}
}
''');
var myWidget = unitOutline.children[0];
var build = myWidget.children[0];
var rowOutline = build.children[0];
expect(rowOutline.attributes, isEmpty);
}
test_children() async {
FlutterOutline unitOutline = await _computeOutline('''
import 'package:flutter/widgets.dart';