From d3a02fb2ca89c51cddfab30bcfa3fdeb818ebcb4 Mon Sep 17 00:00:00 2001 From: FURUHASHI Sadayuki <frsyuki@users.sourceforge.jp> Date: Tue, 30 Nov 2010 21:57:12 +0900 Subject: [PATCH] java: @MessagePackMessage(default field option) --- java/src/main/java/org/msgpack/MessagePack.java | 1 + java/src/main/java/org/msgpack/MessagePackObject.java | 2 +- java/src/main/java/org/msgpack/MessageTypeException.java | 4 ++++ .../java/org/msgpack/annotation/MessagePackDelegate.java | 1 + .../java/org/msgpack/annotation/MessagePackMessage.java | 2 ++ .../main/java/org/msgpack/buffer/VectoredByteBuffer.java | 6 +----- java/src/main/java/org/msgpack/template/ClassTemplate.java | 2 +- .../java/org/msgpack/util/codegen/DynamicCodeGenBase.java | 2 ++ 8 files changed, 13 insertions(+), 7 deletions(-) diff --git a/java/src/main/java/org/msgpack/MessagePack.java b/java/src/main/java/org/msgpack/MessagePack.java index b8e66d3d..8dab2530 100644 --- a/java/src/main/java/org/msgpack/MessagePack.java +++ b/java/src/main/java/org/msgpack/MessagePack.java @@ -21,6 +21,7 @@ import java.io.OutputStream; import java.io.InputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import org.msgpack.buffer.VectoredByteBuffer; import org.msgpack.util.codegen.DynamicTemplate; import org.msgpack.util.codegen.DynamicOrdinalEnumTemplate; import org.msgpack.util.codegen.FieldList; diff --git a/java/src/main/java/org/msgpack/MessagePackObject.java b/java/src/main/java/org/msgpack/MessagePackObject.java index 07c5d300..0d88038d 100644 --- a/java/src/main/java/org/msgpack/MessagePackObject.java +++ b/java/src/main/java/org/msgpack/MessagePackObject.java @@ -155,7 +155,7 @@ public abstract class MessagePackObject implements Cloneable, MessagePackable { return convert((Class<T>)to.getClass(), to); } - private <T> T convert(Class<T> klass, T to) throws MessageTypeException { + public <T> T convert(Class<T> klass, T to) throws MessageTypeException { // FIXME nullable? return (T)convert(new NullableTemplate(new ClassTemplate(klass)), to); } diff --git a/java/src/main/java/org/msgpack/MessageTypeException.java b/java/src/main/java/org/msgpack/MessageTypeException.java index 7a06a3e3..bd148447 100644 --- a/java/src/main/java/org/msgpack/MessageTypeException.java +++ b/java/src/main/java/org/msgpack/MessageTypeException.java @@ -27,5 +27,9 @@ public class MessageTypeException extends RuntimeException { public MessageTypeException(String s, Throwable t) { super(s, t); } + + public MessageTypeException(Throwable t) { + super(t); + } } diff --git a/java/src/main/java/org/msgpack/annotation/MessagePackDelegate.java b/java/src/main/java/org/msgpack/annotation/MessagePackDelegate.java index 88c6f8cf..bb16e2ce 100644 --- a/java/src/main/java/org/msgpack/annotation/MessagePackDelegate.java +++ b/java/src/main/java/org/msgpack/annotation/MessagePackDelegate.java @@ -25,4 +25,5 @@ import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface MessagePackDelegate { + String value(); } diff --git a/java/src/main/java/org/msgpack/annotation/MessagePackMessage.java b/java/src/main/java/org/msgpack/annotation/MessagePackMessage.java index 5f781e01..ab3ad0a1 100644 --- a/java/src/main/java/org/msgpack/annotation/MessagePackMessage.java +++ b/java/src/main/java/org/msgpack/annotation/MessagePackMessage.java @@ -21,8 +21,10 @@ import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.msgpack.template.FieldOption; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface MessagePackMessage { + FieldOption value() default FieldOption.DEFAULT; } diff --git a/java/src/main/java/org/msgpack/buffer/VectoredByteBuffer.java b/java/src/main/java/org/msgpack/buffer/VectoredByteBuffer.java index bb182036..df73bc08 100644 --- a/java/src/main/java/org/msgpack/buffer/VectoredByteBuffer.java +++ b/java/src/main/java/org/msgpack/buffer/VectoredByteBuffer.java @@ -143,12 +143,8 @@ public class VectoredByteBuffer implements GatheringByteChannel, ScatteringByteC // optimization: concatenates to the last buffer instead // of adding new reference ByteBuffer dup = vec.get(vec.size()-1); - int dpos = dup.position(); internalBuffer.put(b, off, len); - ByteBuffer dup2 = internalBuffer.duplicate(); - dup2.position(dpos); - dup2.limit(ipos + len); - vec.set(vec.size()-1, dup2); + dup.limit(ipos + len); return; } internalBuffer.put(b, off, len); diff --git a/java/src/main/java/org/msgpack/template/ClassTemplate.java b/java/src/main/java/org/msgpack/template/ClassTemplate.java index bf8a5be9..28314528 100644 --- a/java/src/main/java/org/msgpack/template/ClassTemplate.java +++ b/java/src/main/java/org/msgpack/template/ClassTemplate.java @@ -200,7 +200,7 @@ public class ClassTemplate implements Template { return tmpl.convert(pac.unpackObject(), to); } - throw new MessageTypeException(); + throw new MessageTypeException("unknown type: "+klass); } catch (IllegalAccessException e) { throw new MessageTypeException(e.getMessage()); // FIXME diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java index ac5fb50d..f2088ffa 100644 --- a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java +++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java @@ -333,6 +333,8 @@ public class DynamicCodeGenBase implements Constants { return Templates.tString(); } else if (c.equals(BigInteger.class)) { return Templates.tBigInteger(); + } else if (c.equals(byte[].class)) { + return Templates.tByteArray(); } else if (c.equals(ByteBuffer.class)) { return Templates.tByteBuffer(); } else if (CustomConverter.isRegistered(c)) {// FIXME