summaryrefslogtreecommitdiff
path: root/java/src/main
diff options
context:
space:
mode:
authorMuga Nishizawa <muga@f11vm.(none)>2010-10-21 02:02:23 +0900
committerMuga Nishizawa <muga@f11vm.(none)>2010-10-21 02:02:23 +0900
commitc790735b9ff97535ab5d2b776ae2ccc4ef1a5fc0 (patch)
treeb58568cba2ddb827b9afd55d1c695309375667b8 /java/src/main
parent64711e615e78328cee3250e83db0527f1c33c0f7 (diff)
downloadmsgpack-python-c790735b9ff97535ab5d2b776ae2ccc4ef1a5fc0.tar.gz
java: add test programs for org.msgpack.util.codegen.*.java
Diffstat (limited to 'java/src/main')
-rw-r--r--java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java101
-rw-r--r--java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java54
2 files changed, 54 insertions, 101 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());