package com.softwaremill.common.cdi.autofactory.extension.parameter.converter; import com.softwaremill.common.cdi.autofactory.extension.MethodParameterIndexer; import com.softwaremill.common.cdi.autofactory.extension.parameter.FactoryParameterParameterValue; import com.softwaremill.common.cdi.autofactory.extension.parameter.ParameterValue; import javax.enterprise.inject.spi.AnnotatedConstructor; import javax.enterprise.inject.spi.AnnotatedParameter; import java.util.List; /** * @author Adam Warski (adam at warski dot org) */ public class FactoryParameterOnlyConstructorConverter implements ConstructorToParameterValuesConverter { private final AnnotatedConstructor<?> constructor; private final MethodParameterIndexer methodParameterIndexer; public FactoryParameterOnlyConstructorConverter(AnnotatedConstructor<?> constructor, MethodParameterIndexer methodParameterIndexer) { this.constructor = constructor; this.methodParameterIndexer = methodParameterIndexer; } public ParameterValue[] convert() { List<? extends AnnotatedParameter<?>> constructorParameters = constructor.getParameters(); ParameterValue[] constructorParameterValues = new ParameterValue[constructorParameters.size()]; for (int i = 0; i < constructorParameters.size(); i++) { AnnotatedParameter<?> parameter = constructorParameters.get(i); constructorParameterValues[i] = new FactoryParameterParameterValue( methodParameterIndexer.getIndexForArgument(parameter.getBaseType())); } return constructorParameterValues; } }