Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgkessler2010-01-26 21:57:34 +0000
committergkessler2010-01-26 21:57:34 +0000
commitcf2a8cf84e689e5f86d5dd7a55b197460020c435 (patch)
tree94df5f470a5e303228102f32581ce6923175fe2a
parentc544cde9bafbaa9cfc591497c7938662f674e8e2 (diff)
downloadwebtools.jsf-cf2a8cf84e689e5f86d5dd7a55b197460020c435.tar.gz
webtools.jsf-cf2a8cf84e689e5f86d5dd7a55b197460020c435.tar.xz
webtools.jsf-cf2a8cf84e689e5f86d5dd7a55b197460020c435.zip
[295409] ResourceException when MetaDataModelManager tries to set a property on a project that is closed, and
[296595] Memory leak - MetaDataModelManager
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java29
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/TaglibDomainMetaDataQueryHelper.java7
2 files changed, 22 insertions, 14 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java
index a2b9476f3..d4899baa8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java
@@ -68,10 +68,15 @@ public class MetaDataModelManager implements IResourceChangeListener{
*/
public synchronized static MetaDataModelManager getInstance(final IProject project){
MetaDataModelManager repo = null;
- repo = getFromSessionProperty(project);
- if (repo == null) {
- repo = new MetaDataModelManager(project);
- ResourcesPlugin.getWorkspace().addResourceChangeListener(repo, IResourceChangeEvent.PRE_CLOSE);
+ if (project != null && project.isAccessible()) {
+ repo = getFromSessionProperty(project);
+ if (repo == null) {
+ repo = new MetaDataModelManager(project);
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(
+ repo,
+ (IResourceChangeEvent.PRE_CLOSE
+ | IResourceChangeEvent.PRE_DELETE));
+ }
}
return repo;
}
@@ -94,7 +99,7 @@ public class MetaDataModelManager implements IResourceChangeListener{
}
} catch(CoreException ce) {
JSFCommonPlugin.log(IStatus.ERROR, "Internal Error: Unable to recover MetaDataModelManager for: "+project.getName(), ce); //$NON-NLS-1$
- }
+ }
return repo;
}
@@ -103,7 +108,7 @@ public class MetaDataModelManager implements IResourceChangeListener{
* IProject instance.
*/
private void setAsSessionProperty() {
- if (project != null) {//&& project.isAccessible()) {
+ if (project != null && project.isAccessible()) {
try {
project.setSessionProperty(KEY_SESSIONPROPERTY, this);
} catch(CoreException ce) {
@@ -116,7 +121,7 @@ public class MetaDataModelManager implements IResourceChangeListener{
* Releases a project's MetaDataModelManager instance by removing from project session property
* @param aProject
*/
- private void removeAsSessionProperty(IProject aProject){
+ private void removeAsSessionProperty(final IProject aProject){
try {
ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
aProject.setSessionProperty(KEY_SESSIONPROPERTY, null);
@@ -169,7 +174,7 @@ public class MetaDataModelManager implements IResourceChangeListener{
* org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org
* .eclipse.core.resources.IResourceChangeEvent)
*/
- public void resourceChanged(IResourceChangeEvent event) {
+ public void resourceChanged(final IResourceChangeEvent event) {
if (event.getType() == IResourceChangeEvent.PRE_CLOSE
|| event.getType() == IResourceChangeEvent.PRE_DELETE) {
// a project is closing - release and cleanup
@@ -190,7 +195,7 @@ public class MetaDataModelManager implements IResourceChangeListener{
}
}
- private MetaDataModel loadMetadata(ModelKeyDescriptor modelKeyDescriptor) {
+ private MetaDataModel loadMetadata(final ModelKeyDescriptor modelKeyDescriptor) {
if (!Thread.holdsLock(GLOBAL_INSTANCE_LOCK)) {
JSFCommonPlugin
.log(IStatus.ERROR,
@@ -198,7 +203,7 @@ public class MetaDataModelManager implements IResourceChangeListener{
return null;
}
- IDomainLoadingStrategy strategy = DomainLoadingStrategyRegistry
+ final IDomainLoadingStrategy strategy = DomainLoadingStrategyRegistry
.getInstance().getLoadingStrategy(
modelKeyDescriptor.getDomain());
;
@@ -209,7 +214,7 @@ public class MetaDataModelManager implements IResourceChangeListener{
"Internal Error: Unable to locate metadata loading strategy for: " + modelKeyDescriptor.toString()); //$NON-NLS-1$
return null;
}
- MetaDataModel model = StandardModelFactory.getInstance().createModel(
+ final MetaDataModel model = StandardModelFactory.getInstance().createModel(
modelKeyDescriptor, strategy);// new MetaDataModel(modelKey,
// strategy);
model.load();
@@ -218,7 +223,7 @@ public class MetaDataModelManager implements IResourceChangeListener{
return model;
}
- private void addModel(MetaDataModel model) {
+ private void addModel(final MetaDataModel model) {
if (model != null)
models.put(model);
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/TaglibDomainMetaDataQueryHelper.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/TaglibDomainMetaDataQueryHelper.java
index d44103e80..52dd507c9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/TaglibDomainMetaDataQueryHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/TaglibDomainMetaDataQueryHelper.java
@@ -192,8 +192,11 @@ public final class TaglibDomainMetaDataQueryHelper{
mgr = MetaDataModelManager.getInstance(modelContext.getProject());
else //temp(?)
mgr = MetaDataModelManager.getSharedInstance();
-
- return mgr.getModel(modelContext);
+
+ if (mgr != null)
+ return mgr.getModel(modelContext);
+
+ return null;
}
/**

Back to the top