Index: src/org/netbeans/modules/j2ee/metadata/model/api/support/annotation/AnnotationModelHelper.java =================================================================== RCS file: /cvs/j2ee/metadata/support/src/org/netbeans/modules/j2ee/metadata/model/api/support/annotation/AnnotationModelHelper.java,v retrieving revision 1.3 diff -u -r1.3 AnnotationModelHelper.java --- src/org/netbeans/modules/j2ee/metadata/model/api/support/annotation/AnnotationModelHelper.java 20 Apr 2007 08:48:14 -0000 1.3 +++ src/org/netbeans/modules/j2ee/metadata/model/api/support/annotation/AnnotationModelHelper.java 26 Apr 2007 08:42:50 -0000 @@ -155,7 +155,7 @@ } public PersistentObjectManager createPersistentObjectManager(ObjectProvider provider) { - PersistentObjectManager manager = new PersistentObjectManager(this, provider); + PersistentObjectManager manager = PersistentObjectManager.newInstance(this, provider); registerPersistentObjectManager(manager); return manager; } Index: src/org/netbeans/modules/j2ee/metadata/model/api/support/annotation/PersistentObjectManager.java =================================================================== RCS file: /cvs/j2ee/metadata/support/src/org/netbeans/modules/j2ee/metadata/model/api/support/annotation/PersistentObjectManager.java,v retrieving revision 1.6 diff -u -r1.6 PersistentObjectManager.java --- src/org/netbeans/modules/j2ee/metadata/model/api/support/annotation/PersistentObjectManager.java 23 Apr 2007 09:38:41 -0000 1.6 +++ src/org/netbeans/modules/j2ee/metadata/model/api/support/annotation/PersistentObjectManager.java 26 Apr 2007 08:42:50 -0000 @@ -33,9 +33,10 @@ * * @author Andrei Badea */ -public class PersistentObjectManager { +public class PersistentObjectManager implements JavaContextListener { private static final Logger LOGGER = Logger.getLogger(PersistentObjectManager.class.getName()); + private static final boolean VOLATILE = Boolean.getBoolean("netbeans.metadata.model.volatile"); // NOI18N private final AnnotationModelHelper helper; private final ObjectProvider provider; @@ -43,7 +44,16 @@ private boolean initialized = false; - PersistentObjectManager(AnnotationModelHelper helper, ObjectProvider provider) { + static PersistentObjectManager newInstance(AnnotationModelHelper helper, ObjectProvider provider) { + PersistentObjectManager newInstance = new PersistentObjectManager(helper, provider); + if (VOLATILE) { + LOGGER.log(Level.FINE, "creating a volatile manager"); // NOI18N + helper.addJavaContextListener(newInstance); + } + return newInstance; + } + + private PersistentObjectManager(AnnotationModelHelper helper, ObjectProvider provider) { this.helper = helper; this.provider = provider; } @@ -63,6 +73,11 @@ } } + private void deinitialize() { + initialized = false; + objects.clear(); + } + public Collection getObjects() { ensureInitialized(); Collection values = objects.values(); @@ -71,6 +86,10 @@ } void typesAdded(Iterable> typeHandles) { + // XXX assert not in AMH java context + if (!initialized) { + return; + } LOGGER.log(Level.FINE, "typesAdded called with {0}", typeHandles); // NOI18N List types = new ArrayList(); for (ElementHandle typeHandle : typeHandles) { @@ -87,6 +106,10 @@ } void typesRemoved(Iterable> typeHandles) { + // XXX assert not in AMH java context + if (!initialized) { + return; + } LOGGER.log(Level.FINE, "typesRemoved called with {0}", typeHandles); // NOI18N for (ElementHandle typeHandle : typeHandles) { T object = objects.remove(typeHandle); @@ -97,6 +120,10 @@ } void typesChanged(Iterable> typeHandles) { + // XXX assert not in AMH java context + if (!initialized) { + return; + } LOGGER.log(Level.FINE, "typesChanged called with {0}", typeHandles); // NOI18N for (ElementHandle typeHandle : typeHandles) { T object = objects.get(typeHandle); @@ -122,8 +149,14 @@ } void rootsChanged() { + // XXX assert not in AMH java context LOGGER.log(Level.FINE, "rootsChanged called"); // NOI18N - initialized = false; - objects.clear(); + } + + public void javaContextLeft() { + if (VOLATILE) { + LOGGER.log(Level.FINE, "discarding"); // NOI18N + deinitialize(); + } } }