| Index: pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
|
| diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
|
| index ab310f8b156453223d43d862409e80c58c097f53..b1e12121f5343d75ee46a96fb596a620e15f0d31 100644
|
| --- a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
|
| +++ b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
|
| @@ -83,8 +83,8 @@ class FieldVisitor {
|
| 'Expected a ClassElement or a LibraryElement.');
|
| }
|
|
|
| - void visitField(FieldElement field, {ClassEntity holder}) {
|
| - assert(field.isDeclaration, failedAt(field));
|
| + void visitField(FieldEntity field, {ClassEntity holder}) {
|
| + assert(!(field is FieldElement && !field.isDeclaration), failedAt(field));
|
|
|
| bool isMixinNativeField = isNativeClass &&
|
| _elementEnvironment.isUnnamedMixinApplication(holder);
|
| @@ -149,24 +149,24 @@ class FieldVisitor {
|
| }
|
| }
|
|
|
| - bool fieldNeedsGetter(FieldElement field) {
|
| + bool fieldNeedsGetter(FieldEntity field) {
|
| assert(field.isField);
|
| if (fieldAccessNeverThrows(field)) return false;
|
| if (_mirrorsData.shouldRetainGetter(field)) return true;
|
| - return field.isClassMember &&
|
| + return field.enclosingClass != null &&
|
| _codegenWorldBuilder.hasInvokedGetter(field, _closedWorld);
|
| }
|
|
|
| - bool fieldNeedsSetter(FieldElement field) {
|
| + bool fieldNeedsSetter(FieldEntity field) {
|
| assert(field.isField);
|
| if (fieldAccessNeverThrows(field)) return false;
|
| - if (field.isFinal || field.isConst) return false;
|
| + if (!field.isAssignable) return false;
|
| if (_mirrorsData.shouldRetainSetter(field)) return true;
|
| - return field.isClassMember &&
|
| + return field.enclosingClass != null &&
|
| _codegenWorldBuilder.hasInvokedSetter(field, _closedWorld);
|
| }
|
|
|
| - static bool fieldAccessNeverThrows(VariableElement field) {
|
| + static bool fieldAccessNeverThrows(FieldEntity field) {
|
| return
|
| // We never access a field in a closure (a captured variable) without
|
| // knowing that it is there. Therefore we don't need to use a getter
|
| @@ -175,7 +175,7 @@ class FieldVisitor {
|
| field is ClosureFieldElement;
|
| }
|
|
|
| - bool canAvoidGeneratedCheckedSetter(VariableElement member) {
|
| + bool canAvoidGeneratedCheckedSetter(FieldElement member) {
|
| // We never generate accessors for top-level/static fields.
|
| if (!member.isInstanceMember) return true;
|
| ResolutionDartType type = member.type;
|
|
|