package com.softwaremill.common.cdi.autofactory.extension;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Map;
import static com.google.common.collect.Maps.*;
/**
* @author Adam Warski (adam at warski dot org)
*/
public class MethodParameterIndexer {
private final Method factoryMethod;
private final Map<Type, Integer> parameterTypeToIndex;
public MethodParameterIndexer(Method factoryMethod) {
this.factoryMethod = factoryMethod;
parameterTypeToIndex = newHashMap();
Type[] parameterTypes = factoryMethod.getGenericParameterTypes();
for (int i = 0; i < parameterTypes.length; i++) {
Type parameterType = parameterTypes[i];
parameterTypeToIndex.put(parameterType, i);
}
}
public int getIndexForArgument(Type parameterType) {
if (!parameterTypeToIndex.containsKey(parameterType)) {
throw new RuntimeException("No parameter of class: " + parameterType + " in the factory method: " + factoryMethod);
}
return parameterTypeToIndex.get(parameterType);
}
}