package org.xtest.ui.editor; import java.util.List; import org.eclipse.xtext.resource.XtextResource; import org.eclipse.xtext.ui.editor.model.DocumentTokenSource; import org.eclipse.xtext.ui.editor.model.XtextDocument; import org.eclipse.xtext.ui.editor.model.edit.ITextEditComposer; import com.google.common.collect.Lists; import com.google.common.eventbus.EventBus; import com.google.inject.Inject; /** * Custom Xtext Document that allows objects to ask to be unregistered from the event bus when the * document is disposed. * * @author Michael Barry */ public class XtestDocument extends XtextDocument { @Inject private EventBus bus; private XtextResource resource; private final List<Object> toUnregister = Lists.newArrayList(); @Inject public XtestDocument(DocumentTokenSource tokenSource, ITextEditComposer composer) { super(tokenSource, composer); } @Override public void disposeInput() { super.disposeInput(); for (Object obj : toUnregister) { bus.unregister(obj); } } public XtextResource getResource() { return resource; } @Override public void setInput(XtextResource resource) { this.resource = resource; super.setInput(resource); } /** * Adds the object to the list of objects that will be unregistered from the event bus on * dispose * * @param object * The object to unregister on dispose */ public void unregisterOnDispose(Object object) { toUnregister.add(object); } }