mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 22:19:49 +00:00
Fix for named arguments for InstanceCreationExpression.
R=brianwilkerson@google.com, paulberry@google.com Bug: Change-Id: Ie9433fdd0f1ea2dfd65fa6bd1f44b9356d0a402e Reviewed-on: https://dart-review.googlesource.com/28364 Commit-Queue: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Paul Berry <paulberry@google.com>
This commit is contained in:
parent
fbe4151da4
commit
b8b9073e24
|
@ -327,8 +327,18 @@ class ResolutionApplier extends GeneralizingAstVisitor {
|
|||
constructorName.name.staticElement = element;
|
||||
}
|
||||
|
||||
node.argumentList?.accept(this);
|
||||
_associateArgumentsWithParameters(element?.parameters, node.argumentList);
|
||||
ArgumentList argumentList = node.argumentList;
|
||||
_associateArgumentsWithParameters(element?.parameters, argumentList);
|
||||
|
||||
// Apply resolution to arguments.
|
||||
// Skip names of named arguments.
|
||||
for (var argument in argumentList.arguments) {
|
||||
if (argument is NamedExpression) {
|
||||
argument.expression.accept(this);
|
||||
} else {
|
||||
argument.accept(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -128,13 +128,6 @@ class NonErrorResolverTest_Kernel extends NonErrorResolverTest_Driver {
|
|||
return super.test_commentReference_setter();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
@potentialAnalyzerProblem
|
||||
test_const_constructor_with_named_generic_parameter() async {
|
||||
return super.test_const_constructor_with_named_generic_parameter();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
@potentialAnalyzerProblem
|
||||
|
|
|
@ -1416,6 +1416,53 @@ var b = new C.named();
|
|||
}
|
||||
}
|
||||
|
||||
test_instanceCreation_namedArgument() async {
|
||||
addTestFile(r'''
|
||||
class X {
|
||||
X(int a, {bool b, double c});
|
||||
}
|
||||
var v = new X(1, b: true, c: 3.0);
|
||||
''');
|
||||
|
||||
AnalysisResult result = await driver.getResult(testFile);
|
||||
CompilationUnit unit = result.unit;
|
||||
|
||||
ClassDeclaration xNode = unit.declarations[0];
|
||||
ClassElement xElement = xNode.element;
|
||||
ConstructorElement constructorElement = xElement.constructors[0];
|
||||
|
||||
TopLevelVariableDeclaration vDeclaration = unit.declarations[1];
|
||||
VariableDeclaration vNode = vDeclaration.variables.variables[0];
|
||||
|
||||
InstanceCreationExpression creation = vNode.initializer;
|
||||
List<Expression> arguments = creation.argumentList.arguments;
|
||||
expect(creation.staticElement, constructorElement);
|
||||
expect(creation.staticType, xElement.type);
|
||||
|
||||
TypeName typeName = creation.constructorName.type;
|
||||
expect(typeName.typeArguments, isNull);
|
||||
|
||||
Identifier typeIdentifier = typeName.name;
|
||||
expect(typeIdentifier.staticElement, xElement);
|
||||
expect(typeIdentifier.staticType, xElement.type);
|
||||
|
||||
expect(creation.constructorName.name, isNull);
|
||||
|
||||
Expression aArgument = arguments[0];
|
||||
ParameterElement aElement = constructorElement.parameters[0];
|
||||
expect(aArgument.staticParameterElement, same(aElement));
|
||||
|
||||
NamedExpression bArgument = arguments[1];
|
||||
ParameterElement bElement = constructorElement.parameters[1];
|
||||
expect(bArgument.name.label.staticElement, same(bElement));
|
||||
expect(bArgument.staticParameterElement, same(bElement));
|
||||
|
||||
NamedExpression cArgument = arguments[2];
|
||||
ParameterElement cElement = constructorElement.parameters[2];
|
||||
expect(cArgument.name.label.staticElement, same(cElement));
|
||||
expect(cArgument.staticParameterElement, same(cElement));
|
||||
}
|
||||
|
||||
test_instanceCreation_noTypeArguments() async {
|
||||
String content = r'''
|
||||
class C {
|
||||
|
@ -2578,6 +2625,38 @@ class C<T> {
|
|||
}
|
||||
}
|
||||
|
||||
test_methodInvocation_namedArgument() async {
|
||||
addTestFile(r'''
|
||||
void main() {
|
||||
foo(1, b: true, c: 3.0);
|
||||
}
|
||||
void foo(int a, {bool b, double c}) {}
|
||||
''');
|
||||
AnalysisResult result = await driver.getResult(testFile);
|
||||
List<Statement> mainStatements = _getMainStatements(result);
|
||||
|
||||
FunctionDeclaration foo = result.unit.declarations[1];
|
||||
ExecutableElement fooElement = foo.element;
|
||||
|
||||
ExpressionStatement statement = mainStatements[0];
|
||||
MethodInvocation invocation = statement.expression;
|
||||
List<Expression> arguments = invocation.argumentList.arguments;
|
||||
|
||||
Expression aArgument = arguments[0];
|
||||
ParameterElement aElement = fooElement.parameters[0];
|
||||
expect(aArgument.staticParameterElement, same(aElement));
|
||||
|
||||
NamedExpression bArgument = arguments[1];
|
||||
ParameterElement bElement = fooElement.parameters[1];
|
||||
expect(bArgument.name.label.staticElement, same(bElement));
|
||||
expect(bArgument.staticParameterElement, same(bElement));
|
||||
|
||||
NamedExpression cArgument = arguments[2];
|
||||
ParameterElement cElement = fooElement.parameters[2];
|
||||
expect(cArgument.name.label.staticElement, same(cElement));
|
||||
expect(cArgument.staticParameterElement, same(cElement));
|
||||
}
|
||||
|
||||
test_methodInvocation_staticMethod() async {
|
||||
addTestFile(r'''
|
||||
main() {
|
||||
|
@ -2796,38 +2875,6 @@ void f<T, U>(T a, U b) {}
|
|||
}
|
||||
}
|
||||
|
||||
test_namedArgument() async {
|
||||
addTestFile(r'''
|
||||
void main() {
|
||||
foo(1, b: true, c: 3.0);
|
||||
}
|
||||
void foo(int a, {bool b, double c}) {}
|
||||
''');
|
||||
AnalysisResult result = await driver.getResult(testFile);
|
||||
List<Statement> mainStatements = _getMainStatements(result);
|
||||
|
||||
FunctionDeclaration foo = result.unit.declarations[1];
|
||||
ExecutableElement fooElement = foo.element;
|
||||
|
||||
ExpressionStatement statement = mainStatements[0];
|
||||
MethodInvocation invocation = statement.expression;
|
||||
List<Expression> arguments = invocation.argumentList.arguments;
|
||||
|
||||
Expression aArgument = arguments[0];
|
||||
ParameterElement aElement = fooElement.parameters[0];
|
||||
expect(aArgument.staticParameterElement, same(aElement));
|
||||
|
||||
NamedExpression bArgument = arguments[1];
|
||||
ParameterElement bElement = fooElement.parameters[1];
|
||||
expect(bArgument.name.label.staticElement, same(bElement));
|
||||
expect(bArgument.staticParameterElement, same(bElement));
|
||||
|
||||
NamedExpression cArgument = arguments[2];
|
||||
ParameterElement cElement = fooElement.parameters[2];
|
||||
expect(cArgument.name.label.staticElement, same(cElement));
|
||||
expect(cArgument.staticParameterElement, same(cElement));
|
||||
}
|
||||
|
||||
test_postfixExpression_local() async {
|
||||
String content = r'''
|
||||
main() {
|
||||
|
|
Loading…
Reference in a new issue