Chromium Code Reviews| 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 b2175c53090a95f4f25ac2adb7729698fd04cc82..5084f28b8404e1f8e397d74fa90f1d0e75dd90a8 100644 | 
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart | 
| +++ b/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart | 
| @@ -1395,17 +1395,21 @@ class JavaScriptBackend extends Backend { | 
| /// Called when [:const Symbol(name):] is seen. | 
| void registerConstSymbol(String name, TreeElements elements) { | 
| + symbolsUsed.add(name); | 
| } | 
| /// Called when [:new Symbol(...):] is seen. | 
| void registerNewSymbol(TreeElements elements) { | 
| } | 
| - bool retainGetter(Element element) => isTreeShakingDisabled; | 
| + bool retainGetter(Element element) => isNeededForReflection(element); | 
| 
 
Johnni Winther
2013/08/07 10:47:34
Rename these three to shouldRetainX, isXRetained o
 
ahe
2013/08/07 14:03:17
Done.
 
 | 
| - bool retainSetter(Element element) => isTreeShakingDisabled; | 
| + bool retainSetter(Element element) => isNeededForReflection(element); | 
| - bool retainName(SourceString name) => mustPreserveNames; | 
| + bool retainName(SourceString name) { | 
| + if (name == const SourceString('')) return false; | 
| + return symbolsUsed.contains(name.slowToString()); | 
| + } | 
| bool get rememberLazies => isTreeShakingDisabled; | 
| @@ -1475,12 +1479,20 @@ class JavaScriptBackend extends Backend { | 
| if (metaTargets != null) metaTargetsUsed.addAll(metaTargets); | 
| } | 
| + bool rememberNameOf(Element element) { | 
| 
 
Johnni Winther
2013/08/07 10:47:34
Ditto.
 
ahe
2013/08/07 14:03:17
Done.
 
 | 
| + symbolsUsed.add(element.name.slowToString()); | 
| + if (element.isConstructor()) { | 
| + symbolsUsed.add(element.getEnclosingClass().name.slowToString()); | 
| + } | 
| + return true; | 
| + } | 
| + | 
| bool isNeededForReflection(Element element) { | 
| // TODO(ahe): Implement this. | 
| - if (!metaTargetsUsed.isEmpty) return true; | 
| + if (!metaTargetsUsed.isEmpty) return rememberNameOf(element); | 
| if (!targetsUsed.isEmpty) { | 
| for (Element e = element; e != null; e = e.enclosingElement) { | 
| - if (targetsUsed.contains(e)) return true; | 
| + if (targetsUsed.contains(e)) return rememberNameOf(element); | 
| } | 
| } | 
| return false; |