Index: pkg/compiler/lib/src/compiler.dart |
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart |
index a05bcc787bf33a19116350b43ed642eae33ea25e..5665810615b69edba2091eeb2c78519b4852cab7 100644 |
--- a/pkg/compiler/lib/src/compiler.dart |
+++ b/pkg/compiler/lib/src/compiler.dart |
@@ -1960,6 +1960,7 @@ class _CompilerResolution implements Resolution { |
final Map<Element, ResolutionImpact> _resolutionImpactCache = |
<Element, ResolutionImpact>{}; |
final Map<Element, WorldImpact> _worldImpactCache = <Element, WorldImpact>{}; |
+ bool retainCaches = false; |
_CompilerResolution(this.compiler); |
@@ -2003,6 +2004,11 @@ class _CompilerResolution implements Resolution { |
} |
@override |
+ bool hasResolutionImpact(Element element) { |
+ return _resolutionImpactCache.containsKey(element); |
+ } |
+ |
+ @override |
ResolutionImpact getResolutionImpact(Element element) { |
ResolutionImpact resolutionImpact = _resolutionImpactCache[element]; |
assert(invariant(element, resolutionImpact != null, |
@@ -2026,7 +2032,7 @@ class _CompilerResolution implements Resolution { |
assert(invariant(element, !element.isSynthesized || tree == null)); |
ResolutionImpact resolutionImpact = |
compiler.resolver.resolve(element); |
- if (compiler.serialization.supportSerialization) { |
+ if (compiler.serialization.supportSerialization || retainCaches) { |
// [ResolutionImpact] is currently only used by serialization. The |
// enqueuer uses the [WorldImpact] which is always cached. |
// TODO(johnniwinther): Align these use cases better; maybe only |
@@ -2049,6 +2055,7 @@ class _CompilerResolution implements Resolution { |
@override |
void uncacheWorldImpact(Element element) { |
+ if (retainCaches) return; |
if (compiler.serialization.isDeserialized(element)) return; |
assert(invariant(element, _worldImpactCache[element] != null, |
message: "WorldImpact not computed for $element.")); |
@@ -2058,6 +2065,7 @@ class _CompilerResolution implements Resolution { |
@override |
void emptyCache() { |
+ if (retainCaches) return; |
for (Element element in _worldImpactCache.keys) { |
_worldImpactCache[element] = const WorldImpact(); |
} |