Chromium Code Reviews| Index: lib/src/compiler/js_field_storage.dart |
| diff --git a/lib/src/compiler/js_field_storage.dart b/lib/src/compiler/js_field_storage.dart |
| index 1a70229d68fd707575d61d240f87916191f5791f..e18cba693897bb9a49c2e663171d43f615315acc 100644 |
| --- a/lib/src/compiler/js_field_storage.dart |
| +++ b/lib/src/compiler/js_field_storage.dart |
| @@ -9,9 +9,11 @@ import 'extension_types.dart'; |
| /// We use a storage slot for fields that override or can be overridden by |
|
Jennifer Messerly
2016/04/20 21:16:40
Update this comment? And method name?
Harry Terkelsen
2016/04/20 23:33:28
Done.
|
| /// getter/setter pairs. |
| -HashSet<FieldElement> findFieldsNeedingStorage( |
| - Iterable<CompilationUnitElement> units, ExtensionTypeSet extensionTypes) { |
| - var overrides = new HashSet<FieldElement>(); |
| +void findFieldsNeedingStorage( |
|
Jennifer Messerly
2016/04/20 21:16:40
Oh wow!
So it looks like this old code was doing
Harry Terkelsen
2016/04/20 23:33:28
Done.
|
| + HashSet<FieldElement> overrides, |
| + HashSet<FieldElement> propertyOverrides, |
| + Iterable<CompilationUnitElement> units, |
| + ExtensionTypeSet extensionTypes) { |
| for (var unit in units) { |
| for (var cls in unit.types) { |
| var superclasses = getSuperclasses(cls); |
| @@ -20,20 +22,29 @@ HashSet<FieldElement> findFieldsNeedingStorage( |
| checkForPropertyOverride( |
| field, superclasses, overrides, extensionTypes); |
| } |
| + if (field.isSynthetic) { |
| + if (field.setter == null) { |
| + checkForPropertyOverride( |
| + field, superclasses, propertyOverrides, extensionTypes, |
| + checkGetter: false); |
| + } else if (field.getter == null) { |
| + checkForPropertyOverride( |
| + field, superclasses, propertyOverrides, extensionTypes, |
| + checkSetter: false); |
| + } |
| + } |
| } |
| } |
| } |
| - |
| - return overrides; |
| } |
| void checkForPropertyOverride( |
| FieldElement field, |
| List<ClassElement> superclasses, |
| HashSet<FieldElement> overrides, |
| - ExtensionTypeSet extensionTypes) { |
| - assert(!field.isSynthetic); |
| - |
| + ExtensionTypeSet extensionTypes, |
| + {bool checkGetter: true, |
| + bool checkSetter: true}) { |
| var library = field.library; |
| bool found = false; |
| @@ -49,9 +60,15 @@ void checkForPropertyOverride( |
| break; |
| } |
| - found = true; |
| - // Record that the super property is overridden. |
| - if (superprop.library == library) overrides.add(superprop); |
| + // TODO(vsm): Get rid of redundant check here. |
|
Jennifer Messerly
2016/04/20 21:16:40
+1 we should clean this up. Here's a refactor:
/
Harry Terkelsen
2016/04/20 23:33:28
Done.
|
| + if (checkGetter && getter != null && !getter.isAbstract || |
| + checkSetter && setter != null && !setter.isAbstract) { |
| + found = true; |
| + // TODO(vsm): Why do we need this? |
|
Jennifer Messerly
2016/04/20 21:16:40
this is not needed anymore. Please dead code remov
Harry Terkelsen
2016/04/20 23:33:28
Done.
|
| + // Record that the super property is overridden. |
| + if (checkGetter && checkSetter && superprop.library == library) |
| + overrides.add(superprop); |
| + } |
| } |
| } |