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

Unified Diff: pkg/analyzer/lib/src/summary/summarize_ast.dart

Issue 1678753002: Summarize constructor initializers. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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/summary/summarize_ast.dart
diff --git a/pkg/analyzer/lib/src/summary/summarize_ast.dart b/pkg/analyzer/lib/src/summary/summarize_ast.dart
index f9c64f6d1420db1be25253395bc0f1c416bd7ff2..34a579a5ba824ad78f2075eecbeeebeb8d4f511d 100644
--- a/pkg/analyzer/lib/src/summary/summarize_ast.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_ast.dart
@@ -27,7 +27,18 @@ UnlinkedUnitBuilder serializeAstUnlinked(CompilationUnit compilationUnit) {
class _ConstExprSerializer extends AbstractConstExprSerializer {
final _SummarizeAstVisitor visitor;
- _ConstExprSerializer(this.visitor);
+ /**
+ * If a constructor initializer expression is being serialized, the names of
+ * the constructor parameters. Otherwise `null`.
+ */
+ final Set<String> constructorParameterNames;
+
+ _ConstExprSerializer(this.visitor, this.constructorParameterNames);
+
+ @override
+ bool isConstructorParameterName(String name) {
+ return constructorParameterNames?.contains(name) ?? false;
+ }
@override
EntityRefBuilder serializeConstructorName(ConstructorName constructor) {
@@ -390,8 +401,10 @@ class _SummarizeAstVisitor extends SimpleAstVisitor {
/**
* Serialize the given [expression], creating an [UnlinkedConstBuilder].
*/
- UnlinkedConstBuilder serializeConstExpr(Expression expression) {
- _ConstExprSerializer serializer = new _ConstExprSerializer(this);
+ UnlinkedConstBuilder serializeConstExpr(Expression expression,
+ [Set<String> constructorParameterNames]) {
+ _ConstExprSerializer serializer =
+ new _ConstExprSerializer(this, constructorParameterNames);
serializer.serialize(expression);
return serializer.toBuilder();
}
@@ -695,6 +708,16 @@ class _SummarizeAstVisitor extends SimpleAstVisitor {
b.isConst = node.constKeyword != null;
b.isExternal = node.externalKeyword != null;
b.documentationComment = serializeDocumentation(node.documentationComment);
+ if (node.constKeyword != null) {
+ Set<String> constructorParameterNames =
+ node.parameters.parameters.map((p) => p.identifier.name).toSet();
+ b.constantInitializers = node.initializers
+ .map((ConstructorInitializer initializer) =>
+ serializeConstructorInitializer(initializer, (Expression expr) {
+ return serializeConstExpr(expr, constructorParameterNames);
+ }))
+ .toList();
+ }
executables.add(b);
}

Powered by Google App Engine
This is Rietveld 408576698