final String propertyName = fieldOutline.getPropertyInfo().getName(true);
final JClass elementClass = fieldOutline.getRawType().boxify().getTypeParameters().get(0);
final JPrimitiveType INT = fieldOutline.parent().parent().getCodeModel().INT;
JMethod method = implClass.method(JMod.PUBLIC, elementClass, "with" + propertyName);
JVar index = method.param(INT, "index");
JBlock body = method.body();
JVar list = body.decl(fieldOutline.getRawType(), "list", JExpr._this().invoke("get" + propertyName));
JConditional _ifListIsTooSmall = body._if(list.invoke("size").lte(index));
JBlock _ifListIsTooSmallThen = _ifListIsTooSmall._then();
JForLoop _for = _ifListIsTooSmallThen._for();
JVar i = _for.init(INT, "i", list.invoke("size"));
_for.test(i.lte(index));
_for.update(i.incr());
_for.body().invoke(list, "add").arg(JExpr._null());
JVar element = body.decl(elementClass, "value", list.invoke("get").arg(index));
JConditional _ifElementIsNull = body._if(element.eq(JExpr._null()));
JBlock _ifElementIsNullThen = _ifElementIsNull._then();
_ifElementIsNullThen.assign(element, JExpr._new(element.type()));
_ifElementIsNullThen.invoke(list, "set").arg(index).arg(element);
body._return(element);
}