| Index: dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
|
| diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
|
| index cc7b0fbe0937b13079ff7f17111525ae316fe565..b2175c53090a95f4f25ac2adb7729698fd04cc82 100644
|
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
|
| +++ b/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
|
| @@ -1462,9 +1462,14 @@ class JavaScriptBackend extends Backend {
|
| Set<Element> metaTargets) {
|
| if (symbols != null) symbolsUsed.addAll(symbols);
|
| if (targets != null) {
|
| - for (Element element in targets) {
|
| - // TODO(ahe): Implement finer granularity.
|
| - targetsUsed.add(element.getLibrary());
|
| + for (Element target in targets) {
|
| + if (target.isAbstractField()) {
|
| + AbstractFieldElement field = target;
|
| + targetsUsed.add(field.getter);
|
| + targetsUsed.add(field.setter);
|
| + } else {
|
| + targetsUsed.add(target);
|
| + }
|
| }
|
| }
|
| if (metaTargets != null) metaTargetsUsed.addAll(metaTargets);
|
| @@ -1473,7 +1478,11 @@ class JavaScriptBackend extends Backend {
|
| bool isNeededForReflection(Element element) {
|
| // TODO(ahe): Implement this.
|
| if (!metaTargetsUsed.isEmpty) return true;
|
| - if (targetsUsed.contains(element.getLibrary())) return true;
|
| + if (!targetsUsed.isEmpty) {
|
| + for (Element e = element; e != null; e = e.enclosingElement) {
|
| + if (targetsUsed.contains(e)) return true;
|
| + }
|
| + }
|
| return false;
|
| }
|
| }
|
|
|