Class DeepCloningUtils

java.lang.Object
org.optaplanner.core.impl.domain.solution.cloner.DeepCloningUtils

public final class DeepCloningUtils extends Object
  • Field Details

    • IMMUTABLE_CLASSES

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

  • Method Details

    • 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
    • getDeepClonedClasses

      public Set<Class<?>> getDeepClonedClasses(Collection<Class<?>> entitySubclasses)