This is an automated email from the ASF dual-hosted git repository.

tabish pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-protonj2.git


The following commit(s) were added to refs/heads/main by this push:
     new 49d9f16d PROTON-2637 Streamline decoder types lookups of the decoder 
instance
49d9f16d is described below

commit 49d9f16d67b487ce2f6475c1987d312dd7280561
Author: Timothy Bish <[email protected]>
AuthorDate: Fri Oct 28 15:12:04 2022 -0400

    PROTON-2637 Streamline decoder types lookups of the decoder instance
    
    Reduce number of repeated calls to get the decoder instance when we know
    it isn't changing.
---
 .../primitives/AbstractListTypeDecoder.java        |  8 ++-
 .../primitives/AbstractMapTypeDecoder.java         | 14 +++--
 .../decoders/transport/AttachTypeDecoder.java      | 70 +++++++++++-----------
 .../codec/decoders/transport/BeginTypeDecoder.java | 46 +++++++-------
 .../decoders/transport/DetachTypeDecoder.java      | 26 ++++----
 .../decoders/transport/DispositionTypeDecoder.java | 38 ++++++------
 .../codec/decoders/transport/EndTypeDecoder.java   | 28 ++-------
 .../transport/ErrorConditionTypeDecoder.java       | 26 ++++----
 .../codec/decoders/transport/FlowTypeDecoder.java  | 58 +++++++++---------
 .../codec/decoders/transport/OpenTypeDecoder.java  | 54 +++++++++--------
 .../decoders/transport/TransferTypeDecoder.java    | 58 +++++++++---------
 11 files changed, 218 insertions(+), 208 deletions(-)

diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/AbstractListTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/AbstractListTypeDecoder.java
index 413afe92..2c0d9860 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/AbstractListTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/AbstractListTypeDecoder.java
@@ -23,7 +23,9 @@ import java.util.List;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.decoders.AbstractPrimitiveTypeDecoder;
 
@@ -53,8 +55,9 @@ public abstract class AbstractListTypeDecoder extends 
AbstractPrimitiveTypeDecod
         }
 
         final List<Object> list = new ArrayList<>(count);
+        final Decoder decoder = state.getDecoder();
         for (int i = 0; i < count; i++) {
-            list.add(state.getDecoder().readObject(buffer, state));
+            list.add(decoder.readObject(buffer, state));
         }
 
         return list;
@@ -71,8 +74,9 @@ public abstract class AbstractListTypeDecoder extends 
AbstractPrimitiveTypeDecod
         final int count = readCount(stream);
 
         final List<Object> list = new ArrayList<>(count);
+        final StreamDecoder decoder = state.getDecoder();
         for (int i = 0; i < count; i++) {
-            list.add(state.getDecoder().readObject(stream, state));
+            list.add(decoder.readObject(stream, state));
         }
 
         return list;
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/AbstractMapTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/AbstractMapTypeDecoder.java
index 09d36985..fa1c4b20 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/AbstractMapTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/AbstractMapTypeDecoder.java
@@ -23,7 +23,9 @@ import java.util.Map;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.decoders.AbstractPrimitiveTypeDecoder;
 
@@ -50,11 +52,13 @@ public abstract class AbstractMapTypeDecoder extends 
AbstractPrimitiveTypeDecode
                 "Map encoded number of elements %d is not an even number.", 
count));
         }
 
+        final Decoder decoder = state.getDecoder();
+
         // Count include both key and value so we must include that in the loop
         final Map<Object, Object> map = new LinkedHashMap<>(count);
         for (int i = 0; i < count / 2; i++) {
-            Object key = state.getDecoder().readObject(buffer, state);
-            Object value = state.getDecoder().readObject(buffer, state);
+            Object key = decoder.readObject(buffer, state);
+            Object value = decoder.readObject(buffer, state);
 
             map.put(key, value);
         }
@@ -77,11 +81,13 @@ public abstract class AbstractMapTypeDecoder extends 
AbstractPrimitiveTypeDecode
                 "Map encoded number of elements %d is not an even number.", 
count));
         }
 
+        final StreamDecoder decoder = state.getDecoder();
+
         // Count include both key and value so we must include that in the loop
         final Map<Object, Object> map = new LinkedHashMap<>(count);
         for (int i = 0; i < count / 2; i++) {
-            Object key = state.getDecoder().readObject(stream, state);
-            Object value = state.getDecoder().readObject(stream, state);
+            Object key = decoder.readObject(stream, state);
+            Object value = decoder.readObject(stream, state);
 
             map.put(key, value);
         }
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/AttachTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/AttachTypeDecoder.java
index 766809a8..13c4228f 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/AttachTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/AttachTypeDecoder.java
@@ -20,8 +20,10 @@ import java.io.InputStream;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
 import org.apache.qpid.protonj2.codec.EncodingCodes;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.StreamTypeDecoder;
 import org.apache.qpid.protonj2.codec.TypeDecoder;
@@ -64,7 +66,7 @@ public final class AttachTypeDecoder extends 
AbstractDescribedTypeDecoder<Attach
     public Attach readValue(ProtonBuffer buffer, DecoderState state) throws 
