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

Unified Diff: pkg/analyzer/lib/src/summary/summarize_elements.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_elements.dart
diff --git a/pkg/analyzer/lib/src/summary/summarize_elements.dart b/pkg/analyzer/lib/src/summary/summarize_elements.dart
index 92ea9a44179c19662ff5e392f8bd7ce2fe52b55f..2cdd111e3cd5c42f6c38da91458f9e5e64296484 100644
--- a/pkg/analyzer/lib/src/summary/summarize_elements.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_elements.dart
@@ -436,8 +436,10 @@ class _CompilationUnitSerializer {
/**
* 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();
}
@@ -506,10 +508,22 @@ class _CompilationUnitSerializer {
} else {
b.kind = UnlinkedExecutableKind.setter;
}
- } else if (executableElement is ConstructorElement) {
+ } else if (executableElement is ConstructorElementImpl) {
b.kind = UnlinkedExecutableKind.constructor;
b.isConst = executableElement.isConst;
b.isFactory = executableElement.isFactory;
+ if (executableElement.isConst &&
+ executableElement.constantInitializers != null) {
+ Set<String> constructorParameterNames =
+ executableElement.parameters.map((p) => p.name).toSet();
+ b.constantInitializers = executableElement.constantInitializers
+ .map((ConstructorInitializer initializer) =>
+ serializeConstructorInitializer(
+ initializer,
+ (expr) =>
+ serializeConstExpr(expr, constructorParameterNames)))
+ .toList();
+ }
} else {
b.kind = UnlinkedExecutableKind.functionOrMethod;
}
@@ -916,7 +930,13 @@ class _CompilationUnitSerializer {
class _ConstExprSerializer extends AbstractConstExprSerializer {
final _CompilationUnitSerializer serializer;
- _ConstExprSerializer(this.serializer);
+ /**
+ * If a constructor initializer expression is being serialized, the names of
+ * the constructor parameters. Otherwise `null`.
+ */
+ final Set<String> constructorParameterNames;
+
+ _ConstExprSerializer(this.serializer, this.constructorParameterNames);
@override
EntityRefBuilder serializeConstructorName(ConstructorName constructor) {
@@ -931,8 +951,7 @@ class _ConstExprSerializer extends AbstractConstExprSerializer {
name: constructor.name.name, prefixReference: typeId));
int refId = serializer.linkedReferences.length;
serializer.linkedReferences.add(new LinkedReferenceBuilder(
- kind: ReferenceKind.constructor,
- unit: typeLinkedRef.unit));
+ kind: ReferenceKind.constructor, unit: typeLinkedRef.unit));
return new EntityRefBuilder(
reference: refId, typeArguments: typeRef.typeArguments);
}
@@ -979,6 +998,11 @@ class _ConstExprSerializer extends AbstractConstExprSerializer {
DartType type = typeName != null ? typeName.type : DynamicTypeImpl.instance;
return serializer.serializeTypeRef(type, null);
}
+
+ @override
+ bool isConstructorParameterName(String name) {
+ return constructorParameterNames?.contains(name) ?? false;
+ }
}
/**

Powered by Google App Engine
This is Rietveld 408576698