package org.jtwig.property.strategy.method.argument.group; import com.google.common.base.Optional; import org.jtwig.property.strategy.method.convert.Converter; import org.jtwig.reflection.model.Value; import org.jtwig.reflection.model.java.JavaMethodArgument; import java.lang.reflect.Array; import java.util.List; public class VarArgumentGroup implements ArgumentGroup { private final JavaMethodArgument javaMethodArgument; private final List<Object> arguments; public VarArgumentGroup(JavaMethodArgument javaMethodArgument, List<Object> arguments) { this.javaMethodArgument = javaMethodArgument; this.arguments = arguments; } @Override public Optional<Value> toArgument(Converter converter) { Class componentType = javaMethodArgument.type().getComponentType(); Object[] array = (Object[]) Array.newInstance(componentType, arguments.size()); for (int i = 0; i < arguments.size(); i++) { Optional<Value> convert = converter.convert(arguments.get(i), componentType); if (!convert.isPresent()) return Optional.absent(); array[i] = convert.get().getValue(); } return Optional.of(new Value(array)); } }