From e15e7399fe9faab790cace019a62850cf20afc9c Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Tue, 19 Feb 2013 14:42:27 +0100 Subject: [PATCH] Reverted a change in listener registration. --- .../openapi/editor/impl/DocumentImpl.java | 44 +++---------------- 1 file changed, 7 insertions(+), 37 deletions(-) diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java index d5ae6b40b324..7ea3e4882cf1 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java @@ -65,7 +65,7 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { private volatile long myModificationStamp; private final PropertyChangeSupport myPropertyChangeSupport = new PropertyChangeSupport(this); - private final Ref myCachedDocumentListeners = Ref.create(null); + private DocumentListener[] myCachedDocumentListeners; private final List myReadOnlyListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private int myCheckGuardedBlocks = 0; @@ -647,10 +647,7 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { @Override public void addDocumentListener(@NotNull DocumentListener listener) { - if (myCachedDocumentListeners != null) { - myCachedDocumentListeners.set(null); - } - + myCachedDocumentListeners = null; LOG.assertTrue(!myDocumentListeners.contains(listener), "Already registered: " + listener); boolean added = myDocumentListeners.add(listener); LOG.assertTrue(added, listener); @@ -667,38 +664,12 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { }); } - private static class DocumentListenerDisposable implements Disposable { - - private DocumentListener myListener; - private Ref myCachedDocumentListenersRef; - private List myDocumentListeners; - - public DocumentListenerDisposable(DocumentListener listener, Ref cachedDocumentListenersRef, List documentListeners) { - myListener = listener; - myCachedDocumentListenersRef = cachedDocumentListenersRef; - myDocumentListeners = documentListeners; - } - - @Override - public void dispose() { - doRemoveDocumentListener(myListener, myCachedDocumentListenersRef, myDocumentListeners); - } - } - @Override public void removeDocumentListener(@NotNull DocumentListener listener) { - doRemoveDocumentListener(listener, myCachedDocumentListeners, myDocumentListeners); - } - - private static void doRemoveDocumentListener(DocumentListener listener, - Ref cachedDocumentListenersRef, - List documentListeners) { - if (cachedDocumentListenersRef != null) { - cachedDocumentListenersRef.set(null); - } - boolean success = documentListeners.remove(listener); + myCachedDocumentListeners = null; + boolean success = myDocumentListeners.remove(listener); if (!success) { - LOG.error("Can't remove document listener (" + listener + "). Registered cachedDocumentListenersRef: " + documentListeners); + LOG.error("Can't remove document listener (" + listener + "). Registered listeners: " + myDocumentListeners); } } @@ -743,12 +714,11 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { @NotNull private DocumentListener[] getCachedListeners() { - DocumentListener[] cachedListeners = myCachedDocumentListeners.get(); + DocumentListener[] cachedListeners = myCachedDocumentListeners; if (cachedListeners == null) { DocumentListener[] listeners = myDocumentListeners.toArray(new DocumentListener[myDocumentListeners.size()]); Arrays.sort(listeners, PrioritizedDocumentListener.COMPARATOR); - cachedListeners = listeners; - myCachedDocumentListeners.set(cachedListeners); + myCachedDocumentListeners = cachedListeners = listeners; } return cachedListeners;