From 470a2c32b79602eab2a83d0b71f6c6ea7e27b725 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 5 Nov 2014 15:26:45 +0100 Subject: [PATCH] =?UTF-8?q?simplify=20=E2=80=94=20use=20Promise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jetbrains/concurrency/Promise.java | 15 ++++++++++++++ .../jetbrains/debugger/DeclarativeScope.java | 20 ++++++++----------- .../org/jetbrains/debugger/ScriptManager.java | 3 ++- .../debugger/values/ValueManager.java | 6 ++++++ .../src/org/jetbrains/rpc/CommandSender.java | 2 -- .../org/jetbrains/rpc/CommandSenderBase.java | 5 ----- 6 files changed, 31 insertions(+), 20 deletions(-) diff --git a/platform/script-debugger/backend/src/org/jetbrains/concurrency/Promise.java b/platform/script-debugger/backend/src/org/jetbrains/concurrency/Promise.java index e977c5242ce4..af480f5c19b0 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/concurrency/Promise.java +++ b/platform/script-debugger/backend/src/org/jetbrains/concurrency/Promise.java @@ -132,4 +132,19 @@ public abstract class Promise { public abstract boolean isProcessed(); public abstract boolean isRejected(); + + public final void notify(@NotNull final AsyncResult result) { + done(new Consumer() { + @Override + public void consume(T t) { + result.setDone(t); + } + }); + rejected(new Consumer() { + @Override + public void consume(String error) { + result.reject(error); + } + }); + } } \ No newline at end of file diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/DeclarativeScope.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/DeclarativeScope.java index 753a86414a75..c8405c20d1e8 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/DeclarativeScope.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/DeclarativeScope.java @@ -21,7 +21,7 @@ public abstract class DeclarativeScope extend @Override public void load(@NotNull DeclarativeScope host, @NotNull AsyncResult> result) { - host.loadVariables(result); + host.loadVariables().notify(result); } }; @@ -41,27 +41,23 @@ public abstract class DeclarativeScope extend /** * You must call {@link #updateCacheStamp()} when data loaded */ - protected abstract void loadVariables(@NotNull AsyncResult> result); + @NotNull + protected abstract Promise> loadVariables(); protected final void updateCacheStamp() { cacheStamp = valueManager.getCacheStamp(); } - protected final void loadScopeObjectProperties(@NotNull ObjectValue value, @NotNull final AsyncResult> result) { - if (valueManager.rejectIfObsolete(result)) { - return; + @NotNull + protected final Promise> loadScopeObjectProperties(@NotNull ObjectValue value) { + if (valueManager.isObsolete()) { + return ValueManager.reject(); } - value.getProperties().done(new Consumer>() { + return value.getProperties().done(new Consumer>() { @Override public void consume(List variables) { updateCacheStamp(); - result.setDone(variables); - } - }).rejected(new Consumer() { - @Override - public void consume(String error) { - result.reject(error); } }); } diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java index 0a7797ead895..146b255a59b7 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java @@ -6,6 +6,7 @@ import com.intellij.util.CommonProcessors; import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.concurrency.Promise; import org.jetbrains.debugger.values.FunctionValue; public interface ScriptManager { @@ -22,7 +23,7 @@ public interface ScriptManager { * Demands that script text should be replaced with a new one if possible. VM may get resumed after this command */ @NotNull - AsyncResult setSourceOnRemote(@NotNull Script script, @NotNull CharSequence newSource, boolean preview); + Promise setSourceOnRemote(@NotNull Script script, @NotNull CharSequence newSource, boolean preview); void forEachScript(@NotNull Processor