diff --git a/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java b/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java index 2f19449fbd..b87e858a48 100644 --- a/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java +++ b/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java @@ -152,6 +152,11 @@ public class ChunkedWriteHandler } } + @Override + public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { + ctx.fireInboundBufferUpdated(); + } + @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { doFlush(ctx); diff --git a/handler/src/main/java/io/netty/handler/timeout/WriteTimeoutHandler.java b/handler/src/main/java/io/netty/handler/timeout/WriteTimeoutHandler.java index 12d3fac0d2..0be2d2522e 100644 --- a/handler/src/main/java/io/netty/handler/timeout/WriteTimeoutHandler.java +++ b/handler/src/main/java/io/netty/handler/timeout/WriteTimeoutHandler.java @@ -107,14 +107,12 @@ public class WriteTimeoutHandler extends ChannelOperationHandlerAdapter { @Override public void flush(final ChannelHandlerContext ctx, final ChannelPromise promise) throws Exception { scheduleTimeout(ctx, promise); - - super.flush(ctx, promise); + ctx.flush(promise); } @Override public void sendFile(ChannelHandlerContext ctx, FileRegion region, ChannelPromise promise) throws Exception { scheduleTimeout(ctx, promise); - super.sendFile(ctx, region, promise); } diff --git a/transport/src/main/java/io/netty/channel/ChannelDuplexHandler.java b/transport/src/main/java/io/netty/channel/ChannelDuplexHandler.java index 473ad5cde7..509c83ad6c 100644 --- a/transport/src/main/java/io/netty/channel/ChannelDuplexHandler.java +++ b/transport/src/main/java/io/netty/channel/ChannelDuplexHandler.java @@ -91,26 +91,6 @@ public abstract class ChannelDuplexHandler extends ChannelStateHandlerAdapter im ctx.read(); } - /** - * Calls {@link ChannelHandlerContext#flush(ChannelPromise)} to forward - * to the next {@link ChannelOperationHandler} in the {@link ChannelPipeline}. - * - * Sub-classes may override this method to change behavior. - * - * Be aware that if your class also implement {@link ChannelOutboundHandler} it need to {@code @Override} this - * method and provide some proper implementation. Fail to do so, will result in an {@link IllegalStateException}! - */ - @Override - public void flush(ChannelHandlerContext ctx, ChannelPromise future) - throws Exception { - if (this instanceof ChannelOutboundHandler) { - throw new IllegalStateException( - "flush(...) must be overridden by " + getClass().getName() + - ", which implements " + ChannelOutboundHandler.class.getSimpleName()); - } - ctx.flush(future); - } - /** * Calls {@link ChannelHandlerContext#sendFile(FileRegion, ChannelPromise)} to forward * to the next {@link ChannelOperationHandler} in the {@link ChannelPipeline}. diff --git a/transport/src/main/java/io/netty/channel/ChannelInitializer.java b/transport/src/main/java/io/netty/channel/ChannelInitializer.java index 46c913e0a8..d6516e670f 100644 --- a/transport/src/main/java/io/netty/channel/ChannelInitializer.java +++ b/transport/src/main/java/io/netty/channel/ChannelInitializer.java @@ -83,4 +83,9 @@ public abstract class ChannelInitializer extends ChannelState } } } + + @Override + public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { + ctx.fireInboundBufferUpdated(); + } } diff --git a/transport/src/main/java/io/netty/channel/ChannelOperationHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelOperationHandlerAdapter.java index a009f2123d..30dca27374 100644 --- a/transport/src/main/java/io/netty/channel/ChannelOperationHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelOperationHandlerAdapter.java @@ -84,26 +84,6 @@ public abstract class ChannelOperationHandlerAdapter extends ChannelHandlerAdapt ctx.read(); } - /** - * Calls {@link ChannelHandlerContext#flush(ChannelPromise)} to forward - * to the next {@link ChannelOperationHandler} in the {@link ChannelPipeline}. - * - * Sub-classes may override this method to change behavior. - * - * Be aware that if your class also implement {@link ChannelOutboundHandler} it need to {@code override} this - * method! - */ - @Override - public void flush(ChannelHandlerContext ctx, ChannelPromise promise) - throws Exception { - if (this instanceof ChannelOutboundHandler) { - throw new IllegalStateException( - "flush(...) must be overridden by " + getClass().getName() + - ", which implements " + ChannelOutboundHandler.class.getSimpleName()); - } - ctx.flush(promise); - } - /** * Calls {@link ChannelHandlerContext#sendFile(FileRegion, ChannelPromise)} to forward * to the next {@link ChannelOperationHandler} in the {@link ChannelPipeline}. diff --git a/transport/src/main/java/io/netty/channel/ChannelStateHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelStateHandlerAdapter.java index 32286460e6..d0ea42d077 100644 --- a/transport/src/main/java/io/netty/channel/ChannelStateHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelStateHandlerAdapter.java @@ -69,25 +69,6 @@ public abstract class ChannelStateHandlerAdapter extends ChannelHandlerAdapter i ctx.fireChannelInactive(); } - /** - * Calls {@link ChannelHandlerContext#fireInboundBufferUpdated()} to forward - * to the next {@link ChannelOperationHandler} in the {@link ChannelPipeline}. - * - * Sub-classes may override this method to change behavior. - * - * Be aware that if your class also implement {@link ChannelInboundHandler} it need to {@code @Override} this - * method and provide some proper implementation. Fail to do so, will result in an {@link IllegalStateException}! - */ - @Override - public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { - if (this instanceof ChannelInboundHandler) { - throw new IllegalStateException( - "inboundBufferUpdated(...) must be overridden by " + getClass().getName() + - ", which implements " + ChannelInboundHandler.class.getSimpleName()); - } - ctx.fireInboundBufferUpdated(); - } - @Override public void channelReadSuspended(ChannelHandlerContext ctx) throws Exception { ctx.fireChannelReadSuspended(); diff --git a/transport/src/test/java/io/netty/channel/AbstractEventLoopTest.java b/transport/src/test/java/io/netty/channel/AbstractEventLoopTest.java index b350d8988c..ddf9247ee6 100644 --- a/transport/src/test/java/io/netty/channel/AbstractEventLoopTest.java +++ b/transport/src/test/java/io/netty/channel/AbstractEventLoopTest.java @@ -60,11 +60,26 @@ public abstract class AbstractEventLoopTest { } private static final class TestChannelHandler extends ChannelDuplexHandler { + @Override + public void flush(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception { + ctx.flush(promise); + } + @Override + public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { + ctx.fireInboundBufferUpdated(); + } } private static final class TestChannelHandler2 extends ChannelDuplexHandler { + @Override + public void flush(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception { + ctx.flush(promise); + } + @Override + public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { + } } protected abstract EventLoopGroup newEventLoopGroup(); diff --git a/transport/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java b/transport/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java index 27a0606a77..f9e1eadb30 100644 --- a/transport/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java +++ b/transport/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java @@ -328,6 +328,14 @@ public class DefaultChannelPipelineTest { @Sharable private static class TestHandler extends ChannelDuplexHandler { - // Dummy + @Override + public void flush(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception { + ctx.flush(promise); + } + + @Override + public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { + ctx.fireInboundBufferUpdated(); + } } }