summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorMuga Nishizawa <muga@f11vm.(none)>2010-09-28 22:51:38 +0900
committerMuga Nishizawa <muga@f11vm.(none)>2010-09-28 22:51:38 +0900
commit92ddb37ed300d86409db4852d85d2ab40d5b782e (patch)
tree929e837ae3270817c6d4f2b7fa0085de872b8c14 /java
parent732c8d7350f1b1f4009fbfd8c62304da4131ba48 (diff)
downloadmsgpack-python-92ddb37ed300d86409db4852d85d2ab40d5b782e.tar.gz
java: add test programs for DynamicCodeGenPacker, Unpacker, Converter classes
Diffstat (limited to 'java')
-rw-r--r--java/src/main/java/org/msgpack/util/codegen/Constants.java2
-rw-r--r--java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java787
-rw-r--r--java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenConverter.java17
-rw-r--r--java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerConverter.java591
-rw-r--r--java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerTemplate.java77
-rw-r--r--java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerUnpacker.java556
6 files changed, 1645 insertions, 385 deletions
diff --git a/java/src/main/java/org/msgpack/util/codegen/Constants.java b/java/src/main/java/org/msgpack/util/codegen/Constants.java
index 2226594..91d584e 100644
--- a/java/src/main/java/org/msgpack/util/codegen/Constants.java
+++ b/java/src/main/java/org/msgpack/util/codegen/Constants.java
@@ -5,5 +5,7 @@ public interface Constants extends BasicConstants {
String POSTFIX_TYPE_NAME_UNPACKER = "_$$_Unpacker";
+ String POSTFIX_TYPE_NAME_CONVERTER = "_$$_Converter";
+
String POSTFIX_TYPE_NAME_TEMPLATE = "_$$_Template";
}
diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java
index 9193b98..08851c8 100644
--- a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java
+++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java
@@ -22,6 +22,8 @@ import javassist.CtNewConstructor;
import javassist.CtNewMethod;
import javassist.NotFoundException;
+import org.msgpack.CustomConverter;
+import org.msgpack.CustomUnpacker;
import org.msgpack.MessageConvertable;
import org.msgpack.MessagePackObject;
import org.msgpack.MessagePacker;
@@ -93,6 +95,26 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
}
}
+ public Class<?> generateMessageConverterClass(Class<?> origClass) {
+ try {
+ String origName = origClass.getName();
+ String converterName = origName + POSTFIX_TYPE_NAME_CONVERTER
+ + inc();
+ checkClassValidation(origClass);
+ checkDefaultConstructorValidation(origClass);
+ CtClass converterCtClass = pool.makeClass(converterName);
+ setInterface(converterCtClass, MessageUnpacker.class);
+ addDefaultConstructor(converterCtClass);
+ Field[] fields = getDeclaredFields(origClass);
+ addConvertMethod(converterCtClass, origClass, fields);
+ return createClass(converterCtClass);
+ } catch (NotFoundException e) {
+ throw new DynamicCodeGenException(e.getMessage(), e);
+ } catch (CannotCompileException e) {
+ throw new DynamicCodeGenException(e.getMessage(), e);
+ }
+ }
+
public Class<?> generateTemplateClass(Class<?> origClass) {
try {
String origName = origClass.getName();
@@ -252,7 +274,7 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
new String[] { VARIABLE_NAME_PK }, new Class<?>[] {
MessageTypeException.class, IOException.class }, bsb
.toString());
- // System.out.println("unpack method: " + sb.toString());
+ //System.out.println("unpack method: " + sb.toString());
CtMethod newCtMethod = CtNewMethod.make(sb.toString(), unpackerCtClass);
unpackerCtClass.addMethod(newCtMethod);
}
@@ -298,6 +320,8 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
} else if (Map.class.isAssignableFrom(c)) {
// Map
insertCodeOfUnpackMethodCallForMapType(sb, f, c);
+ } else if (CustomUnpacker.isRegistered(c)) {
+ insertCodeOfUnpackMethodCallForRegisteredType(sb, f, c);
} else if (MessageUnpackable.class.isAssignableFrom(c)) {
// MessageUnpackable
insertCodeOfMessageUnpackCallForMsgUnpackableType(sb, f, c);
@@ -365,6 +389,8 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
sb.append(CHAR_NAME_SPACE);
// field initializer
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
sb.append(field.getName());
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_EQUAL);
@@ -406,6 +432,8 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
sb.append(CHAR_NAME_SPACE);
// block
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
sb.append(field.getName());
sb.append(CHAR_NAME_DOT);
sb.append(METHOD_NAME_ADD);
@@ -441,6 +469,8 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
sb.append(CHAR_NAME_SPACE);
// field initializer
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
sb.append(field.getName());
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_EQUAL);
@@ -482,6 +512,8 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
sb.append(CHAR_NAME_SPACE);
// block map.
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
sb.append(field.getName());
sb.append(CHAR_NAME_DOT);
sb.append(METHOD_NAME_PUT);
@@ -498,19 +530,87 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
sb.append(CHAR_NAME_SPACE);
}
- // private void insertCodeOfMessageUnpackCallForEnhancedType(StringBuilder
- // sb,
- // Field f, Class<?> c) {
- // c = this.getCache(c.getName());
- // insertCodeOfMessageUnpackCallForMsgUnpackableType(sb, f, c);
- // }
+ private void insertCodeOfUnpackMethodCallForRegisteredType(
+ StringBuilder sb, Field f, Class<?> c) {
+ // if (t.fi == null) { t.fi = new Foo(); }
+ // sb.append(KEYWORD_IF);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ // sb.append(VARIABLE_NAME_TARGET);
+ // sb.append(CHAR_NAME_DOT);
+ // sb.append(f.getName());
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_EQUAL);
+ // sb.append(CHAR_NAME_EQUAL);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(KEYWORD_NULL);
+ // sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_LEFT_CURLY_BRACKET);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(VARIABLE_NAME_TARGET);
+ // sb.append(CHAR_NAME_DOT);
+ // sb.append(f.getName());
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_EQUAL);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(KEYWORD_NEW);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(c.getName());
+ // sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ // sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ // sb.append(CHAR_NAME_SEMICOLON);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_RIGHT_CURLY_BRACKET);
+ // sb.append(CHAR_NAME_SPACE);
+
+ // tmpl1.unpack(new Unpacker(in));
+ // CustomUnpacker.get(c).pack(new Packer(out), src);
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(f.getName());
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(c.getName());
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CustomUnpacker.class.getName());
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_GET);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(c.getName() + ".class");
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_UNPACK);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_PK);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ insertSemicolon(sb);
+ //
+ // sb.append(VARIABLE_NAME_PK);
+ // sb.append(CHAR_NAME_DOT);
+ // sb.append(METHOD_NAME_UNPACK);
+ // sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ // sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ // sb.append(MessageUnpackable.class.getName());
+ // sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ // sb.append(VARIABLE_NAME_TARGET);
+ // sb.append(CHAR_NAME_DOT);
+ // sb.append(f.getName());
+ // sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ // sb.append(CHAR_NAME_SEMICOLON);
+ // sb.append(CHAR_NAME_SPACE);
+ }
private void insertCodeOfMessageUnpackCallForMsgUnpackableType(
StringBuilder sb, Field f, Class<?> c) {
- // if (fi == null) { fi = new Foo_$$_Enhanced(); }
+ // if (t.fi == null) { t.fi = new Foo(); }
sb.append(KEYWORD_IF);
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
sb.append(f.getName());
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_EQUAL);
@@ -521,6 +621,8 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_LEFT_CURLY_BRACKET);
sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
sb.append(f.getName());
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_EQUAL);
@@ -543,6 +645,8 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(MessageUnpackable.class.getName());
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
sb.append(f.getName());
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(CHAR_NAME_SEMICOLON);
@@ -559,7 +663,7 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
new Class<?>[] { MessagePackObject.class },
new String[] { VARIABLE_NAME_MPO },
new Class<?>[] { MessageTypeException.class }, bsb.toString());
- // System.out.println("convert method: " + sb.toString());
+ //System.out.println("convert method: " + sb.toString());
CtMethod newCtMethod = CtNewMethod.make(sb.toString(), tmplCtClass);
tmplCtClass.addMethod(newCtMethod);
}
@@ -580,30 +684,30 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
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_MPO);
- 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);
+ sb.append(CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_ARRAY);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_MPO);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_ASARRAY);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
}
private void insertCodeOfConvertMethodCalls(StringBuilder sb, Field[] fields) {
for (int i = 0; i < fields.length; ++i) {
- insertCodeOfMessageConvertCall(sb, fields[i], fields[i].getType(),
+ insertCodeOfConvertMethodCall(sb, fields[i], fields[i].getType(),
i, null);
}
}
- private void insertCodeOfMessageConvertCall(StringBuilder sb, Field f,
+ private void insertCodeOfConvertMethodCall(StringBuilder sb, Field f,
Class<?> c, int i, String v) {
if (c.isPrimitive()) { // primitive type
insertCodeOfConvertMethodCallForPrimTypes(sb, f, c, i, v);
@@ -613,137 +717,196 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
|| c.equals(Float.class) || c.equals(Long.class)
|| c.equals(Double.class)) {
// wrapper type
- insertCodeOfMessageConvertCallForWrapTypes(sb, f, c, i, v);
+ insertCodeOfConvertMethodCallForWrapTypes(sb, f, c, i, v);
} else if (c.equals(String.class) || c.equals(byte[].class)
|| c.equals(BigInteger.class)) {
insertCodeOfConvertMethodCallForPrimTypes(sb, f, c, i, v);
} else if (List.class.isAssignableFrom(c)) {
- insertCodeOfMessageConvertCallForList(sb, f, c, i);
+ insertCodeOfConvertMethodCallForList(sb, f, c, i);
} else if (Map.class.isAssignableFrom(c)) {
- insertCodeOfMessageConvertCallForMap(sb, f, c, i);
+ insertCodeOfConvertMethodCallForMapType(sb, f, c, i);
} else if (MessageConvertable.class.isAssignableFrom(c)) {
insertCodeOfMessageConvertCallForMsgConvtblType(sb, f, c, i);
+ } else if (CustomConverter.isRegistered(c)) {
+ insertCodeOfMessageConvertCallForRegisteredType(sb, f, c, i);
} else {
throw new MessageTypeException("Type error: " + c.getName());
}
}
}
- //
- // private void insertCodeOfMessageConvertCallForEnhancedType(
- // StringBuilder sb, Field f, Class<?> c, int i) {
- // c = getCache(c.getName());
- // insertCodeOfMessageConvertCallForMsgConvtblType(sb, f, c, i);
- // }
+ private void insertCodeOfMessageConvertCallForRegisteredType(
+ StringBuilder sb, Field f, Class<?> c, int i) {
+ // if (t.fi == null) { t.fi = new Foo(); }
+ // sb.append(KEYWORD_IF);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ // sb.append(VARIABLE_NAME_TARGET);
+ // sb.append(CHAR_NAME_DOT);
+ // sb.append(f.getName());
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_EQUAL);
+ // sb.append(CHAR_NAME_EQUAL);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(KEYWORD_NULL);
+ // sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_LEFT_CURLY_BRACKET);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(VARIABLE_NAME_TARGET);
+ // sb.append(CHAR_NAME_DOT);
+ // sb.append(f.getName());
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_EQUAL);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(KEYWORD_NEW);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(c.getName());
+ // sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ // sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ // sb.append(CHAR_NAME_SEMICOLON);
+ // sb.append(CHAR_NAME_SPACE);
+ // sb.append(CHAR_NAME_RIGHT_CURLY_BRACKET);
+ // sb.append(CHAR_NAME_SPACE);
+
+ // ((MessageConvertable)f_i).messageConvert(ary[i]);
+ // obj = tmpl.convert(mpo);
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(f.getName());
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(c.getName());
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CustomConverter.class.getName());
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_GET);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(c.getName() + ".class");
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_CONVERT);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_ARRAY);
+ sb.append(CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ insertSemicolon(sb);
+ }
private void insertCodeOfMessageConvertCallForMsgConvtblType(
StringBuilder sb, Field f, Class<?> c, int i) {
// if (fi == null) { fi = new Foo_$$_Enhanced(); }
- sb.append(Constants.KEYWORD_IF);
- sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(KEYWORD_IF);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(f.getName());
- sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.CHAR_NAME_EQUAL);
- sb.append(Constants.CHAR_NAME_EQUAL);
- sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.KEYWORD_NULL);
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.CHAR_NAME_LEFT_CURLY_BRACKET);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(KEYWORD_NULL);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_LEFT_CURLY_BRACKET);
+ sb.append(CHAR_NAME_SPACE);
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(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(KEYWORD_NEW);
+ sb.append(CHAR_NAME_SPACE);
sb.append(c.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);
- sb.append(Constants.CHAR_NAME_RIGHT_CURLY_BRACKET);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_RIGHT_CURLY_BRACKET);
+ sb.append(CHAR_NAME_SPACE);
// ((MessageConvertable)f_i).messageConvert(ary[i]);
- sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(MessageConvertable.class.getName());
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(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(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_MSGCONVERT);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_ARRAY);
+ sb.append(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);
+ sb.append(CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
}
private void insertCodeOfConvertMethodCallForPrimTypes(StringBuilder sb,
Field f, Class<?> c, int i, String name) {
// target.f0 = objs[0].intValue();
if (f != null) {
- sb.append(Constants.VARIABLE_NAME_TARGET);
- sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
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(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_ARRAY);
+ sb.append(CHAR_NAME_LEFT_SQUARE_BRACKET);
sb.append(i);
- sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(CHAR_NAME_RIGHT_SQUARE_BRACKET);
} else {
sb.append(name);
}
- sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(CHAR_NAME_DOT);
if (c.equals(boolean.class)) {
- sb.append(Constants.METHOD_NAME_ASBOOLEAN);
+ sb.append(METHOD_NAME_ASBOOLEAN);
} else if (c.equals(byte.class)) {
- sb.append(Constants.METHOD_NAME_ASBYTE);
+ sb.append(METHOD_NAME_ASBYTE);
} else if (c.equals(short.class)) {
- sb.append(Constants.METHOD_NAME_ASSHORT);
+ sb.append(METHOD_NAME_ASSHORT);
} else if (c.equals(int.class)) {
- sb.append(Constants.METHOD_NAME_ASINT);
+ sb.append(METHOD_NAME_ASINT);
} else if (c.equals(float.class)) {
- sb.append(Constants.METHOD_NAME_ASFLOAT);
+ sb.append(METHOD_NAME_ASFLOAT);
} else if (c.equals(long.class)) {
- sb.append(Constants.METHOD_NAME_ASLONG);
+ sb.append(METHOD_NAME_ASLONG);
} else if (c.equals(double.class)) {
- sb.append(Constants.METHOD_NAME_ASDOUBLE);
+ sb.append(METHOD_NAME_ASDOUBLE);
} else if (c.equals(String.class)) {
- sb.append(Constants.METHOD_NAME_ASSTRING);
+ sb.append(METHOD_NAME_ASSTRING);
} else if (c.equals(byte[].class)) {
- sb.append(Constants.METHOD_NAME_ASBYTEARRAY);
+ sb.append(METHOD_NAME_ASBYTEARRAY);
} else if (c.equals(BigInteger.class)) {
- sb.append(Constants.METHOD_NAME_ASBIGINTEGER);
+ sb.append(METHOD_NAME_ASBIGINTEGER);
} else {
throw new MessageTypeException("Type error: " + c.getName());
}
- sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
if (f != null) {
- sb.append(Constants.CHAR_NAME_SEMICOLON);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
}
}
- private void insertCodeOfMessageConvertCallForWrapTypes(StringBuilder sb,
+ private void insertCodeOfConvertMethodCallForWrapTypes(StringBuilder sb,
Field f, Class<?> c, int i, String v) {
if (f != null) {
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
sb.append(f.getName());
- sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.CHAR_NAME_EQUAL);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
}
- sb.append(Constants.KEYWORD_NEW);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(KEYWORD_NEW);
+ sb.append(CHAR_NAME_SPACE);
if (c.equals(Boolean.class)) {
sb.append(Boolean.class.getName());
} else if (c.equals(Byte.class)) {
@@ -761,155 +924,159 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
} else {
throw new MessageTypeException("Type error: " + c.getName());
}
- sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
if (f != null) {
- sb.append(Constants.VARIABLE_NAME_ARRAY);
- sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(VARIABLE_NAME_ARRAY);
+ sb.append(CHAR_NAME_LEFT_SQUARE_BRACKET);
sb.append(i);
- sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(CHAR_NAME_RIGHT_SQUARE_BRACKET);
} else {
sb.append(v);
}
- sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(CHAR_NAME_DOT);
if (c.equals(Boolean.class)) {
- sb.append(Constants.METHOD_NAME_ASBOOLEAN);
+ sb.append(METHOD_NAME_ASBOOLEAN);
} else if (c.equals(Byte.class)) {
- sb.append(Constants.METHOD_NAME_ASBYTE);
+ sb.append(METHOD_NAME_ASBYTE);
} else if (c.equals(Short.class)) {
- sb.append(Constants.METHOD_NAME_ASSHORT);
+ sb.append(METHOD_NAME_ASSHORT);
} else if (c.equals(Integer.class)) {
- sb.append(Constants.METHOD_NAME_ASINT);
+ sb.append(METHOD_NAME_ASINT);
} else if (c.equals(Float.class)) {
- sb.append(Constants.METHOD_NAME_ASFLOAT);
+ sb.append(METHOD_NAME_ASFLOAT);
} else if (c.equals(Long.class)) {
- sb.append(Constants.METHOD_NAME_ASLONG);
+ sb.append(METHOD_NAME_ASLONG);
} else if (c.equals(Double.class)) {
- sb.append(Constants.METHOD_NAME_ASDOUBLE);
+ sb.append(METHOD_NAME_ASDOUBLE);
} else {
throw new MessageTypeException("Type error: " + c.getName());
}
- sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
if (f != null) {
- sb.append(Constants.CHAR_NAME_SEMICOLON);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
}
}
- private void insertCodeOfMessageConvertCallForList(StringBuilder sb,
+ private void insertCodeOfConvertMethodCallForList(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(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_LIST);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_ARRAY);
+ sb.append(CHAR_NAME_LEFT_SQUARE_BRACKET);
sb.append(i);
- sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
- sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(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);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(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);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_SIZE);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_LIST);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_SIZE);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
// field initializer
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
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(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(KEYWORD_NEW);
+ sb.append(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);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(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(KEYWORD_FOR);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(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(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_I);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(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);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_I);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_LESSTHAN);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_SIZE);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_PLUS);
+ sb.append(CHAR_NAME_PLUS);
+ sb.append(VARIABLE_NAME_I);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SPACE);
// block begin
- sb.append(Constants.CHAR_NAME_LEFT_CURLY_BRACKET);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_LEFT_CURLY_BRACKET);
+ sb.append(CHAR_NAME_SPACE);
sb.append(MessagePackObject.class.getName());
- sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.VARIABLE_NAME_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(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_VAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(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(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_LIST);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_GET);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_I);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
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,
- Constants.VARIABLE_NAME_VAL);
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_SEMICOLON);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_ADD);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ insertCodeOfConvertMethodCall(sb, null, genericType, -1,
+ VARIABLE_NAME_VAL);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
// block end
- sb.append(Constants.CHAR_NAME_RIGHT_CURLY_BRACKET);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_RIGHT_CURLY_BRACKET);
+ sb.append(CHAR_NAME_SPACE);
}
- private void insertCodeOfMessageConvertCallForMap(StringBuilder sb,
+ private void insertCodeOfConvertMethodCallForMapType(StringBuilder sb,
Field f, Class<?> c, int i) {
ParameterizedType generic = (ParameterizedType) f.getGenericType();
Class<?> genericType0 = (Class<?>) generic.getActualTypeArguments()[0];
@@ -917,133 +1084,137 @@ public class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
// 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(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_MAP);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_ARRAY);
+ sb.append(CHAR_NAME_LEFT_SQUARE_BRACKET);
sb.append(i);
- sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
- sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(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);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(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);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_SIZE);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_MAP);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_SIZE);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
// field initializer
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
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(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(KEYWORD_NEW);
+ sb.append(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);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(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(KEYWORD_FOR);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(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_BRACKET);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_ITER);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_MAP);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_KEYSET);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_ITERATOR);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_ITER);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_HASNEXT);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_LEFT_CURLY_BRACKET);
+ sb.append(CHAR_NAME_SPACE);
// block map.
sb.append(MessagePackObject.class.getName());
- sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.VARIABLE_NAME_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(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_KEY);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(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(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_ITER);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_NEXT);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
sb.append(MessagePackObject.class.getName());
- sb.append(Constants.CHAR_NAME_SPACE);
- sb.append(Constants.VARIABLE_NAME_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(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_VAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_EQUAL);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(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(Constants.VARIABLE_NAME_KEY);
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_SEMICOLON);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_MAP);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_GET);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(VARIABLE_NAME_KEY);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
+ sb.append(VARIABLE_NAME_TARGET);
+ sb.append(CHAR_NAME_DOT);
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,
- Constants.VARIABLE_NAME_KEY);
- sb.append(Constants.CHAR_NAME_COMMA);
- sb.append(Constants.CHAR_NAME_SPACE);
- insertCodeOfMessageConvertCall(sb, null, genericType1, -1,
- Constants.VARIABLE_NAME_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_BRACKET);
- sb.append(Constants.CHAR_NAME_SPACE);
+ sb.append(CHAR_NAME_DOT);
+ sb.append(METHOD_NAME_PUT);
+ sb.append(CHAR_NAME_LEFT_PARENTHESIS);
+ insertCodeOfConvertMethodCall(sb, null, genericType0, -1,
+ VARIABLE_NAME_KEY);
+ sb.append(CHAR_NAME_COMMA);
+ sb.append(CHAR_NAME_SPACE);
+ insertCodeOfConvertMethodCall(sb, null, genericType1, -1,
+ VARIABLE_NAME_VAL);
+ sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(CHAR_NAME_SEMICOLON);
+ sb.append(CHAR_NAME_SPACE);
+
+ sb.append(CHAR_NAME_RIGHT_CURLY_BRACKET);
+ sb.append(CHAR_NAME_SPACE);
}
private Class<?> createClass(CtClass packerCtClass)
diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenConverter.java b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenConverter.java
new file mode 100644
index 0000000..590cde1
--- /dev/null
+++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenConverter.java
@@ -0,0 +1,17 @@
+package org.msgpack.util.codegen;
+
+import org.msgpack.MessageConverter;
+
+public class DynamicCodeGenConverter {
+ public static MessageConverter create(Class<?> c) {
+ try {
+ DynamicCodeGen gen = DynamicCodeGen.getInstance();
+ Class<?> unpackerClass = gen.generateMessageConverterClass(c);
+ return (MessageConverter) unpackerClass.newInstance();
+ } catch (InstantiationException e) {
+ throw new DynamicCodeGenException(e.getMessage(), e);
+ } catch (IllegalAccessException e) {
+ throw new DynamicCodeGenException(e.getMessage(), e);
+ }
+ }
+}
diff --git a/java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerConverter.java b/java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerConverter.java
new file mode 100644
index 0000000..7ffcd88
--- /dev/null
+++ b/java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerConverter.java
@@ -0,0 +1,591 @@
+package org.msgpack.util.codegen;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+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 junit.framework.TestCase;
+
+import org.junit.Test;
+import org.msgpack.CustomConverter;
+import org.msgpack.CustomPacker;
+import org.msgpack.CustomUnpacker;
+import org.msgpack.MessagePackObject;
+import org.msgpack.MessagePacker;
+import org.msgpack.Packer;
+import org.msgpack.Template;
+import org.msgpack.Unpacker;
+
+public class TestDynamicCodeGenPackerConverter extends TestCase {
+
+ @Test
+ public void testPrimitiveTypeFields() throws Exception {
+ PrimitiveTypeFieldsClass src = new PrimitiveTypeFieldsClass();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(PrimitiveTypeFieldsClass.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate
+ .create(PrimitiveTypeFieldsClass.class);
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ PrimitiveTypeFieldsClass dst = (PrimitiveTypeFieldsClass) tmpl
+ .convert(mpo);
+ 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());
+ }
+
+ public static class PrimitiveTypeFieldsClass {
+ public byte f0;
+ public short f1;
+ public int f2;
+ public long f3;
+ public float f4;
+ public double f5;
+ public boolean f6;
+
+ public PrimitiveTypeFieldsClass() {
+ }
+ }
+
+ @Test
+ public void testGeneralReferenceTypeFieldsClass() throws Exception {
+ GeneralReferenceTypeFieldsClass src = new GeneralReferenceTypeFieldsClass();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(GeneralReferenceTypeFieldsClass.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate
+ .create(GeneralReferenceTypeFieldsClass.class);
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ GeneralReferenceTypeFieldsClass dst = (GeneralReferenceTypeFieldsClass) tmpl
+ .convert(mpo);
+ 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());
+ }
+
+ public static class GeneralReferenceTypeFieldsClass {
+ public Byte f0;
+ public Short f1;
+ public Integer f2;
+ public Long f3;
+ public Float f4;
+ public Double f5;
+ public Boolean f6;
+ public BigInteger f7;
+ public String f8;
+ public byte[] f9;
+
+ public GeneralReferenceTypeFieldsClass() {
+ }
+ }
+
+ public void testListTypes() throws Exception {
+ SampleListTypes src = new SampleListTypes();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(SampleListTypes.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate.create(SampleListTypes.class);
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ SampleListTypes dst = (SampleListTypes) tmpl.convert(mpo);
+ 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());
+ }
+
+ public static class SampleListTypes {
+ public List<Integer> f0;
+ public List<Integer> f1;
+ public List<String> f2;
+
+ public SampleListTypes() {
+ }
+ }
+
+ public void testMapTypes() throws Exception {
+ SampleMapTypes src = new SampleMapTypes();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(SampleMapTypes.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate.create(SampleMapTypes.class);
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ SampleMapTypes dst = (SampleMapTypes) tmpl.convert(mpo);
+ 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());
+ }
+
+ public static class SampleMapTypes {
+ public Map<Integer, Integer> f0;
+ public Map<Integer, Integer> f1;
+ public Map<String, Integer> f2;
+
+ public SampleMapTypes() {
+ }
+ }
+
+ @Test
+ public void testDefaultConstructorModifiers01() throws Exception {
+ try {
+ DynamicCodeGenPacker.create(NoDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(PrivateDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(ProtectedDefaultConstructorClass.class);
+ assertTrue(true);
+ } catch (DynamicCodeGenException e) {
+ fail();
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(PackageDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ @Test
+ public void testDefaultConstructorModifiers02() throws Exception {
+ try {
+ DynamicCodeGenTemplate.create(NoDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenTemplate.create(PrivateDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenTemplate
+ .create(ProtectedDefaultConstructorClass.class);
+ assertTrue(true);
+ } catch (DynamicCodeGenException e) {
+ fail();
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenTemplate.create(PackageDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ public static class NoDefaultConstructorClass {
+ public NoDefaultConstructorClass(int i) {
+ }
+ }
+
+ public static class PrivateDefaultConstructorClass {
+ private PrivateDefaultConstructorClass() {
+ }
+ }
+
+ public static class ProtectedDefaultConstructorClass {
+ protected ProtectedDefaultConstructorClass() {
+ }
+ }
+
+ public static class PackageDefaultConstructorClass {
+ PackageDefaultConstructorClass() {
+ }
+ }
+
+ @Test
+ public void testClassModifiers01() throws Exception {
+ try {
+ DynamicCodeGenPacker.create(PrivateModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(ProtectedModifierClass.class);
+ assertTrue(true);
+ } catch (DynamicCodeGenException e) {
+ fail();
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(PackageModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ @Test
+ public void testClassModifiers02() throws Exception {
+ try {
+ DynamicCodeGenTemplate.create(PrivateModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenTemplate.create(ProtectedModifierClass.class);
+ assertTrue(true);
+ } catch (DynamicCodeGenException e) {
+ fail();
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenTemplate.create(PackageModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ private static class PrivateModifierClass {
+ }
+
+ protected static class ProtectedModifierClass {
+ protected ProtectedModifierClass() {
+ }
+ }
+
+ static class PackageModifierClass {
+ }
+
+ @Test
+ public void testFinalClassAndAbstractClass01() throws Exception {
+ try {
+ DynamicCodeGenPacker.create(FinalModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(AbstractModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ @Test
+ public void testFinalClassAndAbstractClass02() throws Exception {
+ try {
+ DynamicCodeGenTemplate.create(FinalModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenTemplate.create(AbstractModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ public final static class FinalModifierClass {
+ }
+
+ public abstract static class AbstractModifierClass {
+ }
+
+ @Test
+ public void testInterfaceAndEnumType01() throws Exception {
+ try {
+ DynamicCodeGenPacker.create(SampleInterface.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(SampleEnum.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ @Test
+ public void testInterfaceAndEnumType02() throws Exception {
+ try {
+ DynamicCodeGenTemplate.create(SampleInterface.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenTemplate.create(SampleEnum.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ public interface SampleInterface {
+ }
+
+ public enum SampleEnum {
+ }
+
+ @Test
+ public void testFieldModifiers() throws Exception {
+ FieldModifiersClass src = new FieldModifiersClass();
+ src.f0 = 0;
+ src.f2 = 2;
+ src.f3 = 3;
+ src.f4 = 4;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(FieldModifiersClass.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate
+ .create(FieldModifiersClass.class);
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ FieldModifiersClass dst = (FieldModifiersClass) tmpl.convert(mpo);
+ 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());
+ }
+
+ public static class FieldModifiersClass {
+ public int f0;
+ public final int f1 = 1;
+ private int f2;
+ protected int f3;
+ int f4;
+
+ public FieldModifiersClass() {
+ }
+ }
+
+ @Test
+ public void testNestedFieldClass() throws Exception {
+ MessagePacker packer2 = DynamicCodeGenPacker.create(NestedClass.class);
+ CustomPacker.register(NestedClass.class, packer2);
+ MessagePacker packer1 = DynamicCodeGenPacker.create(BaseClass.class);
+ CustomPacker.register(BaseClass.class, packer1);
+ Template tmpl2 = DynamicCodeGenTemplate.create(NestedClass.class);
+ CustomUnpacker.register(NestedClass.class, tmpl2);
+ CustomConverter.register(NestedClass.class, tmpl2);
+ Template tmpl1 = DynamicCodeGenTemplate.create(BaseClass.class);
+ CustomUnpacker.register(BaseClass.class, tmpl1);
+ CustomConverter.register(BaseClass.class, tmpl1);
+ BaseClass src = new BaseClass();
+ NestedClass src2 = new NestedClass();
+ src.f0 = 0;
+ src2.f2 = 2;
+ src.f1 = src2;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ packer1.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ BaseClass dst = (BaseClass) tmpl1.convert(mpo);
+ assertTrue(src.f0 == dst.f0);
+ assertTrue(src.f1.f2 == dst.f1.f2);
+ assertFalse(it.hasNext());
+ }
+
+ public static class BaseClass {
+ public int f0;
+ public NestedClass f1;
+
+ public BaseClass() {
+ }
+ }
+
+ public static class NestedClass {
+ public int f2;
+
+ public NestedClass() {
+ }
+ }
+
+ @Test
+ public void testExtendedClass() throws Exception {
+ SampleSubClass src = new SampleSubClass();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(SampleSubClass.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate.create(SampleSubClass.class);
+ Unpacker pac = new Unpacker(in);
+ Iterator<MessagePackObject> it = pac.iterator();
+ assertTrue(it.hasNext());
+ MessagePackObject mpo = it.next();
+ SampleSubClass dst = (SampleSubClass) tmpl.convert(mpo);
+ 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());
+ }
+
+ public static class SampleSubClass extends SampleSuperClass {
+ public int f0;
+ public final int f1 = 1;
+ private int f2;
+ protected int f3;
+ int f4;
+
+ public SampleSubClass() {
+ }
+ }
+
+ public static class SampleSuperClass {
+ public int f5;
+ public final int f6 = 2;
+ private int f7;
+ protected int f8;
+ int f9;
+
+ public SampleSuperClass() {
+ }
+ }
+}
diff --git a/java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerTemplate.java b/java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerTemplate.java
deleted file mode 100644
index aba8920..0000000
--- a/java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerTemplate.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.msgpack.util.codegen;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
-import org.junit.Test;
-import org.msgpack.CustomPacker;
-import org.msgpack.MessagePacker;
-import org.msgpack.Packer;
-import org.msgpack.ReflectionTemplate;
-import org.msgpack.Template;
-import org.msgpack.Unpacker;
-import org.msgpack.util.codegen.DynamicCodeGenPacker;
-import org.msgpack.util.codegen.DynamicCodeGenTemplate;
-
-import static org.junit.Assert.*;
-
-public class TestDynamicCodeGenPackerTemplate {
-
- public static class StringFieldClass {
- public String s1;
- public String s2;
- public StringFieldClass() { }
- }
-
- @Test
- public void testPackConvert() throws Exception {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
-
- MessagePacker packer = DynamicCodeGenPacker.create(StringFieldClass.class);
-
- StringFieldClass src = new StringFieldClass();
-
- src.s1 = "kumofs";
- src.s2 = "frsyuki";
-
- packer.pack(new Packer(out), src);
-
- Template tmpl = DynamicCodeGenTemplate.create(StringFieldClass.class);
-
- ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
-
- Object obj = tmpl.unpack(new Unpacker(in));
- assertEquals(obj.getClass(), StringFieldClass.class);
-
- StringFieldClass dst = (StringFieldClass)obj;
- assertEquals(src.s1, dst.s1);
- assertEquals(src.s2, dst.s2);
- }
-
- @Test
- public void testPackConvert02() throws Exception {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
-
- CustomPacker.register(StringFieldClass.class, DynamicCodeGenPacker.create(StringFieldClass.class));
-
-
- StringFieldClass src = new StringFieldClass();
-
- src.s1 = "kumofs";
- src.s2 = "frsyuki";
-
- new Packer(out).pack(src);
-
- Template tmpl = ReflectionTemplate.create(StringFieldClass.class);
-
- ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
-
- Object obj = tmpl.unpack(new Unpacker(in));
- assertEquals(obj.getClass(), StringFieldClass.class);
-
- StringFieldClass dst = (StringFieldClass)obj;
- assertEquals(src.s1, dst.s1);
- assertEquals(src.s2, dst.s2);
- }
-}
-
diff --git a/java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerUnpacker.java b/java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerUnpacker.java
new file mode 100644
index 0000000..08d0e52
--- /dev/null
+++ b/java/src/test/java/org/msgpack/util/codegen/TestDynamicCodeGenPackerUnpacker.java
@@ -0,0 +1,556 @@
+package org.msgpack.util.codegen;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+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 org.junit.Test;
+import org.msgpack.CustomConverter;
+import org.msgpack.CustomPacker;
+import org.msgpack.CustomUnpacker;
+import org.msgpack.MessagePacker;
+import org.msgpack.Packer;
+import org.msgpack.Template;
+import org.msgpack.Unpacker;
+
+import junit.framework.TestCase;
+
+public class TestDynamicCodeGenPackerUnpacker extends TestCase {
+
+ @Test
+ public void testPrimitiveTypeFields() throws Exception {
+ PrimitiveTypeFieldsClass src = new PrimitiveTypeFieldsClass();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(PrimitiveTypeFieldsClass.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate
+ .create(PrimitiveTypeFieldsClass.class);
+ PrimitiveTypeFieldsClass dst = (PrimitiveTypeFieldsClass) tmpl
+ .unpack(new Unpacker(in));
+ 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);
+ }
+
+ public static class PrimitiveTypeFieldsClass {
+ public byte f0;
+ public short f1;
+ public int f2;
+ public long f3;
+ public float f4;
+ public double f5;
+ public boolean f6;
+
+ public PrimitiveTypeFieldsClass() {
+ }
+ }
+
+ @Test
+ public void testGeneralReferenceTypeFieldsClass() throws Exception {
+ GeneralReferenceTypeFieldsClass src = new GeneralReferenceTypeFieldsClass();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(GeneralReferenceTypeFieldsClass.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate
+ .create(GeneralReferenceTypeFieldsClass.class);
+ GeneralReferenceTypeFieldsClass dst = (GeneralReferenceTypeFieldsClass) tmpl
+ .unpack(new Unpacker(in));
+ 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]);
+ }
+
+ public static class GeneralReferenceTypeFieldsClass {
+ public Byte f0;
+ public Short f1;
+ public Integer f2;
+ public Long f3;
+ public Float f4;
+ public Double f5;
+ public Boolean f6;
+ public BigInteger f7;
+ public String f8;
+ public byte[] f9;
+
+ public GeneralReferenceTypeFieldsClass() {
+ }
+ }
+
+ public void testListTypes() throws Exception {
+ SampleListTypes src = new SampleListTypes();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(SampleListTypes.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate.create(SampleListTypes.class);
+ SampleListTypes dst = (SampleListTypes) tmpl.unpack(new Unpacker(in));
+ 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));
+ }
+ }
+
+ public static class SampleListTypes {
+ public List<Integer> f0;
+ public List<Integer> f1;
+ public List<String> f2;
+
+ public SampleListTypes() {
+ }
+ }
+
+ public void testMapTypes() throws Exception {
+ SampleMapTypes src = new SampleMapTypes();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(SampleMapTypes.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate.create(SampleMapTypes.class);
+ SampleMapTypes dst = (SampleMapTypes) tmpl.unpack(new Unpacker(in));
+ 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));
+ }
+ }
+
+ public static class SampleMapTypes {
+ public Map<Integer, Integer> f0;
+ public Map<Integer, Integer> f1;
+ public Map<String, Integer> f2;
+
+ public SampleMapTypes() {
+ }
+ }
+
+ @Test
+ public void testDefaultConstructorModifiers01() throws Exception {
+ try {
+ DynamicCodeGenPacker.create(NoDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(PrivateDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(ProtectedDefaultConstructorClass.class);
+ assertTrue(true);
+ } catch (DynamicCodeGenException e) {
+ fail();
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(PackageDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ @Test
+ public void testDefaultConstructorModifiers02() throws Exception {
+ try {
+ DynamicCodeGenUnpacker.create(NoDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenUnpacker.create(PrivateDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenUnpacker
+ .create(ProtectedDefaultConstructorClass.class);
+ assertTrue(true);
+ } catch (DynamicCodeGenException e) {
+ fail();
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenUnpacker.create(PackageDefaultConstructorClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ public static class NoDefaultConstructorClass {
+ public NoDefaultConstructorClass(int i) {
+ }
+ }
+
+ public static class PrivateDefaultConstructorClass {
+ private PrivateDefaultConstructorClass() {
+ }
+ }
+
+ public static class ProtectedDefaultConstructorClass {
+ protected ProtectedDefaultConstructorClass() {
+ }
+ }
+
+ public static class PackageDefaultConstructorClass {
+ PackageDefaultConstructorClass() {
+ }
+ }
+
+ @Test
+ public void testClassModifiers01() throws Exception {
+ try {
+ DynamicCodeGenPacker.create(PrivateModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(ProtectedModifierClass.class);
+ assertTrue(true);
+ } catch (DynamicCodeGenException e) {
+ fail();
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(PackageModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ @Test
+ public void testClassModifiers02() throws Exception {
+ try {
+ DynamicCodeGenUnpacker.create(PrivateModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenUnpacker.create(ProtectedModifierClass.class);
+ assertTrue(true);
+ } catch (DynamicCodeGenException e) {
+ fail();
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenUnpacker.create(PackageModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ private static class PrivateModifierClass {
+ }
+
+ protected static class ProtectedModifierClass {
+ protected ProtectedModifierClass() {
+ }
+ }
+
+ static class PackageModifierClass {
+ }
+
+ @Test
+ public void testFinalClassAndAbstractClass01() throws Exception {
+ try {
+ DynamicCodeGenPacker.create(FinalModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(AbstractModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ @Test
+ public void testFinalClassAndAbstractClass02() throws Exception {
+ try {
+ DynamicCodeGenUnpacker.create(FinalModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenUnpacker.create(AbstractModifierClass.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ public final static class FinalModifierClass {
+ }
+
+ public abstract static class AbstractModifierClass {
+ }
+
+ @Test
+ public void testInterfaceAndEnumType01() throws Exception {
+ try {
+ DynamicCodeGenPacker.create(SampleInterface.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenPacker.create(SampleEnum.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ @Test
+ public void testInterfaceAndEnumType02() throws Exception {
+ try {
+ DynamicCodeGenUnpacker.create(SampleInterface.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ try {
+ DynamicCodeGenUnpacker.create(SampleEnum.class);
+ fail();
+ } catch (DynamicCodeGenException e) {
+ assertTrue(true);
+ }
+ assertTrue(true);
+ }
+
+ public interface SampleInterface {
+ }
+
+ public enum SampleEnum {
+ }
+
+ @Test
+ public void testFieldModifiers() throws Exception {
+ FieldModifiersClass src = new FieldModifiersClass();
+ src.f0 = 0;
+ src.f2 = 2;
+ src.f3 = 3;
+ src.f4 = 4;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(FieldModifiersClass.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate
+ .create(FieldModifiersClass.class);
+ FieldModifiersClass dst = (FieldModifiersClass) tmpl
+ .unpack(new Unpacker(in));
+ 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);
+ }
+
+ public static class FieldModifiersClass {
+ public int f0;
+ public final int f1 = 1;
+ private int f2;
+ protected int f3;
+ int f4;
+
+ public FieldModifiersClass() {
+ }
+ }
+
+ @Test
+ public void testNestedFieldClass() throws Exception {
+ MessagePacker packer2 = DynamicCodeGenPacker.create(NestedClass.class);
+ CustomPacker.register(NestedClass.class, packer2);
+ MessagePacker packer1 = DynamicCodeGenPacker.create(BaseClass.class);
+ CustomPacker.register(BaseClass.class, packer1);
+ Template tmpl2 = DynamicCodeGenTemplate.create(NestedClass.class);
+ CustomUnpacker.register(NestedClass.class, tmpl2);
+ CustomConverter.register(NestedClass.class, tmpl2);
+ Template tmpl1 = DynamicCodeGenTemplate.create(BaseClass.class);
+ CustomUnpacker.register(BaseClass.class, tmpl1);
+ CustomConverter.register(BaseClass.class, tmpl1);
+ BaseClass src = new BaseClass();
+ NestedClass src2 = new NestedClass();
+ src.f0 = 0;
+ src2.f2 = 2;
+ src.f1 = src2;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ packer1.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ BaseClass dst = (BaseClass) tmpl1.unpack(new Unpacker(in));
+ assertTrue(src.f0 == dst.f0);
+ assertTrue(src.f1.f2 == dst.f1.f2);
+ }
+
+ public static class BaseClass {
+ public int f0;
+ public NestedClass f1;
+
+ public BaseClass() {
+ }
+ }
+
+ public static class NestedClass {
+ public int f2;
+
+ public NestedClass() {
+ }
+ }
+
+ @Test
+ public void testExtendedClass() throws Exception {
+ SampleSubClass src = new SampleSubClass();
+ 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();
+ MessagePacker packer = DynamicCodeGenPacker
+ .create(SampleSubClass.class);
+ packer.pack(new Packer(out), src);
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ Template tmpl = DynamicCodeGenTemplate.create(SampleSubClass.class);
+ SampleSubClass dst = (SampleSubClass) tmpl.unpack(new Unpacker(in));
+ 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);
+ }
+
+ public static class SampleSubClass extends SampleSuperClass {
+ public int f0;
+ public final int f1 = 1;
+ private int f2;
+ protected int f3;
+ int f4;
+
+ public SampleSubClass() {
+ }
+ }
+
+ public static class SampleSuperClass {
+ public int f5;
+ public final int f6 = 2;
+ private int f7;
+ protected int f8;
+ int f9;
+
+ public SampleSuperClass() {
+ }
+ }
+}