Class 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 TypeDetector
      protected 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)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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
    • Constructor Detail

      • BeanBuilder

        public BeanBuilder​(com.fasterxml.jackson.databind.JavaType type,
                           com.fasterxml.jackson.databind.introspect.AnnotatedClass ac,
                           com.fasterxml.jackson.databind.type.TypeFactory tf)
    • 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 throw IllegalArgumentException; if false, will implement bogus method that will throw UnsupportedOperationException 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
      • 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)