/// <summary> /// Generates the <see cref="CodeTypeDeclaration"/> that represents the <see cref="StructType"/>. /// </summary> /// <returns>A new instance of a <see cref="CodeTypeDeclaration"/> if successful.-null- otherwise.</returns> public override CodeTypeDeclaration GenerateCodeDom(ICodeDOMTranslationOptions options) { if (options.BuildTrail != null) { options.BuildTrail.Push(this); } CodeTypeDeclaration result = base.GenerateCodeDom(options); ITypeReference[] impls = this.ImplementsList.ToArray(); bool[] duplicate = new bool[impls.Length]; List <string> names = new List <string>(); for (int i = 0; i < impls.Length; i++) { string currentName = impls[i].TypeInstance.GetTypeName(options); if (impls[i].TypeParameters.Count > 0 && impls[i].TypeInstance.IsGeneric) { currentName += string.Format("`{0}", impls[i].TypeParameters.Count); } duplicate[i] = names.Contains(currentName); if (duplicate[i]) { duplicate[names.IndexOf(currentName)] = true; } names.Add(currentName); } bool autoResolve = options.AutoResolveReferences; for (int i = 0; i < impls.Length; i++) { ITypeReference typeRef = impls[i]; if (duplicate[i] && autoResolve) { options.AutoResolveReferences = false; } result.BaseTypes.Add(typeRef.GenerateCodeDom(options)); if (duplicate[i] && autoResolve) { options.AutoResolveReferences = autoResolve; } } result.IsStruct = true; if (options.BuildTrail != null) { options.BuildTrail.Pop(); } return(result); }
public override CodeParameterDeclarationExpression GenerateCodeDom(ICodeDOMTranslationOptions options) { if (options.BuildTrail != null) { options.BuildTrail.Push(this); } CodeParameterDeclarationExpression result = new CodeParameterDeclarationExpression(parameterType.GenerateCodeDom(options), this.Name); result.CustomAttributes = this.Attributes.GenerateCodeDom(options); if (options.NameHandler.HandlesName(this)) { result.Name = options.NameHandler.HandleName(this); } result.Direction = this.Direction; if (options.BuildTrail != null) { options.BuildTrail.Pop(); } return(result); }
/// <summary> /// Generates the <see cref="CodeTypeDeclaration"/> that represents the <see cref="ClassType"/>. /// </summary> /// <returns>A new instance of a <see cref="CodeTypeDeclaration"/> if successful.-null- otherwise.</returns> public override CodeTypeDeclaration GenerateCodeDom(ICodeDOMTranslationOptions options) { if (options.BuildTrail != null) { options.BuildTrail.Push(this); } CodeTypeDeclaration result = base.GenerateCodeDom(options); if (result == null) { if (options.BuildTrail != null) { options.BuildTrail.Pop(); } return(result); } if (this.IsStatic) { result.TypeAttributes |= TypeAttributes.Abstract;// | TypeAttributes.Sealed; result.Attributes |= MemberAttributes.Static | MemberAttributes.Final; } result.Attributes |= AccessLevelAttributes(this.AccessLevel); if (this.BaseType != null && (!(this.BaseType.Equals(typeof(object).GetTypeReference())))) { result.BaseTypes.Add(this.BaseType.GenerateCodeDom(options)); } ITypeReference[] impls = this.ImplementsList.ToArray(); bool[] duplicate = new bool[impls.Length]; List <string> names = new List <string>(); for (int i = 0; i < impls.Length; i++) { string currentName = impls[i].TypeInstance.GetTypeName(options); if (impls[i].TypeParameters.Count > 0 && impls[i].TypeInstance.IsGeneric) { currentName += string.Format("`{0}", impls[i].TypeParameters.Count); } duplicate[i] = names.Contains(currentName); if (duplicate[i]) { duplicate[names.IndexOf(currentName)] = true; } names.Add(currentName); } bool autoResolve = options.AutoResolveReferences; for (int i = 0; i < impls.Length; i++) { ITypeReference typeRef = impls[i]; if (duplicate[i]) { if (autoResolve) { options.AutoResolveReferences = false; } } result.BaseTypes.Add(typeRef.GenerateCodeDom(options)); if (duplicate[i] && autoResolve) { options.AutoResolveReferences = autoResolve; } } result.IsClass = true; if (options.AllowRegions && options.AutoRegionsFor(AutoRegionAreas.Class)) { result.StartDirectives.Add(new CodeRegionDirective(CodeRegionMode.Start, String.Format("Begin {0}", result.Name))); result.EndDirectives.Add(new CodeRegionDirective(CodeRegionMode.End, string.Empty)); } if (options.BuildTrail != null) { options.BuildTrail.Pop(); } return(result); }
/// <summary> /// Generates the <see cref="CodeTypeDeclaration"/> that represents the <see cref="InterfaceType"/>. /// </summary> /// <returns>A new instance of a <see cref="CodeTypeDeclaration"/> if successful.-null- otherwise.</returns> public override CodeTypeDeclaration GenerateCodeDom(ICodeDOMTranslationOptions options) { if (options.BuildTrail != null) { options.BuildTrail.Push(this); } CodeTypeDeclaration result = base.GenerateCodeDom(options); ITypeReference[] impls = this.ImplementsList.ToArray(); bool[] duplicate = new bool[impls.Length]; List <string> names = new List <string>(); for (int i = 0; i < impls.Length; i++) { string currentName = impls[i].TypeInstance.GetTypeName(options); if (impls[i].TypeParameters.Count > 0 && impls[i].TypeInstance.IsGeneric) { currentName += string.Format("`{0}", impls[i].TypeParameters.Count); } duplicate[i] = names.Contains(currentName); if (duplicate[i]) { duplicate[names.IndexOf(currentName)] = true; } names.Add(currentName); } bool autoResolve = options.AutoResolveReferences; for (int i = 0; i < impls.Length; i++) { ITypeReference typeRef = impls[i]; if (duplicate[i] && autoResolve) { options.AutoResolveReferences = false; } result.BaseTypes.Add(typeRef.GenerateCodeDom(options)); if (duplicate[i] && autoResolve) { options.AutoResolveReferences = autoResolve; } } if (options.AllowPartials) { foreach (IMethodSignatureMember memberMethod in this.Methods.Values) { if (memberMethod.ParentTarget == this) { result.Members.Add(memberMethod.GenerateCodeDom(options)); } } foreach (IPropertySignatureMember memberProperty in this.Properties.Values) { if (memberProperty.ParentTarget == this) { result.Members.Add(memberProperty.GenerateCodeDom(options)); } } } else if (this.IsRoot) { result.Members.AddRange(this.Methods.GenerateCodeDom(options)); result.Members.AddRange(this.Properties.GenerateCodeDom(options)); } result.IsInterface = true; if (options.BuildTrail != null) { options.BuildTrail.Pop(); } return(result); }