diff options
Diffstat (limited to 'src/org/gnunet/construct/parsers/FillParser.java')
-rw-r--r-- | src/org/gnunet/construct/parsers/FillParser.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/org/gnunet/construct/parsers/FillParser.java b/src/org/gnunet/construct/parsers/FillParser.java index b8e4b43..b266424 100644 --- a/src/org/gnunet/construct/parsers/FillParser.java +++ b/src/org/gnunet/construct/parsers/FillParser.java | |||
@@ -62,10 +62,15 @@ public class FillParser implements Parser { | |||
62 | public int parse(ByteBuffer srcBuf, int frameOffset, | 62 | public int parse(ByteBuffer srcBuf, int frameOffset, |
63 | Message frameObj, final Message dstObj, List<Field> frameSizePath) { | 63 | Message frameObj, final Message dstObj, List<Field> frameSizePath) { |
64 | 64 | ||
65 | |||
66 | |||
65 | final int frameSize = ReflectUtil.justGetInt(dstObj, frameSizePath); | 67 | final int frameSize = ReflectUtil.justGetInt(dstObj, frameSizePath); |
66 | int remaining = frameOffset + frameSize - srcBuf.position(); | 68 | int remaining = frameOffset + frameSize - srcBuf.position(); |
67 | int size = 0; | 69 | int size = 0; |
68 | 70 | ||
71 | Class<?> elemType = targetField.getType().getComponentType(); | ||
72 | |||
73 | |||
69 | ArrayList<Message> list = new ArrayList<Message>(10); | 74 | ArrayList<Message> list = new ArrayList<Message>(10); |
70 | 75 | ||
71 | while (remaining > 0) { | 76 | while (remaining > 0) { |
@@ -74,10 +79,13 @@ public class FillParser implements Parser { | |||
74 | int s = elemParser.parse(srcBuf, frameOffset, frameObj, next, null); | 79 | int s = elemParser.parse(srcBuf, frameOffset, frameObj, next, null); |
75 | size += s; | 80 | size += s; |
76 | remaining -= s; | 81 | remaining -= s; |
82 | list.add(next); | ||
77 | } | 83 | } |
78 | 84 | ||
85 | Object arr = Array.newInstance(elemType, list.size()); | ||
86 | |||
79 | try { | 87 | try { |
80 | targetField.set(dstObj, list.toArray()); | 88 | targetField.set(dstObj, list.toArray((Object[]) arr)); |
81 | } catch (IllegalAccessException e) { | 89 | } catch (IllegalAccessException e) { |
82 | throw new AssertionError("cannot access field"); | 90 | throw new AssertionError("cannot access field"); |
83 | } | 91 | } |