summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorMuga Nishizawa <muga@f11vm.(none)>2010-09-23 17:26:31 +0900
committerMuga Nishizawa <muga@f11vm.(none)>2010-09-23 17:26:31 +0900
commite121f344077bad630fbe4c249c5c80f6a3932a35 (patch)
tree5259810bab29b952d99bb350e840ec68da82976f /java/src
parentdf8a3e870ae9c350394ded3e2e73f9c0bca023f7 (diff)
downloadmsgpack-python-e121f344077bad630fbe4c249c5c80f6a3932a35.tar.gz
java: refactor annotation-utilities and edit those test programs
Diffstat (limited to 'java/src')
-rw-r--r--java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java182
-rw-r--r--java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java17
2 files changed, 134 insertions, 65 deletions
diff --git a/java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java b/java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java
index ddf30b4..6e6a665 100644
--- a/java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java
+++ b/java/src/main/java/org/msgpack/util/annotation/PackUnpackUtil.java
@@ -41,10 +41,14 @@ public class PackUnpackUtil {
static final String KEYWORD_FOR = "for";
+ static final String KEYWORD_IF = "if";
+
static final String KEYWORD_THROWS = "throws";
static final String KEYWORD_NEW = "new";
+ static final String KEYWORD_NULL = "null";
+
static final String CHAR_NAME_SPACE = " ";
static final String CHAR_NAME_COMMA = ",";
@@ -409,42 +413,43 @@ public class PackUnpackUtil {
}
}
- private void insertCodeOfMessageUnpackCall(StringBuilder sb,
- Field field, Class<?> type) throws NotFoundException {
- if (type.isPrimitive()) {
+ private void insertCodeOfMessageUnpackCall(StringBuilder sb, Field f,
+ Class<?> c) throws NotFoundException {
+ if (c.isPrimitive()) {
// primitive type
- insertCodeOfMessageUnpackCallForPrimitiveTypes(sb, field, type);
- } else if (type.equals(Boolean.class) || // Boolean
- type.equals(Byte.class) || // Byte
- type.equals(Double.class) || // Double
- type.equals(Float.class) || // Float
- type.equals(Integer.class) || // Integer
- type.equals(Long.class) || // Long
- type.equals(Short.class)) { // Short
+ insertCodeOfMessageUnpackCallForPrimTypes(sb, f, c);
+ } else if (c.equals(Boolean.class) || // Boolean
+ c.equals(Byte.class) || // Byte
+ c.equals(Double.class) || // Double
+ c.equals(Float.class) || // Float
+ c.equals(Integer.class) || // Integer
+ c.equals(Long.class) || // Long
+ c.equals(Short.class)) { // Short
// reference type (wrapper type)
- insertCodeOfMessageUnpackCallForWrapperTypes(sb, field, type);
- } else if (type.equals(BigInteger.class) || // BigInteger
- type.equals(String.class) || // String
- type.equals(byte[].class)) { // byte[]
+ insertCodeOfMessageUnpackCallForWrapTypes(sb, f, c);
+ } else if (c.equals(BigInteger.class) || // BigInteger
+ c.equals(String.class) || // String
+ c.equals(byte[].class)) { // byte[]
// reference type (other type)
- insertCodeOfMessageUnpackCallForPrimitiveTypes(sb, field, type);
- } else if (List.class.isAssignableFrom(type)) {
+ insertCodeOfMessageUnpackCallForPrimTypes(sb, f, c);
+ } else if (List.class.isAssignableFrom(c)) {
// List
- insertCodeOfMessageUnpackCallForListType(sb, field, type);
- } else if (Map.class.isAssignableFrom(type)) {
+ insertCodeOfMessageUnpackCallForListType(sb, f, c);
+ } else if (Map.class.isAssignableFrom(c)) {
// Map
- insertCodeOfMessageUnpackCallForMapType(sb, field, type);
- } else if (MessageUnpackable.class.isAssignableFrom(type)
- || (getCache(type.getName()) != null)) {
+ insertCodeOfMessageUnpackCallForMapType(sb, f, c);
+ } else if (getCache(c.getName()) != null) {
+ // cached
+ insertCodeOfMessageUnpackCallForEnhancedType(sb, f, c);
+ } else if (MessageUnpackable.class.isAssignableFrom(c)) {
// MessageUnpackable
- insertCodeOfMessageUnpackCallForMsgUnpackableType(sb, field,
- type);
+ insertCodeOfMessageUnpackCallForMsgUnpackableType(sb, f, c);
} else {
- throw new NotFoundException("unknown type: " + type.getName());
+ throw new NotFoundException("unknown type: " + c.getName());
}
}
- private void insertCodeOfMessageUnpackCallForPrimitiveTypes(
+ private void insertCodeOfMessageUnpackCallForPrimTypes(
StringBuilder sb, Field field, Class<?> type)
throws NotFoundException {
// insert a right variable
@@ -491,7 +496,7 @@ public class PackUnpackUtil {
}
}
- private void insertCodeOfMessageUnpackCallForWrapperTypes(
+ private void insertCodeOfMessageUnpackCallForWrapTypes(
StringBuilder sb, Field field, Class<?> type)
throws NotFoundException {
// insert a right variable
@@ -690,8 +695,42 @@ public class PackUnpackUtil {
sb.append(Constants.CHAR_NAME_SPACE);
}
+ private void insertCodeOfMessageUnpackCallForEnhancedType(
+ StringBuilder sb, Field f, Class<?> c) {
+ c = this.getCache(c.getName());
+ insertCodeOfMessageUnpackCallForMsgUnpackableType(sb, f, c);
+ }
+
private void insertCodeOfMessageUnpackCallForMsgUnpackableType(
- StringBuilder sb, Field field, Class<?> type) {
+ StringBuilder sb, Field f, Class<?> c) {
+ // 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(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_BRACHET);
+ sb.append(Constants.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(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_BRACHET);
+ sb.append(Constants.CHAR_NAME_SPACE);
+
// insert a right variable // ignore
sb.append(Constants.VARIABLE_NAME_PK);
sb.append(Constants.CHAR_NAME_DOT);
@@ -700,7 +739,7 @@ public class PackUnpackUtil {
sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
sb.append(MessageUnpackable.class.getName());
sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
- sb.append(field.getName());
+ sb.append(f.getName());
sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(Constants.CHAR_NAME_SEMICOLON);
sb.append(Constants.CHAR_NAME_SPACE);
@@ -779,35 +818,72 @@ public class PackUnpackUtil {
} else if (List.class.isAssignableFrom(c)) {
insertCodeOfMessageConvertCallForList(sb, f, c, i);
} else if (Map.class.isAssignableFrom(c)) {
- insertCodeOfMessageConveretCallForMap(sb, f, c, i);
- } else if (MessageConvertable.class.isAssignableFrom(c)
- || (getCache(c.getName()) != null)) {
- // TODO
- // TODO
- // TODO
- // ((MessageConvertable)f_i).messageConvert(ary[i]);
- sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
- sb.append(MessageConvertable.class.getName());
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
- sb.append(f.getName());
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_DOT);
- sb.append(Constants.METHOD_NAME_MSGCONVERT);
- sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
- sb.append(Constants.VARIABLE_NAME_ARRAY);
- sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
- sb.append(i);
- sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
- sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
- sb.append(Constants.CHAR_NAME_SEMICOLON);
- sb.append(Constants.CHAR_NAME_SPACE);
+ insertCodeOfMessageConvertCallForMap(sb, f, c, i);
+ } else if ((getCache(c.getName()) != null)) {
+ insertCodeOfMessageConvertCallForEnhancedType(sb, f, c, i);
+ } else if (MessageConvertable.class.isAssignableFrom(c)) {
+ insertCodeOfMessageConvertCallForMsgConvtblType(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 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(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_BRACHET);
+ sb.append(Constants.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(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_BRACHET);
+ sb.append(Constants.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(MessageConvertable.class.getName());
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(f.getName());
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_DOT);
+ sb.append(Constants.METHOD_NAME_MSGCONVERT);
+ sb.append(Constants.CHAR_NAME_LEFT_PARENTHESIS);
+ sb.append(Constants.VARIABLE_NAME_ARRAY);
+ sb.append(Constants.CHAR_NAME_LEFT_SQUARE_BRACKET);
+ sb.append(i);
+ sb.append(Constants.CHAR_NAME_RIGHT_SQUARE_BRACKET);
+ sb.append(Constants.CHAR_NAME_RIGHT_PARENTHESIS);
+ sb.append(Constants.CHAR_NAME_SEMICOLON);
+ sb.append(Constants.CHAR_NAME_SPACE);
+ }
+
private void insertCodeOfMessageConvertCallForPrimTypes(
StringBuilder sb, Field f, Class<?> c, int i, String name) {
// f0 = objs[0].intValue();
@@ -1031,7 +1107,7 @@ public class PackUnpackUtil {
sb.append(Constants.CHAR_NAME_SPACE);
}
- private void insertCodeOfMessageConveretCallForMap(StringBuilder sb,
+ private void insertCodeOfMessageConvertCallForMap(StringBuilder sb,
Field f, Class<?> c, int i) {
ParameterizedType generic = (ParameterizedType) f.getGenericType();
Class<?> genericType0 = (Class<?>) generic.getActualTypeArguments()[0];
diff --git a/java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java b/java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java
index 4b1e666..08c4fa8 100644
--- a/java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java
+++ b/java/src/test/java/org/msgpack/util/annotation/TestMessagePackUnpackable.java
@@ -208,7 +208,7 @@ public class TestMessagePackUnpackable extends TestCase {
assertEquals(src.f2.get(i), dst.f2.get(i));
}
}
-
+
public void testListTypes02() throws Exception {
SampleListTypes src = (SampleListTypes) PackUnpackUtil
.newEnhancedInstance(SampleListTypes.class);
@@ -291,7 +291,7 @@ public class TestMessagePackUnpackable extends TestCase {
assertEquals(src.f2.get(s2), dst.f2.get(d2));
}
}
-
+
public void testMapTypes02() throws Exception {
SampleMapTypes src = (SampleMapTypes) PackUnpackUtil
.newEnhancedInstance(SampleMapTypes.class);
@@ -565,11 +565,8 @@ public class TestMessagePackUnpackable extends TestCase {
src.f1 = src2;
ByteArrayOutputStream out = new ByteArrayOutputStream();
new Packer(out).pack(src);
- NestedClass dst2 = (NestedClass) PackUnpackUtil
- .newEnhancedInstance(NestedClass.class);
BaseClass dst = (BaseClass) PackUnpackUtil
.newEnhancedInstance(BaseClass.class);
- dst.f1 = dst2;
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
Unpacker pac = new Unpacker(in);
pac.unpack((MessageUnpackable) dst);
@@ -593,12 +590,8 @@ public class TestMessagePackUnpackable extends TestCase {
Iterator<MessagePackObject> it = pac.iterator();
assertTrue(it.hasNext());
MessagePackObject mpo = it.next();
- NestedClass dst2 = (NestedClass) PackUnpackUtil
- .newEnhancedInstance(NestedClass.class);
- BaseClass dst = (BaseClass) PackUnpackUtil
- .newEnhancedInstance(BaseClass.class);
- dst.f1 = dst2;
- dst = (BaseClass) PackUnpackUtil.initEnhancedInstance(mpo, dst);
+ BaseClass dst = (BaseClass) PackUnpackUtil.initEnhancedInstance(mpo,
+ BaseClass.class);
assertTrue(src.f0 == dst.f0);
assertTrue(src2.f2 == dst.f1.f2);
assertFalse(it.hasNext());
@@ -649,7 +642,7 @@ public class TestMessagePackUnpackable extends TestCase {
assertTrue(src.f8 == dst.f8);
assertTrue(src.f9 != dst.f9);
}
-
+
@Test
public void testExtendedClass02() throws Exception {
SampleSubClass src = (SampleSubClass) PackUnpackUtil