[95960] fix for memory leak, use hash map instead of hash set.
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelhandler/EmbeddedHTML.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelhandler/EmbeddedHTML.java
index ef7311c..0a9881e 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelhandler/EmbeddedHTML.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelhandler/EmbeddedHTML.java
@@ -11,7 +11,7 @@
package org.eclipse.wst.html.core.internal.modelhandler;
import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -28,6 +28,7 @@
import org.eclipse.wst.sse.core.internal.model.FactoryRegistry;
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory;
import org.eclipse.wst.sse.core.internal.util.Assert;
+import org.eclipse.wst.sse.ui.internal.IReleasable;
import org.eclipse.wst.xml.core.internal.document.DocumentTypeAdapter;
import org.eclipse.wst.xml.core.internal.document.ModelParserAdapter;
import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
@@ -36,7 +37,7 @@
public String ContentTypeID_EmbeddedHTML = "org.eclipse.wst.html.core.internal.contenttype.EmbeddedHTML"; //$NON-NLS-1$
// saved for removal later
- private HashSet fLocalFactories = new HashSet();
+ private HashMap fLocalFactories = new HashMap();
private List supportedMimeTypes;
@@ -99,7 +100,14 @@
if (!registry.contains(DocumentTypeAdapter.class)) {
factory = new HTMLDocumentTypeAdapterFactory();
registry.addFactory(factory);
- fLocalFactories.add(factory);
+
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=95960
+ // remove and release the old adapter factory
+ Object o = fLocalFactories.remove(DocumentTypeAdapter.class);
+ if(o != null && o instanceof IReleasable)
+ ((IReleasable)o).release();
+
+ fLocalFactories.put(DocumentTypeAdapter.class, factory);
}
if (!registry.contains(ModelParserAdapter.class)) {
factory = HTMLModelParserAdapterFactory.getInstance();
@@ -117,7 +125,7 @@
Assert.isNotNull(registry);
if (!fLocalFactories.isEmpty()) {
- Iterator it = fLocalFactories.iterator();
+ Iterator it = fLocalFactories.values().iterator();
while (it.hasNext()) {
INodeAdapterFactory af = (INodeAdapterFactory) it.next();
af.release();