diff --git a/src/org/eclipse/imp/editor/ParserScheduler.java b/src/org/eclipse/imp/editor/ParserScheduler.java index 2558c7f4..59c2f696 100644 --- a/src/org/eclipse/imp/editor/ParserScheduler.java +++ b/src/org/eclipse/imp/editor/ParserScheduler.java @@ -176,4 +176,8 @@ public void notifyModelListeners(IProgressMonitor monitor) { RuntimePlugin.getInstance().writeInfoMsg("No AST; bypassing listener notification."); } } + + public void dispose() { + fParseController.dispose(); + } } diff --git a/src/org/eclipse/imp/editor/UniversalEditor.java b/src/org/eclipse/imp/editor/UniversalEditor.java index 6c03ee80..f0ef25a9 100644 --- a/src/org/eclipse/imp/editor/UniversalEditor.java +++ b/src/org/eclipse/imp/editor/UniversalEditor.java @@ -1363,8 +1363,9 @@ public void dispose() { if (fParserScheduler != null) { fParserScheduler.cancel(); // avoid unnecessary work after the editor is asked to close down + fParserScheduler.dispose(); + fParserScheduler= null; } - fParserScheduler= null; ISourceViewer ssv = getSourceViewer(); if (ssv != null && ssv instanceof StructuredSourceViewer) { diff --git a/src/org/eclipse/imp/parser/IParseController.java b/src/org/eclipse/imp/parser/IParseController.java index c59f0e0e..f7632432 100644 --- a/src/org/eclipse/imp/parser/IParseController.java +++ b/src/org/eclipse/imp/parser/IParseController.java @@ -117,4 +117,9 @@ public interface IParseController extends ILanguageService { * language */ IAnnotationTypeInfo getAnnotationTypeInfo(); + + /** + * Allows to free resources if the associated editor window gets closed + */ + void dispose(); } diff --git a/src/org/eclipse/imp/parser/ParseControllerBase.java b/src/org/eclipse/imp/parser/ParseControllerBase.java index d4819609..3efb4ca5 100644 --- a/src/org/eclipse/imp/parser/ParseControllerBase.java +++ b/src/org/eclipse/imp/parser/ParseControllerBase.java @@ -94,4 +94,8 @@ public Object getCurrentAst() { public IDocument getDocument() { return fDocument; } + + public void dispose() { + // Does nothing by default. + } }