Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <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);
        }