private JCExpression getTypedParameter( Parameter param, int argIndex, boolean varargs, java.util.List<ProducedType> parameterTypes) { JCExpression argExpr; if (!varargs) { // The Callable has overridden one of the non-varargs call() // methods argExpr = gen.make().Ident(makeParamName(gen, argIndex)); } else { // The Callable has overridden the varargs call() method // so we need to index into the varargs array argExpr = gen.make().Indexed(gen.make().Ident(makeParamName(gen, 0)), gen.make().Literal(argIndex)); } // make sure we unbox it if required argExpr = gen.expressionGen() .applyErasureAndBoxing( argExpr, gen.typeFact().getObjectDeclaration().getType(), // it came in as Object true, // it's completely erased true, // it came in boxed CodegenUtil.getBoxingStrategy(param), // see if we need to box parameterTypes.get(argIndex), // see what type we need 0); // no flags return argExpr; }