Class DeepCloningUtils
java.lang.Object
org.optaplanner.core.impl.domain.solution.cloner.DeepCloningUtils
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptiongetDeepClonedClasses
(Collection<Class<?>> entitySubclasses) boolean
getDeepCloneDecision
(Field field, Class<?> owningClass, Class<?> actualValueClass) Gets the deep cloning decision for a particular value assigned to a field, memoizing the result.getDeepClonedTypeArguments
(Type genericType) boolean
isClassDeepCloned
(Class<?> type) boolean
isFieldADeepCloneProperty
(Field field, Class<?> owningClass) boolean
isFieldAnEntityOrSolution
(Field field) Returns true iff a field represent an Entity/Solution or a collection of Entity/Solution.boolean
isFieldAnEntityPropertyOnSolution
(Field field, Class<?> owningClass) Return true only if a field represent an entity property on the solution class.boolean
isFieldAPlanningListVariable
(Field field, Class<?> owningClass) boolean
isFieldDeepCloned
(Field field, Class<?> owningClass) Gets the deep cloning decision for a field.boolean
isTypeArgumentDeepCloned
(Type genericType) boolean
retrieveDeepCloneDecisionForActualValueClass
(Class<?> actualValueClass) This method is thread-safe.
-
Field Details
-
IMMUTABLE_CLASSES
-
-
Constructor Details
-
DeepCloningUtils
-
-
Method Details
-
getDeepCloneDecision
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 ofowningClass
- 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
This method is thread-safe.- Parameters:
actualValueClass
- never null- Returns:
- never null
-
isFieldDeepCloned
Gets the deep cloning decision for a field.- Parameters:
field
- The field to get the deep cloning decision ofowningClass
- 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
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 ofowningClass
- 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
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
-
isTypeArgumentDeepCloned
-
isFieldADeepCloneProperty
-
isFieldAPlanningListVariable
-
getDeepClonedTypeArguments
- Returns:
- never null
-
getDeepClonedClasses
-