Remove code duplications. Reuse target type computation for enum types. Refine method names. See #3766 Closes #3837