diff --git a/buffer/src/main/java/io/netty/buffer/AbstractByteBuf.java b/buffer/src/main/java/io/netty/buffer/AbstractByteBuf.java index f6872e9d84..4679caeee6 100644 --- a/buffer/src/main/java/io/netty/buffer/AbstractByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/AbstractByteBuf.java @@ -69,6 +69,11 @@ public abstract class AbstractByteBuf extends ByteBuf { this.maxCapacity = maxCapacity; } + @Override + public boolean isReadOnly() { + return false; + } + @Override public int maxCapacity() { return maxCapacity; diff --git a/buffer/src/main/java/io/netty/buffer/AbstractDerivedByteBuf.java b/buffer/src/main/java/io/netty/buffer/AbstractDerivedByteBuf.java index d4d31d5702..34e2b3a019 100644 --- a/buffer/src/main/java/io/netty/buffer/AbstractDerivedByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/AbstractDerivedByteBuf.java @@ -70,6 +70,11 @@ public abstract class AbstractDerivedByteBuf extends AbstractByteBuf { return unwrap().release(decrement); } + @Override + public boolean isReadOnly() { + return unwrap().isReadOnly(); + } + @Override public ByteBuffer internalNioBuffer(int index, int length) { return nioBuffer(index, length); diff --git a/buffer/src/main/java/io/netty/buffer/ByteBuf.java b/buffer/src/main/java/io/netty/buffer/ByteBuf.java index 42c1962aed..9c1f0198b4 100644 --- a/buffer/src/main/java/io/netty/buffer/ByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/ByteBuf.java @@ -295,6 +295,11 @@ public abstract class ByteBuf implements ReferenceCounted, Comparable { */ public abstract boolean isDirect(); + /** + * Returns {@code true} if and only if this buffer is read-only. + */ + public abstract boolean isReadOnly(); + /** * Returns the {@code readerIndex} of this buffer. */ diff --git a/buffer/src/main/java/io/netty/buffer/EmptyByteBuf.java b/buffer/src/main/java/io/netty/buffer/EmptyByteBuf.java index ca67db07f5..3c3b768b80 100644 --- a/buffer/src/main/java/io/netty/buffer/EmptyByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/EmptyByteBuf.java @@ -95,6 +95,11 @@ public final class EmptyByteBuf extends ByteBuf { return null; } + @Override + public boolean isReadOnly() { + return false; + } + @Override public boolean isDirect() { return true; diff --git a/buffer/src/main/java/io/netty/buffer/ReadOnlyByteBuf.java b/buffer/src/main/java/io/netty/buffer/ReadOnlyByteBuf.java index 893f2937a4..bb5617e0bf 100644 --- a/buffer/src/main/java/io/netty/buffer/ReadOnlyByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/ReadOnlyByteBuf.java @@ -50,6 +50,11 @@ public class ReadOnlyByteBuf extends AbstractDerivedByteBuf { setIndex(buffer.readerIndex(), buffer.writerIndex()); } + @Override + public boolean isReadOnly() { + return true; + } + @Override public boolean isWritable() { return false; diff --git a/buffer/src/main/java/io/netty/buffer/ReadOnlyByteBufferBuf.java b/buffer/src/main/java/io/netty/buffer/ReadOnlyByteBufferBuf.java index 913924e2d3..eb0abdf209 100644 --- a/buffer/src/main/java/io/netty/buffer/ReadOnlyByteBufferBuf.java +++ b/buffer/src/main/java/io/netty/buffer/ReadOnlyByteBufferBuf.java @@ -315,6 +315,11 @@ class ReadOnlyByteBufferBuf extends AbstractReferenceCountedByteBuf { return null; } + @Override + public boolean isReadOnly() { + return buffer.isReadOnly(); + } + @Override public boolean isDirect() { return buffer.isDirect(); diff --git a/buffer/src/main/java/io/netty/buffer/SwappedByteBuf.java b/buffer/src/main/java/io/netty/buffer/SwappedByteBuf.java index 0133a229fd..906436c4fa 100644 --- a/buffer/src/main/java/io/netty/buffer/SwappedByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/SwappedByteBuf.java @@ -92,6 +92,11 @@ public class SwappedByteBuf extends ByteBuf { return buf.maxCapacity(); } + @Override + public boolean isReadOnly() { + return buf.isReadOnly(); + } + @Override public boolean isDirect() { return buf.isDirect(); diff --git a/buffer/src/main/java/io/netty/buffer/WrappedByteBuf.java b/buffer/src/main/java/io/netty/buffer/WrappedByteBuf.java index 9ddcfd8bde..7ad3a56263 100644 --- a/buffer/src/main/java/io/netty/buffer/WrappedByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/WrappedByteBuf.java @@ -93,6 +93,11 @@ class WrappedByteBuf extends ByteBuf { return buf; } + @Override + public boolean isReadOnly() { + return buf.isReadOnly(); + } + @Override public final boolean isDirect() { return buf.isDirect(); diff --git a/codec-http2/src/test/java/io/netty/handler/codec/http2/Http2FrameRoundtripTest.java b/codec-http2/src/test/java/io/netty/handler/codec/http2/Http2FrameRoundtripTest.java index 29cdc162bf..c818cf969c 100644 --- a/codec-http2/src/test/java/io/netty/handler/codec/http2/Http2FrameRoundtripTest.java +++ b/codec-http2/src/test/java/io/netty/handler/codec/http2/Http2FrameRoundtripTest.java @@ -39,7 +39,6 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.CompositeByteBuf; import io.netty.buffer.EmptyByteBuf; -import io.netty.buffer.ReadOnlyByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; @@ -127,7 +126,7 @@ public class Http2FrameRoundtripTest { // Now verify that all of the reference counts are zero. for (ByteBuf buf : needReleasing) { int expectedFinalRefCount = 0; - if (buf instanceof ReadOnlyByteBuf || buf instanceof EmptyByteBuf) { + if (buf.isReadOnly() || buf instanceof EmptyByteBuf) { // Special case for when we're writing slices of the padding buffer. expectedFinalRefCount = 1; } diff --git a/codec/src/main/java/io/netty/handler/codec/ReplayingDecoderByteBuf.java b/codec/src/main/java/io/netty/handler/codec/ReplayingDecoderByteBuf.java index 99f8b04eab..2a7ef27a37 100644 --- a/codec/src/main/java/io/netty/handler/codec/ReplayingDecoderByteBuf.java +++ b/codec/src/main/java/io/netty/handler/codec/ReplayingDecoderByteBuf.java @@ -88,6 +88,11 @@ final class ReplayingDecoderByteBuf extends ByteBuf { return buffer.alloc(); } + @Override + public boolean isReadOnly() { + return false; + } + @Override public boolean isDirect() { return buffer.isDirect();