public CodegenMethod AddMethodWithSymbols( Type returnType, string methodName, IList<CodegenNamedParam> @params, Type generator, CodegenClassScope classScope, Consumer<CodegenMethod> code, CodegenSymbolProvider symbolProvider) { if (_methods == null) { _methods = new Dictionary<string, CodegenMethod>(); } var existing = _methods.Get(methodName); if (existing != null) { if (ListExtensions.AreEqual(@params, existing.LocalParams)) { return existing; } throw new IllegalStateException("Method by name '" + methodName + "' already registered"); } var method = CodegenMethod .MakeMethod(returnType, generator, symbolProvider, classScope) .AddParam(@params); method.Block.DebugStack(); _methods.Put(methodName, method); code.Invoke(method); return method; }