diff options
author | Vladimir Piskarev | 2015-01-27 14:48:10 +0000 |
---|---|---|
committer | Vladimir Piskarev | 2015-01-27 14:48:10 +0000 |
commit | 2e654732b41e6fa7e19ca09ff79760ac0722144d (patch) | |
tree | a8fec70088ce0d2560c5f125cf55c46036663f7e | |
parent | e4f59174dfbe2f7eb6a398658922a3aacb0e5aec (diff) | |
download | org.eclipse.handly-2e654732b41e6fa7e19ca09ff79760ac0722144d.tar.gz org.eclipse.handly-2e654732b41e6fa7e19ca09ff79760ac0722144d.tar.xz org.eclipse.handly-2e654732b41e6fa7e19ca09ff79760ac0722144d.zip |
Got rid of modelListeners2 in HandlyXtextDocument
-rw-r--r-- | org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextDocument.java | 101 |
1 files changed, 26 insertions, 75 deletions
diff --git a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextDocument.java b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextDocument.java index 3a0e6c9f..7052b8b7 100644 --- a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextDocument.java +++ b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextDocument.java @@ -13,10 +13,8 @@ package org.eclipse.handly.xtext.ui.editor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.List; -import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.ListenerList; @@ -45,7 +43,6 @@ import org.eclipse.xtext.ui.editor.DirtyStateEditorSupport; import org.eclipse.xtext.ui.editor.model.DocumentTokenSource; import org.eclipse.xtext.ui.editor.model.IXtextDocumentContentObserver.Processor; import org.eclipse.xtext.ui.editor.model.IXtextModelListener; -import org.eclipse.xtext.ui.editor.model.IXtextModelListenerExtension; import org.eclipse.xtext.ui.editor.model.XtextDocument; import org.eclipse.xtext.ui.editor.model.edit.ITextEditComposer; import org.eclipse.xtext.ui.editor.reconciler.CancelIndicatorBasedProgressMonitor; @@ -77,8 +74,6 @@ public class HandlyXtextDocument new BooleanThreadLocal(); private ITextEditComposer composer2; // unfortunately had to duplicate - private final List<IXtextModelListener> modelListeners2 = - new ArrayList<IXtextModelListener>(); // unfortunately had to duplicate private volatile NonExpiringSnapshot reconciledSnapshot; private final ListenerList reconcilingListeners = new ListenerList( ListenerList.IDENTITY); @@ -110,10 +105,7 @@ public class HandlyXtextDocument getAndResetPendingChange(); reconciledSnapshot = null; reconcilingListeners.clear(); - synchronized (modelListeners2) - { - modelListeners2.clear(); // fixes issue with holding XtextEditor from disposed document (see DefaultFoldingStructureProvider) - } + clearModelListeners(); // fixes issue with holding XtextEditor from disposed document (see DefaultFoldingStructureProvider) Job validationJob = getValidationJob(); if (validationJob != null) validationJob.cancel(); @@ -144,31 +136,6 @@ public class HandlyXtextDocument } @Override - public void addModelListener(IXtextModelListener listener) - { - Assert.isNotNull(listener); - synchronized (modelListeners2) - { - if (modelListeners2.contains(listener)) - return; - if (listener instanceof DirtyStateEditorSupport) - modelListeners2.add(0, listener); // DirtyStateEditorSupport must be the first ModelChangelistener to be called, since it updates the resource descriptions used by subsequent listeners - else - modelListeners2.add(listener); - } - } - - @Override - public void removeModelListener(IXtextModelListener listener) - { - Assert.isNotNull(listener); - synchronized (modelListeners2) - { - modelListeners2.remove(listener); - } - } - - @Override public boolean needsReconciling() { return !getSnapshot().isEqualTo(getReconciledSnapshot()); @@ -224,47 +191,6 @@ public class HandlyXtextDocument return runner.run(); } - @Override - protected void notifyModelListeners(XtextResource resource) - { - List<IXtextModelListener> modelListenersCopy; - synchronized (modelListeners2) - { - modelListenersCopy = - new ArrayList<IXtextModelListener>(modelListeners2); - } - for (IXtextModelListener listener : modelListenersCopy) - { - try - { - if (isOutdated()) - { - return; - } - if (listener instanceof IXtextModelListenerExtension) - { - ((IXtextModelListenerExtension)listener).modelChanged( - resource, new CancelIndicator() - { - public boolean isCanceled() - { - return isOutdated(); - } - }); - } - else - { - listener.modelChanged(resource); - } - } - catch (Exception e) - { - Activator.log(Activator.createErrorStatus( - "Error in IXtextModelListener", e)); //$NON-NLS-1$ - } - } - } - void setDirtyStateEditorSupport( DirtyStateEditorSupport dirtyStateEditorSupport) { @@ -374,6 +300,31 @@ public class HandlyXtextDocument reconcile(new InternalProcessor(resource)); } + private void clearModelListeners() + { + try + { + Field modelListenersField = + XtextDocument.class.getDeclaredField("modelListeners"); //$NON-NLS-1$ + modelListenersField.setAccessible(true); + @SuppressWarnings("unchecked") + List<IXtextModelListener> modelListeners = + (List<IXtextModelListener>)modelListenersField.get(this); + synchronized (modelListeners) + { + modelListeners.clear(); + } + } + catch (NoSuchFieldException e) // should not happen + { + throw new Error(e); + } + catch (IllegalAccessException e) // should not happen + { + throw new Error(e); + } + } + private void detachResource() { internalModify(new IUnitOfWork.Void<XtextResource>() |