Class ProxyingInstantiator<T>

  • All Implemented Interfaces:
    ObjectInstantiator<T>

    @Instantiator(STANDARD)
    public class ProxyingInstantiator<T>
    extends java.lang.Object
    implements ObjectInstantiator<T>
    This instantiator creates a class by dynamically extending it. It will skip the call to the parent constructor in the bytecode. So that the constructor is indeed not called but you however instantiate a child class, not the actual class. The class loader will normally throw a VerifyError is you do that. However, using -Xverify:none should make it work
    • Field Detail

      • INDEX_CLASS_SUPERCLASS

        private static final int INDEX_CLASS_SUPERCLASS
        See Also:
        Constant Field Values
      • INDEX_UTF8_CONSTRUCTOR_NAME

        private static final int INDEX_UTF8_CONSTRUCTOR_NAME
        See Also:
        Constant Field Values
      • INDEX_UTF8_CONSTRUCTOR_DESC

        private static final int INDEX_UTF8_CONSTRUCTOR_DESC
        See Also:
        Constant Field Values
      • INDEX_UTF8_CODE_ATTRIBUTE

        private static final int INDEX_UTF8_CODE_ATTRIBUTE
        See Also:
        Constant Field Values
      • CODE

        private static final byte[] CODE
      • CODE_ATTRIBUTE_LENGTH

        private static final int CODE_ATTRIBUTE_LENGTH
      • CONSTRUCTOR_NAME

        private static final java.lang.String CONSTRUCTOR_NAME
        See Also:
        Constant Field Values
      • CONSTRUCTOR_DESC

        private static final java.lang.String CONSTRUCTOR_DESC
        See Also:
        Constant Field Values
      • newType

        private final java.lang.Class<? extends T> newType
    • Constructor Detail

      • ProxyingInstantiator

        public ProxyingInstantiator​(java.lang.Class<T> type)
    • Method Detail

      • nameForSubclass

        private static java.lang.String nameForSubclass​(java.lang.Class<?> parent)
      • newInstance

        public T newInstance()
        Description copied from interface: ObjectInstantiator
        Returns a new instance of an object. The returned object's class is defined by the implementation.
        Specified by:
        newInstance in interface ObjectInstantiator<T>
        Returns:
        A new instance of an object.
      • writeExtendingClass

        private static byte[] writeExtendingClass​(java.lang.Class<?> type,
                                                  java.lang.String subclassName)
        Will generate the bytes for a class extending the type passed in parameter. This class will only have an empty default constructor
        Parameters:
        type - type to extend
        subclassName - name to give to the subclass
        Returns:
        the byte for the class
        Throws:
        ObjenesisException - is something goes wrong