add migration engine support for named parameters in imported packages

This adds support for decorating named parameters in packages
that are imported by the package being migrated.

Change-Id: I1f803b28ad8fedcedca14421b391dc7ab879d05f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106682
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Dan Rubel 2019-06-19 21:07:11 +00:00 committed by commit-bot@chromium.org
parent 15cac4204e
commit cf78d5d7f0
2 changed files with 20 additions and 2 deletions

View file

@ -54,16 +54,17 @@ class DecoratedType {
NullabilitySuffix.star); // TODO(paulberry)
if (type is FunctionType) {
var positionalParameters = <DecoratedType>[];
var namedParameters = <String, DecoratedType>{};
for (var parameter in type.parameters) {
if (parameter.isPositional) {
positionalParameters.add(decorate(parameter.type));
} else {
// TODO(paulberry)
throw UnimplementedError('Decorating (${parameter.displayName})');
namedParameters[parameter.name] = decorate(parameter.type);
}
}
return DecoratedType(type, graph.never,
returnType: decorate(type.returnType),
namedParameters: namedParameters,
positionalParameters: positionalParameters);
} else if (type is InterfaceType) {
if (type.typeParameters.isNotEmpty) {

View file

@ -1143,6 +1143,23 @@ void g(C c, int j) {
assertEdge(nullable_j, nullable_i, hard: true));
}
test_methodInvocation_parameter_named_differentPackage() async {
addPackageFile('pkgC', 'c.dart', '''
class C {
void f({int i}) {}
}
''');
await analyze('''
import "package:pkgC/c.dart";
void g(C c, int j) {
c.f(i: j/*check*/);
}
''');
var nullable_j = decoratedTypeAnnotation('int j');
assertNullCheck(checkExpression('j/*check*/'),
assertEdge(nullable_j.node, never, hard: true));
}
test_methodInvocation_return_type() async {
await analyze('''
class C {