[95960] many more fixes, details in bug
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapter.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapter.java
index d787f9e..d2afb19 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapter.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapter.java
@@ -56,7 +56,8 @@
INodeNotifier getTarget();
+ /** @deprecated not used? use release() **/
public void release(Object key);
-
-
+
+ public void release();
}
\ No newline at end of file
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapterFactory.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapterFactory.java
index 61a13f1..f68cf14 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapterFactory.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapterFactory.java
@@ -56,7 +56,6 @@
if (node.getNodeType() == Node.DOCUMENT_NODE) {
result = getAdapterInstance(target);
ContentSettingsChangeSubject.getSubject().addListener(result);
-
}
}
@@ -66,6 +65,7 @@
public void release() {
if (pageDirectiveAdapterInstance != null) {
ContentSettingsChangeSubject.getSubject().removeListener(pageDirectiveAdapterInstance);
+ pageDirectiveAdapterInstance.release();
}
}
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapterImpl.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapterImpl.java
index aa4f1ed..2070bda 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapterImpl.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/document/PageDirectiveAdapterImpl.java
@@ -606,7 +606,24 @@
}
}
}
+ embeddedTypeHandler = null;
}
-
+ }
+
+ public void release() {
+ if (embeddedTypeHandler != null) {
+ if (embeddedFactoryRegistry != null) {
+ Iterator iterator = embeddedFactoryRegistry.iterator();
+ INodeAdapterFactory factory = null;
+ while (iterator.hasNext()) {
+ factory = (INodeAdapterFactory) iterator.next();
+ factory.release();
+ }
+ }
+ // pa_TODO: possibly need to release here...
+ // or "uninitializeFactoryRegistry"
+ // initializeFactoryRegistry was called from JSPModelLoader
+ embeddedTypeHandler = null;
+ }
}
}
\ No newline at end of file
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/domdocument/DOMDocumentForJSP.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/domdocument/DOMDocumentForJSP.java
index 6584c04..a3a2cff 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/domdocument/DOMDocumentForJSP.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/domdocument/DOMDocumentForJSP.java
@@ -52,8 +52,8 @@
if(oldAdapter != null) {
if(oldAdapter instanceof IReleasable) {
((IReleasable)oldAdapter).release();
- removeAdapter(oldAdapter);
}
+ removeAdapter(oldAdapter);
}
INodeAdapter result = null;
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPContentAssistProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPContentAssistProcessor.java
index 6e1aad3..886f9cd 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPContentAssistProcessor.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPContentAssistProcessor.java
@@ -65,6 +65,7 @@
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionContainer;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList;
import org.eclipse.wst.sse.core.internal.util.StringUtils;
+import org.eclipse.wst.sse.ui.internal.IReleasable;
import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;
import org.eclipse.wst.sse.ui.internal.contentassist.ContentAssistUtils;
import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal;
@@ -1086,10 +1087,8 @@
Object key = null;
while (it.hasNext()) {
key = it.next();
- // TODO (pa) need to make sure processors w/ release()
- // implement releasable
- if (map.get(key) instanceof AbstractContentAssistProcessor) {
- ((AbstractContentAssistProcessor) map.get(key)).release();
+ if (map.get(key) instanceof IReleasable ) {
+ ((IReleasable) map.get(key)).release();
}
}
}
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/NoRegionContentAssistProcessorForJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/NoRegionContentAssistProcessorForJSP.java
index 9d3f2df..c7c4155 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/NoRegionContentAssistProcessorForJSP.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/NoRegionContentAssistProcessorForJSP.java
@@ -40,30 +40,28 @@
protected void initPartitionToProcessorMap() {
super.initPartitionToProcessorMap();
IContentAssistProcessor jspContentAssistProcessor = new JSPContentAssistProcessor();
+
// JSP
- fPartitionToProcessorMap.put(IStructuredPartitionTypes.DEFAULT_PARTITION, jspContentAssistProcessor);
- fPartitionToProcessorMap.put(IXMLPartitions.XML_DEFAULT, jspContentAssistProcessor);
- fPartitionToProcessorMap.put(IHTMLPartitionTypes.HTML_DEFAULT, jspContentAssistProcessor);
- fPartitionToProcessorMap.put(IHTMLPartitionTypes.HTML_COMMENT, jspContentAssistProcessor);
- fPartitionToProcessorMap.put(IJSPPartitionTypes.JSP_DEFAULT, jspContentAssistProcessor);
- // JSP directives
- fPartitionToProcessorMap.put(IJSPPartitionTypes.JSP_DIRECTIVE, jspContentAssistProcessor);
- // JSP delimiters
- fPartitionToProcessorMap.put(IJSPPartitionTypes.JSP_CONTENT_DELIMITER, jspContentAssistProcessor);
- // JSP JavaScript
- fPartitionToProcessorMap.put(IJSPPartitionTypes.JSP_CONTENT_JAVASCRIPT, jspContentAssistProcessor);
+ addPartitionProcessor(IStructuredPartitionTypes.DEFAULT_PARTITION, jspContentAssistProcessor);
+ addPartitionProcessor(IXMLPartitions.XML_DEFAULT, jspContentAssistProcessor);
+ addPartitionProcessor(IHTMLPartitionTypes.HTML_DEFAULT, jspContentAssistProcessor);
+ addPartitionProcessor(IHTMLPartitionTypes.HTML_COMMENT, jspContentAssistProcessor);
+ addPartitionProcessor(IJSPPartitionTypes.JSP_DEFAULT, jspContentAssistProcessor);
+ addPartitionProcessor(IJSPPartitionTypes.JSP_DIRECTIVE, jspContentAssistProcessor);
+ addPartitionProcessor(IJSPPartitionTypes.JSP_CONTENT_DELIMITER, jspContentAssistProcessor);
+ addPartitionProcessor(IJSPPartitionTypes.JSP_CONTENT_JAVASCRIPT, jspContentAssistProcessor);
IContentAssistProcessor jspJavaContentAssistProcessor = new JSPJavaContentAssistProcessor();
- // JSP Java
- fPartitionToProcessorMap.put(IJSPPartitionTypes.JSP_CONTENT_JAVA, jspJavaContentAssistProcessor);
+ addPartitionProcessor(IJSPPartitionTypes.JSP_CONTENT_JAVA, jspJavaContentAssistProcessor);
+
}
protected void initNameToProcessorMap() {
super.initNameToProcessorMap();
JSPPropertyContentAssistProcessor jspPropertyCAP = new JSPPropertyContentAssistProcessor();
- fNameToProcessorMap.put(JSP11Namespace.ElementName.SETPROPERTY, jspPropertyCAP);
- fNameToProcessorMap.put(JSP11Namespace.ElementName.GETPROPERTY, jspPropertyCAP);
- fNameToProcessorMap.put(JSP11Namespace.ElementName.USEBEAN, new JSPUseBeanContentAssistProcessor());
+ addNameProcessor(JSP11Namespace.ElementName.SETPROPERTY, jspPropertyCAP);
+ addNameProcessor(JSP11Namespace.ElementName.GETPROPERTY, jspPropertyCAP);
+ addNameProcessor(JSP11Namespace.ElementName.USEBEAN, new JSPUseBeanContentAssistProcessor());
}
private void initJSPContexts() {
@@ -71,7 +69,9 @@
}
/**
- * Quick check to see if context (String) should map to JSPContentAssistProcessor.
+ * Quick check to see if context (String) should map to
+ * JSPContentAssistProcessor.
+ *
* @param context
* @return if it's a JSP Region (for which we need JSP Content assist)
*/
@@ -89,7 +89,7 @@
if (p == null) {
IStructuredDocumentRegion sdRegion = ((IStructuredDocument) viewer.getDocument()).getRegionAtCharacterOffset(documentOffset);
if (isJSPRegion(sdRegion))
- p = (IContentAssistProcessor) fPartitionToProcessorMap.get(IJSPPartitionTypes.JSP_CONTENT_JAVA);
+ p = getPartitionProcessor(IJSPPartitionTypes.JSP_CONTENT_JAVA);
}
return p;
}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeAdapterFactory.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeAdapterFactory.java
index 7b4e7e5..7241f28 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeAdapterFactory.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeAdapterFactory.java
@@ -58,10 +58,14 @@
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=85484
// remove old adapter, or else they may collect
- DocumentTypeAdapter oldAdapter = (DocumentTypeAdapter)notifier.getExistingAdapter(DocumentTypeAdapter.class);
- if(oldAdapter != null) {
- oldAdapter.release();
- notifier.removeAdapter(oldAdapter);
+// DocumentTypeAdapter oldAdapter = (DocumentTypeAdapter)notifier.getExistingAdapter(DocumentTypeAdapter.class);
+// if(oldAdapter != null) {
+// oldAdapter.release();
+// notifier.removeAdapter(oldAdapter);
+// }
+ if(fAdapter != null && fNotifier != null) {
+ fAdapter.release();
+ fNotifier.removeAdapter(fAdapter);
}
DocumentTypeAdapter adapter = null;
diff --git a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/contentassist/NoRegionContentAssistProcessorForHTML.java b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/contentassist/NoRegionContentAssistProcessorForHTML.java
index 3e63176..a63a6f2 100644
--- a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/contentassist/NoRegionContentAssistProcessorForHTML.java
+++ b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/contentassist/NoRegionContentAssistProcessorForHTML.java
@@ -23,15 +23,16 @@
*/
public class NoRegionContentAssistProcessorForHTML extends NoRegionContentAssistProcessor {
protected void initPartitionToProcessorMap() {
+
super.initPartitionToProcessorMap();
IContentAssistProcessor htmlProcessor = new HTMLContentAssistProcessor();
- fPartitionToProcessorMap.put(IHTMLPartitionTypes.HTML_DEFAULT, htmlProcessor);
- fPartitionToProcessorMap.put(IHTMLPartitionTypes.HTML_COMMENT, htmlProcessor);
+ addPartitionProcessor(IHTMLPartitionTypes.HTML_DEFAULT, htmlProcessor);
+ addPartitionProcessor(IHTMLPartitionTypes.HTML_COMMENT, htmlProcessor);
IContentAssistProcessor jsContentAssistProcessor = new JavaScriptContentAssistProcessor();
- fPartitionToProcessorMap.put(IHTMLPartitionTypes.SCRIPT, jsContentAssistProcessor);
+ addPartitionProcessor(IHTMLPartitionTypes.SCRIPT, jsContentAssistProcessor);
IContentAssistProcessor cssContentAssistProcessor = new CSSContentAssistProcessor();
- fPartitionToProcessorMap.put(ICSSPartitionTypes.STYLE, cssContentAssistProcessor);
+ addPartitionProcessor(ICSSPartitionTypes.STYLE, cssContentAssistProcessor);
}
}
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/AbstractStructuredModel.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/AbstractStructuredModel.java
index b1b5643..8743104 100644
--- a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/AbstractStructuredModel.java
+++ b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/AbstractStructuredModel.java
@@ -239,6 +239,8 @@
// get it, in order to disconnect from it.)
if (fStructuredDocument != null) {
fStructuredDocument.removeDocumentChangedListener(fDirtyStateWatcher);
+ fStructuredDocument.removeDocumentAboutToChangeListener(fDocumentToModelNotifier);
+ fStructuredDocument.removeDocumentChangedListener(fDocumentToModelNotifier);
}
}
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/provisional/StructuredTextViewerConfiguration.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/provisional/StructuredTextViewerConfiguration.java
index de1e224..8d7086d 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/provisional/StructuredTextViewerConfiguration.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/provisional/StructuredTextViewerConfiguration.java
@@ -372,6 +372,8 @@
// save for reinit and release
IContentAssistProcessor previousProcessor = ca.getContentAssistProcessor(partitionType);
if (previousProcessor != null) {
+ if(previousProcessor instanceof IReleasable)
+ ((IReleasable)previousProcessor).release();
fContentAssistProcessors.remove(previousProcessor);
}
fContentAssistProcessors.add(newProcessor);
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/reconcile/StructuredRegionProcessor.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/reconcile/StructuredRegionProcessor.java
index 3be09fb..4ad91b2 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/reconcile/StructuredRegionProcessor.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/reconcile/StructuredRegionProcessor.java
@@ -25,8 +25,6 @@
import org.eclipse.jface.text.reconciler.DirtyRegion;
import org.eclipse.jface.text.reconciler.IReconcilingStrategy;
import org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
import org.eclipse.wst.sse.core.internal.model.ModelLifecycleEvent;
import org.eclipse.wst.sse.core.internal.provisional.IModelLifecycleListener;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
@@ -73,19 +71,6 @@
}
}
- /**
- * Cancels any running reconcile operations via progress monitor. Ensures
- * that strategies are released on close of the editor.
- */
- private class SourceWidgetDisposeListener implements DisposeListener {
-
- public void widgetDisposed(DisposeEvent e) {
- handleWidgetDisposed();
- }
- }
-
- /** to cancel any long running reconciles if someone closes the editor */
- private SourceWidgetDisposeListener fDisposeListener = null;
/** for initital reconcile when document is opened */
private SourceTextInputListener fTextInputListener = null;
@@ -298,24 +283,6 @@
}
}
- public void handleWidgetDisposed() {
-
- getLocalProgressMonitor().setCanceled(true);
-
- List strategyTypes = getStrategyTypes();
- if (!strategyTypes.isEmpty()) {
- Iterator it = strategyTypes.iterator();
- IReconcilingStrategy strategy = null;
- while (it.hasNext()) {
- strategy = getReconcilingStrategy((String) it.next());
- if (strategy instanceof IReleasable) {
- ((IReleasable) strategy).release();
- strategy = null;
- }
- }
- }
- }
-
/**
* @param document
*/
@@ -340,9 +307,7 @@
public void install(ITextViewer textViewer) {
super.install(textViewer);
- fDisposeListener = new SourceWidgetDisposeListener();
fTextInputListener = new SourceTextInputListener();
- textViewer.getTextWidget().addDisposeListener(fDisposeListener);
textViewer.addTextInputListener(fTextInputListener);
}
@@ -452,7 +417,8 @@
// unhook old lifecycle listner
unhookModelLifecycleListener(currentDoc);
// add new lifecycle listener
- hookUpModelLifecycleListener(newDocument);
+ if(newDocument != null)
+ hookUpModelLifecycleListener(newDocument);
// unhook old document listener
if (currentDoc != null && currentDoc instanceof IStructuredDocument)
@@ -516,8 +482,32 @@
*/
public void uninstall() {
if (isInstalled()) {
+
+ getLocalProgressMonitor().setCanceled(true);
+
+ // removes model listeners
+ unhookModelLifecycleListener(getDocument());
+
+ // removes document listeners
+ reconcilerDocumentChanged(null);
+
+ // removes widget listener
getTextViewer().removeTextInputListener(fTextInputListener);
- getTextViewer().getTextWidget().removeDisposeListener(fDisposeListener);
+ //getTextViewer().getTextWidget().removeDisposeListener(fDisposeListener);
+
+ // release all strategies
+ List strategyTypes = getStrategyTypes();
+ if (!strategyTypes.isEmpty()) {
+ Iterator it = strategyTypes.iterator();
+ IReconcilingStrategy strategy = null;
+ while (it.hasNext()) {
+ strategy = getReconcilingStrategy((String) it.next());
+ if (strategy instanceof IReleasable) {
+ ((IReleasable) strategy).release();
+ strategy = null;
+ }
+ }
+ }
}
super.uninstall();
}
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractContentAssistProcessor.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractContentAssistProcessor.java
index ddfb066..97cde65 100644
--- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractContentAssistProcessor.java
+++ b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractContentAssistProcessor.java
@@ -116,7 +116,6 @@
private final boolean showValues = true;
public AbstractContentAssistProcessor() {
- super();
init();
}
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/NoRegionContentAssistProcessor.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/NoRegionContentAssistProcessor.java
index 655a59c..5d31911 100644
--- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/NoRegionContentAssistProcessor.java
+++ b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/NoRegionContentAssistProcessor.java
@@ -49,8 +49,8 @@
private final ICompletionProposal[] EMPTY_PROPOSAL_SET = new ICompletionProposal[0];
protected String fErrorMessage = null;
- protected HashMap fNameToProcessorMap = null;
- protected HashMap fPartitionToProcessorMap = null;
+ private HashMap fNameToProcessorMap = null;
+ private HashMap fPartitionToProcessorMap = null;
protected IResource fResource = null;
public NoRegionContentAssistProcessor() {
@@ -62,6 +62,33 @@
}
+ protected void addPartitionProcessor(String key, IContentAssistProcessor processor) {
+ addProcessor(fPartitionToProcessorMap, key, processor);
+ }
+ protected void addNameProcessor(String key, IContentAssistProcessor processor) {
+ addProcessor(fNameToProcessorMap, key, processor);
+ }
+ protected IContentAssistProcessor getPartitionProcessor(String key) {
+ return (IContentAssistProcessor)fPartitionToProcessorMap.get(key);
+ }
+
+ /**
+ * Ensures release if it's a duplicate partition type.
+ *
+ * @param map
+ * @param key
+ * @param processor
+ */
+ private void addProcessor(HashMap map, String key, IContentAssistProcessor processor) {
+ Object o = map.remove(key);
+ if(o != null) {
+ if(o instanceof IReleasable) {
+ ((IReleasable)o).release();
+ }
+ }
+ map.put(key, processor);
+ }
+
/**
* Figures out what the correct ICompletionProposalProcessor is and
* computesCompletionProposals on that.
@@ -210,7 +237,7 @@
*/
protected void initPartitionToProcessorMap() {
XMLContentAssistProcessor xmlProcessor = new XMLContentAssistProcessor();
- fPartitionToProcessorMap.put(IXMLPartitions.XML_DEFAULT, xmlProcessor);
+ addProcessor(fPartitionToProcessorMap, IXMLPartitions.XML_DEFAULT, xmlProcessor);
}
public void release() {
@@ -224,8 +251,9 @@
Object key = null;
while (it.hasNext()) {
key = it.next();
- if (map.get(key) instanceof IReleasable)
+ if (map.get(key) instanceof IReleasable) {
((IReleasable) map.get(key)).release();
+ }
}
map.clear();
map = null;