All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.lyncode.jtwig.functions.parameters.resolve.impl.ParameterAnnotationParameterResolver Maven / Gradle / Ivy

The newest version!
package com.lyncode.jtwig.functions.parameters.resolve.impl;

import com.google.common.base.Optional;
import com.lyncode.jtwig.functions.annotations.Parameter;
import com.lyncode.jtwig.functions.parameters.convert.DemultiplexerConverter;
import com.lyncode.jtwig.functions.parameters.input.InputParameters;
import com.lyncode.jtwig.functions.parameters.resolve.api.ParameterResolver;
import com.lyncode.jtwig.functions.reflection.JavaMethodParameter;
import org.apache.commons.lang3.ClassUtils;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

import static com.google.common.base.Optional.absent;
import static com.google.common.base.Optional.of;

public class ParameterAnnotationParameterResolver implements ParameterResolver {
    private final InputParameters input;
    private final DemultiplexerConverter converter;

    public ParameterAnnotationParameterResolver(InputParameters input, DemultiplexerConverter converter) {
        this.input = input;
        this.converter = converter;
    }

    @Override
    public Optional resolve(JavaMethodParameter parameter) {
        if (parameter.hasAnnotation(Parameter.class)) {
            if (parameter.isVarArg()) {
                // try to resolve the rest of parameters to one array
                Class componentType = parameter.type().getComponentType();
                List args = new ArrayList<>();
                for (int i=parameter.annotationIndex(Parameter.class); i