Chromium Code Reviews| Index: pkg/analyzer/lib/src/generated/resolver.dart |
| diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart |
| index d9d0b0d96d7516c8038bd2f9636f4bd63904f391..84eb1fc07c46be040fe493a7f79639ecab3d6488 100644 |
| --- a/pkg/analyzer/lib/src/generated/resolver.dart |
| +++ b/pkg/analyzer/lib/src/generated/resolver.dart |
| @@ -1259,6 +1259,7 @@ class ConstantVerifier extends RecursiveAstVisitor<Object> { |
| new ConstantVisitor(evaluationEngine, _errorReporter); |
| evaluationEngine.evaluateConstructorCall( |
| node, |
| + (node.constructorName.type.type as ParameterizedType).typeArguments, |
| node.argumentList.arguments, |
| constructor, |
| constantVisitor, |
| @@ -6329,8 +6330,22 @@ class ResolverVisitor extends ScopedVisitor { |
| _enclosingFunction = outerFunction; |
| } |
| ConstructorElementImpl constructor = node.element; |
| - constructor.constantInitializers = |
| - new ConstantAstCloner().cloneNodeList(node.initializers); |
| + var clone = new ConstantAstCloner().cloneNodeList; |
|
Paul Berry
2016/07/21 20:42:14
This hunk shouldn't be necessary.
Jennifer Messerly
2016/07/28 22:28:05
Yay! Reverted!
|
| + if (strongMode) { |
| + // Note: the order of cloning matters; it won't ever go back before the |
| + // first token that is cloned. So we have to start with fields, then |
| + // parameters, then constructor initializers. |
|
Brian Wilkerson
2016/07/21 18:01:49
Do you mean that nodes must be cloned in lexical o
Jennifer Messerly
2016/07/21 18:03:11
yes
|
| + var enclosingClass = node.parent as ClassDeclaration; |
| + constructor.fieldInitializers = clone(enclosingClass.members |
| + .where((m) => m is FieldDeclaration) |
| + .expand((f) => f.fields.variables) |
| + .toList()); |
| + constructor.parameterInitializers = clone(node.parameters.parameters |
| + .where((p) => p is DefaultFormalParameter) |
| + .toList()); |
| + } |
| + |
| + constructor.constantInitializers = clone(node.initializers); |
| return null; |
| } |