Broken thread local cache removed from ModelManager.
diff --git a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/ModelManager.java b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/ModelManager.java
index d648952..2ac4d93 100644
--- a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/ModelManager.java
+++ b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/ModelManager.java
@@ -23,12 +23,8 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.rcptt.core.ContextType;
import org.eclipse.rcptt.core.model.IContext;
@@ -41,7 +37,6 @@
import org.eclipse.rcptt.core.model.ITestSuite;
import org.eclipse.rcptt.core.model.ModelException;
import org.eclipse.rcptt.core.model.search.ISearchScope;
-import org.eclipse.rcptt.core.nature.RcpttNature;
import org.eclipse.rcptt.core.scenario.GroupContext;
import org.eclipse.rcptt.core.scenario.TestSuiteItem;
import org.eclipse.rcptt.core.workspace.RcpttCore;
@@ -55,7 +50,6 @@
public class ModelManager {
private static ModelManager instance;
- private ThreadLocal<Map<IQ7Element, Object>> temporaryCache = new ThreadLocal<Map<IQ7Element, Object>>();
public ModelCache cache;// = new ModelCache();
public DeltaProcessingState deltaState = new DeltaProcessingState();
@@ -101,31 +95,10 @@
workspace.removeResourceChangeListener(this.deltaState);
}
- public Map<IQ7Element, Object> getTemporaryCache() {
- Map<IQ7Element, Object> result = this.temporaryCache.get();
- if (result == null) {
- result = new HashMap<IQ7Element, Object>();
- this.temporaryCache.set(result);
- }
- return result;
- }
-
public synchronized Object getInfo(IQ7Element element) {
- Map<IQ7Element, Object> tempCache = this.temporaryCache.get();
- if (tempCache != null) {
- Object result = tempCache.get(element);
- if (result != null) {
- return result;
- }
- }
return this.cache.getInfo(element);
}
- public boolean hasTemporaryCache() {
- // TODO Auto-generated method stub
- return false;
- }
-
protected synchronized void putInfos(IQ7Element openedElement,
Map<IQ7Element, Object> newElements) {
// remove children
@@ -169,10 +142,6 @@
return null;
}
- public void resetTemporaryCache() {
- this.temporaryCache.set(null);
- }
-
public static IQ7Element create(IFile file, IQ7Project project) {
if (file == null) {
return null;
@@ -225,13 +194,6 @@
}
public Object peekAtInfo(IQ7Element element) {
- Map<IQ7Element, Object> tempCache = this.temporaryCache.get();
- if (tempCache != null) {
- Object result = tempCache.get(element);
- if (result != null) {
- return result;
- }
- }
return this.cache.peekAtInfo(element);
}
diff --git a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/Q7Element.java b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/Q7Element.java
index e7fa2e6..f17dba4 100644
--- a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/Q7Element.java
+++ b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/Q7Element.java
@@ -11,6 +11,7 @@
package org.eclipse.rcptt.internal.core.model;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -69,9 +70,8 @@
protected synchronized Object openWhenClosed(Object info,
IProgressMonitor monitor) throws ModelException {
ModelManager manager = ModelManager.getModelManager();
- boolean hadTemporaryCache = manager.hasTemporaryCache();
try {
- Map<IQ7Element, Object> newElements = manager.getTemporaryCache();
+ Map<IQ7Element, Object> newElements = new HashMap<IQ7Element, Object>();
generateInfos(info, newElements, monitor);
if (info == null) {
info = newElements.get(this);
@@ -79,16 +79,14 @@
if (info == null) {
throw newNotPresentException();
}
- if (!hadTemporaryCache && !isInWorkingCopyMode()) {
+ if (!isInWorkingCopyMode()) {
// Do not put info if in working copy mode
manager.putInfos(this, newElements);
}
} finally {
- if (!hadTemporaryCache) {
- manager.resetTemporaryCache();
- }
}
- return info;
+ Object info2 = manager.getInfo(this);
+ return info2;
}
public void close() throws ModelException {
diff --git a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/ElementCache.java b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/ElementCache.java
index 16d60ae..0e93eaa 100644
--- a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/ElementCache.java
+++ b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/ElementCache.java
@@ -26,8 +26,9 @@
}
@Override
- protected boolean close(LRUCacheEntry entry) {
- Openable element = (Openable) entry._fKey;
+ protected boolean close(Object key, Object value) {
+ // System.out.println("ElementCache.close(" + key + ", " + value + ")");
+ Openable element = (Openable) key;
try {
if (!element.canBeRemovedFromCache()) {
return false;
@@ -64,4 +65,10 @@
}
}
+ @Override
+ public Object put(Object key, Object value) {
+ // System.out.println("ElementCache.put(" + key + ", " + value + ")");
+ return super.put(key, value);
+ }
+
}
diff --git a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/OverflowingLRUCache.java b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/OverflowingLRUCache.java
index 64253e0..b816f00 100644
--- a/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/OverflowingLRUCache.java
+++ b/core/org.eclipse.rcptt.core/src/org/eclipse/rcptt/internal/core/model/cache/OverflowingLRUCache.java
@@ -41,7 +41,7 @@
return newCache;
}
- protected abstract boolean close(LRUCacheEntry entry);
+ protected abstract boolean close(Object key, Object value);
@SuppressWarnings("rawtypes")
public Enumeration elements() {
@@ -170,7 +170,7 @@
fCurrentSpace -= entry._fSpace;
privateNotifyDeletionFromCache(entry);
} else {
- if (!close(entry))
+ if (!close(entry._fKey, entry._fValue))
return;
// buffer close will recursively call #privateRemoveEntry with
// external==true
@@ -213,9 +213,11 @@
if (entry != null) {
privateRemoveEntry(entry, false, false);
+// close(key, value);
+// return entry._fValue;
}
- // attempt to make new space
+ // attempt to make new spaceG
makeSpace(newSpace);
// add without worring about space, it will