DecodeException {
         final TypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(buffer, state);
 
-        return readAttach(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readAttach(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -73,7 +75,7 @@ public final class AttachTypeDecoder extends 
AbstractDescribedTypeDecoder<Attach
 
         final Attach[] result = new Attach[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readAttach(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readAttach(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -88,7 +90,7 @@ public final class AttachTypeDecoder extends 
AbstractDescribedTypeDecoder<Attach
         decoder.skipValue(buffer, state);
     }
 
-    private Attach readAttach(ProtonBuffer buffer, DecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Attach readAttach(ProtonBuffer buffer, Decoder decoder, 
DecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Attach attach = new Attach();
 
         @SuppressWarnings("unused")
@@ -120,49 +122,49 @@ public final class AttachTypeDecoder extends 
AbstractDescribedTypeDecoder<Attach
 
             switch (index) {
                 case 0:
-                    attach.setName(state.getDecoder().readString(buffer, 
state));
+                    attach.setName(decoder.readString(buffer, state));
                     break;
                 case 1:
-                    
attach.setHandle(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    attach.setHandle(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 2:
-                    Boolean role = state.getDecoder().readBoolean(buffer, 
state);
+                    Boolean role = decoder.readBoolean(buffer, state);
                     attach.setRole(Boolean.TRUE.equals(role) ? Role.RECEIVER : 
Role.SENDER);
                     break;
                 case 3:
-                    byte sndSettleMode = 
state.getDecoder().readUnsignedByte(buffer, state, (byte) 2);
+                    byte sndSettleMode = decoder.readUnsignedByte(buffer, 
state, (byte) 2);
                     
attach.setSenderSettleMode(SenderSettleMode.valueOf(sndSettleMode));
                     break;
                 case 4:
-                    byte rcvSettleMode = 
state.getDecoder().readUnsignedByte(buffer, state, (byte) 0);
+                    byte rcvSettleMode = decoder.readUnsignedByte(buffer, 
state, (byte) 0);
                     
attach.setReceiverSettleMode(ReceiverSettleMode.valueOf(rcvSettleMode));
                     break;
                 case 5:
-                    attach.setSource(state.getDecoder().readObject(buffer, 
state, Source.class));
+                    attach.setSource(decoder.readObject(buffer, state, 
Source.class));
                     break;
                 case 6:
-                    attach.setTarget(state.getDecoder().readObject(buffer, 
state, Terminus.class));
+                    attach.setTarget(decoder.readObject(buffer, state, 
Terminus.class));
                     break;
                 case 7:
-                    attach.setUnsettled(state.getDecoder().readMap(buffer, 
state));
+                    attach.setUnsettled(decoder.readMap(buffer, state));
                     break;
                 case 8:
-                    
attach.setIncompleteUnsettled(state.getDecoder().readBoolean(buffer, state, 
true));
+                    attach.setIncompleteUnsettled(decoder.readBoolean(buffer, 
state, true));
                     break;
                 case 9:
-                    
attach.setInitialDeliveryCount(state.getDecoder().readUnsignedInteger(buffer, 
state, 0l));
+                    
attach.setInitialDeliveryCount(decoder.readUnsignedInteger(buffer, state, 0l));
                     break;
                 case 10:
-                    
attach.setMaxMessageSize(state.getDecoder().readUnsignedLong(buffer, state));
+                    attach.setMaxMessageSize(decoder.readUnsignedLong(buffer, 
state));
                     break;
                 case 11:
-                    
attach.setOfferedCapabilities(state.getDecoder().readMultiple(buffer, state, 
Symbol.class));
+                    attach.setOfferedCapabilities(decoder.readMultiple(buffer, 
state, Symbol.class));
                     break;
                 case 12:
-                    
attach.setDesiredCapabilities(state.getDecoder().readMultiple(buffer, state, 
Symbol.class));
+                    attach.setDesiredCapabilities(decoder.readMultiple(buffer, 
state, Symbol.class));
                     break;
                 case 13:
-                    attach.setProperties(state.getDecoder().readMap(buffer, 
state));
+                    attach.setProperties(decoder.readMap(buffer, state));
                     break;
             }
         }
@@ -174,7 +176,7 @@ public final class AttachTypeDecoder extends 
AbstractDescribedTypeDecoder<Attach
     public Attach readValue(InputStream stream, StreamDecoderState state) 
throws DecodeException {
         final StreamTypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(stream, state);
 
-        return readAttach(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readAttach(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -183,7 +185,7 @@ public final class AttachTypeDecoder extends 
AbstractDescribedTypeDecoder<Attach
 
         final Attach[] result = new Attach[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readAttach(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readAttach(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -198,7 +200,7 @@ public final class AttachTypeDecoder extends 
AbstractDescribedTypeDecoder<Attach
         decoder.skipValue(stream, state);
     }
 
-    private Attach readAttach(InputStream stream, StreamDecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Attach readAttach(InputStream stream, StreamDecoder decoder, 
StreamDecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Attach attach = new Attach();
 
         @SuppressWarnings("unused")
@@ -234,49 +236,49 @@ public final class AttachTypeDecoder extends 
AbstractDescribedTypeDecoder<Attach
 
             switch (index) {
                 case 0:
-                    attach.setName(state.getDecoder().readString(stream, 
state));
+                    attach.setName(decoder.readString(stream, state));
                     break;
                 case 1:
-                    
attach.setHandle(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    attach.setHandle(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 2:
-                    Boolean role = state.getDecoder().readBoolean(stream, 
state);
+                    Boolean role = decoder.readBoolean(stream, state);
                     attach.setRole(Boolean.TRUE.equals(role) ? Role.RECEIVER : 
Role.SENDER);
                     break;
                 case 3:
-                    byte sndSettleMode = 
state.getDecoder().readUnsignedByte(stream, state, (byte) 2);
+                    byte sndSettleMode = decoder.readUnsignedByte(stream, 
state, (byte) 2);
                     
attach.setSenderSettleMode(SenderSettleMode.valueOf(sndSettleMode));
                     break;
                 case 4:
-                    byte rcvSettleMode = 
state.getDecoder().readUnsignedByte(stream, state, (byte) 0);
+                    byte rcvSettleMode = decoder.readUnsignedByte(stream, 
state, (byte) 0);
                     
attach.setReceiverSettleMode(ReceiverSettleMode.valueOf(rcvSettleMode));
                     break;
                 case 5:
-                    attach.setSource(state.getDecoder().readObject(stream, 
state, Source.class));
+                    attach.setSource(decoder.readObject(stream, state, 
Source.class));
                     break;
                 case 6:
-                    attach.setTarget(state.getDecoder().readObject(stream, 
state, Terminus.class));
+                    attach.setTarget(decoder.readObject(stream, state, 
Terminus.class));
                     break;
                 case 7:
-                    attach.setUnsettled(state.getDecoder().readMap(stream, 
state));
+                    attach.setUnsettled(decoder.readMap(stream, state));
                     break;
                 case 8:
-                    
attach.setIncompleteUnsettled(state.getDecoder().readBoolean(stream, state, 
true));
+                    attach.setIncompleteUnsettled(decoder.readBoolean(stream, 
state, true));
                     break;
                 case 9:
-                    
attach.setInitialDeliveryCount(state.getDecoder().readUnsignedInteger(stream, 
state, 0l));
+                    
attach.setInitialDeliveryCount(decoder.readUnsignedInteger(stream, state, 0l));
                     break;
                 case 10:
-                    
attach.setMaxMessageSize(state.getDecoder().readUnsignedLong(stream, state));
+                    attach.setMaxMessageSize(decoder.readUnsignedLong(stream, 
state));
                     break;
                 case 11:
-                    
attach.setOfferedCapabilities(state.getDecoder().readMultiple(stream, state, 
Symbol.class));
+                    attach.setOfferedCapabilities(decoder.readMultiple(stream, 
state, Symbol.class));
                     break;
                 case 12:
-                    
attach.setDesiredCapabilities(state.getDecoder().readMultiple(stream, state, 
Symbol.class));
+                    attach.setDesiredCapabilities(decoder.readMultiple(stream, 
state, Symbol.class));
                     break;
                 case 13:
-                    attach.setProperties(state.getDecoder().readMap(stream, 
state));
+                    attach.setProperties(decoder.readMap(stream, state));
                     break;
             }
         }
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/BeginTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/BeginTypeDecoder.java
index c7e76fe2..a9206ec2 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/BeginTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/BeginTypeDecoder.java
@@ -20,8 +20,10 @@ import java.io.InputStream;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
 import org.apache.qpid.protonj2.codec.EncodingCodes;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.StreamTypeDecoder;
 import org.apache.qpid.protonj2.codec.TypeDecoder;
@@ -59,7 +61,7 @@ public final class BeginTypeDecoder extends 
AbstractDescribedTypeDecoder<Begin>
     public Begin readValue(ProtonBuffer buffer, DecoderState state) throws 
DecodeException {
         final TypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(buffer, state);
 
-        return readBegin(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readBegin(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -68,7 +70,7 @@ public final class BeginTypeDecoder extends 
AbstractDescribedTypeDecoder<Begin>
 
         final Begin[] result = new Begin[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readBegin(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readBegin(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -83,7 +85,7 @@ public final class BeginTypeDecoder extends 
AbstractDescribedTypeDecoder<Begin>
         decoder.skipValue(buffer, state);
     }
 
-    private Begin readBegin(ProtonBuffer buffer, DecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Begin readBegin(ProtonBuffer buffer, Decoder decoder, DecoderState 
state, ListTypeDecoder listDecoder) throws DecodeException {
         final Begin begin = new Begin();
 
         @SuppressWarnings("unused")
@@ -115,28 +117,28 @@ public final class BeginTypeDecoder extends 
AbstractDescribedTypeDecoder<Begin>
 
             switch (index) {
                 case 0:
-                    
begin.setRemoteChannel(state.getDecoder().readUnsignedShort(buffer, state, 0));
+                    begin.setRemoteChannel(decoder.readUnsignedShort(buffer, 
state, 0));
                     break;
                 case 1:
-                    
begin.setNextOutgoingId(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    
begin.setNextOutgoingId(decoder.readUnsignedInteger(buffer, state, 0l));
                     break;
                 case 2:
-                    
begin.setIncomingWindow(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    
begin.setIncomingWindow(decoder.readUnsignedInteger(buffer, state, 0l));
                     break;
                 case 3:
-                    
begin.setOutgoingWindow(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    
begin.setOutgoingWindow(decoder.readUnsignedInteger(buffer, state, 0l));
                     break;
                 case 4:
-                    
begin.setHandleMax(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    begin.setHandleMax(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 5:
-                    
begin.setOfferedCapabilities(state.getDecoder().readMultiple(buffer, state, 
Symbol.class));
+                    begin.setOfferedCapabilities(decoder.readMultiple(buffer, 
state, Symbol.class));
                     break;
                 case 6:
-                    
begin.setDesiredCapabilities(state.getDecoder().readMultiple(buffer, state, 
Symbol.class));
+                    begin.setDesiredCapabilities(decoder.readMultiple(buffer, 
state, Symbol.class));
                     break;
                 case 7:
-                    begin.setProperties(state.getDecoder().readMap(buffer, 
state));
+                    begin.setProperties(decoder.readMap(buffer, state));
                     break;
             }
         }
@@ -148,7 +150,7 @@ public final class BeginTypeDecoder extends 
AbstractDescribedTypeDecoder<Begin>
     public Begin readValue(InputStream stream, StreamDecoderState state) 
throws DecodeException {
         final StreamTypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(stream, state);
 
-        return readBegin(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readBegin(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -157,7 +159,7 @@ public final class BeginTypeDecoder extends 
AbstractDescribedTypeDecoder<Begin>
 
         final Begin[] result = new Begin[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readBegin(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readBegin(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -172,7 +174,7 @@ public final class BeginTypeDecoder extends 
AbstractDescribedTypeDecoder<Begin>
         decoder.skipValue(stream, state);
     }
 
-    private Begin readBegin(InputStream stream, StreamDecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Begin readBegin(InputStream stream, StreamDecoder decoder, 
StreamDecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Begin begin = new Begin();
 
         @SuppressWarnings("unused")
@@ -208,28 +210,28 @@ public final class BeginTypeDecoder extends 
AbstractDescribedTypeDecoder<Begin>
 
             switch (index) {
                 case 0:
-                    
begin.setRemoteChannel(state.getDecoder().readUnsignedShort(stream, state, 0));
+                    begin.setRemoteChannel(decoder.readUnsignedShort(stream, 
state, 0));
                     break;
                 case 1:
-                    
begin.setNextOutgoingId(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    
begin.setNextOutgoingId(decoder.readUnsignedInteger(stream, state, 0l));
                     break;
                 case 2:
-                    
begin.setIncomingWindow(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    
begin.setIncomingWindow(decoder.readUnsignedInteger(stream, state, 0l));
                     break;
                 case 3:
-                    
begin.setOutgoingWindow(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    
begin.setOutgoingWindow(decoder.readUnsignedInteger(stream, state, 0l));
                     break;
                 case 4:
-                    
begin.setHandleMax(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    begin.setHandleMax(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 5:
-                    
begin.setOfferedCapabilities(state.getDecoder().readMultiple(stream, state, 
Symbol.class));
+                    begin.setOfferedCapabilities(decoder.readMultiple(stream, 
state, Symbol.class));
                     break;
                 case 6:
-                    
begin.setDesiredCapabilities(state.getDecoder().readMultiple(stream, state, 
Symbol.class));
+                    begin.setDesiredCapabilities(decoder.readMultiple(stream, 
state, Symbol.class));
                     break;
                 case 7:
-                    begin.setProperties(state.getDecoder().readMap(stream, 
state));
+                    begin.setProperties(decoder.readMap(stream, state));
                     break;
             }
         }
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/DetachTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/DetachTypeDecoder.java
index 655ae64c..4bcb5cb2 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/DetachTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/DetachTypeDecoder.java
@@ -20,8 +20,10 @@ import java.io.InputStream;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
 import org.apache.qpid.protonj2.codec.EncodingCodes;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.StreamTypeDecoder;
 import org.apache.qpid.protonj2.codec.TypeDecoder;
@@ -60,7 +62,7 @@ public final class DetachTypeDecoder extends 
AbstractDescribedTypeDecoder<Detach
     public Detach readValue(ProtonBuffer buffer, DecoderState state) throws 
DecodeException {
         final TypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(buffer, state);
 
-        return readDetach(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readDetach(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -69,7 +71,7 @@ public final class DetachTypeDecoder extends 
AbstractDescribedTypeDecoder<Detach
 
         final Detach[] result = new Detach[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readDetach(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readDetach(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -84,7 +86,7 @@ public final class DetachTypeDecoder extends 
AbstractDescribedTypeDecoder<Detach
         decoder.skipValue(buffer, state);
     }
 
-    private Detach readDetach(ProtonBuffer buffer, DecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Detach readDetach(ProtonBuffer buffer, Decoder decoder, 
DecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Detach detach = new Detach();
 
         @SuppressWarnings("unused")
@@ -114,13 +116,13 @@ public final class DetachTypeDecoder extends 
AbstractDescribedTypeDecoder<Detach
 
             switch (index) {
                 case 0:
-                    
detach.setHandle(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    detach.setHandle(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 1:
-                    detach.setClosed(state.getDecoder().readBoolean(buffer, 
state, false));
+                    detach.setClosed(decoder.readBoolean(buffer, state, 
false));
                     break;
                 case 2:
-                    detach.setError(state.getDecoder().readObject(buffer, 
state, ErrorCondition.class));
+                    detach.setError(decoder.readObject(buffer, state, 
ErrorCondition.class));
                     break;
             }
         }
@@ -132,7 +134,7 @@ public final class DetachTypeDecoder extends 
AbstractDescribedTypeDecoder<Detach
     public Detach readValue(InputStream stream, StreamDecoderState state) 
throws DecodeException {
         final StreamTypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(stream, state);
 
-        return readDetach(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readDetach(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -141,7 +143,7 @@ public final class DetachTypeDecoder extends 
AbstractDescribedTypeDecoder<Detach
 
         final Detach[] result = new Detach[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readDetach(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readDetach(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -156,7 +158,7 @@ public final class DetachTypeDecoder extends 
AbstractDescribedTypeDecoder<Detach
         decoder.skipValue(stream, state);
     }
 
-    private Detach readDetach(InputStream stream, StreamDecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Detach readDetach(InputStream stream, StreamDecoder decoder, 
StreamDecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Detach detach = new Detach();
 
         @SuppressWarnings("unused")
@@ -191,13 +193,13 @@ public final class DetachTypeDecoder extends 
AbstractDescribedTypeDecoder<Detach
 
             switch (index) {
                 case 0:
-                    
detach.setHandle(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    detach.setHandle(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 1:
-                    detach.setClosed(state.getDecoder().readBoolean(stream, 
state, false));
+                    detach.setClosed(decoder.readBoolean(stream, state, 
false));
                     break;
                 case 2:
-                    detach.setError(state.getDecoder().readObject(stream, 
state, ErrorCondition.class));
+                    detach.setError(decoder.readObject(stream, state, 
ErrorCondition.class));
                     break;
             }
         }
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/DispositionTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/DispositionTypeDecoder.java
index b2d8879b..fcad0449 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/DispositionTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/DispositionTypeDecoder.java
@@ -20,8 +20,10 @@ import java.io.InputStream;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
 import org.apache.qpid.protonj2.codec.EncodingCodes;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.StreamTypeDecoder;
 import org.apache.qpid.protonj2.codec.TypeDecoder;
@@ -61,7 +63,7 @@ public final class DispositionTypeDecoder extends 
AbstractDescribedTypeDecoder<D
     public Disposition readValue(ProtonBuffer buffer, DecoderState state) 
throws DecodeException {
         final TypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(buffer, state);
 
-        return readDisposition(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readDisposition(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -70,7 +72,7 @@ public final class DispositionTypeDecoder extends 
AbstractDescribedTypeDecoder<D
 
         Disposition[] result = new Disposition[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readDisposition(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readDisposition(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -85,7 +87,7 @@ public final class DispositionTypeDecoder extends 
AbstractDescribedTypeDecoder<D
         decoder.skipValue(buffer, state);
     }
 
-    private Disposition readDisposition(ProtonBuffer buffer, DecoderState 
state, ListTypeDecoder listDecoder) throws DecodeException {
+    private Disposition readDisposition(ProtonBuffer buffer, Decoder decoder, 
DecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Disposition disposition = new Disposition();
 
         @SuppressWarnings("unused")
@@ -117,22 +119,22 @@ public final class DispositionTypeDecoder extends 
AbstractDescribedTypeDecoder<D
 
             switch (index) {
                 case 0:
-                    
disposition.setRole(Boolean.TRUE.equals(state.getDecoder().readBoolean(buffer, 
state)) ? Role.RECEIVER : Role.SENDER);
+                    
disposition.setRole(Boolean.TRUE.equals(decoder.readBoolean(buffer, state)) ? 
Role.RECEIVER : Role.SENDER);
                     break;
                 case 1:
-                    
disposition.setFirst(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    disposition.setFirst(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 2:
-                    
disposition.setLast(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    disposition.setLast(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 3:
-                    
disposition.setSettled(state.getDecoder().readBoolean(buffer, state, false));
+                    disposition.setSettled(decoder.readBoolean(buffer, state, 
false));
                     break;
                 case 4:
-                    disposition.setState(state.getDecoder().readObject(buffer, 
state, DeliveryState.class));
+                    disposition.setState(decoder.readObject(buffer, state, 
DeliveryState.class));
                     break;
                 case 5:
-                    
disposition.setBatchable(state.getDecoder().readBoolean(buffer, state, false));
+                    disposition.setBatchable(decoder.readBoolean(buffer, 
state, false));
                     break;
             }
         }
@@ -153,7 +155,7 @@ public final class DispositionTypeDecoder extends 
AbstractDescribedTypeDecoder<D
     public Disposition readValue(InputStream stream, StreamDecoderState state) 
throws DecodeException {
         final StreamTypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(stream, state);
 
-        return readDisposition(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readDisposition(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -162,7 +164,7 @@ public final class DispositionTypeDecoder extends 
AbstractDescribedTypeDecoder<D
 
         final Disposition[] result = new Disposition[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readDisposition(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readDisposition(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -177,7 +179,7 @@ public final class DispositionTypeDecoder extends 
AbstractDescribedTypeDecoder<D
         decoder.skipValue(stream, state);
     }
 
-    private Disposition readDisposition(InputStream stream, StreamDecoderState 
state, ListTypeDecoder listDecoder) throws DecodeException {
+    private Disposition readDisposition(InputStream stream, StreamDecoder 
decoder, StreamDecoderState state, ListTypeDecoder listDecoder) throws 
DecodeException {
         final Disposition disposition = new Disposition();
 
         @SuppressWarnings("unused")
@@ -213,22 +215,22 @@ public final class DispositionTypeDecoder extends 
AbstractDescribedTypeDecoder<D
 
             switch (index) {
                 case 0:
-                    
disposition.setRole(Boolean.TRUE.equals(state.getDecoder().readBoolean(stream, 
state)) ? Role.RECEIVER : Role.SENDER);
+                    
disposition.setRole(Boolean.TRUE.equals(decoder.readBoolean(stream, state)) ? 
Role.RECEIVER : Role.SENDER);
                     break;
                 case 1:
-                    
disposition.setFirst(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    disposition.setFirst(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 2:
-                    
disposition.setLast(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    disposition.setLast(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 3:
-                    
disposition.setSettled(state.getDecoder().readBoolean(stream, state, false));
+                    disposition.setSettled(decoder.readBoolean(stream, state, 
false));
                     break;
                 case 4:
-                    disposition.setState(state.getDecoder().readObject(stream, 
state, DeliveryState.class));
+                    disposition.setState(decoder.readObject(stream, state, 
DeliveryState.class));
                     break;
                 case 5:
-                    
disposition.setBatchable(state.getDecoder().readBoolean(stream, state, false));
+                    disposition.setBatchable(decoder.readBoolean(stream, 
state, false));
                     break;
             }
         }
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/EndTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/EndTypeDecoder.java
index 11f5e780..3746387b 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/EndTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/EndTypeDecoder.java
@@ -91,18 +91,10 @@ public final class EndTypeDecoder extends 
AbstractDescribedTypeDecoder<End> {
 
         if (count < MIN_END_LIST_ENTRIES) {
             throw new DecodeException("Not enough entries in End list 
encoding: " + count);
-        }
-
-        if (count > MAX_END_LIST_ENTRIES) {
+        } else if (count > MAX_END_LIST_ENTRIES) {
             throw new DecodeException("To many entries in End list encoding: " 
+ count);
-        }
-
-        for (int index = 0; index < count; ++index) {
-            switch (index) {
-                case 0:
-                    end.setError(state.getDecoder().readObject(buffer, state, 
ErrorCondition.class));
-                    break;
-            }
+        } else if (count == 1) {
+            end.setError(state.getDecoder().readObject(buffer, state, 
ErrorCondition.class));
         }
 
         return end;
@@ -145,18 +137,10 @@ public final class EndTypeDecoder extends 
AbstractDescribedTypeDecoder<End> {
 
         if (count < MIN_END_LIST_ENTRIES) {
             throw new DecodeException("Not enough entries in End list 
encoding: " + count);
-        }
-
-        if (count > MAX_END_LIST_ENTRIES) {
+        } else if (count > MAX_END_LIST_ENTRIES) {
             throw new DecodeException("To many entries in End list encoding: " 
+ count);
-        }
-
-        for (int index = 0; index < count; ++index) {
-            switch (index) {
-                case 0:
-                    end.setError(state.getDecoder().readObject(stream, state, 
ErrorCondition.class));
-                    break;
-            }
+        } else if (count == 1) {
+            end.setError(state.getDecoder().readObject(stream, state, 
ErrorCondition.class));
         }
 
         return end;
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/ErrorConditionTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/ErrorConditionTypeDecoder.java
index a8d09fd9..33efe0c6 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/ErrorConditionTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/ErrorConditionTypeDecoder.java
@@ -21,7 +21,9 @@ import java.util.Map;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.StreamTypeDecoder;
 import org.apache.qpid.protonj2.codec.TypeDecoder;
@@ -58,7 +60,7 @@ public final class ErrorConditionTypeDecoder extends 
AbstractDescribedTypeDecode
     public ErrorCondition readValue(ProtonBuffer buffer, DecoderState state) 
throws DecodeException {
         final TypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(buffer, state);
 
-        return readErrorCondition(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readErrorCondition(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -67,7 +69,7 @@ public final class ErrorConditionTypeDecoder extends 
AbstractDescribedTypeDecode
 
         final ErrorCondition[] result = new ErrorCondition[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readErrorCondition(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readErrorCondition(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -82,7 +84,7 @@ public final class ErrorConditionTypeDecoder extends 
AbstractDescribedTypeDecode
         decoder.skipValue(buffer, state);
     }
 
-    private ErrorCondition readErrorCondition(ProtonBuffer buffer, 
DecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
+    private ErrorCondition readErrorCondition(ProtonBuffer buffer, Decoder 
decoder, DecoderState state, ListTypeDecoder listDecoder) throws 
DecodeException {
         @SuppressWarnings("unused")
         final int size = listDecoder.readSize(buffer);
         final int count = listDecoder.readCount(buffer);
@@ -102,13 +104,13 @@ public final class ErrorConditionTypeDecoder extends 
AbstractDescribedTypeDecode
         for (int index = 0; index < count; ++index) {
             switch (index) {
                 case 0:
-                    condition = state.getDecoder().readSymbol(buffer, state);
+                    condition = decoder.readSymbol(buffer, state);
                     break;
                 case 1:
-                    description = state.getDecoder().readString(buffer, state);
+                    description = decoder.readString(buffer, state);
                     break;
                 case 2:
-                    info = state.getDecoder().readMap(buffer, state);
+                    info = decoder.readMap(buffer, state);
                     break;
             }
         }
@@ -120,7 +122,7 @@ public final class ErrorConditionTypeDecoder extends 
AbstractDescribedTypeDecode
     public ErrorCondition readValue(InputStream stream, StreamDecoderState 
state) throws DecodeException {
         final StreamTypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(stream, state);
 
-        return readErrorCondition(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readErrorCondition(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -129,7 +131,7 @@ public final class ErrorConditionTypeDecoder extends 
AbstractDescribedTypeDecode
 
         final ErrorCondition[] result = new ErrorCondition[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readErrorCondition(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readErrorCondition(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -144,7 +146,7 @@ public final class ErrorConditionTypeDecoder extends 
AbstractDescribedTypeDecode
         decoder.skipValue(stream, state);
     }
 
-    private ErrorCondition readErrorCondition(InputStream stream, 
StreamDecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
+    private ErrorCondition readErrorCondition(InputStream stream, 
StreamDecoder decoder, StreamDecoderState state, ListTypeDecoder listDecoder) 
throws DecodeException {
         @SuppressWarnings("unused")
         final int size = listDecoder.readSize(stream);
         final int count = listDecoder.readCount(stream);
@@ -164,13 +166,13 @@ public final class ErrorConditionTypeDecoder extends 
AbstractDescribedTypeDecode
         for (int index = 0; index < count; ++index) {
             switch (index) {
                 case 0:
-                    condition = state.getDecoder().readSymbol(stream, state);
+                    condition = decoder.readSymbol(stream, state);
                     break;
                 case 1:
-                    description = state.getDecoder().readString(stream, state);
+                    description = decoder.readString(stream, state);
                     break;
                 case 2:
-                    info = state.getDecoder().readMap(stream, state);
+                    info = decoder.readMap(stream, state);
                     break;
             }
         }
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/FlowTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/FlowTypeDecoder.java
index ba831d10..7b28fe91 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/FlowTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/FlowTypeDecoder.java
@@ -20,8 +20,10 @@ import java.io.InputStream;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
 import org.apache.qpid.protonj2.codec.EncodingCodes;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.StreamTypeDecoder;
 import org.apache.qpid.protonj2.codec.TypeDecoder;
@@ -59,7 +61,7 @@ public final class FlowTypeDecoder extends 
AbstractDescribedTypeDecoder<Flow> {
     public Flow readValue(ProtonBuffer buffer, DecoderState state) throws 
DecodeException {
         final TypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(buffer, state);
 
-        return readFlow(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readFlow(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -68,7 +70,7 @@ public final class FlowTypeDecoder extends 
AbstractDescribedTypeDecoder<Flow> {
 
         final Flow[] result = new Flow[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readFlow(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readFlow(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -83,7 +85,7 @@ public final class FlowTypeDecoder extends 
AbstractDescribedTypeDecoder<Flow> {
         decoder.skipValue(buffer, state);
     }
 
-    private Flow readFlow(ProtonBuffer buffer, DecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Flow readFlow(ProtonBuffer buffer, Decoder decoder, DecoderState 
state, ListTypeDecoder listDecoder) throws DecodeException {
         final Flow flow = new Flow();
 
         @SuppressWarnings("unused")
@@ -116,37 +118,37 @@ public final class FlowTypeDecoder extends 
AbstractDescribedTypeDecoder<Flow> {
 
             switch (index) {
                 case 0:
-                    
flow.setNextIncomingId(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    flow.setNextIncomingId(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 1:
-                    
flow.setIncomingWindow(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    flow.setIncomingWindow(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 2:
-                    
flow.setNextOutgoingId(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    flow.setNextOutgoingId(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 3:
-                    
flow.setOutgoingWindow(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    flow.setOutgoingWindow(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 4:
-                    
flow.setHandle(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    flow.setHandle(decoder.readUnsignedInteger(buffer, state, 
0l));
                     break;
                 case 5:
-                    
flow.setDeliveryCount(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    flow.setDeliveryCount(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 6:
-                    
flow.setLinkCredit(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    flow.setLinkCredit(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 7:
-                    
flow.setAvailable(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    flow.setAvailable(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 8:
-                    flow.setDrain(state.getDecoder().readBoolean(buffer, 
state, false));
+                    flow.setDrain(decoder.readBoolean(buffer, state, false));
                     break;
                 case 9:
-                    flow.setEcho(state.getDecoder().readBoolean(buffer, state, 
false));
+                    flow.setEcho(decoder.readBoolean(buffer, state, false));
                     break;
                 case 10:
-                    flow.setProperties(state.getDecoder().readMap(buffer, 
state));
+                    flow.setProperties(decoder.readMap(buffer, state));
                     break;
             }
         }
@@ -158,7 +160,7 @@ public final class FlowTypeDecoder extends 
AbstractDescribedTypeDecoder<Flow> {
     public Flow readValue(InputStream stream, StreamDecoderState state) throws 
DecodeException {
         final StreamTypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(stream, state);
 
-        return readFlow(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readFlow(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -167,7 +169,7 @@ public final class FlowTypeDecoder extends 
AbstractDescribedTypeDecoder<Flow> {
 
         final Flow[] result = new Flow[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readFlow(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readFlow(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -182,7 +184,7 @@ public final class FlowTypeDecoder extends 
AbstractDescribedTypeDecoder<Flow> {
         decoder.skipValue(stream, state);
     }
 
-    private Flow readFlow(InputStream stream, StreamDecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Flow readFlow(InputStream stream, StreamDecoder decoder, 
StreamDecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Flow flow = new Flow();
 
         @SuppressWarnings("unused")
@@ -219,37 +221,37 @@ public final class FlowTypeDecoder extends 
AbstractDescribedTypeDecoder<Flow> {
 
             switch (index) {
                 case 0:
-                    
flow.setNextIncomingId(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    flow.setNextIncomingId(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 1:
-                    
flow.setIncomingWindow(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    flow.setIncomingWindow(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 2:
-                    
flow.setNextOutgoingId(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    flow.setNextOutgoingId(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 3:
-                    
flow.setOutgoingWindow(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    flow.setOutgoingWindow(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 4:
-                    
flow.setHandle(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    flow.setHandle(decoder.readUnsignedInteger(stream, state, 
0l));
                     break;
                 case 5:
-                    
flow.setDeliveryCount(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    flow.setDeliveryCount(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 6:
-                    
flow.setLinkCredit(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    flow.setLinkCredit(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 7:
-                    
flow.setAvailable(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    flow.setAvailable(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 8:
-                    flow.setDrain(state.getDecoder().readBoolean(stream, 
state, false));
+                    flow.setDrain(decoder.readBoolean(stream, state, false));
                     break;
                 case 9:
-                    flow.setEcho(state.getDecoder().readBoolean(stream, state, 
false));
+                    flow.setEcho(decoder.readBoolean(stream, state, false));
                     break;
                 case 10:
-                    flow.setProperties(state.getDecoder().readMap(stream, 
state));
+                    flow.setProperties(decoder.readMap(stream, state));
                     break;
             }
         }
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/OpenTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/OpenTypeDecoder.java
index c0a8b6a1..d592d13f 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/OpenTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/OpenTypeDecoder.java
@@ -20,8 +20,10 @@ import java.io.InputStream;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
 import org.apache.qpid.protonj2.codec.EncodingCodes;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.StreamTypeDecoder;
 import org.apache.qpid.protonj2.codec.TypeDecoder;
@@ -59,7 +61,7 @@ public final class OpenTypeDecoder extends 
AbstractDescribedTypeDecoder<Open> {
     public Open readValue(ProtonBuffer buffer, DecoderState state) throws 
DecodeException {
         TypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(buffer, state);
 
-        return readOpen(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readOpen(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -68,7 +70,7 @@ public final class OpenTypeDecoder extends 
AbstractDescribedTypeDecoder<Open> {
 
         final Open[] result = new Open[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readOpen(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readOpen(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -83,7 +85,7 @@ public final class OpenTypeDecoder extends 
AbstractDescribedTypeDecoder<Open> {
         decoder.skipValue(buffer, state);
     }
 
-    private Open readOpen(ProtonBuffer buffer, DecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Open readOpen(ProtonBuffer buffer, Decoder decoder, DecoderState 
state, ListTypeDecoder listDecoder) throws DecodeException {
         final Open open = new Open();
 
         @SuppressWarnings("unused")
@@ -113,34 +115,34 @@ public final class OpenTypeDecoder extends 
AbstractDescribedTypeDecoder<Open> {
 
             switch (index) {
                 case 0:
-                    open.setContainerId(state.getDecoder().readString(buffer, 
state));
+                    open.setContainerId(decoder.readString(buffer, state));
                     break;
                 case 1:
-                    open.setHostname(state.getDecoder().readString(buffer, 
state));
+                    open.setHostname(decoder.readString(buffer, state));
                     break;
                 case 2:
-                    
open.setMaxFrameSize(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    open.setMaxFrameSize(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 3:
-                    
open.setChannelMax(state.getDecoder().readUnsignedShort(buffer, state, 0));
+                    open.setChannelMax(decoder.readUnsignedShort(buffer, 
state, 0));
                     break;
                 case 4:
-                    
open.setIdleTimeout(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    open.setIdleTimeout(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 5:
-                    
open.setOutgoingLocales(state.getDecoder().readMultiple(buffer, state, 
Symbol.class));
+                    open.setOutgoingLocales(decoder.readMultiple(buffer, 
state, Symbol.class));
                     break;
                 case 6:
-                    
open.setIncomingLocales(state.getDecoder().readMultiple(buffer, state, 
Symbol.class));
+                    open.setIncomingLocales(decoder.readMultiple(buffer, 
state, Symbol.class));
                     break;
                 case 7:
-                    
open.setOfferedCapabilities(state.getDecoder().readMultiple(buffer, state, 
Symbol.class));
+                    open.setOfferedCapabilities(decoder.readMultiple(buffer, 
state, Symbol.class));
                     break;
                 case 8:
-                    
open.setDesiredCapabilities(state.getDecoder().readMultiple(buffer, state, 
Symbol.class));
+                    open.setDesiredCapabilities(decoder.readMultiple(buffer, 
state, Symbol.class));
                     break;
                 case 9:
-                    open.setProperties(state.getDecoder().readMap(buffer, 
state));
+                    open.setProperties(decoder.readMap(buffer, state));
                     break;
             }
         }
@@ -152,7 +154,7 @@ public final class OpenTypeDecoder extends 
AbstractDescribedTypeDecoder<Open> {
     public Open readValue(InputStream stream, StreamDecoderState state) throws 
DecodeException {
         final StreamTypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(stream, state);
 
-        return readOpen(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readOpen(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -161,7 +163,7 @@ public final class OpenTypeDecoder extends 
AbstractDescribedTypeDecoder<Open> {
 
         final Open[] result = new Open[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readOpen(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readOpen(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -176,7 +178,7 @@ public final class OpenTypeDecoder extends 
AbstractDescribedTypeDecoder<Open> {
         decoder.skipValue(stream, state);
     }
 
-    private Open readOpen(InputStream stream, StreamDecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Open readOpen(InputStream stream, StreamDecoder decoder, 
StreamDecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Open open = new Open();
 
         @SuppressWarnings("unused")
@@ -211,34 +213,34 @@ public final class OpenTypeDecoder extends 
AbstractDescribedTypeDecoder<Open> {
 
             switch (index) {
                 case 0:
-                    open.setContainerId(state.getDecoder().readString(stream, 
state));
+                    open.setContainerId(decoder.readString(stream, state));
                     break;
                 case 1:
-                    open.setHostname(state.getDecoder().readString(stream, 
state));
+                    open.setHostname(decoder.readString(stream, state));
                     break;
                 case 2:
-                    
open.setMaxFrameSize(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    open.setMaxFrameSize(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 3:
-                    
open.setChannelMax(state.getDecoder().readUnsignedShort(stream, state, 0));
+                    open.setChannelMax(decoder.readUnsignedShort(stream, 
state, 0));
                     break;
                 case 4:
-                    
open.setIdleTimeout(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    open.setIdleTimeout(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 5:
-                    
open.setOutgoingLocales(state.getDecoder().readMultiple(stream, state, 
Symbol.class));
+                    open.setOutgoingLocales(decoder.readMultiple(stream, 
state, Symbol.class));
                     break;
                 case 6:
-                    
open.setIncomingLocales(state.getDecoder().readMultiple(stream, state, 
Symbol.class));
+                    open.setIncomingLocales(decoder.readMultiple(stream, 
state, Symbol.class));
                     break;
                 case 7:
-                    
open.setOfferedCapabilities(state.getDecoder().readMultiple(stream, state, 
Symbol.class));
+                    open.setOfferedCapabilities(decoder.readMultiple(stream, 
state, Symbol.class));
                     break;
                 case 8:
-                    
open.setDesiredCapabilities(state.getDecoder().readMultiple(stream, state, 
Symbol.class));
+                    open.setDesiredCapabilities(decoder.readMultiple(stream, 
state, Symbol.class));
                     break;
                 case 9:
-                    open.setProperties(state.getDecoder().readMap(stream, 
state));
+                    open.setProperties(decoder.readMap(stream, state));
                     break;
             }
         }
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/TransferTypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/TransferTypeDecoder.java
index ca47d750..4085628a 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/TransferTypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/transport/TransferTypeDecoder.java
@@ -20,8 +20,10 @@ import java.io.InputStream;
 
 import org.apache.qpid.protonj2.buffer.ProtonBuffer;
 import org.apache.qpid.protonj2.codec.DecodeException;
+import org.apache.qpid.protonj2.codec.Decoder;
 import org.apache.qpid.protonj2.codec.DecoderState;
 import org.apache.qpid.protonj2.codec.EncodingCodes;
+import org.apache.qpid.protonj2.codec.StreamDecoder;
 import org.apache.qpid.protonj2.codec.StreamDecoderState;
 import org.apache.qpid.protonj2.codec.StreamTypeDecoder;
 import org.apache.qpid.protonj2.codec.TypeDecoder;
@@ -62,7 +64,7 @@ public final class TransferTypeDecoder extends 
AbstractDescribedTypeDecoder<Tran
     public Transfer readValue(ProtonBuffer buffer, DecoderState state) throws 
DecodeException {
         final TypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(buffer, state);
 
-        return readTransfer(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readTransfer(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -71,7 +73,7 @@ public final class TransferTypeDecoder extends 
AbstractDescribedTypeDecoder<Tran
 
         final Transfer[] result = new Transfer[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readTransfer(buffer, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readTransfer(buffer, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -86,7 +88,7 @@ public final class TransferTypeDecoder extends 
AbstractDescribedTypeDecoder<Tran
         decoder.skipValue(buffer, state);
     }
 
-    private Transfer readTransfer(ProtonBuffer buffer, DecoderState state, 
ListTypeDecoder listDecoder) throws DecodeException {
+    private Transfer readTransfer(ProtonBuffer buffer, Decoder decoder, 
DecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Transfer transfer = new Transfer();
 
         @SuppressWarnings("unused")
@@ -118,38 +120,38 @@ public final class TransferTypeDecoder extends 
AbstractDescribedTypeDecoder<Tran
 
             switch (index) {
                 case 0:
-                    
transfer.setHandle(state.getDecoder().readUnsignedInteger(buffer, state, 0l));
+                    transfer.setHandle(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 1:
-                    
transfer.setDeliveryId(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    transfer.setDeliveryId(decoder.readUnsignedInteger(buffer, 
state, 0l));
                     break;
                 case 2:
-                    
transfer.setDeliveryTag(state.getDecoder().readDeliveryTag(buffer, state));
+                    transfer.setDeliveryTag(decoder.readDeliveryTag(buffer, 
state));
                     break;
                 case 3:
-                    
transfer.setMessageFormat(state.getDecoder().readUnsignedInteger(buffer, state, 
0l));
+                    
transfer.setMessageFormat(decoder.readUnsignedInteger(buffer, state, 0l));
                     break;
                 case 4:
-                    transfer.setSettled(state.getDecoder().readBoolean(buffer, 
state, false));
+                    transfer.setSettled(decoder.readBoolean(buffer, state, 
false));
                     break;
                 case 5:
-                    transfer.setMore(state.getDecoder().readBoolean(buffer, 
state, false));
+                    transfer.setMore(decoder.readBoolean(buffer, state, 
false));
                     break;
                 case 6:
-                    final UnsignedByte rcvSettleMode = 
state.getDecoder().readUnsignedByte(buffer, state);
+                    final UnsignedByte rcvSettleMode = 
decoder.readUnsignedByte(buffer, state);
                     transfer.setRcvSettleMode(rcvSettleMode == null ? null : 
ReceiverSettleMode.values()[rcvSettleMode.intValue()]);
                     break;
                 case 7:
-                    transfer.setState(state.getDecoder().readObject(buffer, 
state, DeliveryState.class));
+                    transfer.setState(decoder.readObject(buffer, state, 
DeliveryState.class));
                     break;
                 case 8:
-                    transfer.setResume(state.getDecoder().readBoolean(buffer, 
state, false));
+                    transfer.setResume(decoder.readBoolean(buffer, state, 
false));
                     break;
                 case 9:
-                    transfer.setAborted(state.getDecoder().readBoolean(buffer, 
state, false));
+                    transfer.setAborted(decoder.readBoolean(buffer, state, 
false));
                     break;
                 case 10:
-                    
transfer.setBatchable(state.getDecoder().readBoolean(buffer, state, false));
+                    transfer.setBatchable(decoder.readBoolean(buffer, state, 
false));
                     break;
             }
         }
@@ -161,7 +163,7 @@ public final class TransferTypeDecoder extends 
AbstractDescribedTypeDecoder<Tran
     public Transfer readValue(InputStream stream, StreamDecoderState state) 
throws DecodeException {
         final StreamTypeDecoder<?> decoder = 
state.getDecoder().readNextTypeDecoder(stream, state);
 
-        return readTransfer(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+        return readTransfer(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
     }
 
     @Override
@@ -170,7 +172,7 @@ public final class TransferTypeDecoder extends 
AbstractDescribedTypeDecoder<Tran
 
         final Transfer[] result = new Transfer[count];
         for (int i = 0; i < count; ++i) {
-            result[i] = readTransfer(stream, state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
+            result[i] = readTransfer(stream, state.getDecoder(), state, 
checkIsExpectedTypeAndCast(ListTypeDecoder.class, decoder));
         }
 
         return result;
@@ -185,7 +187,7 @@ public final class TransferTypeDecoder extends 
AbstractDescribedTypeDecoder<Tran
         decoder.skipValue(stream, state);
     }
 
-    private Transfer readTransfer(InputStream stream, StreamDecoderState 
state, ListTypeDecoder listDecoder) throws DecodeException {
+    private Transfer readTransfer(InputStream stream, StreamDecoder decoder, 
StreamDecoderState state, ListTypeDecoder listDecoder) throws DecodeException {
         final Transfer transfer = new Transfer();
 
         @SuppressWarnings("unused")
@@ -221,38 +223,38 @@ public final class TransferTypeDecoder extends 
AbstractDescribedTypeDecoder<Tran
 
             switch (index) {
                 case 0:
-                    
transfer.setHandle(state.getDecoder().readUnsignedInteger(stream, state, 0l));
+                    transfer.setHandle(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 1:
-                    
transfer.setDeliveryId(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    transfer.setDeliveryId(decoder.readUnsignedInteger(stream, 
state, 0l));
                     break;
                 case 2:
-                    
transfer.setDeliveryTag(state.getDecoder().readDeliveryTag(stream, state));
+                    transfer.setDeliveryTag(decoder.readDeliveryTag(stream, 
state));
                     break;
                 case 3:
-                    
transfer.setMessageFormat(state.getDecoder().readUnsignedInteger(stream, state, 
0l));
+                    
transfer.setMessageFormat(decoder.readUnsignedInteger(stream, state, 0l));
                     break;
                 case 4:
-                    transfer.setSettled(state.getDecoder().readBoolean(stream, 
state, false));
+                    transfer.setSettled(decoder.readBoolean(stream, state, 
false));
                     break;
                 case 5:
-                    transfer.setMore(state.getDecoder().readBoolean(stream, 
state, false));
+                    transfer.setMore(decoder.readBoolean(stream, state, 
false));
                     break;
                 case 6:
-                    final UnsignedByte rcvSettleMode = 
state.getDecoder().readUnsignedByte(stream, state);
+                    final UnsignedByte rcvSettleMode = 
decoder.readUnsignedByte(stream, state);
                     transfer.setRcvSettleMode(rcvSettleMode == null ? null : 
ReceiverSettleMode.values()[rcvSettleMode.intValue()]);
                     break;
                 case 7:
-                    transfer.setState(state.getDecoder().readObject(stream, 
state, DeliveryState.class));
+                    transfer.setState(decoder.readObject(stream, state, 
DeliveryState.class));
                     break;
                 case 8:
-                    transfer.setResume(state.getDecoder().readBoolean(stream, 
state, false));
+                    transfer.setResume(decoder.readBoolean(stream, state, 
false));
                     break;
                 case 9:
-                    transfer.setAborted(state.getDecoder().readBoolean(stream, 
state, false));
+                    transfer.setAborted(decoder.readBoolean(stream, state, 
false));
                     break;
                 case 10:
-                    
transfer.setBatchable(state.getDecoder().readBoolean(stream, state, false));
+                    transfer.setBatchable(decoder.readBoolean(stream, state, 
false));
                     break;
             }
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to