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; |
} |
} |