From 5d4a66c14f2ea99dc5fc6be8cd46bfb76fec5a33 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 16 May 2014 16:17:34 +0200 Subject: [PATCH] auto expressions spec: init duplication check --- .../src/org/jetbrains/io/NettyUtil.java | 3 ++- .../debugger/StandaloneVmHelper.java | 14 +++++++--- .../connection/BrowserConnection.java | 2 +- .../debugger/connection/VmConnection.java | 27 ++++++++++++------- .../jetbrains/jsonProtocol/OutMessage.java | 1 + .../org/jetbrains/jsonProtocol/Request.java | 3 +++ 6 files changed, 35 insertions(+), 15 deletions(-) diff --git a/platform/platform-impl/src/org/jetbrains/io/NettyUtil.java b/platform/platform-impl/src/org/jetbrains/io/NettyUtil.java index e9d1cdf0c67b..3302037a77e5 100644 --- a/platform/platform-impl/src/org/jetbrains/io/NettyUtil.java +++ b/platform/platform-impl/src/org/jetbrains/io/NettyUtil.java @@ -29,6 +29,7 @@ import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.channel.socket.oio.OioSocketChannel; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpServerCodec; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.ide.PooledThreadExecutor; @@ -109,7 +110,7 @@ public final class NettyUtil { } // applicable only in case of ClientBootstrap&OioClientSocketChannelFactory - public static void closeAndReleaseFactory(Channel channel) { + public static void closeAndReleaseFactory(@NotNull Channel channel) { EventLoop channelFactory = channel.eventLoop(); try { channel.close().awaitUninterruptibly(); diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java index e9eed257fd8f..37d0512813ef 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java @@ -11,7 +11,7 @@ import org.jetbrains.jsonProtocol.Request; import org.jetbrains.rpc.MessageHandler; import org.jetbrains.rpc.MessageWriter; -public final class StandaloneVmHelper extends MessageWriter { +public class StandaloneVmHelper extends MessageWriter { private volatile Channel channel; private final VmEx vm; @@ -61,10 +61,11 @@ public final class StandaloneVmHelper extends MessageWriter { return channel != null; } + @NotNull public ActionCallback detach() { final Channel currentChannel = channel; if (currentChannel == null) { - return new ActionCallback.Done(); + return ActionCallback.DONE; } vm.getCommandProcessor().cancelWaitingRequests(); @@ -73,8 +74,7 @@ public final class StandaloneVmHelper extends MessageWriter { if (disconnectRequest == null) { vm.getCommandProcessor().closed(); channel = null; - NettyUtil.closeAndReleaseFactory(currentChannel); - return ActionCallback.DONE; + return closeChannel(currentChannel); } ActionCallback callback = vm.getCommandProcessor().send(disconnectRequest); @@ -95,4 +95,10 @@ public final class StandaloneVmHelper extends MessageWriter { }); return subCallback; } + + @NotNull + protected ActionCallback closeChannel(@NotNull Channel channel) { + NettyUtil.closeAndReleaseFactory(channel); + return ActionCallback.DONE; + } } \ No newline at end of file diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/BrowserConnection.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/BrowserConnection.java index 1b859a38b3ca..71eb20571a35 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/BrowserConnection.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/BrowserConnection.java @@ -13,7 +13,7 @@ public interface BrowserConnection { void addListener(@NotNull SocketConnectionListener listener, @NotNull Disposable parentDisposable); - void executeOnStart(@NotNull Runnable Runnable); + void executeOnStart(@NotNull Runnable runnable); @Nullable WebBrowser getBrowser(); diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/VmConnection.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/VmConnection.java index ad0bb6f0ac9e..7a6c17169e7f 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/VmConnection.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/VmConnection.java @@ -23,7 +23,7 @@ public abstract class VmConnection implements Disposable, BrowserC protected volatile T vm; - private final ActionCallback started = new ActionCallback(); + private final ActionCallback opened = new ActionCallback(); private final AtomicBoolean closed = new AtomicBoolean(); @@ -41,9 +41,14 @@ public abstract class VmConnection implements Disposable, BrowserC dispatcher.addListener(listener, parentDisposable); } + @NotNull + public ActionCallback opened() { + return opened; + } + @Override public void executeOnStart(@NotNull Runnable runnable) { - started.doWhenDone(runnable); + opened.doWhenDone(runnable); } protected void setState(@NotNull ConnectionStatus status, @Nullable String message) { @@ -51,8 +56,12 @@ public abstract class VmConnection implements Disposable, BrowserC } protected void setState(@NotNull ConnectionStatus status, @Nullable String message, @Nullable HyperlinkListener messageLinkListener) { - ConnectionState oldState = state.getAndSet(new ConnectionState(status, message, messageLinkListener)); + ConnectionState newState = new ConnectionState(status, message, messageLinkListener); + ConnectionState oldState = state.getAndSet(newState); if (oldState == null || oldState.getStatus() != status) { + if (status == ConnectionStatus.CONNECTION_FAILED) { + opened.reject(newState.getMessage()); + } connectionDispatcher.getMulticaster().statusChanged(status); } } @@ -67,7 +76,7 @@ public abstract class VmConnection implements Disposable, BrowserC } protected void startProcessing() { - started.setDone(); + opened.setDone(); } public final void close(@Nullable String message, @NotNull ConnectionStatus status) { @@ -75,9 +84,8 @@ public abstract class VmConnection implements Disposable, BrowserC return; } - vm = null; - if (!started.isProcessed()) { - started.setRejected(); + if (!opened.isProcessed()) { + opened.setRejected(); } setState(status, message); Disposer.dispose(this, false); @@ -85,11 +93,12 @@ public abstract class VmConnection implements Disposable, BrowserC @Override public void dispose() { + vm = null; } public ActionCallback detachAndClose() { - if (!started.isProcessed()) { - started.setRejected(); + if (!opened.isProcessed()) { + opened.setRejected(); } Vm currentVm = vm; diff --git a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/OutMessage.java b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/OutMessage.java index 1c885e3ca5b3..be4cfccad15c 100644 --- a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/OutMessage.java +++ b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/OutMessage.java @@ -294,6 +294,7 @@ public abstract class OutMessage { } } + @NotNull @SuppressWarnings("UnusedDeclaration") public final CharSequence toJson() { return stringWriter.getBuffer(); diff --git a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/Request.java b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/Request.java index 923e53db69ae..f313c96d9873 100644 --- a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/Request.java +++ b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/Request.java @@ -1,6 +1,9 @@ package org.jetbrains.jsonProtocol; +import org.jetbrains.annotations.NotNull; + public interface Request { + @NotNull CharSequence toJson(); String getMethodName();