Lines 11-17
Link Here
|
11 |
package org.eclipse.jdt.internal.core; |
11 |
package org.eclipse.jdt.internal.core; |
12 |
import java.text.NumberFormat; |
12 |
import java.text.NumberFormat; |
13 |
import java.util.HashMap; |
13 |
import java.util.HashMap; |
14 |
import java.util.Iterator; |
|
|
15 |
import java.util.Map; |
14 |
import java.util.Map; |
16 |
|
15 |
|
17 |
import org.eclipse.jdt.core.IJavaElement; |
16 |
import org.eclipse.jdt.core.IJavaElement; |
Lines 65-123
Link Here
|
65 |
this.childrenCache = new HashMap(DEFAULT_CHILDREN_SIZE); |
64 |
this.childrenCache = new HashMap(DEFAULT_CHILDREN_SIZE); |
66 |
} |
65 |
} |
67 |
|
66 |
|
68 |
/* |
|
|
69 |
* Ensures there is enough room in each ElementCache to put the given new elements. |
70 |
*/ |
71 |
protected void ensureSpaceLimit(Map newElements) { |
72 |
int rootSize = 0; |
73 |
IJavaElement project = null; |
74 |
int pkgSize = 0; |
75 |
IJavaElement root = null; |
76 |
int openableSize = 0; |
77 |
IJavaElement pkg = null; |
78 |
Iterator iterator = newElements.keySet().iterator(); |
79 |
while (iterator.hasNext()) { |
80 |
IJavaElement element = (IJavaElement) iterator.next(); |
81 |
switch (element.getElementType()) { |
82 |
case IJavaElement.PACKAGE_FRAGMENT_ROOT: |
83 |
project = element.getParent(); |
84 |
rootSize++; |
85 |
break; |
86 |
case IJavaElement.PACKAGE_FRAGMENT: |
87 |
root = element.getParent(); |
88 |
pkgSize++; |
89 |
break; |
90 |
case IJavaElement.COMPILATION_UNIT: |
91 |
case IJavaElement.CLASS_FILE: |
92 |
pkg = element.getParent(); |
93 |
openableSize++; |
94 |
break; |
95 |
} |
96 |
} |
97 |
this.rootCache.ensureSpaceLimit(rootSize, project); |
98 |
this.pkgCache.ensureSpaceLimit(pkgSize, root); |
99 |
this.openableCache.ensureSpaceLimit(openableSize, pkg); |
100 |
} |
101 |
|
102 |
/* |
103 |
* The given element is being removed. |
104 |
* Ensures that the corresponding children cache's space limit is reset if this was the parent |
105 |
* that increased the space limit. |
106 |
*/ |
107 |
protected void resetSpaceLimit(IJavaElement element) { |
108 |
switch (element.getElementType()) { |
109 |
case IJavaElement.JAVA_PROJECT: |
110 |
this.rootCache.resetSpaceLimit(DEFAULT_ROOT_SIZE, element); |
111 |
break; |
112 |
case IJavaElement.PACKAGE_FRAGMENT_ROOT: |
113 |
this.pkgCache.resetSpaceLimit(DEFAULT_PKG_SIZE, element); |
114 |
break; |
115 |
case IJavaElement.PACKAGE_FRAGMENT: |
116 |
this.openableCache.resetSpaceLimit(DEFAULT_OPENABLE_SIZE, element); |
117 |
break; |
118 |
} |
119 |
} |
120 |
|
121 |
/** |
67 |
/** |
122 |
* Returns the info for the element. |
68 |
* Returns the info for the element. |
123 |
*/ |
69 |
*/ |
Lines 171-182
Link Here
|
171 |
break; |
117 |
break; |
172 |
case IJavaElement.JAVA_PROJECT: |
118 |
case IJavaElement.JAVA_PROJECT: |
173 |
this.projectCache.put(element, info); |
119 |
this.projectCache.put(element, info); |
|
|
120 |
this.rootCache.ensureSpaceLimit(((JavaElementInfo) info).children.length, element); |
174 |
break; |
121 |
break; |
175 |
case IJavaElement.PACKAGE_FRAGMENT_ROOT: |
122 |
case IJavaElement.PACKAGE_FRAGMENT_ROOT: |
176 |
this.rootCache.put(element, info); |
123 |
this.rootCache.put(element, info); |
|
|
124 |
this.pkgCache.ensureSpaceLimit(((JavaElementInfo) info).children.length, element); |
177 |
break; |
125 |
break; |
178 |
case IJavaElement.PACKAGE_FRAGMENT: |
126 |
case IJavaElement.PACKAGE_FRAGMENT: |
179 |
this.pkgCache.put(element, info); |
127 |
this.pkgCache.put(element, info); |
|
|
128 |
this.openableCache.ensureSpaceLimit(((JavaElementInfo) info).children.length, element); |
180 |
break; |
129 |
break; |
181 |
case IJavaElement.COMPILATION_UNIT: |
130 |
case IJavaElement.COMPILATION_UNIT: |
182 |
case IJavaElement.CLASS_FILE: |
131 |
case IJavaElement.CLASS_FILE: |
Lines 196-207
Link Here
|
196 |
break; |
145 |
break; |
197 |
case IJavaElement.JAVA_PROJECT: |
146 |
case IJavaElement.JAVA_PROJECT: |
198 |
this.projectCache.remove(element); |
147 |
this.projectCache.remove(element); |
|
|
148 |
this.rootCache.resetSpaceLimit(DEFAULT_ROOT_SIZE, element); |
199 |
break; |
149 |
break; |
200 |
case IJavaElement.PACKAGE_FRAGMENT_ROOT: |
150 |
case IJavaElement.PACKAGE_FRAGMENT_ROOT: |
201 |
this.rootCache.remove(element); |
151 |
this.rootCache.remove(element); |
|
|
152 |
this.pkgCache.resetSpaceLimit(DEFAULT_PKG_SIZE, element); |
202 |
break; |
153 |
break; |
203 |
case IJavaElement.PACKAGE_FRAGMENT: |
154 |
case IJavaElement.PACKAGE_FRAGMENT: |
204 |
this.pkgCache.remove(element); |
155 |
this.pkgCache.remove(element); |
|
|
156 |
this.openableCache.resetSpaceLimit(DEFAULT_OPENABLE_SIZE, element); |
205 |
break; |
157 |
break; |
206 |
case IJavaElement.COMPILATION_UNIT: |
158 |
case IJavaElement.COMPILATION_UNIT: |
207 |
case IJavaElement.CLASS_FILE: |
159 |
case IJavaElement.CLASS_FILE: |