protected IFeatureCallArguments createArgumentsForExecutable(boolean varArgs, List<XExpression> arguments, List<JvmFormalParameter> parameters, boolean hasReceiver, ITypeReferenceOwner owner) { if (!varArgs) { if (requiresReordering(arguments, parameters.size())) { List<XExpression> copiedArgumentList = Lists.newArrayList(arguments); List<JvmFormalParameter> copiedParameterList = Lists.newArrayList(parameters); List<XExpression> shiftedArgumentList = Lists.newArrayListWithCapacity(2); List<JvmFormalParameter> shiftedParameterList = Lists.newArrayListWithCapacity(2); reorder(varArgs, copiedArgumentList, copiedParameterList, shiftedArgumentList, shiftedParameterList); return new ReorderedFeatureCallArguments(copiedArgumentList, copiedParameterList, shiftedArgumentList, shiftedParameterList, hasReceiver, owner); } return new StandardFeatureCallArguments(arguments, parameters, hasReceiver, owner); } else { if (requiresReordering(arguments, parameters.size())) { List<XExpression> copiedArgumentList = Lists.newArrayList(arguments); List<JvmFormalParameter> copiedParameterList = Lists.newArrayList(parameters); List<XExpression> shiftedArgumentList = Lists.newArrayListWithCapacity(2); List<JvmFormalParameter> shiftedParameterList = Lists.newArrayListWithCapacity(2); reorder(varArgs, copiedArgumentList, copiedParameterList, shiftedArgumentList, shiftedParameterList); return new ReorderedVarArgFeatureCallArguments(copiedArgumentList, copiedParameterList, shiftedArgumentList, shiftedParameterList, hasReceiver, owner); } return new VarArgFeatureCallArguments(arguments, parameters, hasReceiver, owner); } }