Package org.powermock.core
Class ClassReplicaCreator
- java.lang.Object
-
- org.powermock.core.ClassReplicaCreator
-
public class ClassReplicaCreator extends java.lang.ObjectThis 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).
-
-
Field Summary
Fields Modifier and Type Field Description private static java.util.concurrent.atomic.AtomicIntegercounterprivate static java.lang.StringPOWERMOCK_INSTANCE_DELEGATOR_FIELD_NAME
-
Constructor Summary
Constructors Constructor Description ClassReplicaCreator()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private <T> voidaddDelegatorField(T delegator, javassist.CtClass replicaClass)Add a field to the replica class that holds the instance delegator.private voidcopyFields(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 typeT.private <T> java.lang.StringgenerateReplicaClassName(java.lang.Class<T> clazz)private static java.lang.StringgetParametersAsString(java.lang.String[] types)private java.lang.String[]getParameterTypes(javassist.CtMethod ctMethod)private java.lang.StringgetReplicaMethodDelegationCode(java.lang.Class<?> clazz, javassist.CtMethod ctMethod, java.lang.String classOrInstanceToDelegateTo)
-
-
-
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
-
-
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 typeT. To allow for partial mocking all calls to non-mocked methods will be delegated to thedelegator.- 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.CannotCompileExceptionAdd a field to the replica class that holds the instance delegator. I.e. if we're creating a instance replica ofjava.lang.Longthis methods adds a new field of typedelegator.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.CannotCompileExceptionjavassist.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)
-
-