private static UnmatchedArgsBinding buildUnmatchedForField(final IAnnotatedElement member) { ITypeInfo info = member.getTypeInfo(); if (!(info.getClassName().equals(String[].class.getName()) || (info.isCollection() && info.getActualGenericTypeArguments().equals(Arrays.asList(String.class.getName()))))) { throw new InitializationException("Invalid type for " + member + ": must be either String[] or List<String>"); } if (info.getClassName().equals(String[].class.getName())) { return UnmatchedArgsBinding.forStringArrayConsumer(member.setter()); } else { return UnmatchedArgsBinding.forStringCollectionSupplier(new IGetter() { @SuppressWarnings("unchecked") public <T> T get() throws Exception { List<String> result = (List<String>) member.getter().get(); if (result == null) { result = new ArrayList<String>(); member.setter().set(result); } return (T) result; } }); } } }
@SuppressWarnings("unchecked") public <T> T get() throws Exception { List<String> result = (List<String>) member.getter().get(); if (result == null) { result = new ArrayList<String>(); member.setter().set(result); } return (T) result; } });
private static CommandSpec buildMixinForField(IAnnotatedElement member, IFactory factory) { try { Object userObject = member.getter().get(); if (userObject == null) { userObject = factory.create(member.getTypeInfo().getType()); member.setter().set(userObject); } CommandSpec result = CommandSpec.forAnnotatedObject(userObject, factory); return result.withToString(member.getToString()); } catch (InitializationException ex) { throw ex; } catch (Exception ex) { throw new InitializationException("Could not access or modify mixin member " + member + ": " + ex, ex); } } private static UnmatchedArgsBinding buildUnmatchedForField(final IAnnotatedElement member) {
Builder(IAnnotatedElement source) { userObject = source.userObject(); setTypeInfo(source.getTypeInfo()); toString = source.getToString(); getter = source.getter(); setter = source.setter(); hasInitialValue = source.hasInitialValue(); try { initialValue = source.getter().get(); } catch (Exception ex) { initialValue = null; } } Builder(Option option, IAnnotatedElement source, IFactory factory) {