Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Unified Diff: dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java

Issue 9390011: Don't cache subtypes in elements. It causes a memory leak in the Editor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
diff --git a/dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java b/dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
index bcbaba3e7c4c925a358bb2fdfec18283154c6cff..742d7d4a82a5a79fb83fb2d0ed5355b9e6de74b8 100644
--- a/dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
+++ b/dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
@@ -28,7 +28,6 @@ class ClassElementImplementation extends AbstractElement implements ClassElement
private InterfaceType supertype;
private InterfaceType defaultClass;
private List<InterfaceType> interfaces;
- private Set<InterfaceType> immediateSubtypes = new HashSet<InterfaceType>();
private final boolean isInterface;
private final String nativeName;
private final Modifiers modifiers;
@@ -87,34 +86,6 @@ class ClassElementImplementation extends AbstractElement implements ClassElement
return getType().getArguments();
}
- private void computeTransitiveSubtypes(Set<InterfaceType> computedSubtypes) {
- if (computedSubtypes.addAll(immediateSubtypes)) {
- for (InterfaceType subtype : immediateSubtypes) {
- ClassElementImplementation classElement = (ClassElementImplementation) subtype.getElement();
- classElement.computeTransitiveSubtypes(computedSubtypes);
- }
- }
- }
-
- @Override
- public Set<InterfaceType> getSubtypes() {
- if (subtypes == null) {
- // add double-checked locking, with subtypes being declared volatile, for
- // thread-safety
- synchronized (this) {
- if (subtypes == null) {
- // Compute once, this will be an issue when we get to code
- // generation...
- HashSet<InterfaceType> newSubtypes = new HashSet<InterfaceType>();
- newSubtypes.add(getType());
- computeTransitiveSubtypes(newSubtypes);
- subtypes = newSubtypes;
- }
- }
- }
- return subtypes;
- }
-
@Override
public InterfaceType getSupertype() {
return supertype;
@@ -128,11 +99,6 @@ class ClassElementImplementation extends AbstractElement implements ClassElement
@Override
public void setSupertype(InterfaceType supertype) {
this.supertype = supertype;
- if (TypeKind.of(supertype) == TypeKind.INTERFACE) {
- ClassElementImplementation superClassElement =
- (ClassElementImplementation) supertype.getElement();
- superClassElement.immediateSubtypes.add(this.getType());
- }
}
void setDefaultClass(InterfaceType element) {
@@ -213,11 +179,6 @@ class ClassElementImplementation extends AbstractElement implements ClassElement
void addInterface(InterfaceType type) {
interfaces.add(type);
-
- if (TypeKind.of(type) == TypeKind.INTERFACE) {
- ClassElementImplementation interfaceElement = (ClassElementImplementation) type.getElement();
- interfaceElement.immediateSubtypes.add(this.getType());
- }
}
Element findElement(String name) {

Powered by Google App Engine
This is Rietveld 408576698