mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-03-19 13:02:13 +01:00
java: add test programs for org.msgpack.util.codegen.*.java
This commit is contained in:
parent
64711e615e
commit
c790735b9f
@ -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;
|
||||
|
@ -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());
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user