Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(632)

Unified Diff: pkg/analyzer/lib/src/generated/resolver.dart

Issue 2167263002: fix #26141, add support for type arguments to constants (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698