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; |
} |