protected virtual void EmitCtorForStaticClass() { var ctor = this.TypeInfo.StaticCtor; if (ctor != null && ctor.Body.HasChildren) { this.PushWriter("{0}"); this.Outdent(); string methodName = "staticCtor".Ident(); this.ResetLocals(); var prevNamesMap = this.BuildLocalsNamesMap(); this.Write(methodName); this.WriteEqualsSign(); this.WriteFunction(); this.WriteOpenCloseParentheses(true); this.BeginFunctionBlock(); var beginPosition = this.Emitter.Output.Length; ctor.Body.AcceptChildren(this.Emitter); if (!this.Emitter.IsAsync) { this.EmitTempVars(beginPosition, true); } this.EndFunctionBlock(); this.ClearLocalsNamesMap(prevNamesMap); this.Indent(); string methodContent = this.PopWriter(true); TransformCtx.CurClassOtherMethodNames.Add(new TransformCtx.MethodInfo() { Name = methodName }); TransformCtx.CurClassOtherMethods.Add(methodContent); } var fieldBlock = new FieldBlock(this.Emitter, this.TypeInfo, true, true); fieldBlock.Emit(); if (fieldBlock.WasEmitted) { this.Emitter.Comma = true; } IEnumerable <string> fieldsInjectors = fieldBlock.Injectors; var injectors = this.GetInjectors(); if (this.TypeInfo.StaticConfig.HasConfigMembers || injectors.Any() || fieldsInjectors.Any()) { this.EnsureComma(); if (this.TypeInfo.StaticConfig.HasConfigMembers) { var configBlock = new FieldBlock(this.Emitter, this.TypeInfo, true, false); configBlock.Emit(); if (configBlock.Injectors.Count > 0) { injectors = configBlock.Injectors.Concat(injectors); } if (configBlock.WasEmitted) { this.Emitter.Comma = true; } } if (fieldsInjectors.Any()) { injectors = fieldsInjectors.Concat(injectors); } if (injectors.Count() > 0) { string methodName = "staticInit".Ident(); this.PushWriter("{0}"); this.Outdent(); this.Write(methodName); this.WriteEqualsSign(); this.WriteFunction(); this.WriteOpenParentheses(); this.WriteThis(); this.WriteCloseParentheses(); this.WriteSpace(); this.BeginFunctionBlock(); foreach (var fn in injectors) { this.Write(fn); this.WriteNewLine(); } this.EndFunctionBlock(); this.Indent(); string methodContent = this.PopWriter(true); TransformCtx.CurClassOtherMethodNames.Add(new TransformCtx.MethodInfo() { Name = methodName }); TransformCtx.CurClassOtherMethods.Add(methodContent); } } }
protected virtual void EmitCtorForStaticClass() { var ctor = this.TypeInfo.StaticCtor; if (ctor != null && ctor.Body.HasChildren) { this.PushWriter("{0}"); this.Outdent(); string methodName = "staticCtor".Ident(); this.ResetLocals(); var prevNamesMap = this.BuildLocalsNamesMap(); this.Write(methodName); this.WriteEqualsSign(); this.WriteFunction(); this.WriteOpenCloseParentheses(true); this.BeginFunctionBlock(); var beginPosition = this.Emitter.Output.Length; ctor.Body.AcceptChildren(this.Emitter); if (!this.Emitter.IsAsync) { this.EmitTempVars(beginPosition, true); } this.EndFunctionBlock(); this.ClearLocalsNamesMap(prevNamesMap); this.Indent(); string methodContent = this.PopWriter(true); TransformCtx.CurClassOtherMethodNames.Add(new TransformCtx.MethodInfo() { Name = methodName }); TransformCtx.CurClassOtherMethods.Add(methodContent); } var fieldBlock = new FieldBlock(this.Emitter, this.TypeInfo, true, true); fieldBlock.Emit(); if (fieldBlock.WasEmitted) { this.Emitter.Comma = true; } IEnumerable<string> fieldsInjectors = fieldBlock.Injectors; var injectors = this.GetInjectors(); if (this.TypeInfo.StaticConfig.HasConfigMembers || injectors.Any() || fieldsInjectors.Any()) { this.EnsureComma(); if (this.TypeInfo.StaticConfig.HasConfigMembers) { var configBlock = new FieldBlock(this.Emitter, this.TypeInfo, true, false); configBlock.Emit(); if (configBlock.Injectors.Count > 0) { injectors = configBlock.Injectors.Concat(injectors); } if (configBlock.WasEmitted) { this.Emitter.Comma = true; } } if (fieldsInjectors.Any()) { injectors = fieldsInjectors.Concat(injectors); } if(injectors.Count() > 0) { string methodName = "staticInit".Ident(); this.PushWriter("{0}"); this.Outdent(); this.Write(methodName); this.WriteEqualsSign(); this.WriteFunction(); this.WriteOpenParentheses(); this.WriteThis(); this.WriteCloseParentheses(); this.WriteSpace(); this.BeginFunctionBlock(); foreach(var fn in injectors) { this.Write(fn); this.WriteNewLine(); } this.EndFunctionBlock(); this.Indent(); string methodContent = this.PopWriter(true); TransformCtx.CurClassOtherMethodNames.Add(new TransformCtx.MethodInfo() { Name = methodName }); TransformCtx.CurClassOtherMethods.Add(methodContent); } } }
protected virtual void EmitInitMembers() { var fieldBlock = new FieldBlock(this.Emitter, this.TypeInfo, false, true); fieldBlock.Emit(); if (fieldBlock.WasEmitted) { this.Emitter.Comma = true; } var injectors = this.GetInjectors(); IEnumerable <string> fieldsInjectors = fieldBlock.Injectors; if (!this.TypeInfo.InstanceConfig.HasConfigMembers && !injectors.Any() && !fieldsInjectors.Any()) { return; } if (this.TypeInfo.InstanceConfig.HasConfigMembers) { var configBlock = new FieldBlock(this.Emitter, this.TypeInfo, false, false); configBlock.Emit(); if (configBlock.Injectors.Count > 0) { injectors = configBlock.Injectors.Concat(injectors); } if (configBlock.WasEmitted) { this.Emitter.Comma = true; } } if (fieldsInjectors.Any()) { injectors = fieldsInjectors.Concat(injectors); } if (injectors.Count() > 0) { string initName = "init".Ident(); if (this.TypeInfo.InstanceMethods.Any(m => m.Value.Any(subm => this.Emitter.GetEntityName(subm) == initName)) || this.TypeInfo.InstanceConfig.Fields.Any(m => m.GetName(this.Emitter) == initName)) { throw new System.NotSupportedException(string.Format("has member named {0} in {1}.{2}, please refactor", initName, TypeInfo.Namespace, TypeInfo.Name)); } this.PushWriter("{0}"); this.Outdent(); this.Write(initName); this.WriteEqualsSign(); this.WriteFunction(); this.WriteOpenParentheses(); this.WriteThis(); this.WriteCloseParentheses(); this.WriteSpace(); this.BeginFunctionBlock(); foreach (var fn in injectors) { this.Write(fn); this.WriteNewLine(); } this.EndFunctionBlock(); this.Indent(); string method = this.PopWriter(true); TransformCtx.CurClassOtherMethodNames.Add(new TransformCtx.MethodInfo() { Name = initName, IsPrivate = true }); TransformCtx.CurClassOtherMethods.Add(method); isInitExists_ = true; } }
protected virtual void EmitInitMembers() { var injectors = this.GetInjectors(); IEnumerable<string> fieldsInjectors = null; var fieldBlock = new FieldBlock(this.Emitter, this.TypeInfo, false, true); fieldBlock.Emit(); fieldsInjectors = fieldBlock.Injectors; if (fieldBlock.WasEmitted) { this.Emitter.Comma = true; } if (!this.TypeInfo.InstanceConfig.HasConfigMembers && !injectors.Any() && !fieldsInjectors.Any()) { return; } if (this.TypeInfo.InstanceConfig.HasConfigMembers) { var configBlock = new FieldBlock(this.Emitter, this.TypeInfo, false, false); configBlock.Emit(); if (configBlock.Injectors.Count > 0) { injectors = configBlock.Injectors.Concat(injectors); } if (configBlock.WasEmitted) { this.Emitter.Comma = true; } } if (fieldsInjectors.Any()) { injectors = fieldsInjectors.Concat(injectors); } if (injectors.Count() > 0) { string initName = "init".Ident(); if(this.TypeInfo.InstanceMethods.Any(m => m.Value.Any(subm => this.Emitter.GetEntityName(subm) == initName)) || this.TypeInfo.InstanceConfig.Fields.Any(m => m.GetName(this.Emitter) == initName)) { throw new System.NotSupportedException(string.Format("has member named {0} in {1}.{2}, please refactor", initName, TypeInfo.Namespace, TypeInfo.Name)); } this.PushWriter("{0}"); this.Outdent(); this.Write(initName); this.WriteEqualsSign(); this.WriteFunction(); this.WriteOpenParentheses(); this.WriteThis(); this.WriteCloseParentheses(); this.WriteSpace(); this.BeginFunctionBlock(); foreach(var fn in injectors) { this.Write(fn); this.WriteNewLine(); } this.EndFunctionBlock(); this.Indent(); string method = this.PopWriter(true); TransformCtx.CurClassOtherMethodNames.Add(new TransformCtx.MethodInfo() { Name = initName, IsPrivate = true }); TransformCtx.CurClassOtherMethods.Add(method); isInitExists_ = true; } }