| Index: lib/src/codegen/js_field_storage.dart
|
| diff --git a/lib/src/codegen/js_field_storage.dart b/lib/src/codegen/js_field_storage.dart
|
| index 887714216a1a6ce4a4431681744d95690cbad0f2..773a54b152a7c1777bb7204127dc1be4fb96ddfa 100644
|
| --- a/lib/src/codegen/js_field_storage.dart
|
| +++ b/lib/src/codegen/js_field_storage.dart
|
| @@ -12,14 +12,16 @@ import '../info.dart' show LibraryUnit;
|
|
|
| /// We use a storage slot for fields that override or can be overridden by
|
| /// getter/setter pairs.
|
| -HashSet<FieldElement> findFieldsNeedingStorage(LibraryUnit library) {
|
| +HashSet<FieldElement> findFieldsNeedingStorage(
|
| + LibraryUnit library, HashSet<ClassElement> extensionTypes) {
|
| var overrides = new HashSet<FieldElement>();
|
| for (var unit in library.partsThenLibrary) {
|
| for (var cls in unit.element.types) {
|
| var superclasses = getSuperclasses(cls);
|
| for (var field in cls.fields) {
|
| if (!field.isSynthetic && !overrides.contains(field)) {
|
| - checkForPropertyOverride(field, superclasses, overrides);
|
| + checkForPropertyOverride(
|
| + field, superclasses, overrides, extensionTypes);
|
| }
|
| }
|
| }
|
| @@ -28,8 +30,11 @@ HashSet<FieldElement> findFieldsNeedingStorage(LibraryUnit library) {
|
| return overrides;
|
| }
|
|
|
| -void checkForPropertyOverride(FieldElement field,
|
| - List<ClassElement> superclasses, HashSet<FieldElement> overrides) {
|
| +void checkForPropertyOverride(
|
| + FieldElement field,
|
| + List<ClassElement> superclasses,
|
| + HashSet<FieldElement> overrides,
|
| + HashSet<ClassElement> extensionTypes) {
|
| assert(!field.isSynthetic);
|
|
|
| var library = field.library;
|
| @@ -41,7 +46,8 @@ void checkForPropertyOverride(FieldElement field,
|
| // If we find an abstract getter/setter pair, stop the search.
|
| var getter = superprop.getter;
|
| var setter = superprop.setter;
|
| - if ((getter == null || getter.isAbstract) &&
|
| + if (!extensionTypes.contains(superclass) &&
|
| + (getter == null || getter.isAbstract) &&
|
| (setter == null || setter.isAbstract)) {
|
| break;
|
| }
|
|
|