diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/GenericDetailsLoader.java b/platform/vcs-api/src/com/intellij/openapi/vcs/GenericDetailsLoader.java index 611b8fa67218..460358ef31f3 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/GenericDetailsLoader.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/GenericDetailsLoader.java @@ -15,74 +15,46 @@ */ package com.intellij.openapi.vcs; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.util.Comparing; import com.intellij.util.Consumer; import com.intellij.util.PairConsumer; -import org.jetbrains.annotations.CalledInAny; import org.jetbrains.annotations.CalledInAwt; import org.jetbrains.annotations.Nullable; -import java.util.concurrent.atomic.AtomicReference; - -/** - * @author irengrig - * Date: 6/29/11 - * Time: 11:38 PM - */ -public class GenericDetailsLoader implements Details, Disposable { +public class GenericDetailsLoader implements Details { private final Consumer myLoader; private final ValueConsumer myValueConsumer; - private final AtomicReference myCurrentlySelected; - private boolean myIsDisposed; + private Id myCurrentlySelected; /** * @param loader - is called in AWT. Should call {@link #take} with data when ready. Also in AWT * @param valueConsumer - is called in AWT. passive, just benefits from details loading */ - public GenericDetailsLoader(final Consumer loader, final PairConsumer valueConsumer) { + public GenericDetailsLoader(Consumer loader, PairConsumer valueConsumer) { myLoader = loader; myValueConsumer = new ValueConsumer<>(valueConsumer); - myCurrentlySelected = new AtomicReference<>(null); } @CalledInAwt - public void updateSelection(@Nullable final Id id, boolean force) { - ApplicationManager.getApplication().assertIsDispatchThread(); - if (myIsDisposed) return; + public void updateSelection(@Nullable Id id, boolean force) { myValueConsumer.setId(id); - final Id wasId = myCurrentlySelected.getAndSet(id); - if (force || ! Comparing.equal(id, wasId)) { + Id previousId = myCurrentlySelected; + myCurrentlySelected = id; + if (force || !Comparing.equal(id, previousId)) { myLoader.consume(id); } } - public void setCacheConsumer(final PairConsumer cacheConsumer) { - myValueConsumer.setCacheConsumer(cacheConsumer); + @CalledInAwt + @Override + public void take(Id id, Data data) { + myValueConsumer.consume(id, data); } @CalledInAwt @Override - public void take(Id id, Data data) throws AlreadyDisposedException { - ApplicationManager.getApplication().assertIsDispatchThread(); - if (myIsDisposed) throw new AlreadyDisposedException(); - myValueConsumer.consume(id, data); - } - - public void resetValueConsumer() { - myValueConsumer.reset(); - } - - @CalledInAny - @Override public Id getCurrentlySelected() { - return myCurrentlySelected.get(); - } - - @Override - public void dispose() { - myIsDisposed = true; + return myCurrentlySelected; } } diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/ValueConsumer.java b/platform/vcs-api/src/com/intellij/openapi/vcs/ValueConsumer.java index 83c9c9b67ad7..9c53d5cc8633 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/ValueConsumer.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/ValueConsumer.java @@ -17,42 +17,24 @@ package com.intellij.openapi.vcs; import com.intellij.util.PairConsumer; -/** - * @author irengrig - * Date: 6/29/11 - * Time: 11:51 PM - */ public class ValueConsumer { private Id myId; private Id mySetId; private final PairConsumer myConsumer; - private PairConsumer myCacheConsumer; protected ValueConsumer(PairConsumer consumer) { myConsumer = consumer; } - public void setCacheConsumer(PairConsumer cacheConsumer) { - myCacheConsumer = cacheConsumer; - } - - public void consume(final Id id, final Data data) { - if (id.equals(mySetId) || ! id.equals(myId)) { - if (myCacheConsumer != null) { - myCacheConsumer.consume(id, data); - } - return; + public void consume(Id id, Data data) { + if (!id.equals(mySetId) && id.equals(myId)) { + mySetId = id; + myConsumer.consume(id, data); } - mySetId = id; - myConsumer.consume(id, data); } public void setId(Id id) { myId = id; mySetId = null; } - - public void reset() { - mySetId = null; - } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/AbstractRefreshablePanel.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/AbstractRefreshablePanel.java index 615b07b1c906..1b9e4f7059d6 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/AbstractRefreshablePanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/AbstractRefreshablePanel.java @@ -22,7 +22,6 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.vcs.Details; import com.intellij.openapi.vcs.GenericDetailsLoader; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier; @@ -146,12 +145,7 @@ public abstract class AbstractRefreshablePanel implements RefreshablePanel