Package org.powermock.core
Class ClassReplicaCreator
- java.lang.Object
-
- org.powermock.core.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).
-
-
Field Summary
Fields Modifier and Type Field Description private static java.util.concurrent.atomic.AtomicInteger
counter
private static java.lang.String
POWERMOCK_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> 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 typeT
.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)
-
-
-
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.CannotCompileException
Add a field to the replica class that holds the instance delegator. I.e. if we're creating a instance replica ofjava.lang.Long
this 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.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)
-
-