mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-21 15:51:44 +02:00
Refactored programs related to TemplateBuilder.java
This commit is contained in:
@@ -22,7 +22,6 @@ import java.io.InputStream;
|
|||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import org.msgpack.template.TemplateRegistry;
|
import org.msgpack.template.TemplateRegistry;
|
||||||
import org.msgpack.template.TemplateClassWriter;
|
|
||||||
import org.msgpack.template.FieldList;
|
import org.msgpack.template.FieldList;
|
||||||
|
|
||||||
public class MessagePack {
|
public class MessagePack {
|
||||||
@@ -146,10 +145,6 @@ public class MessagePack {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void write(Class<?> target, String directoryName) {
|
|
||||||
TemplateClassWriter.write(target, directoryName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void register(Class<?> target) {
|
public static void register(Class<?> target) {
|
||||||
TemplateRegistry.register(target);
|
TemplateRegistry.register(target);
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for Java
|
// MessagePack for Java
|
||||||
//
|
//
|
||||||
// Copyright (C) 2009-2010 FURUHASHI Sadayuki
|
// Copyright (C) 2009-2011 FURUHASHI Sadayuki
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@@ -18,6 +18,5 @@
|
|||||||
package org.msgpack;
|
package org.msgpack;
|
||||||
|
|
||||||
public interface MessagePackTemplateProvider {
|
public interface MessagePackTemplateProvider {
|
||||||
|
|
||||||
Template getTemplate();
|
Template getTemplate();
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for Java
|
// MessagePack for Java
|
||||||
//
|
//
|
||||||
// Copyright (C) 2009-2010 FURUHASHI Sadayuki
|
// Copyright (C) 2009-2011 FURUHASHI Sadayuki
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@@ -22,34 +22,33 @@ import java.lang.reflect.Type;
|
|||||||
|
|
||||||
import org.msgpack.annotation.MessagePackMessage;
|
import org.msgpack.annotation.MessagePackMessage;
|
||||||
|
|
||||||
public class MessagePackMessageBuilderSelector implements BuilderSelector{
|
public class AnnotationTemplateBuilderSelector implements BuilderSelector{
|
||||||
|
|
||||||
public static final String NAME = "MessagePackMessageTemplateBuilder";
|
public static final String NAME = "AnnotationTemplateBuilder";
|
||||||
|
|
||||||
|
|
||||||
TemplateBuilder builder;
|
TemplateBuilder builder;
|
||||||
public MessagePackMessageBuilderSelector(TemplateBuilder builder){
|
|
||||||
|
public AnnotationTemplateBuilderSelector(TemplateBuilder builder){
|
||||||
this.builder = builder;
|
this.builder = builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName(){
|
@Override
|
||||||
|
public String getName(){
|
||||||
return NAME;
|
return NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matchType(Type targetType) {
|
public boolean matchType(Type targetType) {
|
||||||
Class<?> target = (Class<?>)targetType;
|
Class<?> targetClass = (Class<?>)targetType;
|
||||||
return isAnnotated(target, MessagePackMessage.class);
|
return isAnnotated(targetClass, MessagePackMessage.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TemplateBuilder getTemplateBuilder(Type targetType) {
|
public TemplateBuilder getTemplateBuilder(Type targetType) {
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean isAnnotated(Class<?> ao, Class<? extends Annotation> with) {
|
public static boolean isAnnotated(Class<?> targetClass, Class<? extends Annotation> with) {
|
||||||
return ao.getAnnotation(with) != null;
|
return targetClass.getAnnotation(with) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -22,8 +22,6 @@ import java.lang.reflect.Array;
|
|||||||
import java.lang.reflect.GenericArrayType;
|
import java.lang.reflect.GenericArrayType;
|
||||||
import java.lang.reflect.ParameterizedType;
|
import java.lang.reflect.ParameterizedType;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.msgpack.AbstractTemplate;
|
import org.msgpack.AbstractTemplate;
|
||||||
import org.msgpack.MessagePackObject;
|
import org.msgpack.MessagePackObject;
|
||||||
@@ -34,17 +32,12 @@ import org.msgpack.Unpacker;
|
|||||||
import org.msgpack.template.BooleanArrayTemplate;
|
import org.msgpack.template.BooleanArrayTemplate;
|
||||||
import org.msgpack.template.DoubleArrayTemplate;
|
import org.msgpack.template.DoubleArrayTemplate;
|
||||||
import org.msgpack.template.FloatArrayTemplate;
|
import org.msgpack.template.FloatArrayTemplate;
|
||||||
import org.msgpack.template.IFieldEntry;
|
|
||||||
import org.msgpack.template.IFieldEntryReader;
|
|
||||||
import org.msgpack.template.IntArrayTemplate;
|
import org.msgpack.template.IntArrayTemplate;
|
||||||
import org.msgpack.template.LongArrayTemplate;
|
import org.msgpack.template.LongArrayTemplate;
|
||||||
import org.msgpack.template.ShortArrayTemplate;
|
import org.msgpack.template.ShortArrayTemplate;
|
||||||
import org.msgpack.template.TemplateRegistry;
|
import org.msgpack.template.TemplateRegistry;
|
||||||
|
|
||||||
public class ArrayTemplateBuilder extends TemplateBuilder {
|
public class ArrayTemplateBuilder implements TemplateBuilder {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static class ReflectionObjectArrayTemplate extends AbstractTemplate {
|
static class ReflectionObjectArrayTemplate extends AbstractTemplate {
|
||||||
private Class<?> componentClass;
|
private Class<?> componentClass;
|
||||||
@@ -128,6 +121,7 @@ public class ArrayTemplateBuilder extends TemplateBuilder {
|
|||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Template buildTemplate(Type arrayType) {
|
public Template buildTemplate(Type arrayType) {
|
||||||
Type baseType;
|
Type baseType;
|
||||||
|
@@ -20,18 +20,17 @@ package org.msgpack.template.builder;
|
|||||||
import java.lang.reflect.GenericArrayType;
|
import java.lang.reflect.GenericArrayType;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
import org.msgpack.Template;
|
|
||||||
|
|
||||||
public class ArrayTemplateBuilderSelector implements BuilderSelector {
|
public class ArrayTemplateBuilderSelector implements BuilderSelector {
|
||||||
|
|
||||||
public static final String NAME = "ArrayTemplateBuilder";
|
public static final String NAME = "ArrayTemplateBuilder";
|
||||||
|
|
||||||
|
ArrayTemplateBuilder templateBuilder = new ArrayTemplateBuilder();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName(){
|
public String getName(){
|
||||||
return NAME;
|
return NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matchType(Type targetType) {
|
public boolean matchType(Type targetType) {
|
||||||
if(targetType instanceof GenericArrayType){
|
if(targetType instanceof GenericArrayType){
|
||||||
@@ -41,8 +40,6 @@ public class ArrayTemplateBuilderSelector implements BuilderSelector {
|
|||||||
return targetClass.isArray();
|
return targetClass.isArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayTemplateBuilder templateBuilder = new ArrayTemplateBuilder();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TemplateBuilder getTemplateBuilder(Type target) {
|
public TemplateBuilder getTemplateBuilder(Type target) {
|
||||||
return templateBuilder;
|
return templateBuilder;
|
||||||
|
@@ -15,33 +15,19 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
package org.msgpack.template.javassist;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.reflect.Array;
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.lang.Thread;
|
|
||||||
|
|
||||||
import org.msgpack.*;
|
import org.msgpack.*;
|
||||||
import org.msgpack.template.*;
|
import org.msgpack.template.*;
|
||||||
|
|
||||||
import javassist.CannotCompileException;
|
import javassist.CannotCompileException;
|
||||||
import javassist.ClassPool;
|
|
||||||
import javassist.CtClass;
|
import javassist.CtClass;
|
||||||
import javassist.CtConstructor;
|
import javassist.CtConstructor;
|
||||||
import javassist.CtMethod;
|
|
||||||
import javassist.CtNewConstructor;
|
import javassist.CtNewConstructor;
|
||||||
import javassist.CtNewMethod;
|
|
||||||
import javassist.LoaderClassPath;
|
|
||||||
import javassist.NotFoundException;
|
import javassist.NotFoundException;
|
||||||
import javassist.ClassClassPath;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class BeansBuildContext extends BuildContextBase<BeansFieldEntry> {
|
public class BeansBuildContext extends BuildContextBase<BeansFieldEntry> {
|
||||||
protected BeansFieldEntry[] entries;
|
protected BeansFieldEntry[] entries;
|
@@ -15,10 +15,9 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
package org.msgpack.template;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.msgpack.AbstractTemplate;
|
import org.msgpack.AbstractTemplate;
|
||||||
import org.msgpack.MessagePackObject;
|
import org.msgpack.MessagePackObject;
|
||||||
@@ -26,27 +25,22 @@ import org.msgpack.MessageTypeException;
|
|||||||
import org.msgpack.Packer;
|
import org.msgpack.Packer;
|
||||||
import org.msgpack.Template;
|
import org.msgpack.Template;
|
||||||
import org.msgpack.Unpacker;
|
import org.msgpack.Unpacker;
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder.BooleanFieldEntry;
|
import org.msgpack.template.BeansFieldEntry;
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder.ByteFieldEntry;
|
import org.msgpack.template.BeansFieldEntryReader;
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder.DoubleFieldEntry;
|
import org.msgpack.template.IFieldEntry;
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder.FloatFieldEntry;
|
import org.msgpack.template.IFieldEntryReader;
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder.IntFieldEntry;
|
import org.msgpack.template.TemplateRegistry;
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder.LongFieldEntry;
|
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder.NullFieldEntry;
|
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder.ObjectFieldEntry;
|
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder.ShortFieldEntry;
|
|
||||||
import org.msgpack.template.builder.CustomTemplateBuilder;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class for building java reflection template builder for java beans class.
|
* Class for building java reflection template builder for java beans class.
|
||||||
* @author takeshita
|
* @author takeshita
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class BeansReflectionTemplateBuilder extends CustomTemplateBuilder{
|
public class BeansTemplateBuilder extends CustomTemplateBuilder{
|
||||||
|
|
||||||
IFieldEntryReader reader = new BeansFieldEntryReader();
|
IFieldEntryReader reader = new BeansFieldEntryReader();
|
||||||
|
|
||||||
public BeansReflectionTemplateBuilder(){}
|
public BeansTemplateBuilder(){}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IFieldEntryReader getFieldEntryReader(){
|
public IFieldEntryReader getFieldEntryReader(){
|
@@ -17,41 +17,33 @@
|
|||||||
//
|
//
|
||||||
package org.msgpack.template.builder;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
import org.msgpack.annotation.MessagePackBeans;
|
import org.msgpack.annotation.MessagePackBeans;
|
||||||
import org.msgpack.annotation.MessagePackMessage;
|
|
||||||
|
|
||||||
public class MessagePackBeansBuilderSelector implements BuilderSelector{
|
public class BeansTemplateBuilderSelector implements BuilderSelector{
|
||||||
|
|
||||||
public static final String NAME = "MessagePackBeansTemplateBuilder";
|
public static final String NAME = "BeansTemplateBuilder";
|
||||||
|
|
||||||
|
|
||||||
TemplateBuilder builder;
|
TemplateBuilder builder;
|
||||||
public MessagePackBeansBuilderSelector(TemplateBuilder builder){
|
|
||||||
|
public BeansTemplateBuilderSelector(TemplateBuilder builder){
|
||||||
this.builder = builder;
|
this.builder = builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getName(){
|
public String getName(){
|
||||||
return NAME;
|
return NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matchType(Type targetType) {
|
public boolean matchType(Type targetType) {
|
||||||
Class<?> target = (Class<?>)targetType;
|
Class<?> targetClass = (Class<?>)targetType;
|
||||||
return isAnnotated(target, MessagePackBeans.class);
|
return AnnotationTemplateBuilderSelector.isAnnotated(targetClass, MessagePackBeans.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TemplateBuilder getTemplateBuilder(Type targetType) {
|
public TemplateBuilder getTemplateBuilder(Type targetType) {
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean isAnnotated(Class<?> ao, Class<? extends Annotation> with) {
|
|
||||||
return ao.getAnnotation(with) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@@ -15,33 +15,19 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
package org.msgpack.template.javassist;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.reflect.Array;
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.lang.Thread;
|
|
||||||
|
|
||||||
import org.msgpack.*;
|
import org.msgpack.*;
|
||||||
import org.msgpack.template.*;
|
import org.msgpack.template.*;
|
||||||
|
|
||||||
import javassist.CannotCompileException;
|
import javassist.CannotCompileException;
|
||||||
import javassist.ClassPool;
|
|
||||||
import javassist.CtClass;
|
import javassist.CtClass;
|
||||||
import javassist.CtConstructor;
|
import javassist.CtConstructor;
|
||||||
import javassist.CtMethod;
|
|
||||||
import javassist.CtNewConstructor;
|
import javassist.CtNewConstructor;
|
||||||
import javassist.CtNewMethod;
|
|
||||||
import javassist.LoaderClassPath;
|
|
||||||
import javassist.NotFoundException;
|
import javassist.NotFoundException;
|
||||||
import javassist.ClassClassPath;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class BuildContext extends BuildContextBase<FieldEntry> {
|
public class BuildContext extends BuildContextBase<FieldEntry> {
|
||||||
protected IFieldEntry[] entries;
|
protected IFieldEntry[] entries;
|
@@ -15,37 +15,26 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
package org.msgpack.template.javassist;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Array;
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.lang.Thread;
|
|
||||||
|
|
||||||
import org.msgpack.*;
|
import org.msgpack.*;
|
||||||
import org.msgpack.template.*;
|
import org.msgpack.template.*;
|
||||||
|
|
||||||
import javassist.CannotCompileException;
|
import javassist.CannotCompileException;
|
||||||
import javassist.ClassPool;
|
|
||||||
import javassist.CtClass;
|
import javassist.CtClass;
|
||||||
import javassist.CtConstructor;
|
|
||||||
import javassist.CtMethod;
|
import javassist.CtMethod;
|
||||||
import javassist.CtNewConstructor;
|
|
||||||
import javassist.CtNewMethod;
|
import javassist.CtNewMethod;
|
||||||
import javassist.LoaderClassPath;
|
|
||||||
import javassist.NotFoundException;
|
import javassist.NotFoundException;
|
||||||
import javassist.ClassClassPath;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
||||||
public abstract class BuildContextBase<T extends IFieldEntry> {
|
public abstract class BuildContextBase<T extends IFieldEntry> {
|
||||||
|
|
||||||
private static Logger LOG = LoggerFactory.getLogger(JavassistTemplateBuilder.class);
|
private static Logger LOG = LoggerFactory.getLogger(JavassistTemplateBuilder.class);
|
||||||
|
|
||||||
|
|
||||||
protected JavassistTemplateBuilder director;
|
protected JavassistTemplateBuilder director;
|
||||||
|
|
||||||
@@ -70,10 +59,8 @@ public abstract class BuildContextBase<T extends IFieldEntry> {
|
|||||||
public BuildContextBase(JavassistTemplateBuilder director) {
|
public BuildContextBase(JavassistTemplateBuilder director) {
|
||||||
this.director = director;
|
this.director = director;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public abstract Template buildTemplate(Class<?> targetClass, T[] entries, Template[] templates);
|
|
||||||
|
|
||||||
|
public abstract Template buildTemplate(Class<?> targetClass, T[] entries, Template[] templates);
|
||||||
|
|
||||||
protected Template build(final String className) {
|
protected Template build(final String className) {
|
||||||
try {
|
try {
|
@@ -15,9 +15,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
package org.msgpack.template.javassist;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import org.msgpack.template.JavassistTemplateBuilder;
|
|
||||||
|
|
||||||
public interface BuildContextFactory {
|
public interface BuildContextFactory {
|
||||||
|
|
@@ -25,20 +25,9 @@ import java.lang.reflect.Type;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public interface BuilderSelector {
|
public interface BuilderSelector {
|
||||||
|
String getName();
|
||||||
|
|
||||||
/**
|
|
||||||
* Name of this.
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public String getName();
|
|
||||||
|
|
||||||
|
|
||||||
public abstract boolean matchType(Type targetType);
|
|
||||||
|
|
||||||
|
|
||||||
public abstract TemplateBuilder getTemplateBuilder(Type targetType);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
boolean matchType(Type targetType);
|
||||||
|
|
||||||
|
TemplateBuilder getTemplateBuilder(Type targetType);
|
||||||
}
|
}
|
||||||
|
@@ -22,13 +22,6 @@ import java.util.LinkedList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.msgpack.template.BeansFieldEntryReader;
|
import org.msgpack.template.BeansFieldEntryReader;
|
||||||
import org.msgpack.template.BeansReflectionTemplateBuilder;
|
|
||||||
import org.msgpack.template.JavassistTemplateBuilder;
|
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder;
|
|
||||||
import org.msgpack.template.javassist.BeansBuildContext;
|
|
||||||
import org.msgpack.template.javassist.BuildContext;
|
|
||||||
import org.msgpack.template.javassist.BuildContextBase;
|
|
||||||
import org.msgpack.template.javassist.BuildContextFactory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registry for BuilderSelectors.
|
* Registry for BuilderSelectors.
|
||||||
@@ -38,8 +31,9 @@ import org.msgpack.template.javassist.BuildContextFactory;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class BuilderSelectorRegistry {
|
public class BuilderSelectorRegistry {
|
||||||
|
|
||||||
private static BuilderSelectorRegistry instance = new BuilderSelectorRegistry();
|
private static BuilderSelectorRegistry instance = new BuilderSelectorRegistry();
|
||||||
|
|
||||||
static{
|
static{
|
||||||
initForJava();
|
initForJava();
|
||||||
}
|
}
|
||||||
@@ -50,26 +44,25 @@ public class BuilderSelectorRegistry {
|
|||||||
|
|
||||||
TemplateBuilder forceBuilder;
|
TemplateBuilder forceBuilder;
|
||||||
|
|
||||||
|
|
||||||
List<BuilderSelector> builderSelectors = new LinkedList<BuilderSelector>();
|
List<BuilderSelector> builderSelectors = new LinkedList<BuilderSelector>();
|
||||||
|
|
||||||
private BuilderSelectorRegistry(){
|
private BuilderSelectorRegistry(){
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* initialize BuilderSelectors for basic java enviroment.
|
* initialize BuilderSelectors for basic java enviroment.
|
||||||
*/
|
*/
|
||||||
private static void initForJava(){
|
private static void initForJava(){
|
||||||
|
|
||||||
instance.append(new ArrayTemplateBuilderSelector());
|
instance.append(new ArrayTemplateBuilderSelector());
|
||||||
|
|
||||||
if(isSupportJavassist()){
|
if(isSupportJavassist()){
|
||||||
instance.append(
|
instance.append(
|
||||||
new MessagePackMessageBuilderSelector(
|
new AnnotationTemplateBuilderSelector(
|
||||||
new JavassistTemplateBuilder()));
|
new JavassistTemplateBuilder()));
|
||||||
instance.forceBuilder = new JavassistTemplateBuilder();
|
instance.forceBuilder = new JavassistTemplateBuilder();
|
||||||
|
|
||||||
//Java beans
|
//Java beans
|
||||||
instance.append(new MessagePackBeansBuilderSelector(
|
instance.append(new BeansTemplateBuilderSelector(
|
||||||
new JavassistTemplateBuilder(
|
new JavassistTemplateBuilder(
|
||||||
new BeansFieldEntryReader(),
|
new BeansFieldEntryReader(),
|
||||||
new BuildContextFactory() {
|
new BuildContextFactory() {
|
||||||
@@ -81,17 +74,17 @@ public class BuilderSelectorRegistry {
|
|||||||
)));
|
)));
|
||||||
}else{
|
}else{
|
||||||
instance.append(
|
instance.append(
|
||||||
new MessagePackMessageBuilderSelector(
|
new AnnotationTemplateBuilderSelector(
|
||||||
new ReflectionTemplateBuilder()));
|
new ReflectionTemplateBuilder()));
|
||||||
instance.forceBuilder = new ReflectionTemplateBuilder();
|
instance.forceBuilder = new ReflectionTemplateBuilder();
|
||||||
|
|
||||||
//Java beans
|
//Java beans
|
||||||
instance.append(new MessagePackBeansBuilderSelector(
|
instance.append(new BeansTemplateBuilderSelector(
|
||||||
new BeansReflectionTemplateBuilder()));
|
new BeansTemplateBuilder()));
|
||||||
}
|
}
|
||||||
|
|
||||||
instance.append(new MessagePackOrdinalEnumBuilderSelector());
|
instance.append(new OrdinalEnumTemplateBuilderSelector());
|
||||||
instance.append(new EnumBuilderSelector());
|
instance.append(new EnumTemplateBuilderSelector());
|
||||||
}
|
}
|
||||||
public static boolean isSupportJavassist(){
|
public static boolean isSupportJavassist(){
|
||||||
try {
|
try {
|
||||||
|
@@ -25,14 +25,11 @@ import org.msgpack.template.FieldOption;
|
|||||||
import org.msgpack.template.IFieldEntry;
|
import org.msgpack.template.IFieldEntry;
|
||||||
import org.msgpack.template.IFieldEntryReader;
|
import org.msgpack.template.IFieldEntryReader;
|
||||||
import org.msgpack.template.TemplateBuildException;
|
import org.msgpack.template.TemplateBuildException;
|
||||||
import org.msgpack.template.javassist.BuildContextFactory;
|
|
||||||
|
|
||||||
public abstract class CustomTemplateBuilder extends TemplateBuilder {
|
|
||||||
|
|
||||||
|
public abstract class CustomTemplateBuilder implements TemplateBuilder {
|
||||||
|
|
||||||
public abstract IFieldEntryReader getFieldEntryReader();
|
public abstract IFieldEntryReader getFieldEntryReader();
|
||||||
|
|
||||||
|
|
||||||
public abstract Template buildTemplate(Class<?> targetClass , IFieldEntry[] entries);
|
public abstract Template buildTemplate(Class<?> targetClass , IFieldEntry[] entries);
|
||||||
|
|
||||||
public Template buildTemplate(Class<?> targetClass ,FieldOption implicitOption ){
|
public Template buildTemplate(Class<?> targetClass ,FieldOption implicitOption ){
|
||||||
|
@@ -19,25 +19,24 @@ package org.msgpack.template.builder;
|
|||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
public class EnumBuilderSelector implements BuilderSelector {
|
public class EnumTemplateBuilderSelector implements BuilderSelector {
|
||||||
|
|
||||||
public static final String NAME = "EnumTemplateBuilder";
|
public static final String NAME = "EnumTemplateBuilder";
|
||||||
|
|
||||||
|
OrdinalEnumTemplateBuilder builder = new OrdinalEnumTemplateBuilder();
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getName(){
|
public String getName(){
|
||||||
return NAME;
|
return NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matchType(Type targetType) {
|
public boolean matchType(Type targetType) {
|
||||||
return ((Class<?>)targetType).isEnum();
|
return ((Class<?>)targetType).isEnum();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
OrdinalEnumTemplateBuilder builder = new OrdinalEnumTemplateBuilder();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TemplateBuilder getTemplateBuilder(Type targetType) {
|
public TemplateBuilder getTemplateBuilder(Type targetType) {
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -15,31 +15,10 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
package org.msgpack.template.javassist;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import org.msgpack.AbstractTemplate;
|
||||||
import java.lang.reflect.Array;
|
import org.msgpack.Template;
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.lang.Thread;
|
|
||||||
|
|
||||||
import org.msgpack.*;
|
|
||||||
import org.msgpack.template.*;
|
|
||||||
|
|
||||||
import javassist.CannotCompileException;
|
|
||||||
import javassist.ClassPool;
|
|
||||||
import javassist.CtClass;
|
|
||||||
import javassist.CtConstructor;
|
|
||||||
import javassist.CtMethod;
|
|
||||||
import javassist.CtNewConstructor;
|
|
||||||
import javassist.CtNewMethod;
|
|
||||||
import javassist.LoaderClassPath;
|
|
||||||
import javassist.NotFoundException;
|
|
||||||
import javassist.ClassClassPath;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public abstract class JavassistTemplate extends AbstractTemplate {
|
public abstract class JavassistTemplate extends AbstractTemplate {
|
||||||
public Class<?> targetClass;
|
public Class<?> targetClass;
|
@@ -15,7 +15,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
package org.msgpack.template;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.lang.Thread;
|
import java.lang.Thread;
|
||||||
|
|
||||||
@@ -28,8 +28,10 @@ import javassist.NotFoundException;
|
|||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.msgpack.template.builder.CustomTemplateBuilder;
|
import org.msgpack.template.FieldEntryReader;
|
||||||
import org.msgpack.template.javassist.*;
|
import org.msgpack.template.IFieldEntry;
|
||||||
|
import org.msgpack.template.IFieldEntryReader;
|
||||||
|
import org.msgpack.template.TemplateRegistry;
|
||||||
|
|
||||||
public class JavassistTemplateBuilder extends CustomTemplateBuilder {
|
public class JavassistTemplateBuilder extends CustomTemplateBuilder {
|
||||||
private static Logger LOG = LoggerFactory.getLogger(JavassistTemplateBuilder.class);
|
private static Logger LOG = LoggerFactory.getLogger(JavassistTemplateBuilder.class);
|
@@ -30,7 +30,7 @@ import org.msgpack.Template;
|
|||||||
import org.msgpack.Unpacker;
|
import org.msgpack.Unpacker;
|
||||||
import org.msgpack.template.TemplateBuildException;
|
import org.msgpack.template.TemplateBuildException;
|
||||||
|
|
||||||
public class OrdinalEnumTemplateBuilder extends TemplateBuilder{
|
public class OrdinalEnumTemplateBuilder implements TemplateBuilder{
|
||||||
|
|
||||||
static class ReflectionOrdinalEnumTemplate extends AbstractTemplate {
|
static class ReflectionOrdinalEnumTemplate extends AbstractTemplate {
|
||||||
protected Enum<?>[] entries;
|
protected Enum<?>[] entries;
|
||||||
@@ -68,6 +68,7 @@ public class OrdinalEnumTemplateBuilder extends TemplateBuilder{
|
|||||||
return entries[ord];
|
return entries[ord];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Template buildTemplate(Type targetType) {
|
public Template buildTemplate(Type targetType) {
|
||||||
Class<?> targetClass = (Class<?>)targetType;
|
Class<?> targetClass = (Class<?>)targetType;
|
||||||
|
@@ -17,35 +17,29 @@
|
|||||||
//
|
//
|
||||||
package org.msgpack.template.builder;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
import org.msgpack.annotation.MessagePackOrdinalEnum;
|
import org.msgpack.annotation.MessagePackOrdinalEnum;
|
||||||
|
|
||||||
public class MessagePackOrdinalEnumBuilderSelector implements BuilderSelector {
|
public class OrdinalEnumTemplateBuilderSelector implements BuilderSelector {
|
||||||
|
|
||||||
public static final String NAME = "MessagePackOrdinalEnumBuilderTemplate";
|
public static final String NAME = "OrdinalEnumBuilder";
|
||||||
|
|
||||||
|
OrdinalEnumTemplateBuilder builder = new OrdinalEnumTemplateBuilder();
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getName(){
|
public String getName(){
|
||||||
return NAME;
|
return NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matchType(Type targetType) {
|
public boolean matchType(Type targetType) {
|
||||||
Class<?> target = (Class<?>)targetType;
|
Class<?> targetClass = (Class<?>)targetType;
|
||||||
return isAnnotated(target, MessagePackOrdinalEnum.class);
|
return AnnotationTemplateBuilderSelector.isAnnotated(targetClass, MessagePackOrdinalEnum.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
OrdinalEnumTemplateBuilder builder = new OrdinalEnumTemplateBuilder();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TemplateBuilder getTemplateBuilder(Type targetType) {
|
public TemplateBuilder getTemplateBuilder(Type targetType) {
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean isAnnotated(Class<?> ao, Class<? extends Annotation> with) {
|
|
||||||
return ao.getAnnotation(with) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@@ -15,14 +15,18 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
package org.msgpack.template;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
|
||||||
import org.msgpack.*;
|
import org.msgpack.*;
|
||||||
import org.msgpack.template.builder.CustomTemplateBuilder;
|
import org.msgpack.template.FieldEntry;
|
||||||
|
import org.msgpack.template.FieldEntryReader;
|
||||||
|
import org.msgpack.template.IFieldEntry;
|
||||||
|
import org.msgpack.template.IFieldEntryReader;
|
||||||
|
import org.msgpack.template.TemplateRegistry;
|
||||||
|
|
||||||
public class ReflectionTemplateBuilder extends CustomTemplateBuilder {
|
public class ReflectionTemplateBuilder extends CustomTemplateBuilder {
|
||||||
IFieldEntryReader reader = new FieldEntryReader();
|
IFieldEntryReader reader = new FieldEntryReader();
|
@@ -17,392 +17,11 @@
|
|||||||
//
|
//
|
||||||
package org.msgpack.template.builder;
|
package org.msgpack.template.builder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.lang.reflect.Type;
|
||||||
import java.lang.reflect.*;
|
|
||||||
import java.lang.annotation.*;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.EnumSet;
|
|
||||||
import org.msgpack.*;
|
|
||||||
import org.msgpack.annotation.*;
|
|
||||||
import org.msgpack.template.FieldList;
|
|
||||||
import org.msgpack.template.FieldOption;
|
|
||||||
import org.msgpack.template.IFieldEntry;
|
|
||||||
import org.msgpack.template.IFieldEntryReader;
|
|
||||||
import org.msgpack.template.JavassistTemplateBuilder;
|
|
||||||
import org.msgpack.template.ReflectionTemplateBuilder;
|
|
||||||
|
|
||||||
public abstract class TemplateBuilder {
|
import org.msgpack.Template;
|
||||||
|
|
||||||
public abstract Template buildTemplate(Type targetType);
|
public interface TemplateBuilder {
|
||||||
/*
|
Template buildTemplate(Type targetType);
|
||||||
// Override this method
|
|
||||||
<<<<<<< HEAD:java/src/main/java/org/msgpack/template/TemplateBuilder.java
|
|
||||||
public abstract Class<?> loadTemplateClass(Class<?> targetClass);
|
|
||||||
|
|
||||||
// Override this method
|
|
||||||
public abstract Template initializeTemplate(Class<?> targetClass, Class<?> tmplClass, FieldEntry[] entries);
|
|
||||||
|
|
||||||
// Override this method
|
|
||||||
public abstract void writeTemplateClass(Class<?> targetClass, FieldEntry[] entries, String directoryName);
|
|
||||||
|
|
||||||
// Override this method
|
|
||||||
public abstract Template buildTemplate(Class<?> targetClass, FieldEntry[] entries);
|
|
||||||
=======
|
|
||||||
public abstract Template buildTemplate(Class<?> targetClass, IFieldEntry[] entries);
|
|
||||||
>>>>>>> 21f0d0bfc47ddc6d9092621705047f3bef385ba5:java/src/main/java/org/msgpack/template/builder/TemplateBuilder.java
|
|
||||||
|
|
||||||
// Override this method
|
|
||||||
public abstract void writeOrdinalEnumTemplateClass(Class<?> targetClass, Enum<?>[] entires, String directoryName);
|
|
||||||
|
|
||||||
// Override this method
|
|
||||||
public abstract Template buildOrdinalEnumTemplate(Class<?> targetClass, Enum<?>[] entries);
|
|
||||||
|
|
||||||
// Override this method
|
|
||||||
public abstract void writeArrayTemplateClass(Type arrayType, Type genericBaseType,
|
|
||||||
Class<?> baseClass, int dim, String directoryName);
|
|
||||||
|
|
||||||
// Override this method
|
|
||||||
public abstract Template buildArrayTemplate(Type arrayType, Type genericBaseType, Class<?> baseClass, int dim);
|
|
||||||
<<<<<<< HEAD:java/src/main/java/org/msgpack/template/TemplateBuilder.java
|
|
||||||
|
|
||||||
public Template initializeTemplate(Class<?> targetClass, Class<?> tmplClass) {
|
|
||||||
return initializeTemplate(targetClass, tmplClass, readFieldEntries(targetClass, readImplicitFieldOption(targetClass)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeTemplateClass(Class<?> targetClass, FieldList fList, String directoryName) throws NoSuchFieldException {
|
|
||||||
checkValidation(targetClass);
|
|
||||||
writeTemplateClass(targetClass, convertFieldEntries(targetClass, fList), directoryName);
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
|
|
||||||
public abstract IFieldEntryReader getFieldEntryReader();
|
|
||||||
>>>>>>> 21f0d0bfc47ddc6d9092621705047f3bef385ba5:java/src/main/java/org/msgpack/template/builder/TemplateBuilder.java
|
|
||||||
|
|
||||||
public Template buildTemplate(Class<?> targetClass, FieldList flist) throws NoSuchFieldException {
|
|
||||||
checkValidation(targetClass);
|
|
||||||
return buildTemplate(targetClass, getFieldEntryReader().convertFieldEntries(targetClass, flist));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeTemplateClass(Class<?> targetClass, FieldOption implicitOption, String directoryName) {
|
|
||||||
checkValidation(targetClass);
|
|
||||||
writeTemplateClass(targetClass, readFieldEntries(targetClass, implicitOption), directoryName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Template buildTemplate(Class<?> targetClass, FieldOption implicitOption) {
|
|
||||||
checkValidation(targetClass);
|
|
||||||
return buildTemplate(targetClass, getFieldEntryReader().readFieldEntries(targetClass, implicitOption));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeTemplateClass(Class<?> targetClass, final String directoryName) {
|
|
||||||
FieldOption implicitOption = readImplicitFieldOption(targetClass);
|
|
||||||
writeTemplateClass(targetClass, implicitOption, directoryName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Template buildTemplate(Class<?> targetClass) {
|
|
||||||
FieldOption implicitOption = getFieldEntryReader().readImplicitFieldOption(targetClass);
|
|
||||||
return buildTemplate(targetClass, implicitOption);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeOrdinalEnumTemplateClass(Class<?> targetClass, String directoryName) {
|
|
||||||
checkOrdinalEnumValidation(targetClass);
|
|
||||||
Enum<?>[] entries = (Enum<?>[])targetClass.getEnumConstants();
|
|
||||||
writeOrdinalEnumTemplateClass(targetClass, entries, directoryName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Template buildOrdinalEnumTemplate(Class<?> targetClass) {
|
|
||||||
checkOrdinalEnumValidation(targetClass);
|
|
||||||
Enum<?>[] entries = (Enum<?>[])targetClass.getEnumConstants();
|
|
||||||
return buildOrdinalEnumTemplate(targetClass, entries);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeArrayTemplateClass(Type arrayType, String directoryName) {
|
|
||||||
throw new UnsupportedOperationException("not supported yet.");// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
public Template buildArrayTemplate(Type arrayType) {
|
|
||||||
Type baseType;
|
|
||||||
Class<?> baseClass;
|
|
||||||
int dim = 1;
|
|
||||||
if(arrayType instanceof GenericArrayType) {
|
|
||||||
GenericArrayType type = (GenericArrayType)arrayType;
|
|
||||||
baseType = type.getGenericComponentType();
|
|
||||||
while(baseType instanceof GenericArrayType) {
|
|
||||||
baseType = ((GenericArrayType)baseType).getGenericComponentType();
|
|
||||||
dim += 1;
|
|
||||||
}
|
|
||||||
if(baseType instanceof ParameterizedType) {
|
|
||||||
baseClass = (Class<?>)((ParameterizedType)baseType).getRawType();
|
|
||||||
} else {
|
|
||||||
baseClass = (Class<?>)baseType;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Class<?> type = (Class<?>)arrayType;
|
|
||||||
baseClass = type.getComponentType();
|
|
||||||
while(baseClass.isArray()) {
|
|
||||||
baseClass = baseClass.getComponentType();
|
|
||||||
dim += 1;
|
|
||||||
}
|
|
||||||
baseType = baseClass;
|
|
||||||
}
|
|
||||||
return buildArrayTemplate(arrayType, baseType, baseClass, dim);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Type getComponentType(Type arrayType) {
|
|
||||||
if(arrayType instanceof GenericArrayType) {
|
|
||||||
return ((GenericArrayType)arrayType).getGenericComponentType();
|
|
||||||
} else {
|
|
||||||
return ((Class<?>)arrayType).getComponentType();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void checkValidation(Class<?> targetClass) {
|
|
||||||
if(targetClass.isInterface()) {
|
|
||||||
throw new TemplateBuildException("cannot build template of interface");
|
|
||||||
}
|
|
||||||
if(targetClass.isArray()) {
|
|
||||||
throw new TemplateBuildException("cannot build template of array class");
|
|
||||||
}
|
|
||||||
if(targetClass.isPrimitive()) {
|
|
||||||
throw new TemplateBuildException("cannot build template of primitive type");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void checkOrdinalEnumValidation(Class<?> targetClass) {
|
|
||||||
if(!targetClass.isEnum()) {
|
|
||||||
throw new TemplateBuildException("tried to build ordinal enum template of non-enum class");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static TemplateBuilder instance;
|
|
||||||
static {
|
|
||||||
instance = selectDefaultTemplateBuilder();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static TemplateBuilder selectDefaultTemplateBuilder() {
|
|
||||||
try {
|
|
||||||
// FIXME JavassistTemplateBuilder doesn't work on DalvikVM
|
|
||||||
if(System.getProperty("java.vm.name").equals("Dalvik")) {
|
|
||||||
return ReflectionTemplateBuilder.getInstance();
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
return JavassistTemplateBuilder.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized static void setInstance(TemplateBuilder builder) {
|
|
||||||
instance = builder;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Class<?> load(Class<?> targetClass) {
|
|
||||||
return instance.loadTemplateClass(targetClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Template initialize(Class<?> targetClass, Class<?> tmplClass) {
|
|
||||||
return instance.initializeTemplate(targetClass, tmplClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void writeClass(Class<?> targetClass, String directoryName) {
|
|
||||||
instance.writeTemplateClass(targetClass, directoryName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Template build(Class<?> targetClass) {
|
|
||||||
return instance.buildTemplate(targetClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void writeClass(Class<?> targetClass, FieldOption implicitOption, String directoryName) {
|
|
||||||
instance.writeTemplateClass(targetClass, implicitOption, directoryName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Template build(Class<?> targetClass, FieldOption implicitOption) {
|
|
||||||
return instance.buildTemplate(targetClass, implicitOption);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void writeClass(Class<?> targetClass, FieldList fList, String directoryName)
|
|
||||||
throws NoSuchFieldException {
|
|
||||||
instance.writeTemplateClass(targetClass, fList, directoryName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Template build(Class<?> targetClass, FieldList fList) throws NoSuchFieldException {
|
|
||||||
return instance.buildTemplate(targetClass, fList);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void writeOrdinalEnumClass(Class<?> targetClass, String directoryName) {
|
|
||||||
instance.writeOrdinalEnumTemplateClass(targetClass, directoryName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Template buildOrdinalEnum(Class<?> targetClass) {
|
|
||||||
return instance.buildOrdinalEnumTemplate(targetClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void writeArrayClass(Type arrayType, String directoryName) {
|
|
||||||
throw new UnsupportedOperationException("not supported yet.");// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Template buildArray(Type arrayType) {
|
|
||||||
return instance.buildArrayTemplate(arrayType);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
private static void checkValidation(Class<?> targetClass) {
|
|
||||||
if(targetClass.isInterface()) {
|
|
||||||
throw new TemplateBuildException("cannot build template of interface");
|
|
||||||
}
|
|
||||||
if(targetClass.isArray()) {
|
|
||||||
throw new TemplateBuildException("cannot build template of array class");
|
|
||||||
}
|
|
||||||
if(targetClass.isPrimitive()) {
|
|
||||||
throw new TemplateBuildException("cannot build template of primitive type");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void checkOrdinalEnumValidation(Class<?> targetClass) {
|
|
||||||
if(!targetClass.isEnum()) {
|
|
||||||
throw new TemplateBuildException("tried to build ordinal enum template of non-enum class");
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
static IFieldEntry[] convertFieldEntries(Class<?> targetClass, FieldList flist) throws NoSuchFieldException {
|
|
||||||
List<FieldList.Entry> src = flist.getList();
|
|
||||||
FieldEntry[] result = new FieldEntry[src.size()];
|
|
||||||
for(int i=0; i < src.size(); i++) {
|
|
||||||
FieldList.Entry s = src.get(i);
|
|
||||||
if(s.isAvailable()) {
|
|
||||||
result[i] = new FieldEntry(targetClass.getDeclaredField(s.getName()), s.getOption());
|
|
||||||
} else {
|
|
||||||
result[i] = new FieldEntry();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*static IFieldEntry[] readFieldEntries(Class<?> targetClass, FieldOption implicitOption) {
|
|
||||||
Field[] allFields = readAllFields(targetClass);
|
|
||||||
|
|
||||||
/* index:
|
|
||||||
* @Index(0) int field_a; // 0
|
|
||||||
* int field_b; // 1
|
|
||||||
* @Index(3) int field_c; // 3
|
|
||||||
* int field_d; // 4
|
|
||||||
* @Index(2) int field_e; // 2
|
|
||||||
* int field_f; // 5
|
|
||||||
*//*
|
|
||||||
List<FieldEntry> indexed = new ArrayList<FieldEntry>();
|
|
||||||
int maxIndex = -1;
|
|
||||||
for(Field f : allFields) {
|
|
||||||
FieldOption opt = readFieldOption(f, implicitOption);
|
|
||||||
if(opt == FieldOption.IGNORE) {
|
|
||||||
// skip
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int index = readFieldIndex(f, maxIndex);
|
|
||||||
|
|
||||||
if(indexed.size() > index && indexed.get(index) != null) {
|
|
||||||
throw new TemplateBuildException("duplicated index: "+index);
|
|
||||||
}
|
|
||||||
if(index < 0) {
|
|
||||||
throw new TemplateBuildException("invalid index: "+index);
|
|
||||||
}
|
|
||||||
|
|
||||||
while(indexed.size() <= index) {
|
|
||||||
indexed.add(null);
|
|
||||||
}
|
|
||||||
indexed.set(index, new FieldEntry(f, opt));
|
|
||||||
|
|
||||||
if(maxIndex < index) {
|
|
||||||
maxIndex = index;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FieldEntry[] result = new FieldEntry[maxIndex+1];
|
|
||||||
for(int i=0; i < indexed.size(); i++) {
|
|
||||||
FieldEntry e = indexed.get(i);
|
|
||||||
if(e == null) {
|
|
||||||
result[i] = new FieldEntry();
|
|
||||||
} else {
|
|
||||||
result[i] = e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}*/
|
|
||||||
/*
|
|
||||||
private static Field[] readAllFields(Class<?> targetClass) {
|
|
||||||
// order: [fields of super class, ..., fields of this class]
|
|
||||||
List<Field[]> succ = new ArrayList<Field[]>();
|
|
||||||
int total = 0;
|
|
||||||
for(Class<?> c = targetClass; c != Object.class; c = c.getSuperclass()) {
|
|
||||||
Field[] fields = c.getDeclaredFields();
|
|
||||||
total += fields.length;
|
|
||||||
succ.add(fields);
|
|
||||||
}
|
|
||||||
Field[] result = new Field[total];
|
|
||||||
int off = 0;
|
|
||||||
for(int i=succ.size()-1; i >= 0; i--) {
|
|
||||||
Field[] fields = succ.get(i);
|
|
||||||
System.arraycopy(fields, 0, result, off, fields.length);
|
|
||||||
off += fields.length;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static FieldOption readImplicitFieldOption(Class<?> targetClass) {
|
|
||||||
MessagePackMessage a = targetClass.getAnnotation(MessagePackMessage.class);
|
|
||||||
if(a == null) {
|
|
||||||
return FieldOption.DEFAULT;
|
|
||||||
}
|
|
||||||
return a.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static FieldOption readFieldOption(Field field, FieldOption implicitOption) {
|
|
||||||
int mod = field.getModifiers();
|
|
||||||
if(Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
|
|
||||||
return FieldOption.IGNORE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isAnnotated(field, Ignore.class)) {
|
|
||||||
return FieldOption.IGNORE;
|
|
||||||
} else if(isAnnotated(field, Required.class)) {
|
|
||||||
return FieldOption.REQUIRED;
|
|
||||||
} else if(isAnnotated(field, Optional.class)) {
|
|
||||||
return FieldOption.OPTIONAL;
|
|
||||||
} else if(isAnnotated(field, Nullable.class)) {
|
|
||||||
if(field.getDeclaringClass().isPrimitive()) {
|
|
||||||
return FieldOption.REQUIRED;
|
|
||||||
} else {
|
|
||||||
return FieldOption.NULLABLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(implicitOption != FieldOption.DEFAULT) {
|
|
||||||
return implicitOption;
|
|
||||||
}
|
|
||||||
|
|
||||||
// default mode:
|
|
||||||
// transient : Ignore
|
|
||||||
// public : Required
|
|
||||||
// others : Ignore
|
|
||||||
if(Modifier.isTransient(mod)) {
|
|
||||||
return FieldOption.IGNORE;
|
|
||||||
} else if(Modifier.isPublic(mod)) {
|
|
||||||
return FieldOption.REQUIRED;
|
|
||||||
} else {
|
|
||||||
return FieldOption.IGNORE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int readFieldIndex(Field field, int maxIndex) {
|
|
||||||
Index a = field.getAnnotation(Index.class);
|
|
||||||
if(a == null) {
|
|
||||||
return maxIndex + 1;
|
|
||||||
} else {
|
|
||||||
return a.value();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isAnnotated(AccessibleObject ao, Class<? extends Annotation> with) {
|
|
||||||
return ao.getAnnotation(with) != null;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,13 +15,14 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
package org.msgpack.template;
|
package org.msgpack.util;
|
||||||
|
|
||||||
|
import org.msgpack.template.TemplateBuildException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class TemplateClassWriter {
|
public class TemplatePrecompiler {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(TemplateClassWriter.class);
|
private static final Logger LOG = LoggerFactory.getLogger(TemplatePrecompiler.class);
|
||||||
|
|
||||||
public static void write(Class<?> target, String directoryName) {
|
public static void write(Class<?> target, String directoryName) {
|
||||||
if (target.isEnum()) {
|
if (target.isEnum()) {
|
||||||
@@ -36,7 +37,7 @@ public class TemplateClassWriter {
|
|||||||
|
|
||||||
private String[] classNames;
|
private String[] classNames;
|
||||||
|
|
||||||
private TemplateClassWriter() {
|
private TemplatePrecompiler() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void parseOpts(final String[] args) {// TODO
|
private void parseOpts(final String[] args) {// TODO
|
||||||
@@ -64,7 +65,7 @@ public class TemplateClassWriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(final String[] args) throws Exception {
|
public static void main(final String[] args) throws Exception {
|
||||||
TemplateClassWriter writer = new TemplateClassWriter();
|
TemplatePrecompiler writer = new TemplatePrecompiler();
|
||||||
writer.parseOpts(args);
|
writer.parseOpts(args);
|
||||||
writer.writeTemplateClasses();
|
writer.writeTemplateClasses();
|
||||||
}
|
}
|
@@ -30,9 +30,11 @@ import org.msgpack.annotation.MessagePackMessage;
|
|||||||
import org.msgpack.annotation.MessagePackOrdinalEnum;
|
import org.msgpack.annotation.MessagePackOrdinalEnum;
|
||||||
import org.msgpack.annotation.Optional;
|
import org.msgpack.annotation.Optional;
|
||||||
import org.msgpack.template.TestTemplateBuilderPackConvert.SampleInterface;
|
import org.msgpack.template.TestTemplateBuilderPackConvert.SampleInterface;
|
||||||
|
import org.msgpack.template.builder.BeansTemplateBuilder;
|
||||||
import org.msgpack.template.builder.BuilderSelectorRegistry;
|
import org.msgpack.template.builder.BuilderSelectorRegistry;
|
||||||
import org.msgpack.template.builder.MessagePackBeansBuilderSelector;
|
import org.msgpack.template.builder.BeansTemplateBuilderSelector;
|
||||||
import org.msgpack.template.builder.MessagePackMessageBuilderSelector;
|
import org.msgpack.template.builder.AnnotationTemplateBuilderSelector;
|
||||||
|
import org.msgpack.template.builder.ReflectionTemplateBuilder;
|
||||||
import org.msgpack.template.builder.TemplateBuilder;
|
import org.msgpack.template.builder.TemplateBuilder;
|
||||||
|
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
@@ -46,11 +48,11 @@ public class TestReflectionTemplateBuilderJavaBeansPackUnpack extends TestCase {
|
|||||||
BuilderSelectorRegistry instance = BuilderSelectorRegistry.getInstance();
|
BuilderSelectorRegistry instance = BuilderSelectorRegistry.getInstance();
|
||||||
|
|
||||||
instance.replace(
|
instance.replace(
|
||||||
new MessagePackMessageBuilderSelector(
|
new AnnotationTemplateBuilderSelector(
|
||||||
new ReflectionTemplateBuilder()));
|
new ReflectionTemplateBuilder()));
|
||||||
instance.setForceBuilder( new ReflectionTemplateBuilder());
|
instance.setForceBuilder( new ReflectionTemplateBuilder());
|
||||||
instance.replace(new MessagePackBeansBuilderSelector(
|
instance.replace(new BeansTemplateBuilderSelector(
|
||||||
new BeansReflectionTemplateBuilder()));
|
new BeansTemplateBuilder()));
|
||||||
|
|
||||||
MessagePack.register(PrimitiveTypeFieldsClass.class);
|
MessagePack.register(PrimitiveTypeFieldsClass.class);
|
||||||
MessagePack.register(OptionalPrimitiveTypeFieldsClass.class);
|
MessagePack.register(OptionalPrimitiveTypeFieldsClass.class);
|
||||||
|
@@ -24,9 +24,11 @@ import org.msgpack.Unpacker;
|
|||||||
import org.msgpack.annotation.MessagePackMessage;
|
import org.msgpack.annotation.MessagePackMessage;
|
||||||
import org.msgpack.annotation.MessagePackOrdinalEnum;
|
import org.msgpack.annotation.MessagePackOrdinalEnum;
|
||||||
import org.msgpack.annotation.Optional;
|
import org.msgpack.annotation.Optional;
|
||||||
|
import org.msgpack.template.builder.BeansTemplateBuilder;
|
||||||
import org.msgpack.template.builder.BuilderSelectorRegistry;
|
import org.msgpack.template.builder.BuilderSelectorRegistry;
|
||||||
import org.msgpack.template.builder.MessagePackBeansBuilderSelector;
|
import org.msgpack.template.builder.BeansTemplateBuilderSelector;
|
||||||
import org.msgpack.template.builder.MessagePackMessageBuilderSelector;
|
import org.msgpack.template.builder.AnnotationTemplateBuilderSelector;
|
||||||
|
import org.msgpack.template.builder.ReflectionTemplateBuilder;
|
||||||
import org.msgpack.template.builder.TemplateBuilder;
|
import org.msgpack.template.builder.TemplateBuilder;
|
||||||
|
|
||||||
import junit.framework.Assert;
|
import junit.framework.Assert;
|
||||||
@@ -38,11 +40,11 @@ public class TestReflectionTemplateBuilderPackConvert extends TestCase {
|
|||||||
BuilderSelectorRegistry instance = BuilderSelectorRegistry.getInstance();
|
BuilderSelectorRegistry instance = BuilderSelectorRegistry.getInstance();
|
||||||
|
|
||||||
instance.replace(
|
instance.replace(
|
||||||
new MessagePackMessageBuilderSelector(
|
new AnnotationTemplateBuilderSelector(
|
||||||
new ReflectionTemplateBuilder()));
|
new ReflectionTemplateBuilder()));
|
||||||
instance.setForceBuilder( new ReflectionTemplateBuilder());
|
instance.setForceBuilder( new ReflectionTemplateBuilder());
|
||||||
instance.replace(new MessagePackBeansBuilderSelector(
|
instance.replace(new BeansTemplateBuilderSelector(
|
||||||
new BeansReflectionTemplateBuilder()));
|
new BeansTemplateBuilder()));
|
||||||
|
|
||||||
MessagePack.register(PrimitiveTypeFieldsClass.class);
|
MessagePack.register(PrimitiveTypeFieldsClass.class);
|
||||||
MessagePack.register(OptionalPrimitiveTypeFieldsClass.class);
|
MessagePack.register(OptionalPrimitiveTypeFieldsClass.class);
|
||||||
|
@@ -25,9 +25,11 @@ import org.msgpack.annotation.MessagePackMessage;
|
|||||||
import org.msgpack.annotation.MessagePackOrdinalEnum;
|
import org.msgpack.annotation.MessagePackOrdinalEnum;
|
||||||
import org.msgpack.annotation.Optional;
|
import org.msgpack.annotation.Optional;
|
||||||
import org.msgpack.template.TestTemplateBuilderPackConvert.SampleInterface;
|
import org.msgpack.template.TestTemplateBuilderPackConvert.SampleInterface;
|
||||||
|
import org.msgpack.template.builder.BeansTemplateBuilder;
|
||||||
import org.msgpack.template.builder.BuilderSelectorRegistry;
|
import org.msgpack.template.builder.BuilderSelectorRegistry;
|
||||||
import org.msgpack.template.builder.MessagePackBeansBuilderSelector;
|
import org.msgpack.template.builder.BeansTemplateBuilderSelector;
|
||||||
import org.msgpack.template.builder.MessagePackMessageBuilderSelector;
|
import org.msgpack.template.builder.AnnotationTemplateBuilderSelector;
|
||||||
|
import org.msgpack.template.builder.ReflectionTemplateBuilder;
|
||||||
import org.msgpack.template.builder.TemplateBuilder;
|
import org.msgpack.template.builder.TemplateBuilder;
|
||||||
|
|
||||||
import junit.framework.Assert;
|
import junit.framework.Assert;
|
||||||
@@ -41,11 +43,11 @@ public class TestReflectionTemplateBuilderPackUnpack extends TestCase {
|
|||||||
BuilderSelectorRegistry instance = BuilderSelectorRegistry.getInstance();
|
BuilderSelectorRegistry instance = BuilderSelectorRegistry.getInstance();
|
||||||
|
|
||||||
instance.replace(
|
instance.replace(
|
||||||
new MessagePackMessageBuilderSelector(
|
new AnnotationTemplateBuilderSelector(
|
||||||
new ReflectionTemplateBuilder()));
|
new ReflectionTemplateBuilder()));
|
||||||
instance.setForceBuilder( new ReflectionTemplateBuilder());
|
instance.setForceBuilder( new ReflectionTemplateBuilder());
|
||||||
instance.replace(new MessagePackBeansBuilderSelector(
|
instance.replace(new BeansTemplateBuilderSelector(
|
||||||
new BeansReflectionTemplateBuilder()));
|
new BeansTemplateBuilder()));
|
||||||
|
|
||||||
|
|
||||||
MessagePack.register(PrimitiveTypeFieldsClass.class);
|
MessagePack.register(PrimitiveTypeFieldsClass.class);
|
||||||
|
@@ -7,7 +7,7 @@ import java.lang.Class
|
|||||||
import collection.immutable.{ListMap, TreeMap}
|
import collection.immutable.{ListMap, TreeMap}
|
||||||
import java.lang.reflect.{Type, Modifier, Method, Field}
|
import java.lang.reflect.{Type, Modifier, Method, Field}
|
||||||
import java.lang.annotation.{Annotation => JavaAnnotation}
|
import java.lang.annotation.{Annotation => JavaAnnotation}
|
||||||
import javassist.{JavassistTemplate, BuildContextBase, BuildContext}
|
import builder.{JavassistTemplateBuilder, JavassistTemplate, BuildContextBase, BuildContext}
|
||||||
import scala.collection.JavaConverters._
|
import scala.collection.JavaConverters._
|
||||||
;
|
;
|
||||||
/*
|
/*
|
||||||
|
@@ -1,10 +1,9 @@
|
|||||||
package org.msgpack
|
package org.msgpack
|
||||||
|
|
||||||
import template._
|
import template._
|
||||||
import builder.{MessagePackMessageBuilderSelector, BuilderSelectorRegistry}
|
import builder.{AnnotationTemplateBuilderSelector, BuilderSelectorRegistry, BuildContextFactory}
|
||||||
import template.javassist.BuildContextFactory
|
|
||||||
import collection.mutable.{MutableList, LinkedList}
|
import collection.mutable.{MutableList, LinkedList}
|
||||||
import collection.mutable.{Map => MMap,HashMap => MHashMap}
|
import collection.mutable.{Map => MMap, HashMap => MHashMap}
|
||||||
;
|
;
|
||||||
/*
|
/*
|
||||||
* Created by IntelliJ IDEA.
|
* Created by IntelliJ IDEA.
|
||||||
@@ -18,7 +17,7 @@ object ScalaMessagePack {
|
|||||||
{
|
{
|
||||||
// for scala object
|
// for scala object
|
||||||
BuilderSelectorRegistry.getInstance.insertBefore(
|
BuilderSelectorRegistry.getInstance.insertBefore(
|
||||||
MessagePackMessageBuilderSelector.NAME,
|
AnnotationTemplateBuilderSelector.NAME,
|
||||||
new ScalaTemplateBuilderSelector)
|
new ScalaTemplateBuilderSelector)
|
||||||
|
|
||||||
// register scala's list classes
|
// register scala's list classes
|
||||||
|
@@ -3,8 +3,7 @@ package org.msgpack
|
|||||||
import annotation.MessagePackMessage
|
import annotation.MessagePackMessage
|
||||||
import template.builder.BuilderSelector
|
import template.builder.BuilderSelector
|
||||||
import java.lang.reflect.Type
|
import java.lang.reflect.Type
|
||||||
import template.javassist.BuildContextFactory
|
import template.builder.{JavassistTemplateBuilder, BuildContextFactory}
|
||||||
import template.JavassistTemplateBuilder
|
|
||||||
import java.lang.annotation.{Annotation => JAnnotation}
|
import java.lang.annotation.{Annotation => JAnnotation}
|
||||||
;
|
;
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user