mirror of
https://github.com/msgpack/msgpack-python.git
synced 2026-02-09 11:20:14 +00:00
java: add test programs for org.msgpack.util.codegen.*.java
This commit is contained in:
parent
64711e615e
commit
c790735b9f
4 changed files with 73 additions and 116 deletions
|
|
@ -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());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue