Class DeepCloner

java.lang.Object
org.powermock.classloading.DeepCloner
All Implemented Interfaces:
DeepClonerSPI

public class DeepCloner extends Object implements 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.

  • Field Details

  • Constructor Details

    • DeepCloner

      public DeepCloner(ClassLoader classLoader)
      Clone using the supplied ClassLoader.
    • DeepCloner

      public DeepCloner()
      Clone using the current ContextClassLoader.
  • Method Details

    • getDoNotClone

      private Class<DoNotClone> getDoNotClone(ClassLoader targetCL)
    • clone

      public <T> T clone(T objectToClone)
      Clones an object.
      Specified by:
      clone in interface DeepClonerSPI
      Returns:
      A deep clone of the object to clone.
    • clone

      public <T> T clone(T objectToClone, boolean includeStandardJavaType)
      Parameters:
      includeStandardJavaType - true also clones standard java types (using simple serialization), false simply reference to these objects (will be same instance).
      Returns:
      A deep clone of the object to clone.
    • getType

      private static <T> Class<T> getType(T object)
    • isClass

      private static boolean isClass(Object object)
    • assertObjectNotNull

      private static void assertObjectNotNull(Object object)
    • performClone

      private <T> T performClone(Class<T> targetClass, Object source, boolean shouldCloneStandardJavaTypes)
    • cloneJavaReflectMethod

      private Object cloneJavaReflectMethod(Object source)
    • isJavaReflectMethod

      private boolean isJavaReflectMethod(Class<?> cls)
    • isSunClass

      private boolean isSunClass(Class<?> cls)
    • isJavaReflectClass

      private boolean isJavaReflectClass(Class<?> cls)
    • isSerializableCandidate

      private <T> boolean isSerializableCandidate(Class<T> targetClass, Object source)
    • isImpliticlySerializable

      private static boolean isImpliticlySerializable(Class<?> cls)
    • isSerializable

      private static boolean isSerializable(Class<?> cls)
    • serializationClone

      private Object serializationClone(Object source)
    • close

      private void close(Closeable closeable)
    • cloneEnum

      private Object cloneEnum(ClassLoader targetCL, Object source)
    • cloneFields

      private <T> void cloneFields(ClassLoader targetCL, Class<T> targetClass, Object source, Object target, Map<Object,Object> referenceMap, boolean cloneStandardJavaTypes)
    • isStandardJavaType

      private static <T> boolean isStandardJavaType(Class<T> targetClass)
    • isStaticFinalModifier

      private static boolean isStaticFinalModifier(Field field)
    • isIterable

      private static boolean isIterable(Object object)
    • isIterable

      private static boolean isIterable(Class<?> cls)
    • getEnumValue

      private static Enum getEnumValue(Object enumValueOfSourceClassloader, Class<Object> enumTypeLoadedByTargetCL)
    • instantiateArray

      private Object instantiateArray(ClassLoader targetCL, Class<?> arrayClass, Object objectToClone, boolean cloneStandardJavaTypes)