ListMutator.java
package org.codefilarete.reflection;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import org.codefilarete.tool.Reflections;
/**
* @author Guillaume Mary
*/
public class ListMutator<C extends List<T>, T> extends AbstractMutator<C, T> implements ReversibleMutator<C, T> {
private static final Method SET = Reflections.findMethod(List.class, "set", Integer.TYPE, Object.class);
private int index;
private final AccessorByMethod<C, T> listSetAccessor = new AccessorByMethod<>(SET);
public ListMutator() {
}
public ListMutator(int index) {
this();
setIndex(index);
}
public void setIndex(int index) {
this.listSetAccessor.setParameter(0, index);
}
public int getIndex() {
// preventing NullPointerException
Object parameter = listSetAccessor.getParameter(0);
return parameter == null ? 0 : (int) parameter;
}
@Override
protected void doSet(C c, T t) {
c.set(getIndex(), t);
}
@Override
protected String getSetterDescription() {
return Reflections.toString(List.class) + ".set(" + getIndex() +")";
}
@Override
public ListAccessor<C, T> toAccessor() {
return new ListAccessor<>(getIndex());
}
}