Extract static private method Cloner.isTypeCloneable(type).
Create new error class: CloningError.
Throw error in Cloner.clone() method if "source" parameter is not instance of class marked as [Cloneable].
Actualize unit tests.
Add comment.
Remove checking for marking source as cloneable.
Rename static method:
Cloner.dolly_internal::getCloneableFieldsForType -> dolly_internal::findAllCloneableFieldsForType.
Extract static method: Cloner.dolly_internal::getWritableFieldsOfType()
Get writable fields of superclasses.
Optimize cloning performance.
Actualize unit tests.
Optimize performance for finding of writable fields of Type.
Rename local variable in method Cloner.clone().
Rename classes:
ClassLevelCloneable -> CloneableClass
ClassLevelCloneableSubclass -> CloneableSubclass
Rename methods in tests.
Add static properties to CloneableSubclass.
Actualize unit tests.
Check for class marking as cloneable only once in method Cloner.findAllWritableFieldsForType().
Reorganize test fields in cloneable classes hierarchy.
Create NotCloneableSubclass class.
Tests for cloning of CloneableClass.