Class DeepCloningUtils


  • public final class DeepCloningUtils
    extends Object
    • Field Detail

      • IMMUTABLE_CLASSES

        public static final Set<Class<?>> IMMUTABLE_CLASSES
    • Constructor Detail

    • Method Detail

      • getDeepCloneDecision

        public boolean getDeepCloneDecision​(Field field,
                                            Class<?> owningClass,
                                            Class<?> actualValueClass)
        Gets the deep cloning decision for a particular value assigned to a field, memoizing the result.
        Parameters:
        field - the field to get the deep cloning decision of
        owningClass - the class that owns the field; can be different from the field's declaring class (ex: subclass)
        actualValueClass - the class of the value that is currently assigned to the field; can be different from the field type (ex: for the field "List myList", the actual value class might be ArrayList).
        Returns:
        true iff the field should be deep cloned with a particular value.
      • retrieveDeepCloneDecisionForActualValueClass

        public boolean retrieveDeepCloneDecisionForActualValueClass​(Class<?> actualValueClass)
        This method is thread-safe.
        Parameters:
        actualValueClass - never null
        Returns:
        never null
      • isFieldDeepCloned

        public boolean isFieldDeepCloned​(Field field,
                                         Class<?> owningClass)
        Gets the deep cloning decision for a field.
        Parameters:
        field - The field to get the deep cloning decision of
        owningClass - The class that owns the field; can be different from the field's declaring class (ex: subclass).
        Returns:
        True iff the field should always be deep cloned (regardless of value).
      • isFieldAnEntityPropertyOnSolution

        public boolean isFieldAnEntityPropertyOnSolution​(Field field,
                                                         Class<?> owningClass)
        Return true only if a field represent an entity property on the solution class. An entity property is one who type is a PlanningEntity or a collection of PlanningEntity.
        Parameters:
        field - The field to get the deep cloning decision of
        owningClass - The class that owns the field; can be different from the field's declaring class (ex: subclass).
        Returns:
        True only if the field is an entity property on the solution class. May return false if the field getter/setter is complex.
      • isFieldAnEntityOrSolution

        public boolean isFieldAnEntityOrSolution​(Field field)
        Returns true iff a field represent an Entity/Solution or a collection of Entity/Solution.
        Parameters:
        field - The field to get the deep cloning decision of
        Returns:
        True only if the field represents or contains a PlanningEntity or PlanningSolution
      • isClassDeepCloned

        public boolean isClassDeepCloned​(Class<?> type)
      • isTypeArgumentDeepCloned

        public boolean isTypeArgumentDeepCloned​(Type genericType)
      • isFieldADeepCloneProperty

        public boolean isFieldADeepCloneProperty​(Field field,
                                                 Class<?> owningClass)
      • isFieldAPlanningListVariable

        public boolean isFieldAPlanningListVariable​(Field field,
                                                    Class<?> owningClass)
      • getDeepClonedTypeArguments

        public Set<Class<?>> getDeepClonedTypeArguments​(Type genericType)
        Returns:
        never null