fix metadata reflection for fields

Change-Id: I25d69eea235b0824c49320212706e66945480034
Reviewed-on: https://dart-review.googlesource.com/6024
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
Commit-Queue: Jennifer Messerly <jmesserly@google.com>
This commit is contained in:
Jennifer Messerly 2017-09-15 00:08:17 +00:00 committed by commit-bot@chromium.org
parent 62045a4590
commit 67b9d3b9f9

View file

@ -2134,18 +2134,21 @@ class CodeGenerator extends Object
var staticFields = <JS.Property>[];
for (var field in classElem.fields) {
if (field.isSynthetic && !classElem.isEnum) continue;
// Only instance fields need to be saved for dynamic dispatch.
var isStatic = field.isStatic;
if (!options.emitMetadata && isStatic) {
continue;
}
var annotationNode = annotatedMembers[field] as VariableDeclaration;
var fieldNode = annotatedMembers[field] as VariableDeclaration;
var metadata = fieldNode != null
? (fieldNode.parent.parent as FieldDeclaration).metadata
: null;
assert(field.getter != null, '$field in $classElem has no getter???');
var memberName = _declareMemberName(field.getter);
var fieldSig = _emitFieldSignature(field.type,
metadata: annotationNode?.metadata, isFinal: field.isFinal);
metadata: metadata, isFinal: field.isFinal);
(isStatic ? staticFields : instanceFields)
.add(new JS.Property(memberName, fieldSig));
}