/** * Creates a field access representation for a given field. If the field's return type derives from its declared shape, the value * is additionally casted to the generically resolved field. * * @param fieldDescription The field to be accessed. * @return A field access definition for the given field. */ public static Defined forField(FieldDescription fieldDescription) { FieldDescription.InDefinedShape declaredField = fieldDescription.asDefined(); return fieldDescription.getType().asErasure().equals(declaredField.getType().asErasure()) ? forField(declaredField) : OfGenericField.of(fieldDescription, forField(declaredField)); }
/** * Creates a generic access dispatcher for a given field. * * @param fieldDescription The field that is being accessed. * @param fieldAccess A field accessor for the field in its defined shape. * @return A field access dispatcher for the given field. */ protected static Defined of(FieldDescription fieldDescription, Defined fieldAccess) { return new OfGenericField(fieldDescription.getType(), fieldAccess); }