mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-03-21 15:10:01 +01:00
change the part for creating a new constructor within DynamicCodeGenerator
This commit is contained in:
parent
18c712cd99
commit
ff0e1bbbc0
@ -29,6 +29,8 @@ public class DynamicCodeGenerator {
|
|||||||
|
|
||||||
private static final String PACKER_CLASS_TYPE_NAME = Packer.class.getName();
|
private static final String PACKER_CLASS_TYPE_NAME = Packer.class.getName();
|
||||||
|
|
||||||
|
private static final String VOID_TYPE_NAME = "void";
|
||||||
|
|
||||||
private static final String PACKER_OBJECT_NAME = "pk";
|
private static final String PACKER_OBJECT_NAME = "pk";
|
||||||
|
|
||||||
private static final String UNPACKER_CLASS_TYPE_NAME = Unpacker.class
|
private static final String UNPACKER_CLASS_TYPE_NAME = Unpacker.class
|
||||||
@ -37,7 +39,7 @@ public class DynamicCodeGenerator {
|
|||||||
private static final String UNPACKER_OBJECT_NAME = "pk";
|
private static final String UNPACKER_OBJECT_NAME = "pk";
|
||||||
|
|
||||||
private HashMap<String, Class<?>> classMap;
|
private HashMap<String, Class<?>> classMap;
|
||||||
|
|
||||||
private HashMap<String, Object> objectCacheMap;
|
private HashMap<String, Object> objectCacheMap;
|
||||||
|
|
||||||
private ClassPool pool;
|
private ClassPool pool;
|
||||||
@ -50,23 +52,23 @@ public class DynamicCodeGenerator {
|
|||||||
|
|
||||||
public Object newEnhancedInstance(Class<?> targetClass) throws Exception {
|
public Object newEnhancedInstance(Class<?> targetClass) throws Exception {
|
||||||
String targetClassName = targetClass.getName();
|
String targetClassName = targetClass.getName();
|
||||||
//Class<?> enhancedClass = classMap.get(targetClassName);
|
// Class<?> enhancedClass = classMap.get(targetClassName);
|
||||||
Object enhancedObject = objectCacheMap.get(targetClassName);
|
Object enhancedObject = objectCacheMap.get(targetClassName);
|
||||||
//if (enhancedClass == null) {
|
// if (enhancedClass == null) {
|
||||||
if (enhancedObject == null) {
|
if (enhancedObject == null) {
|
||||||
CtClass enhancedCtClass = createEnhancedCtClass(targetClassName);
|
CtClass enhancedCtClass = createEnhancedCtClass(targetClassName);
|
||||||
// System.out.println("enhanced class name: "
|
// System.out.println("enhanced class name: "
|
||||||
// + enhancedCtClass.getName());
|
// + enhancedCtClass.getName());
|
||||||
addSuperclass(enhancedCtClass, targetClassName);
|
addSuperclass(enhancedCtClass, targetClassName);
|
||||||
addConstructor(enhancedCtClass);
|
addConstructor(enhancedCtClass);
|
||||||
createMessagePackMethod(enhancedCtClass, targetClass);
|
createMessagePackMethod(enhancedCtClass, targetClass);
|
||||||
createMessageUnpackMethod(enhancedCtClass, targetClass);
|
createMessageUnpackMethod(enhancedCtClass, targetClass);
|
||||||
Class enhancedClass = loadEnhancedClass(enhancedCtClass);
|
Class enhancedClass = loadEnhancedClass(enhancedCtClass);
|
||||||
//classMap.put(targetClassName, enhancedClass);
|
// classMap.put(targetClassName, enhancedClass);
|
||||||
enhancedObject = enhancedClass.newInstance();
|
enhancedObject = enhancedClass.newInstance();
|
||||||
objectCacheMap.put(targetClassName, enhancedObject);
|
objectCacheMap.put(targetClassName, enhancedObject);
|
||||||
}
|
}
|
||||||
//return newEnhancedInstance0(enhancedClass);
|
// return newEnhancedInstance0(enhancedClass);
|
||||||
return enhancedObject;
|
return enhancedObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,24 +84,18 @@ public class DynamicCodeGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addConstructor(CtClass enhancedCtClass) throws Exception {
|
private void addConstructor(CtClass enhancedCtClass) throws Exception {
|
||||||
StringBuilder sb = new StringBuilder();
|
CtConstructor newCtConstructor = CtNewConstructor
|
||||||
sb.append(MODIFIER_PUBLIC).append(SPACE).append(
|
.defaultConstructor(enhancedCtClass);
|
||||||
// enhancedCtClass.getName()).append("(").append(")")
|
|
||||||
"Image3_$$_Enhanced").append("(").append(")").append(SPACE)
|
|
||||||
.append("{ super(); }"); // TODO
|
|
||||||
// System.out.println("cons: " + sb.toString());
|
|
||||||
CtConstructor newCtConstructor = CtNewConstructor.make(sb.toString(),
|
|
||||||
enhancedCtClass);
|
|
||||||
enhancedCtClass.addConstructor(newCtConstructor);
|
enhancedCtClass.addConstructor(newCtConstructor);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createMessagePackMethod(CtClass enhancedCtClass,
|
private void createMessagePackMethod(CtClass enhancedCtClass,
|
||||||
Class<?> targetClass) throws Exception {
|
Class<?> targetClass) throws Exception {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append(MODIFIER_PUBLIC).append(SPACE).append("void").append(SPACE)
|
sb.append(MODIFIER_PUBLIC).append(SPACE).append(VOID_TYPE_NAME).append(
|
||||||
.append(METHOD_NAME_MESSAGEPACK).append("(").append(
|
SPACE).append(METHOD_NAME_MESSAGEPACK).append("(").append(
|
||||||
PACKER_CLASS_TYPE_NAME).append(SPACE).append(
|
PACKER_CLASS_TYPE_NAME).append(SPACE)
|
||||||
PACKER_OBJECT_NAME).append(")").append(SPACE).append(
|
.append(PACKER_OBJECT_NAME).append(")").append(SPACE).append(
|
||||||
"throws").append(SPACE).append("java.io.IOException")
|
"throws").append(SPACE).append("java.io.IOException")
|
||||||
.append(SPACE).append("{");
|
.append(SPACE).append("{");
|
||||||
Field[] fields = targetClass.getFields();
|
Field[] fields = targetClass.getFields();
|
||||||
@ -109,7 +105,7 @@ public class DynamicCodeGenerator {
|
|||||||
insertCodeOfMessagePack(field, sb);
|
insertCodeOfMessagePack(field, sb);
|
||||||
}
|
}
|
||||||
sb.append("}");
|
sb.append("}");
|
||||||
// System.out.println("messagePack method: " + sb.toString());
|
// System.out.println("messagePack method: " + sb.toString());
|
||||||
CtMethod newCtMethod = CtNewMethod.make(sb.toString(), enhancedCtClass);
|
CtMethod newCtMethod = CtNewMethod.make(sb.toString(), enhancedCtClass);
|
||||||
enhancedCtClass.addMethod(newCtMethod);
|
enhancedCtClass.addMethod(newCtMethod);
|
||||||
}
|
}
|
||||||
@ -135,7 +131,7 @@ public class DynamicCodeGenerator {
|
|||||||
sb
|
sb
|
||||||
.append(MODIFIER_PUBLIC)
|
.append(MODIFIER_PUBLIC)
|
||||||
.append(SPACE)
|
.append(SPACE)
|
||||||
.append("void")
|
.append(VOID_TYPE_NAME)
|
||||||
.append(SPACE)
|
.append(SPACE)
|
||||||
.append(METHOD_NAME_MESSAGEUNPACK)
|
.append(METHOD_NAME_MESSAGEUNPACK)
|
||||||
.append("(")
|
.append("(")
|
||||||
@ -149,13 +145,14 @@ public class DynamicCodeGenerator {
|
|||||||
.append("org.msgpack.MessageTypeException, java.io.IOException")
|
.append("org.msgpack.MessageTypeException, java.io.IOException")
|
||||||
.append(SPACE).append("{");
|
.append(SPACE).append("{");
|
||||||
Field[] fields = targetClass.getFields();
|
Field[] fields = targetClass.getFields();
|
||||||
sb.append(UNPACKER_OBJECT_NAME).append(".").append("unpackArray()").append(";");
|
sb.append(UNPACKER_OBJECT_NAME).append(".").append("unpackArray()")
|
||||||
|
.append(";");
|
||||||
// TODO
|
// TODO
|
||||||
for (Field field : fields) {
|
for (Field field : fields) {
|
||||||
insertCodeOfMessageUnpack(field, sb);
|
insertCodeOfMessageUnpack(field, sb);
|
||||||
}
|
}
|
||||||
sb.append("}");
|
sb.append("}");
|
||||||
// System.out.println("messageUnpack method: " + sb.toString());
|
// System.out.println("messageUnpack method: " + sb.toString());
|
||||||
CtMethod newCtMethod = CtNewMethod.make(sb.toString(), enhancedCtClass);
|
CtMethod newCtMethod = CtNewMethod.make(sb.toString(), enhancedCtClass);
|
||||||
enhancedCtClass.addMethod(newCtMethod);
|
enhancedCtClass.addMethod(newCtMethod);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user