Class ClassReplicaCreator


  • public class ClassReplicaCreator
    extends java.lang.Object
    This class takes care of creating a replica of a class. The class structure is copied to the new class. This is useful in situations where you want to create a mock for a class but it's not possible because of some restrictions (such as the class being loaded by the bootstrap class-loader).
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private <T> void addDelegatorField​(T delegator, javassist.CtClass replicaClass)
      Add a field to the replica class that holds the instance delegator.
      private void copyFields​(javassist.CtClass originalClassAsCtClass, javassist.CtClass newClass)  
      <T> java.lang.Class<T> createClassReplica​(java.lang.Class<T> clazz)  
      <T> java.lang.Class<T> createInstanceReplica​(T delegator)
      Create a class that is a replica of type T.
      private <T> java.lang.String generateReplicaClassName​(java.lang.Class<T> clazz)  
      private static java.lang.String getParametersAsString​(java.lang.String[] types)  
      private java.lang.String[] getParameterTypes​(javassist.CtMethod ctMethod)  
      private java.lang.String getReplicaMethodDelegationCode​(java.lang.Class<?> clazz, javassist.CtMethod ctMethod, java.lang.String classOrInstanceToDelegateTo)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • POWERMOCK_INSTANCE_DELEGATOR_FIELD_NAME

        private static final java.lang.String POWERMOCK_INSTANCE_DELEGATOR_FIELD_NAME
        See Also:
        Constant Field Values
      • counter

        private static java.util.concurrent.atomic.AtomicInteger counter
    • Constructor Detail

      • ClassReplicaCreator

        public ClassReplicaCreator()
    • Method Detail

      • createClassReplica

        public <T> java.lang.Class<T> createClassReplica​(java.lang.Class<T> clazz)
      • createInstanceReplica

        public <T> java.lang.Class<T> createInstanceReplica​(T delegator)
        Create a class that is a replica of type T. To allow for partial mocking all calls to non-mocked methods will be delegated to the delegator.
        Type Parameters:
        T - The type of the replica class to be created.
        Parameters:
        delegator - The delegator object that will be invoked to allow for partial mocking.
        Returns:
        A replica class that can be used to duck-type an instance.
      • addDelegatorField

        private <T> void addDelegatorField​(T delegator,
                                           javassist.CtClass replicaClass)
                                    throws javassist.CannotCompileException
        Add a field to the replica class that holds the instance delegator. I.e. if we're creating a instance replica of java.lang.Long this methods adds a new field of type delegator.getClass() to the replica class.
        Throws:
        javassist.CannotCompileException
      • generateReplicaClassName

        private <T> java.lang.String generateReplicaClassName​(java.lang.Class<T> clazz)
      • copyFields

        private void copyFields​(javassist.CtClass originalClassAsCtClass,
                                javassist.CtClass newClass)
                         throws javassist.CannotCompileException,
                                javassist.NotFoundException
        Throws:
        javassist.CannotCompileException
        javassist.NotFoundException
      • getReplicaMethodDelegationCode

        private java.lang.String getReplicaMethodDelegationCode​(java.lang.Class<?> clazz,
                                                                javassist.CtMethod ctMethod,
                                                                java.lang.String classOrInstanceToDelegateTo)
                                                         throws javassist.NotFoundException
        Throws:
        javassist.NotFoundException
      • getParameterTypes

        private java.lang.String[] getParameterTypes​(javassist.CtMethod ctMethod)
                                              throws javassist.NotFoundException
        Throws:
        javassist.NotFoundException
      • getParametersAsString

        private static java.lang.String getParametersAsString​(java.lang.String[] types)