summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorMuga Nishizawa <muga@f11vm.(none)>2010-09-23 15:24:12 +0900
committerMuga Nishizawa <muga@f11vm.(none)>2010-09-23 15:24:12 +0900
commit13b6708a099c1e3a6f498f9f4899b6b139c112d4 (patch)
tree3ef81c2b56ac1cdaf16a2376aa90668fda246613 /java/src
parent6aa196cf55647e342131ecaa4380ffb8ae9bd3b7 (diff)
downloadmsgpack-python-13b6708a099c1e3a6f498f9f4899b6b139c112d4.tar.gz
java: append a code for generating a messageConvert method to annotation-utilities
Diffstat (limited to 'java/src')
-rw-r--r--java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java882
-rw-r--r--java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java243
2 files changed, 1045 insertions, 80 deletions
diff --git a/java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java b/java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java
index 5238444..a337ff9 100644
--- a/java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java
+++ b/java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java
@@ -11,6 +11,7 @@ import java.lang.reflect.ParameterizedType;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -25,6 +26,7 @@ import javassist.CtNewMethod;
import javassist.NotFoundException;
import org.msgpack.MessageConvertable;
+import org.msgpack.MessagePackObject;
import org.msgpack.MessagePackable;
import org.msgpack.MessageTypeException;
import org.msgpack.MessageUnpackable;
@@ -43,37 +45,6 @@ public class PackUnpackUtil {
static final String KEYWORD_NEW = "new";
- static final String TYPE_NAME_VOID = void.class.getName();
-
- static final String TYPE_NAME_OBJECT = Object.class.getName();
-
- static final String TYPE_NAME_IOEXCEPTION = IOException.class.getName();
-
- static final String TYPE_NAME_PACKER = Packer.class.getName();
-
- static final String TYPE_NAME_UNPACKER = Unpacker.class.getName();
-
- static final String TYPE_NAME_MSGPACKABLE = MessagePackable.class
- .getName();
-
- static final String TYPE_NAME_MSGUNPACKABLE = MessageUnpackable.class
- .getName();
-
- static final String TYPE_NAME_MSGCONVERTABLE = MessageConvertable.class
- .getName();
-
- static final String TYPE_NAME_MSGTYPEEXCEPTION = MessageTypeException.class
- .getName();
-
- static final String TYPE_NAME_MSGPACKUNPACKABLE = MessagePackUnpackable.class
- .getName();
-
- static final String TYPE_NAME_MSGPACKOPTIONAL = MessagePackOptional.class
- .getName();
-
- static final String TYPE_NAME_MSGPACKOREQUIRED = MessagePackRequired.class
- .getName();
-
static final String CHAR_NAME_SPACE = " ";
static final String CHAR_NAME_COMMA = ",";
@@ -92,15 +63,27 @@ public class PackUnpackUtil {
static final String CHAR_NAME_LEFT_CURLY_BRACHET = "{";
+ static final String CHAR_NAME_RIGHT_SQUARE_BRACKET = "]";
+
+ static final String CHAR_NAME_LEFT_SQUARE_BRACKET = "[";
+
static final String CHAR_NAME_DOT = ".";
static final String CHAR_NAME_SEMICOLON = ";";
- static final String VARIABLE_NAME_PK = "pk";
+ static final String VARIABLE_NAME_PK = "_$$_pk";
+
+ static final String VARIABLE_NAME_SIZE = "_$$_len";
- static final String VARIABLE_NAME_OBJ = "obj";
+ static final String VARIABLE_NAME_ARRAY = "_$$_ary";
- static final String VARIABLE_NAME_SIZE = "len";
+ static final String VARIABLE_NAME_LIST = "_$$_list";
+
+ static final String VARIABLE_NAME_MAP = "_$$_map";
+
+ static final String VARIABLE_NAME_ITER = "_$$_iter";
+
+ static final String VARIABLE_NAME_MPO1 = "_$$_mpo1";
static final String VARIABLE_NAME_I = "i";
@@ -110,6 +93,18 @@ public class PackUnpackUtil {
static final String METHOD_NAME_PUT = "put";
+ static final String METHOD_NAME_GET = "get";
+
+ static final String METHOD_NAME_SIZE = "size";
+
+ static final String METHOD_NAME_KEYSET = "keySet";
+
+ static final String METHOD_NAME_ITERATOR = "iterator";
+
+ static final String METHOD_NAME_HASNEXT = "hasNext";
+
+ static final String METHOD_NAME_NEXT = "next";
+
static final String METHOD_NAME_MSGPACK = "messagePack";
static final String METHOD_NAME_MSGUNPACK = "messageUnpack";
@@ -147,6 +142,8 @@ public class PackUnpackUtil {
static final String METHOD_NAME_UNPACKARRAY = "unpackArray";
static final String METHOD_NAME_UNPACKMAP = "unpackMap";
+
+ static final String METHOD_NAME_ASARRAY = "asArray";
}
public static class Enhancer {
@@ -180,9 +177,9 @@ public class PackUnpackUtil {
setInterfaces(enhCtClass);
addConstructor(enhCtClass);
Field[] fields = getDeclaredFields(origClass);
- addMessagePackMethod(enhCtClass, origCtClass, fields);
- addMessageUnpackMethod(enhCtClass, origCtClass, fields);
- addMessageConvertMethod(enhCtClass, origCtClass, fields);
+ addMessagePackMethod(enhCtClass, fields);
+ addMessageUnpackMethod(enhCtClass, fields);
+ addMessageConvertMethod(enhCtClass, fields);
return createClass(enhCtClass);
}
@@ -243,11 +240,11 @@ public class PackUnpackUtil {
}
private void setInterfaces(CtClass enhCtClass) throws NotFoundException {
- CtClass pacCtClass = pool.get(Constants.TYPE_NAME_MSGPACKABLE);
+ CtClass pacCtClass = pool.get(MessagePackable.class.getName());
enhCtClass.addInterface(pacCtClass);
- CtClass unpacCtClass = pool.get(Constants.TYPE_NAME_MSGUNPACKABLE);
+ CtClass unpacCtClass = pool.get(MessageUnpackable.class.getName());
enhCtClass.addInterface(unpacCtClass);
- CtClass convCtClass = pool.get(Constants.TYPE_NAME_MSGCONVERTABLE);
+ CtClass convCtClass = pool.get(MessageConvertable.class.getName());
enhCtClass.addInterface(convCtClass);
}
@@ -296,24 +293,23 @@ public class PackUnpackUtil {
+ field.getName());
}
- private void addMessagePackMethod(CtClass enhCtClass,
- CtClass origCtClass, Field[] fields)
+ private void addMessagePackMethod(CtClass enhCtClass, Field[] fields)
throws CannotCompileException, NotFoundException {
StringBuilder sb = new StringBuilder();
sb.append(Constants.KEYWORD_MODIFIER_PUBLIC);
sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.TYPE_NAME_VOID);
+ sb.append(void.class.getName());
sb.append(Constants.CHAR_NAME_SPACE);
sb.append(Constants.METHOD_NAME_MSGPACK);
sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
- sb.append(Constants.TYPE_NAME_PACKER);
+ sb.append(Packer.class.getName());
sb.append(Constants.CHAR_NAME_SPACE);
sb.append(Constants.VARIABLE_NAME_PK);
sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(Constants.CHAR_NAME_SPACE);
sb.append(Constants.KEYWORD_THROWS);
sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.TYPE_NAME_IOEXCEPTION);
+ sb.append(IOException.class.getName());
sb.append(Constants.CHAR_NAME_SPACE);
sb.append(Constants.CHAR_NAME_LEFT_CURLY_BRACHET);
sb.append(Constants.CHAR_NAME_SPACE);
@@ -329,7 +325,7 @@ public class PackUnpackUtil {
insertCodeOfMessagePack(sb, field);
}
sb.append(Constants.CHAR_NAME_RIGHT_CURLY_BRACHET);
- //System.out.println("messagePack method: " + sb.toString());
+ // System.out.println("messagePack method: " + sb.toString());
CtMethod newCtMethod = CtNewMethod.make(sb.toString(), enhCtClass);
enhCtClass.addMethod(newCtMethod);
}
@@ -345,27 +341,26 @@ public class PackUnpackUtil {
sb.append(Constants.CHAR_NAME_SPACE);
}
- private void addMessageUnpackMethod(CtClass enhCtClass,
- CtClass origCtClass, Field[] fields)
+ private void addMessageUnpackMethod(CtClass enhCtClass, Field[] fields)
throws CannotCompileException, NotFoundException {
StringBuilder sb = new StringBuilder();
sb.append(Constants.KEYWORD_MODIFIER_PUBLIC);
sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.TYPE_NAME_VOID);
+ sb.append(void.class.getName());
sb.append(Constants.CHAR_NAME_SPACE);
sb.append(Constants.METHOD_NAME_MSGUNPACK);
sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
- sb.append(Constants.TYPE_NAME_UNPACKER);
+ sb.append(Unpacker.class.getName());
sb.append(Constants.CHAR_NAME_SPACE);
sb.append(Constants.VARIABLE_NAME_PK);
sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(Constants.CHAR_NAME_SPACE);
sb.append(Constants.KEYWORD_THROWS);
sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.TYPE_NAME_MSGTYPEEXCEPTION);
+ sb.append(MessageTypeException.class.getName());
sb.append(Constants.CHAR_NAME_COMMA);
sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.TYPE_NAME_IOEXCEPTION);
+ sb.append(IOException.class.getName());
sb.append(Constants.CHAR_NAME_SPACE);
sb.append(Constants.CHAR_NAME_LEFT_CURLY_BRACHET);
sb.append(Constants.CHAR_NAME_SPACE);
@@ -380,7 +375,7 @@ public class PackUnpackUtil {
insertCodeOfMessageUnpack(sb, field, field.getType());
}
sb.append(Constants.CHAR_NAME_RIGHT_CURLY_BRACHET);
- //System.out.println("messageUnpack method: " + sb.toString());
+ // System.out.println("messageUnpack method: " + sb.toString());
CtMethod newCtMethod = CtNewMethod.make(sb.toString(), enhCtClass);
enhCtClass.addMethod(newCtMethod);
}
@@ -680,33 +675,761 @@ public class PackUnpackUtil {
sb.append(Constants.CHAR_NAME_SPACE);
}
- private void addMessageConvertMethod(CtClass enhCtClass,
- CtClass origCtClass, Field[] fields)
+ private void addMessageConvertMethod(CtClass enhCtClass, Field[] fields)
throws CannotCompileException {
+ // messageConvert(MessagePackObject obj) throws MessageTypeException
StringBuilder sb = new StringBuilder();
- sb.append(Constants.KEYWORD_MODIFIER_PUBLIC).append(
- Constants.CHAR_NAME_SPACE).append(Constants.TYPE_NAME_VOID)
- .append(Constants.CHAR_NAME_SPACE).append(
- Constants.METHOD_NAME_MSGCONVERT).append(
- Constants.CHAR_NAME_LEFT_PARENTHESIS).append(
- Constants.TYPE_NAME_OBJECT).append(
- Constants.CHAR_NAME_SPACE).append(
- Constants.VARIABLE_NAME_OBJ).append(
- Constants.CHAR_NAME_RIGHT_PARENTHESIS).append(
- Constants.CHAR_NAME_SPACE).append(
- Constants.KEYWORD_THROWS).append(
- Constants.CHAR_NAME_SPACE).append(
- Constants.TYPE_NAME_MSGTYPEEXCEPTION).append(
- Constants.CHAR_NAME_SPACE).append(
- Constants.CHAR_NAME_LEFT_CURLY_BRACHET).append(
- Constants.CHAR_NAME_SPACE);
- // TODO
+ sb.append(Constants.KEYWORD_MODIFIER_PUBLIC);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(void.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.METHOD_NAME_MSGCONVERT);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(MessagePackObject.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_MPO1);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.KEYWORD_THROWS);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(MessageTypeException.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_LEFT_CURLY_BRACHET);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ insertCodeOfMessagePackObjectArrayGet(sb);
+ insertCodeOfMesageConvertCalls(sb, fields);
sb.append(Constants.CHAR_NAME_RIGHT_CURLY_BRACHET);
//System.out.println("messageConvert method: " + sb.toString());
CtMethod newCtMethod = CtNewMethod.make(sb.toString(), enhCtClass);
enhCtClass.addMethod(newCtMethod);
}
+ private void insertCodeOfMessagePackObjectArrayGet(StringBuilder sb) {
+ // MessagePackObject[] ary = obj.asArray();
+ sb.append(MessagePackObject.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_MPO1);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_ASARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+
+ private void insertCodeOfMesageConvertCalls(StringBuilder sb,
+ Field[] fields) {
+ for (int i = 0; i < fields.length; ++i) {
+ insertCodeOfMessageConvertCall(sb, fields[i], fields[i]
+ .getType(), i, null);
+ }
+ }
+
+ private void insertCodeOfMessageConvertCall(StringBuilder sb, Field f,
+ Class<?> c, int i, String name) {
+ if (c.isPrimitive()) { // primitive type
+ // f0 = objs[0].intValue();
+ if (c.equals(boolean.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asBoolean");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(byte.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asByte");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(short.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asShort");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(int.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asInt");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(long.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asLong");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(float.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asFloat");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(double.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asDouble");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else {
+ throw new PackUnpackUtilException("fatal error: "
+ + c.getName());
+ }
+ } else { // reference type
+ if (c.equals(Boolean.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ sb.append(Constants.KEYWORD_NEW);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Boolean.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asBoolean");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(Byte.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ sb.append(Constants.KEYWORD_NEW);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Byte.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asByte");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(Short.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ sb.append(Constants.KEYWORD_NEW);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Short.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asShort");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(Integer.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ sb.append(Constants.KEYWORD_NEW);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Integer.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asInt");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(Long.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ sb.append(Constants.KEYWORD_NEW);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Long.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asLong");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(Float.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ sb.append(Constants.KEYWORD_NEW);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Float.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asFloat");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(Double.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ sb.append(Constants.KEYWORD_NEW);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Double.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asDouble");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else {
+ if (c.equals(String.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asString");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(byte[].class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asByteArray");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (c.equals(BigInteger.class)) {
+ if (f != null) {
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ } else {
+ sb.append(name);
+ }
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asBigInteger");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ if (f != null) {
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+ } else if (List.class.isAssignableFrom(c)) {
+ insertCodeOfMessageConvertCallForList(sb, f, c, i);
+ } else if (Map.class.isAssignableFrom(c)) {
+ insertCodeOfMessageConveretCallForMap(sb, f, c, i);
+ } else if (MessageConvertable.class.isAssignableFrom(c)
+ || (getCache(c.getName()) != null)) {
+ // TODO
+ // TODO
+ // TODO
+ // ((MessageConvertable)f_i).messageConvert(ary[i]);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(MessageConvertable.class.getName());
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_MSGCONVERT);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ } else {
+ throw new MessageTypeException("Type error: "
+ + c.getName());
+ }
+ }
+ }
+ }
+
+ private void insertCodeOfMessageConvertCallForList(StringBuilder sb,
+ Field field, Class<?> type, int i) {
+ ParameterizedType generic = (ParameterizedType) field
+ .getGenericType();
+ Class<?> genericType = (Class<?>) generic.getActualTypeArguments()[0];
+
+ // List<MessagePackObject> list = ary[i].asList();
+ sb.append(List.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_LIST);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asList");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ // int size = list.size();
+ sb.append(int.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_SIZE);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_LIST);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_SIZE);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ // field initializer
+ sb.append(field.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.KEYWORD_NEW);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(ArrayList.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ // for loop
+ sb.append(Constants.KEYWORD_FOR);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(int.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_I);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(0);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_I);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_LESSTHAN);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_SIZE);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_PLUS);
+ sb.append(Constants.CHAR_NAME_PLUS);
+ sb.append(Constants.VARIABLE_NAME_I);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ // block begin
+ sb.append(Constants.CHAR_NAME_LEFT_CURLY_BRACHET);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(MessagePackObject.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append("_$$_val");
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(MessagePackObject.class.getName());
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.VARIABLE_NAME_LIST);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_GET);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.VARIABLE_NAME_I);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ sb.append(field.getName());
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_ADD);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ insertCodeOfMessageConvertCall(sb, null, genericType, -1, "_$$_val");
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ // block end
+ sb.append(Constants.CHAR_NAME_RIGHT_CURLY_BRACHET);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+
+ private void insertCodeOfMessageConveretCallForMap(StringBuilder sb,
+ Field f, Class<?> c, int i) {
+ ParameterizedType generic = (ParameterizedType) f.getGenericType();
+ Class<?> genericType0 = (Class<?>) generic.getActualTypeArguments()[0];
+ Class<?> genericType1 = (Class<?>) generic.getActualTypeArguments()[1];
+
+ // Map<MessagePackObject, MessagePackObject> map = ary[i].asMap();
+ sb.append(Map.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_MAP);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append("asMap");
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ // int size = list.size();
+ sb.append(int.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_SIZE);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_MAP);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_SIZE);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ // field initializer
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.KEYWORD_NEW);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(HashMap.class.getName());
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ // for loop
+ sb.append(Constants.KEYWORD_FOR);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Iterator.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ITER);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_MAP);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_KEYSET);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_ITERATOR);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.VARIABLE_NAME_ITER);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_HASNEXT);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_LEFT_CURLY_BRACHET);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ // block map.
+ sb.append(MessagePackObject.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append("_$$_key");
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(MessagePackObject.class.getName());
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.VARIABLE_NAME_ITER);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_NEXT);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(MessagePackObject.class.getName());
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append("_$$_val");
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_EQUAL);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(MessagePackObject.class.getName());
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.VARIABLE_NAME_MAP);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_GET);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append("_$$_key");
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_PUT);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ insertCodeOfMessageConvertCall(sb, null, genericType0, -1,
+ "_$$_key");
+ sb.append(Constants.CHAR_NAME_COMMA);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ insertCodeOfMessageConvertCall(sb, null, genericType1, -1,
+ "_$$_val");
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
+ sb.append(Constants.CHAR_NAME_RIGHT_CURLY_BRACHET);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+
private Class<?> createClass(CtClass enhCtClass)
throws CannotCompileException {
return enhCtClass.toClass(null, null);
@@ -749,6 +1472,19 @@ public class PackUnpackUtil {
}
}
+ public static Object initEnhancedInstance(MessagePackObject obj,
+ Class<?> origClass) {
+ Object ret = newEnhancedInstance(origClass);
+ ((MessageConvertable) ret).messageConvert(obj);
+ return ret;
+ }
+
+ public static Object initEnhancedInstance(MessagePackObject obj,
+ Object origObj) {
+ ((MessageConvertable) origObj).messageConvert(obj);
+ return origObj;
+ }
+
@MessagePackUnpackable
public static class Image {
public String uri = "";
@@ -789,6 +1525,6 @@ public class PackUnpackUtil {
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
Unpacker pac = new Unpacker(in);
pac.unpack((MessageUnpackable) dst);
- //System.out.println(src.equals(dst));
+ // System.out.println(src.equals(dst));
}
}
diff --git a/java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java b/java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java
index dbea7cb..4b1e666 100644
--- a/java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java
+++ b/java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java
@@ -12,6 +12,7 @@ import java.util.Map;
import junit.framework.TestCase;
import org.junit.Test;
+import org.msgpack.MessagePackObject;
import org.msgpack.MessageUnpackable;
import org.msgpack.Packer;
import org.msgpack.Unpacker;
@@ -19,7 +20,7 @@ import org.msgpack.Unpacker;
public class TestMessagePackUnpackable extends TestCase {
@Test
- public void testPrimitiveTypeFields() throws Exception {
+ public void testPrimitiveTypeFields01() throws Exception {
PrimitiveTypeFieldsClass src = (PrimitiveTypeFieldsClass) PackUnpackUtil
.newEnhancedInstance(PrimitiveTypeFieldsClass.class);
src.f0 = (byte) 0;
@@ -45,6 +46,36 @@ public class TestMessagePackUnpackable extends TestCase {
assertEquals(src.f6, dst.f6);
}
+ @Test
+ public void testPrimitiveTypeFields02() throws Exception {
+ PrimitiveTypeFieldsClass src = (PrimitiveTypeFieldsClass) PackUnpackUtil
+ .newEnhancedInstance(PrimitiveTypeFieldsClass.class);
+ src.f0 = (byte) 0;
+ src.f1 = 1;
+ src.f2 = 2;
+ src.f3 = 3;
+ src.f4 = 4;
+ src.f5 = 5;
+ src.f6 = false;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ new Packer(out).pack(src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ PrimitiveTypeFieldsClass dst = (PrimitiveTypeFieldsClass) PackUnpackUtil
+ .initEnhancedInstance(mpo, PrimitiveTypeFieldsClass.class);
+ assertEquals(src.f0, dst.f0);
+ assertEquals(src.f1, dst.f1);
+ assertEquals(src.f2, dst.f2);
+ assertEquals(src.f3, dst.f3);
+ assertEquals(src.f4, dst.f4);
+ assertEquals(src.f5, dst.f5);
+ assertEquals(src.f6, dst.f6);
+ assertFalse(it.hasNext());
+ }
+
@MessagePackUnpackable
public static class PrimitiveTypeFieldsClass {
public byte f0;
@@ -60,7 +91,7 @@ public class TestMessagePackUnpackable extends TestCase {
}
@Test
- public void testGeneralReferenceTypeFieldsClass() throws Exception {
+ public void testGeneralReferenceTypeFieldsClass01() throws Exception {
GeneralReferenceTypeFieldsClass src = (GeneralReferenceTypeFieldsClass) PackUnpackUtil
.newEnhancedInstance(GeneralReferenceTypeFieldsClass.class);
src.f0 = 0;
@@ -93,6 +124,44 @@ public class TestMessagePackUnpackable extends TestCase {
assertEquals(src.f9[1], dst.f9[1]);
}
+ @Test
+ public void testGeneralReferenceTypeFieldsClass02() throws Exception {
+ GeneralReferenceTypeFieldsClass src = (GeneralReferenceTypeFieldsClass) PackUnpackUtil
+ .newEnhancedInstance(GeneralReferenceTypeFieldsClass.class);
+ src.f0 = 0;
+ src.f1 = 1;
+ src.f2 = 2;
+ src.f3 = (long) 3;
+ src.f4 = (float) 4;
+ src.f5 = (double) 5;
+ src.f6 = false;
+ src.f7 = new BigInteger("7");
+ src.f8 = "8";
+ src.f9 = new byte[] { 0x01, 0x02 };
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ new Packer(out).pack(src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ GeneralReferenceTypeFieldsClass dst = (GeneralReferenceTypeFieldsClass) PackUnpackUtil
+ .initEnhancedInstance(mpo,
+ GeneralReferenceTypeFieldsClass.class);
+ assertEquals(src.f0, dst.f0);
+ assertEquals(src.f1, dst.f1);
+ assertEquals(src.f2, dst.f2);
+ assertEquals(src.f3, dst.f3);
+ assertEquals(src.f4, dst.f4);
+ assertEquals(src.f5, dst.f5);
+ assertEquals(src.f6, dst.f6);
+ assertEquals(src.f7, dst.f7);
+ assertEquals(src.f8, dst.f8);
+ assertEquals(src.f9[0], dst.f9[0]);
+ assertEquals(src.f9[1], dst.f9[1]);
+ assertFalse(it.hasNext());
+ }
+
@MessagePackUnpackable
public static class GeneralReferenceTypeFieldsClass {
public Byte f0;
@@ -110,7 +179,7 @@ public class TestMessagePackUnpackable extends TestCase {
}
}
- public void testListTypes() throws Exception {
+ public void testListTypes01() throws Exception {
SampleListTypes src = (SampleListTypes) PackUnpackUtil
.newEnhancedInstance(SampleListTypes.class);
src.f0 = new ArrayList<Integer>();
@@ -139,6 +208,39 @@ public class TestMessagePackUnpackable extends TestCase {
assertEquals(src.f2.get(i), dst.f2.get(i));
}
}
+
+ public void testListTypes02() throws Exception {
+ SampleListTypes src = (SampleListTypes) PackUnpackUtil
+ .newEnhancedInstance(SampleListTypes.class);
+ src.f0 = new ArrayList<Integer>();
+ src.f1 = new ArrayList<Integer>();
+ src.f1.add(1);
+ src.f1.add(2);
+ src.f1.add(3);
+ src.f2 = new ArrayList<String>();
+ src.f2.add("e1");
+ src.f2.add("e2");
+ src.f2.add("e3");
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ new Packer(out).pack(src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ SampleListTypes dst = (SampleListTypes) PackUnpackUtil
+ .initEnhancedInstance(mpo, SampleListTypes.class);
+ assertEquals(src.f0.size(), dst.f0.size());
+ assertEquals(src.f1.size(), dst.f1.size());
+ for (int i = 0; i < src.f1.size(); ++i) {
+ assertEquals(src.f1.get(i), dst.f1.get(i));
+ }
+ assertEquals(src.f2.size(), dst.f2.size());
+ for (int i = 0; i < src.f2.size(); ++i) {
+ assertEquals(src.f2.get(i), dst.f2.get(i));
+ }
+ assertFalse(it.hasNext());
+ }
@MessagePackUnpackable
public static class SampleListTypes {
@@ -150,7 +252,7 @@ public class TestMessagePackUnpackable extends TestCase {
}
}
- public void testMapTypes() throws Exception {
+ public void testMapTypes01() throws Exception {
SampleMapTypes src = (SampleMapTypes) PackUnpackUtil
.newEnhancedInstance(SampleMapTypes.class);
src.f0 = new HashMap<Integer, Integer>();
@@ -189,6 +291,49 @@ public class TestMessagePackUnpackable extends TestCase {
assertEquals(src.f2.get(s2), dst.f2.get(d2));
}
}
+
+ public void testMapTypes02() throws Exception {
+ SampleMapTypes src = (SampleMapTypes) PackUnpackUtil
+ .newEnhancedInstance(SampleMapTypes.class);
+ src.f0 = new HashMap<Integer, Integer>();
+ src.f1 = new HashMap<Integer, Integer>();
+ src.f1.put(1, 1);
+ src.f1.put(2, 2);
+ src.f1.put(3, 3);
+ src.f2 = new HashMap<String, Integer>();
+ src.f2.put("k1", 1);
+ src.f2.put("k2", 2);
+ src.f2.put("k3", 3);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ new Packer(out).pack(src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ SampleMapTypes dst = (SampleMapTypes) PackUnpackUtil
+ .initEnhancedInstance(mpo, SampleMapTypes.class);
+ assertEquals(src.f0.size(), dst.f0.size());
+ assertEquals(src.f1.size(), dst.f1.size());
+ Iterator<Integer> srcf1 = src.f1.keySet().iterator();
+ Iterator<Integer> dstf1 = dst.f1.keySet().iterator();
+ while (srcf1.hasNext()) {
+ Integer s1 = srcf1.next();
+ Integer d1 = dstf1.next();
+ assertEquals(s1, d1);
+ assertEquals(src.f1.get(s1), dst.f1.get(d1));
+ }
+ assertEquals(src.f2.size(), dst.f2.size());
+ Iterator<String> srcf2 = src.f2.keySet().iterator();
+ Iterator<String> dstf2 = dst.f2.keySet().iterator();
+ while (srcf2.hasNext()) {
+ String s2 = srcf2.next();
+ String d2 = dstf2.next();
+ assertEquals(s2, d2);
+ assertEquals(src.f2.get(s2), dst.f2.get(d2));
+ }
+ assertFalse(it.hasNext());
+ }
@MessagePackUnpackable
public static class SampleMapTypes {
@@ -351,7 +496,7 @@ public class TestMessagePackUnpackable extends TestCase {
}
@Test
- public void testFieldModifiers() throws Exception {
+ public void testFieldModifiers01() throws Exception {
FieldModifiersClass src = (FieldModifiersClass) PackUnpackUtil
.newEnhancedInstance(FieldModifiersClass.class);
src.f0 = 0;
@@ -372,6 +517,31 @@ public class TestMessagePackUnpackable extends TestCase {
assertTrue(src.f4 != dst.f4);
}
+ @Test
+ public void testFieldModifiers02() throws Exception {
+ FieldModifiersClass src = (FieldModifiersClass) PackUnpackUtil
+ .newEnhancedInstance(FieldModifiersClass.class);
+ src.f0 = 0;
+ src.f2 = 2;
+ src.f3 = 3;
+ src.f4 = 4;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ new Packer(out).pack(src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ FieldModifiersClass dst = (FieldModifiersClass) PackUnpackUtil
+ .initEnhancedInstance(mpo, FieldModifiersClass.class);
+ assertTrue(src.f0 == dst.f0);
+ assertTrue(src.f1 == dst.f1);
+ assertTrue(src.f2 != dst.f2);
+ assertTrue(src.f3 == dst.f3);
+ assertTrue(src.f4 != dst.f4);
+ assertFalse(it.hasNext());
+ }
+
@MessagePackUnpackable
public static class FieldModifiersClass {
public int f0;
@@ -385,7 +555,7 @@ public class TestMessagePackUnpackable extends TestCase {
}
@Test
- public void testNestedAnnotatedFieldClass() throws Exception {
+ public void testNestedAnnotatedFieldClass01() throws Exception {
NestedClass src2 = (NestedClass) PackUnpackUtil
.newEnhancedInstance(NestedClass.class);
BaseClass src = (BaseClass) PackUnpackUtil
@@ -407,6 +577,33 @@ public class TestMessagePackUnpackable extends TestCase {
assertTrue(src2.f2 == dst.f1.f2);
}
+ @Test
+ public void testNestedAnnotatedFieldClass02() throws Exception {
+ NestedClass src2 = (NestedClass) PackUnpackUtil
+ .newEnhancedInstance(NestedClass.class);
+ BaseClass src = (BaseClass) PackUnpackUtil
+ .newEnhancedInstance(BaseClass.class);
+ src.f0 = 0;
+ src2.f2 = 2;
+ src.f1 = src2;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ new Packer(out).pack(src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ NestedClass dst2 = (NestedClass) PackUnpackUtil
+ .newEnhancedInstance(NestedClass.class);
+ BaseClass dst = (BaseClass) PackUnpackUtil
+ .newEnhancedInstance(BaseClass.class);
+ dst.f1 = dst2;
+ dst = (BaseClass) PackUnpackUtil.initEnhancedInstance(mpo, dst);
+ assertTrue(src.f0 == dst.f0);
+ assertTrue(src2.f2 == dst.f1.f2);
+ assertFalse(it.hasNext());
+ }
+
@MessagePackUnpackable
public static class BaseClass {
public int f0;
@@ -425,7 +622,7 @@ public class TestMessagePackUnpackable extends TestCase {
}
@Test
- public void testExtendedClass() throws Exception {
+ public void testExtendedClass01() throws Exception {
SampleSubClass src = (SampleSubClass) PackUnpackUtil
.newEnhancedInstance(SampleSubClass.class);
src.f0 = 0;
@@ -452,6 +649,38 @@ public class TestMessagePackUnpackable extends TestCase {
assertTrue(src.f8 == dst.f8);
assertTrue(src.f9 != dst.f9);
}
+
+ @Test
+ public void testExtendedClass02() throws Exception {
+ SampleSubClass src = (SampleSubClass) PackUnpackUtil
+ .newEnhancedInstance(SampleSubClass.class);
+ src.f0 = 0;
+ src.f2 = 2;
+ src.f3 = 3;
+ src.f4 = 4;
+ src.f5 = 5;
+ src.f8 = 8;
+ src.f9 = 9;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ new Packer(out).pack(src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ SampleSubClass dst = (SampleSubClass) PackUnpackUtil
+ .initEnhancedInstance(mpo, SampleSubClass.class);
+ assertTrue(src.f0 == dst.f0);
+ assertTrue(src.f1 == dst.f1);
+ assertTrue(src.f2 != dst.f2);
+ assertTrue(src.f3 == dst.f3);
+ assertTrue(src.f4 != dst.f4);
+ assertTrue(src.f5 == dst.f5);
+ assertTrue(src.f6 == dst.f6);
+ assertTrue(src.f8 == dst.f8);
+ assertTrue(src.f9 != dst.f9);
+ assertFalse(it.hasNext());
+ }
@MessagePackUnpackable
public static class SampleSubClass extends SampleSuperClass {