Class BeanBuilder
- java.lang.Object
-
- com.fasterxml.jackson.module.mrbean.BeanBuilder
-
public class BeanBuilder extends java.lang.Object
Heavy lifter of mr Bean package: class that keeps track of logical POJO properties, and figures out how to create an implementation class.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
BeanBuilder.TypeDescription
Helper bean used to encapsulate most details of type handling
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Map<java.lang.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 java.util.LinkedHashMap<java.lang.String,java.lang.reflect.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, java.lang.reflect.Method m)
protected void
addSetter(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, java.lang.reflect.Method m)
byte[]
build(java.lang.String className)
Method that generates byte code for class that implements abstract types requested so far.protected java.lang.String
buildGetterName(java.lang.String fieldName)
protected java.lang.String
buildSetterName(java.lang.String fieldName)
protected com.fasterxml.jackson.databind.introspect.TypeResolutionContext
buildTypeContext(com.fasterxml.jackson.databind.JavaType ctxtType)
protected java.lang.String
cap(java.lang.String prefix, java.lang.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, BeanBuilder.TypeDescription type)
protected void
createGetter(org.objectweb.asm.ClassWriter cw, java.lang.String internalClassName, POJOProperty prop, BeanBuilder.TypeDescription propertyType)
protected void
createSetter(org.objectweb.asm.ClassWriter cw, java.lang.String internalClassName, POJOProperty prop, BeanBuilder.TypeDescription propertyType)
protected void
createUnimplementedMethod(org.objectweb.asm.ClassWriter cw, java.lang.String internalClassName, java.lang.reflect.Method method)
Builder for methods that just throw an exception, basically "unsupported operation" implementation.protected java.lang.String
decap(java.lang.String name)
protected POJOProperty
findProperty(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, java.lang.String propName)
protected static void
generateDefaultConstructor(org.objectweb.asm.ClassWriter cw, java.lang.String superName)
NOTE: only static because it is needed from TypeDetectorprotected java.lang.String
getInternalClassName(java.lang.String className)
protected java.lang.String
getPropertyName(java.lang.String methodName)
protected boolean
hasConcreteOverride(java.lang.reflect.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(java.lang.reflect.Method m)
-
-
-
Field Detail
-
_beanProperties
protected java.util.Map<java.lang.String,POJOProperty> _beanProperties
-
_unsupportedMethods
protected java.util.LinkedHashMap<java.lang.String,java.lang.reflect.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(java.lang.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(java.lang.reflect.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
-
getPropertyName
protected java.lang.String getPropertyName(java.lang.String methodName)
-
buildGetterName
protected java.lang.String buildGetterName(java.lang.String fieldName)
-
buildSetterName
protected java.lang.String buildSetterName(java.lang.String fieldName)
-
getInternalClassName
protected java.lang.String getInternalClassName(java.lang.String className)
-
addGetter
protected void addGetter(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, java.lang.reflect.Method m)
-
addSetter
protected void addSetter(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, java.lang.reflect.Method m)
-
findProperty
protected POJOProperty findProperty(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, java.lang.String propName)
-
returnsBoolean
protected static final boolean returnsBoolean(java.lang.reflect.Method m)
-
generateDefaultConstructor
protected static void generateDefaultConstructor(org.objectweb.asm.ClassWriter cw, java.lang.String superName)
NOTE: only static because it is needed from TypeDetector
-
createField
protected void createField(org.objectweb.asm.ClassWriter cw, POJOProperty prop, BeanBuilder.TypeDescription type)
-
createSetter
protected void createSetter(org.objectweb.asm.ClassWriter cw, java.lang.String internalClassName, POJOProperty prop, BeanBuilder.TypeDescription propertyType)
-
createGetter
protected void createGetter(org.objectweb.asm.ClassWriter cw, java.lang.String internalClassName, POJOProperty prop, BeanBuilder.TypeDescription propertyType)
-
createUnimplementedMethod
protected void createUnimplementedMethod(org.objectweb.asm.ClassWriter cw, java.lang.String internalClassName, java.lang.reflect.Method method)
Builder for methods that just throw an exception, basically "unsupported operation" implementation.
-
decap
protected java.lang.String decap(java.lang.String name)
-
cap
protected java.lang.String cap(java.lang.String prefix, java.lang.String name)
-
buildTypeContext
protected com.fasterxml.jackson.databind.introspect.TypeResolutionContext buildTypeContext(com.fasterxml.jackson.databind.JavaType ctxtType)
-
-