| 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 fbe285782b2ba9e263fefd2d5cacf9f2f87a1a41..f9c64f6d1420db1be25253395bc0f1c416bd7ff2 100644
|
| --- a/pkg/analyzer/lib/src/summary/summarize_ast.dart
|
| +++ b/pkg/analyzer/lib/src/summary/summarize_ast.dart
|
| @@ -247,6 +247,12 @@ class _SummarizeAstVisitor extends SimpleAstVisitor {
|
| int numSlots = 0;
|
|
|
| /**
|
| + * A flag indicating whether a variable declaration is in the context of a
|
| + * field declaration.
|
| + */
|
| + bool inFieldContext = false;
|
| +
|
| + /**
|
| * Create a slot id for storing a propagated or inferred type.
|
| */
|
| int assignTypeSlot() => ++numSlots;
|
| @@ -621,7 +627,7 @@ class _SummarizeAstVisitor extends SimpleAstVisitor {
|
| b.nameOffset = variable.name.offset;
|
| b.type = serializeTypeName(variables.type);
|
| b.documentationComment = serializeDocumentation(documentationComment);
|
| - if (variable.isConst) {
|
| + if (variable.isConst || variable.isFinal && inFieldContext) {
|
| Expression initializer = variable.initializer;
|
| if (initializer != null) {
|
| b.constExpr = serializeConstExpr(initializer);
|
| @@ -724,8 +730,13 @@ class _SummarizeAstVisitor extends SimpleAstVisitor {
|
|
|
| @override
|
| void visitFieldDeclaration(FieldDeclaration node) {
|
| - serializeVariables(node.fields, node.staticKeyword != null,
|
| - node.documentationComment, true);
|
| + try {
|
| + inFieldContext = true;
|
| + serializeVariables(node.fields, node.staticKeyword != null,
|
| + node.documentationComment, true);
|
| + } finally {
|
| + inFieldContext = false;
|
| + }
|
| }
|
|
|
| @override
|
|
|