Class BeanBuilder
- java.lang.Object
-
- com.fasterxml.jackson.module.mrbean.BeanBuilder
-
public class BeanBuilder extends Object
Heavy lifter of mr Bean package: class that keeps track of logical POJO properties, and figures out how to create an implementation class.
-
-
Field Summary
Fields Modifier and Type Field Description protected Map<String,POJOProperty>
_beanProperties
protected com.fasterxml.jackson.databind.JavaType
_type
Abstract class or interface that the bean is created to extend or implement.protected com.fasterxml.jackson.databind.introspect.AnnotatedClass
_typeDefinition
protected com.fasterxml.jackson.databind.type.TypeFactory
_typeFactory
protected LinkedHashMap<String,Method>
_unsupportedMethods
-
Constructor Summary
Constructors Constructor Description BeanBuilder(com.fasterxml.jackson.databind.JavaType type, com.fasterxml.jackson.databind.introspect.AnnotatedClass ac, com.fasterxml.jackson.databind.type.TypeFactory tf)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
addGetter(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, Method m)
protected void
addSetter(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, Method m)
byte[]
build(String className)
Method that generates byte code for class that implements abstract types requested so far.protected String
buildGetterName(String fieldName)
protected String
buildSetterName(String fieldName)
protected com.fasterxml.jackson.databind.introspect.TypeResolutionContext
buildTypeContext(com.fasterxml.jackson.databind.JavaType ctxtType)
protected String
cap(String prefix, String name)
static BeanBuilder
construct(com.fasterxml.jackson.databind.cfg.MapperConfig<?> config, com.fasterxml.jackson.databind.JavaType type, com.fasterxml.jackson.databind.introspect.AnnotatedClass ac)
protected void
createField(org.objectweb.asm.ClassWriter cw, POJOProperty prop, com.fasterxml.jackson.module.mrbean.BeanBuilder.TypeDescription type)
protected void
createGetter(org.objectweb.asm.ClassWriter cw, String internalClassName, POJOProperty prop, com.fasterxml.jackson.module.mrbean.BeanBuilder.TypeDescription propertyType)
protected void
createSetter(org.objectweb.asm.ClassWriter cw, String internalClassName, POJOProperty prop, com.fasterxml.jackson.module.mrbean.BeanBuilder.TypeDescription propertyType)
protected void
createUnimplementedMethod(org.objectweb.asm.ClassWriter cw, String internalClassName, Method method)
Builder for methods that just throw an exception, basically "unsupported operation" implementation.protected String
decap(String name)
protected POJOProperty
findProperty(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, String propName)
protected static void
generateDefaultConstructor(org.objectweb.asm.ClassWriter cw, String superName)
NOTE: only static because it is needed from TypeDetectorprotected String
getInternalClassName(String className)
protected String
getPropertyName(String methodName)
protected boolean
hasConcreteOverride(Method m0, com.fasterxml.jackson.databind.JavaType implementedType)
Helper method used to detect if an abstract method found in a base class may actually be implemented in a (more) concrete sub-class.BeanBuilder
implement(boolean failOnUnrecognized)
protected static boolean
returnsBoolean(Method m)
-
-
-
Field Detail
-
_beanProperties
protected Map<String,POJOProperty> _beanProperties
-
_unsupportedMethods
protected LinkedHashMap<String,Method> _unsupportedMethods
-
_type
protected final com.fasterxml.jackson.databind.JavaType _type
Abstract class or interface that the bean is created to extend or implement.
-
_typeDefinition
protected final com.fasterxml.jackson.databind.introspect.AnnotatedClass _typeDefinition
-
_typeFactory
protected final com.fasterxml.jackson.databind.type.TypeFactory _typeFactory
-
-
Method Detail
-
construct
public static BeanBuilder construct(com.fasterxml.jackson.databind.cfg.MapperConfig<?> config, com.fasterxml.jackson.databind.JavaType type, com.fasterxml.jackson.databind.introspect.AnnotatedClass ac)
-
implement
public BeanBuilder implement(boolean failOnUnrecognized)
- Parameters:
failOnUnrecognized
- If true, and an unrecognized (non-getter, non-setter) method is encountered, will throwIllegalArgumentException
; if false, will implement bogus method that will throwUnsupportedOperationException
if called.
-
build
public byte[] build(String className)
Method that generates byte code for class that implements abstract types requested so far.- Parameters:
className
- Fully-qualified name of the class to generate- Returns:
- Byte code Class instance built by this builder
-
hasConcreteOverride
protected boolean hasConcreteOverride(Method m0, com.fasterxml.jackson.databind.JavaType implementedType)
Helper method used to detect if an abstract method found in a base class may actually be implemented in a (more) concrete sub-class.- Since:
- 2.4
-
addGetter
protected void addGetter(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, Method m)
-
addSetter
protected void addSetter(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, Method m)
-
findProperty
protected POJOProperty findProperty(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, String propName)
-
returnsBoolean
protected static final boolean returnsBoolean(Method m)
-
generateDefaultConstructor
protected static void generateDefaultConstructor(org.objectweb.asm.ClassWriter cw, String superName)
NOTE: only static because it is needed from TypeDetector
-
createField
protected void createField(org.objectweb.asm.ClassWriter cw, POJOProperty prop, com.fasterxml.jackson.module.mrbean.BeanBuilder.TypeDescription type)
-
createSetter
protected void createSetter(org.objectweb.asm.ClassWriter cw, String internalClassName, POJOProperty prop, com.fasterxml.jackson.module.mrbean.BeanBuilder.TypeDescription propertyType)
-
createGetter
protected void createGetter(org.objectweb.asm.ClassWriter cw, String internalClassName, POJOProperty prop, com.fasterxml.jackson.module.mrbean.BeanBuilder.TypeDescription propertyType)
-
createUnimplementedMethod
protected void createUnimplementedMethod(org.objectweb.asm.ClassWriter cw, String internalClassName, Method method)
Builder for methods that just throw an exception, basically "unsupported operation" implementation.
-
buildTypeContext
protected com.fasterxml.jackson.databind.introspect.TypeResolutionContext buildTypeContext(com.fasterxml.jackson.databind.JavaType ctxtType)
-
-