Merge remote-tracking branch 'origin/master'

This commit is contained in:
anna
2012-03-11 13:02:41 +01:00
3 changed files with 19 additions and 14 deletions
@@ -128,7 +128,7 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
return component;
}
protected void disposeComponents() {
protected synchronized void disposeComponents() {
assert !myDisposeCompleted : "Already disposed!";
final List<Object> components = myComponentsRegistry.getRegisteredImplementations();
@@ -56,6 +56,7 @@ public class JarMemoryLoader {
JarMemoryLoader loader = new JarMemoryLoader();
for (int i = 0; i < size; i++) {
ZipEntry entry = zipStream.getNextEntry();
if (entry == null) return loader;
byte[] content = FileUtil.loadBytes(zipStream, (int)entry.getSize());
MyResource resource = new MyResource(entry.getName(), new URL(baseUrl, entry.getName()), content);
loader.myResources.put(entry.getName(), resource);
@@ -92,6 +92,22 @@ public class XmlTagImpl extends XmlElementImpl implements XmlTag {
private final int myHC = ourHC++;
private static final RecursionGuard ourGuard = RecursionManager.createGuard("xmlTag");
private static final Key<ParameterizedCachedValue<XmlTag[], XmlTagImpl>> SUBTAGS_KEY = Key.create("subtags");
private static final ParameterizedCachedValueProvider<XmlTag[],XmlTagImpl> CACHED_VALUE_PROVIDER =
new ParameterizedCachedValueProvider<XmlTag[], XmlTagImpl>() {
@Override
public CachedValueProvider.Result<XmlTag[]> compute(XmlTagImpl tag) {
final List<XmlTag> result = new ArrayList<XmlTag>();
tag.fillSubTags(result);
final int s = result.size();
XmlTag[] tags = s > 0 ? ContainerUtil.toArray(result, new XmlTag[s]) : EMPTY;
return CachedValueProvider.Result
.create(tags, PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, tag.getContainingFile());
}
};
@Override
public final int hashCode() {
return myHC;
@@ -606,19 +622,7 @@ public class XmlTagImpl extends XmlElementImpl implements XmlTag {
@NotNull
public XmlTag[] getSubTags() {
return CachedValuesManager.getManager(getProject()).getCachedValue(this, new CachedValueProvider<XmlTag[]>() {
@Override
public Result<XmlTag[]> compute() {
final List<XmlTag> result = new ArrayList<XmlTag>();
fillSubTags(result);
final int s = result.size();
XmlTag[] tags = s > 0 ? ContainerUtil.toArray(result, new XmlTag[s]) : EMPTY;
return Result.create(tags, PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, getContainingFile());
}
});
return CachedValuesManager.getManager(getProject()).getParameterizedCachedValue(this, SUBTAGS_KEY, CACHED_VALUE_PROVIDER, false, this);
}
protected void fillSubTags(final List<XmlTag> result) {