Package org.powermock.classloading
Class DeepCloner
java.lang.Object
org.powermock.classloading.DeepCloner
- All Implemented Interfaces:
DeepClonerSPI
The purpose of the deep cloner is to create a deep clone of an object. An
object can also be cloned to a different class-loader.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classMost of this code has been copied from the Sun14ReflectionProvider in the XStream project. -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionClone using the current ContextClassLoader.DeepCloner(ClassLoader classLoader) Clone using the supplied ClassLoader. -
Method Summary
Modifier and TypeMethodDescriptionprivate static voidassertObjectNotNull(Object object) <T> Tclone(T objectToClone) Clones an object.<T> Tclone(T objectToClone, boolean includeStandardJavaType) private ObjectcloneEnum(ClassLoader targetCL, Object source) private <T> voidcloneFields(ClassLoader targetCL, Class<T> targetClass, Object source, Object target, Map<Object, Object> referenceMap, boolean cloneStandardJavaTypes) private ObjectcloneJavaReflectMethod(Object source) private voidprivate Class<DoNotClone> getDoNotClone(ClassLoader targetCL) private static EnumgetEnumValue(Object enumValueOfSourceClassloader, Class<Object> enumTypeLoadedByTargetCL) private static <T> Class<T> getType(T object) private ObjectinstantiateArray(ClassLoader targetCL, Class<?> arrayClass, Object objectToClone, boolean cloneStandardJavaTypes) private static booleanprivate static booleanisImpliticlySerializable(Class<?> cls) private static booleanisIterable(Class<?> cls) private static booleanisIterable(Object object) private booleanisJavaReflectClass(Class<?> cls) private booleanisJavaReflectMethod(Class<?> cls) private static booleanisSerializable(Class<?> cls) private <T> booleanisSerializableCandidate(Class<T> targetClass, Object source) private static <T> booleanisStandardJavaType(Class<T> targetClass) private static booleanisStaticFinalModifier(Field field) private booleanisSunClass(Class<?> cls) private <T> TperformClone(Class<T> targetClass, Object source, boolean shouldCloneStandardJavaTypes) private ObjectserializationClone(Object source)
-
Field Details
-
targetCL
-
referenceMap
-
doNotClone
-
-
Constructor Details
-
DeepCloner
Clone using the supplied ClassLoader. -
DeepCloner
public DeepCloner()Clone using the current ContextClassLoader.
-
-
Method Details
-
getDoNotClone
-
clone
public <T> T clone(T objectToClone) Clones an object.- Specified by:
clonein interfaceDeepClonerSPI- Returns:
- A deep clone of the object to clone.
-
clone
public <T> T clone(T objectToClone, boolean includeStandardJavaType) - Parameters:
includeStandardJavaType-truealso clones standard java types (using simple serialization),falsesimply reference to these objects (will be same instance).- Returns:
- A deep clone of the object to clone.
-
getType
-
isClass
-
assertObjectNotNull
-
performClone
-
cloneJavaReflectMethod
-
isJavaReflectMethod
-
isSunClass
-
isJavaReflectClass
-
isSerializableCandidate
-
isImpliticlySerializable
-
isSerializable
-
serializationClone
-
close
-
cloneEnum
-
cloneFields
-
isStandardJavaType
-
isStaticFinalModifier
-
isIterable
-
isIterable
-
getEnumValue
-
instantiateArray
private Object instantiateArray(ClassLoader targetCL, Class<?> arrayClass, Object objectToClone, boolean cloneStandardJavaTypes)
-