Class BeanBuilder
- java.lang.Object
-
- com.fasterxml.jackson.module.mrbean.BeanBuilder
-
public class BeanBuilder extends java.lang.ObjectHeavy 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 classBeanBuilder.TypeDescriptionHelper 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>_beanPropertiesprotected com.fasterxml.jackson.databind.JavaType_typeAbstract class or interface that the bean is created to extend or implement.protected com.fasterxml.jackson.databind.introspect.AnnotatedClass_typeDefinitionprotected com.fasterxml.jackson.databind.type.TypeFactory_typeFactoryprotected 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 voidaddGetter(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, java.lang.reflect.Method m)protected voidaddSetter(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.StringbuildGetterName(java.lang.String fieldName)protected java.lang.StringbuildSetterName(java.lang.String fieldName)protected com.fasterxml.jackson.databind.introspect.TypeResolutionContextbuildTypeContext(com.fasterxml.jackson.databind.JavaType ctxtType)protected java.lang.Stringcap(java.lang.String prefix, java.lang.String name)static BeanBuilderconstruct(com.fasterxml.jackson.databind.cfg.MapperConfig<?> config, com.fasterxml.jackson.databind.JavaType type, com.fasterxml.jackson.databind.introspect.AnnotatedClass ac)protected voidcreateField(org.objectweb.asm.ClassWriter cw, POJOProperty prop, BeanBuilder.TypeDescription type)protected voidcreateGetter(org.objectweb.asm.ClassWriter cw, java.lang.String internalClassName, POJOProperty prop, BeanBuilder.TypeDescription propertyType)protected voidcreateSetter(org.objectweb.asm.ClassWriter cw, java.lang.String internalClassName, POJOProperty prop, BeanBuilder.TypeDescription propertyType)protected voidcreateUnimplementedMethod(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.Stringdecap(java.lang.String name)protected POJOPropertyfindProperty(com.fasterxml.jackson.databind.introspect.TypeResolutionContext ctxt, java.lang.String propName)protected static voidgenerateDefaultConstructor(org.objectweb.asm.ClassWriter cw, java.lang.String superName)NOTE: only static because it is needed from TypeDetectorprotected java.lang.StringgetInternalClassName(java.lang.String className)protected java.lang.StringgetPropertyName(java.lang.String methodName)protected booleanhasConcreteOverride(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.BeanBuilderimplement(boolean failOnUnrecognized)protected static booleanreturnsBoolean(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 throwUnsupportedOperationExceptionif 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)
-
-