diff options
| author | Muga Nishizawa <muga@f11vm.(none)> | 2010-10-21 02:02:23 +0900 |
|---|---|---|
| committer | Muga Nishizawa <muga@f11vm.(none)> | 2010-10-21 02:02:23 +0900 |
| commit | c790735b9ff97535ab5d2b776ae2ccc4ef1a5fc0 (patch) | |
| tree | b58568cba2ddb827b9afd55d1c695309375667b8 /java | |
| parent | 64711e615e78328cee3250e83db0527f1c33c0f7 (diff) | |
| download | msgpack-python-c790735b9ff97535ab5d2b776ae2ccc4ef1a5fc0.tar.gz | |
java: add test programs for org.msgpack.util.codegen.*.java
Diffstat (limited to 'java')
4 files changed, 73 insertions, 116 deletions
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 9ba7ec6..677ace9 100644 --- a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java +++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java @@ -18,12 +18,10 @@ import javassist.NotFoundException; import org.msgpack.CustomMessage; import org.msgpack.CustomPacker; -import org.msgpack.MessageConvertable; import org.msgpack.MessagePackObject; import org.msgpack.MessagePackable; import org.msgpack.MessagePacker; import org.msgpack.MessageTypeException; -import org.msgpack.MessageUnpackable; import org.msgpack.Packer; import org.msgpack.Template; import org.msgpack.Unpacker; @@ -450,56 +448,6 @@ class DynamicCodeGen extends DynamicCodeGenBase implements Constants { sb.append(String.format(STATEMENT_TMPL_UNPACKERMETHODBODY_03, args)); } - private void insertCodeOfUnpackMethodCallForMsgUnpackableType( - 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); - - // insert a right variable // ignore - 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 insertOrdinalEnumUnpackMethodBody(StringBuilder sb, Class<?> type) { // Object unpack(Unpacker u) throws IOException, MessageTypeException; @@ -597,55 +545,6 @@ class DynamicCodeGen extends DynamicCodeGenBase implements Constants { sb.append(String.format(STATEMENT_TMPL_CONVERTMETHODBODY_02, args)); } - private void insertCodeOfMessageConvertCallForMsgConvtblType( - StringBuilder sb, Field f, Class<?> c, int i) { - // if (fi == null) { fi = new Foo_$$_Enhanced(); } - sb.append(KEYWORD_IF); - sb.append(CHAR_NAME_SPACE); - sb.append(CHAR_NAME_LEFT_PARENTHESIS); - 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(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]); - sb.append(CHAR_NAME_LEFT_PARENTHESIS); - sb.append(CHAR_NAME_LEFT_PARENTHESIS); - sb.append(MessageConvertable.class.getName()); - sb.append(CHAR_NAME_RIGHT_PARENTHESIS); - sb.append(f.getName()); - 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(CHAR_NAME_RIGHT_SQUARE_BRACKET); - sb.append(CHAR_NAME_RIGHT_PARENTHESIS); - sb.append(CHAR_NAME_SEMICOLON); - sb.append(CHAR_NAME_SPACE); - } - private void insertOrdinalEnumConvertMethodBody(StringBuilder sb, Class<?> type) { // Object convert(MessagePackObject mpo) throws MessageTypeException; diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java index f1415d5..0f8cace 100644 --- a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java +++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java @@ -1,5 +1,6 @@ package org.msgpack.util.codegen; +import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.GenericArrayType; import java.lang.reflect.Method; @@ -22,9 +23,13 @@ import javassist.NotFoundException; import org.msgpack.CustomConverter; import org.msgpack.CustomMessage; +import org.msgpack.MessageConvertable; +import org.msgpack.MessagePackObject; import org.msgpack.MessageTypeException; +import org.msgpack.MessageUnpackable; import org.msgpack.Template; import org.msgpack.Templates; +import org.msgpack.Unpacker; import org.msgpack.annotation.MessagePackDelegate; import org.msgpack.annotation.MessagePackMessage; import org.msgpack.annotation.MessagePackOrdinalEnum; @@ -40,6 +45,50 @@ public class DynamicCodeGenBase implements Constants { void setNullCheck(boolean nullCheck); } + public static class MessageUnpackableConvertableTemplate implements + Template { + + private Class<?> type; + + public MessageUnpackableConvertableTemplate(Class<?> type) { + this.type = type; + } + + @Override + public Object unpack(Unpacker unpacker) throws IOException, + MessageTypeException { + try { + MessageUnpackable obj = (MessageUnpackable) type.newInstance(); + obj.messageUnpack(unpacker); + return obj; + } catch (ClassCastException e) { + throw new MessageTypeException(e.getMessage(), e); + } catch (InstantiationException e) { + throw new MessageTypeException(e.getMessage(), e); + } catch (IllegalAccessException e) { + throw new MessageTypeException(e.getMessage(), e); + } + } + + @Override + public Object convert(MessagePackObject from) + throws MessageTypeException { + try { + MessageConvertable obj = (MessageConvertable) type + .newInstance(); + obj.messageConvert(from); + return obj; + } catch (ClassCastException e) { + throw new MessageTypeException(e.getMessage(), e); + } catch (InstantiationException e) { + throw new MessageTypeException(e.getMessage(), e); + } catch (IllegalAccessException e) { + throw new MessageTypeException(e.getMessage(), e); + } + } + + } + public static class NullCheckerImpl implements NullChecker { public boolean _$$_nullCheck = true; @@ -317,6 +366,11 @@ public class DynamicCodeGenBase implements Constants { Template tmpl = DynamicOrdinalEnumTemplate.create(c); CustomMessage.registerTemplate(c, tmpl); return tmpl; + } else if (MessageConvertable.class.isAssignableFrom(c) + || MessageUnpackable.class.isAssignableFrom(c)) { + Template tmpl = new MessageUnpackableConvertableTemplate(c); + CustomMessage.registerTemplate(c, tmpl); + return tmpl; } else { throw new MessageTypeException("Type error: " + ((Class<?>) t).getName()); diff --git a/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java b/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java index 2e6ea58..d2cf35c 100644 --- a/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java +++ b/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java @@ -1012,8 +1012,8 @@ public class TestPackConvert extends TestCase { } } - //@Test - public void XtestMessagePackableUnpackableClass00() throws Exception { + @Test + public void testMessagePackableUnpackableClass00() throws Exception { BaseMessagePackableConvertableClass src = new BaseMessagePackableConvertableClass(); MessagePackableConvertableClass src1 = new MessagePackableConvertableClass(); List<MessagePackableConvertableClass> src2 = new ArrayList<MessagePackableConvertableClass>(); @@ -1045,8 +1045,8 @@ public class TestPackConvert extends TestCase { assertFalse(it.hasNext()); } - //@Test - public void XtestMessagePackableUnpackableClass01() throws Exception { + @Test + public void testMessagePackableUnpackableClass01() throws Exception { BaseMessagePackableConvertableClass src = new BaseMessagePackableConvertableClass(); src.f0 = null; src.f1 = 1; @@ -1070,8 +1070,8 @@ public class TestPackConvert extends TestCase { assertFalse(it.hasNext()); } - //@Test - public void XtestMessagePackableUnpackableClass02() throws Exception { + @Test + public void testMessagePackableUnpackableClass02() throws Exception { BaseMessagePackableConvertableClass src = null; ByteArrayOutputStream out = new ByteArrayOutputStream(); MessagePacker packer = DynamicPacker @@ -1113,17 +1113,18 @@ public class TestPackConvert extends TestCase { @Override public void messagePack(Packer packer) throws IOException { + packer.packArray(2); packer.pack(f0); packer.pack(f1); } @Override - public void messageConvert(MessagePackObject obj) + public void messageConvert(MessagePackObject from) throws MessageTypeException { - if (obj.isNil()) { + if (from.isNil()) { return; } - MessagePackObject[] objs = obj.asArray(); + MessagePackObject[] objs = from.asArray(); f0 = objs[0].asInt(); f1 = objs[1].asInt(); } diff --git a/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java b/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java index dc56b6c..b7ac7eb 100644 --- a/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java +++ b/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java @@ -890,8 +890,8 @@ public class TestPackUnpack extends TestCase { } } - //@Test - public void XtestMessagePackableUnpackableClass00() throws Exception { + @Test + public void testMessagePackableUnpackableClass00() throws Exception { BaseMessagePackableUnpackableClass src = new BaseMessagePackableUnpackableClass(); MessagePackableUnpackableClass src1 = new MessagePackableUnpackableClass(); List<MessagePackableUnpackableClass> src2 = new ArrayList<MessagePackableUnpackableClass>(); @@ -900,6 +900,7 @@ public class TestPackUnpack extends TestCase { src.f0 = src1; src.f1 = 1; src2.add(src1); + src.f2 = src2; ByteArrayOutputStream out = new ByteArrayOutputStream(); MessagePacker packer = DynamicPacker .create(BaseMessagePackableUnpackableClass.class); @@ -917,8 +918,8 @@ public class TestPackUnpack extends TestCase { assertEquals(src.f2.get(0).f1, dst.f2.get(0).f1); } - //@Test - public void XtestMessagePackableUnpackableClass01() throws Exception { + @Test + public void testMessagePackableUnpackableClass01() throws Exception { BaseMessagePackableUnpackableClass src = new BaseMessagePackableUnpackableClass(); src.f0 = null; src.f1 = 1; @@ -937,8 +938,8 @@ public class TestPackUnpack extends TestCase { assertEquals(src.f2, dst.f2); } - //@Test - public void XtestMessagePackableUnpackableClass02() throws Exception { + @Test + public void testMessagePackableUnpackableClass02() throws Exception { BaseMessagePackableUnpackableClass src = null; ByteArrayOutputStream out = new ByteArrayOutputStream(); MessagePacker packer = DynamicPacker @@ -975,6 +976,7 @@ public class TestPackUnpack extends TestCase { @Override public void messagePack(Packer packer) throws IOException { + packer.packArray(2); packer.pack(f0); packer.pack(f1); } @@ -985,6 +987,7 @@ public class TestPackUnpack extends TestCase { if (unpacker.tryUnpackNull()) { return; } + unpacker.unpackArray(); f0 = unpacker.unpackInt(); f1 = unpacker.unpackInt(); } |
