if (effectiveTargetType.isAssignableFrom(sourceType)) return input;
Coercion coercer = findCoercer(sourceType, effectiveTargetType);
Object result = coercer.coerce(input);
// Double check that the coercer provided a result of the correct type
return effectiveTargetType.cast(result);
}