| 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;
|
| + }
|
| }
|
|
|
| /**
|
|
|