Ejemplo n.º 1
0
 private void FromParsedType(ParsedType parsedType)
 {
     Namespace = parsedType.Namespace;
     Name      = parsedType.Name;
     if (parsedType.Arguments != null)
     {
         foreach (var argument in parsedType.Arguments)
         {
             CodeTypeReference typeReference = new CodeTypeReference();
             typeReference.FromParsedType(argument);
             Parameters.Add(typeReference);
         }
     }
 }
Ejemplo n.º 2
0
 static ParsedType()
 {
     _parsedTypes["string"]  = new ParsedType(typeof(string).FullName);
     _parsedTypes["bool"]    = new ParsedType(typeof(bool).FullName);
     _parsedTypes["int"]     = new ParsedType(typeof(int).FullName);
     _parsedTypes["uint"]    = new ParsedType(typeof(uint).FullName);
     _parsedTypes["long"]    = new ParsedType(typeof(long).FullName);
     _parsedTypes["ulong"]   = new ParsedType(typeof(ulong).FullName);
     _parsedTypes["short"]   = new ParsedType(typeof(short).FullName);
     _parsedTypes["ushort"]  = new ParsedType(typeof(ushort).FullName);
     _parsedTypes["byte"]    = new ParsedType(typeof(byte).FullName);
     _parsedTypes["sbyte"]   = new ParsedType(typeof(sbyte).FullName);
     _parsedTypes["float"]   = new ParsedType(typeof(float).FullName);
     _parsedTypes["double"]  = new ParsedType(typeof(double).FullName);
     _parsedTypes["decimal"] = new ParsedType(typeof(Decimal).FullName);
     _parsedTypes["object"]  = new ParsedType(typeof(object).FullName);
     _parsedTypes["char"]    = new ParsedType(typeof(char).FullName);
     _parsedTypes["void"]    = new ParsedType(typeof(void).FullName);
 }
Ejemplo n.º 3
0
        public static ParsedType Parse(string typeName)
        {
            if (typeName == null)
            {
                throw new ArgumentNullException(nameof(typeName));
            }

            typeName = typeName.Trim();
            if (typeName.StartsWith("Of "))
            {
                typeName = typeName.Substring(3).Trim();
            }

            ParsedType pt;

            if (!_parsedTypes.TryGetValue(typeName, out pt))
            {
                pt = Parse(typeName, "<", '>');
                if (pt != null)
                {
                    _parsedTypes.Add(typeName, pt);
                    return(pt);
                }

                pt = Parse(typeName, "(Of", ')');
                if (pt != null)
                {
                    _parsedTypes.Add(typeName, pt);
                    return(pt);
                }

                pt = new ParsedType(typeName);
            }

            return(pt);
        }
Ejemplo n.º 4
0
        public CodeTypeReference(string clrFullTypeName)
        {
            var parsedType = ParsedType.Parse(clrFullTypeName);

            FromParsedType(parsedType);
        }
Ejemplo n.º 5
0
        private static ParsedType Parse(string typeName, string start, char end)
        {
            if (typeName == null)
            {
                throw new ArgumentNullException(nameof(typeName));
            }

            if ((typeName.StartsWith("[")) && (typeName.EndsWith("]")))
            {
                typeName = typeName.Substring(1, typeName.Length - 2).Trim();
            }

            ParsedType pt;
            int        lt;
            int        gt;
            int        quot = typeName.IndexOf('`');

            if (quot >= 0)
            {
                // reflection style
                lt = typeName.IndexOf('[', quot + 1);
                gt = typeName.LastIndexOf(']');
                if ((lt < 0) || (gt < 0))
                {
                    int args;
                    int asm = typeName.IndexOf(',', quot);
                    if (asm < 0)
                    {
                        pt   = new ParsedType(typeName.Substring(0, quot));
                        args = int.Parse(typeName.Substring(quot + 1));
                    }
                    else
                    {
                        pt = new ParsedType(typeName.Substring(0, quot));
                        pt.AssemblyName = typeName.Substring(asm + 1).Trim();
                        args            = int.Parse(typeName.Substring(quot + 1, asm - quot - 1));
                    }
                    for (int i = 0; i < args; i++)
                    {
                        pt._arguments.Add(new ParsedType(string.Empty));
                    }
                    pt.IsGeneric = true;
                    return(pt);
                }
            }
            else
            {
                lt = typeName.IndexOf(start);
                gt = typeName.LastIndexOf(end);
                if ((lt < 0) || (gt < 0))
                {
                    return(null);
                }
            }

            if (quot >= 0)
            {
                pt = new ParsedType(typeName.Substring(0, quot));
            }
            else
            {
                pt = new ParsedType(typeName.Substring(0, lt));
            }
            pt.IsGeneric = true;

            int startPos   = lt + 1;
            int parenCount = 0;

            for (int i = startPos; i < gt; i++)
            {
                char c = typeName[i];
                if (parenCount == 0)
                {
                    if (c == ',')
                    {
                        ParsedType spt = Parse(typeName.Substring(startPos, i - startPos));
                        pt._arguments.Add(spt);
                        startPos = i + 1;
                    }
                    else if (c == '[')
                    {
                        parenCount++;
                    }
                    else if (ChunkStarts(typeName, i, start))
                    {
                        parenCount++;
                        i += start.Length - 1;
                    }
                    else if ((c == end) || (c == ']'))
                    {
                        parenCount--;
                    }
                }
                else
                {
                    if (c == '[')
                    {
                        parenCount++;
                    }
                    else if (ChunkStarts(typeName, i, start))
                    {
                        parenCount++;
                        i += start.Length - 1;
                    }
                    else if ((c == end) || (c == ']'))
                    {
                        parenCount--;
                    }
                }
            }

            if (parenCount == 0)
            {
                if (gt < startPos)
                {
                    return(null);
                }

                ParsedType spt = Parse(typeName.Substring(startPos, gt - startPos));
                pt._arguments.Add(spt);
            }

            return(pt);
        }