private Instruction SetCacheKeyLocalVariable(Instruction current, MethodDefinition methodDefinition,
			ILProcessor processor, int cacheKeyIndex, int objectArrayIndex)
        {
            if (methodDefinition.IsSetter || methodDefinition.IsGetter)
            {
                return current.AppendStloc(processor, cacheKeyIndex);
            }
            else
            {
                // Create object[] for string.format
                current =
                    current.AppendLdcI4(processor, methodDefinition.Parameters.Count)
                        .Append(processor.Create(OpCodes.Newarr, methodDefinition.Module.ImportType<object>()), processor)
                        .AppendStloc(processor, objectArrayIndex);

                // Set object[] values
                for (int i = 0; i < methodDefinition.Parameters.Count; i++)
                {
                    current =
                        current.AppendLdloc(processor, objectArrayIndex)
                            .AppendLdcI4(processor, i)
                            .AppendLdarg(processor, !methodDefinition.IsStatic ? i + 1 : i)
                            .AppendBoxIfNecessary(processor, methodDefinition.Parameters[i].ParameterType)
                            .Append(processor.Create(OpCodes.Stelem_Ref), processor);
                }

                // Call string.format
                return
                    current.AppendLdloc(processor, objectArrayIndex)
                        .Append(
                            processor.Create(OpCodes.Call,
                                methodDefinition.Module.ImportMethod<string>("Format", new[] { typeof(string), typeof(object[]) })), processor)
                        .AppendStloc(processor, cacheKeyIndex);
            }
        }