Ejemplo n.º 1
0
        public static string GetParameterListAsString(ImmutableArray <IParameterSymbol> parameters, bool includeTypes = true, ITypeSymbol iface = null, bool writebraces = true)
        {
            var writer = new TempWriter(); // Temp Writer

            if (writebraces)
            {
                writer.Write("(");
            }
            var firstParam = true;

            foreach (var parameter in parameters)
            {
                var refKeyword = "";

                if (parameter.RefKind == RefKind.Ref)
                {
                    refKeyword = " ref ";
                }

                if (parameter.RefKind == RefKind.Out)
                {
                    refKeyword = " out ";
                }

                //   if (parameter.RefKind==RefKind.None) //????
                //     refKeyword = " in ";

                bool isRef = parameter.RefKind == RefKind.Ref || parameter.RefKind == RefKind.Out;// parameter.Modifiers.Any(SyntaxKind.OutKeyword) ||
                //  parameter.Modifiers.Any(SyntaxKind.RefKeyword);
                // || parameter.Modifiers.Any (SyntaxKind.InKeyword);
                if (firstParam)
                {
                    firstParam = false;
                }
                else
                {
                    writer.Write(", ");
                }

                var isParams = parameter.IsParams;//.Any(SyntaxKind.ParamsKeyword);

                //if (!isParams)
                {
                    var s = refKeyword + TypeProcessor.ConvertType(parameter.Type) + " ";
                    if (includeTypes)
                    {
                        writer.Write(s);
                    }
                }

                /* else //Framework depends too much on managed arrays even for params
                 * {
                 *   var type = (TypeProcessor.GetTypeInfo(parameter.Type).Type ?? TypeProcessor.GetTypeInfo(parameter.Type).ConvertedType) as IArrayTypeSymbol;
                 *   var s = refKeyword + TypeProcessor.ConvertType(type.ElementType) + "[]";
                 *
                 *   if (includeTypes)
                 *       writer.Write(s);
                 *
                 * }*/

                writer.Write(WriteIdentifierName.TransformIdentifier(parameter.Name));
                if (!parameter.HasExplicitDefaultValue)
                {
                    continue;
                }
                writer.Write(" = ");
                if (parameter.ExplicitDefaultValue is SyntaxNode)
                {
                    Core.Write(writer, (SyntaxNode)(parameter.ExplicitDefaultValue));  //TODO ??
                }
                else
                {
                    if (parameter.ExplicitDefaultValue is string)
                    {
                        writer.Write("_S(\"" + parameter.ExplicitDefaultValue.ToString() + "\")");
                    }
                    else
                    {
                        writer.Write(parameter.ExplicitDefaultValue.ToString());
                    }
                }
            }
            if (iface != null)
            {
                if (firstParam)
                {
                    firstParam = false;
                }
                else
                {
                    writer.Write(", ");
                }

                writer.Write(TypeProcessor.ConvertType(iface) + " __j = null");
            }
            if (writebraces)
            {
                writer.Write(")");
            }
            return(writer.ToString());
        }
Ejemplo n.º 2
0
        private static string ConvertTypeUncached(ITypeSymbol typeSymbol)
        {
            if (typeSymbol.IsAnonymousType)
            {
                return(WriteAnonymousObjectCreationExpression.TypeName(typeSymbol.As <INamedTypeSymbol>()));
            }

            var array = typeSymbol as IArrayTypeSymbol;

            if (array != null)
            {
                var typeString = TryConvertType(array.ElementType, false);
//                if (localize)
//                {
//                    var name =
//                        Context.Instance.UsingDeclarations.FirstOrDefault(
//                            k => typeString.StartsWith(k.Name.ToFullString() + ".Namespace.", StringComparison.Ordinal));
//
//                    if (name != null)
//                        typeString = typeString.RemoveFromStartOfString(name.Name.ToFullString() + ".Namespace.");
//                }
                return("Array_T!(" + typeString + ")");
            }

            if (typeSymbol.TypeKind == TypeKind.PointerType)
            {
                var pointer = typeSymbol as IPointerTypeSymbol;
                return(ConvertType(pointer.PointedAtType) + "*");
            }

            var typeInfoStr = typeSymbol.ToString();

            var named = typeSymbol as INamedTypeSymbol;

            if (typeSymbol.TypeKind == TypeKind.TypeParameter)
            {
                return(WriteIdentifierName.TransformIdentifier(typeSymbol.Name, typeSymbol));
            }


            if (named != null && (named.ContainingNamespace.ToString() == "System" && named.Name == "Exception"))
            {
                return("System.Namespace.NException");
            }

            //TODO: Add explicit support for Nullable
            if (named != null && (named.Name == "Nullable" && named.ContainingNamespace.ToString() == "System"))
            {
                //Nullable types
                if (named.TypeArguments.Any())
                {
                    string convertedType = "";

                    if (named.TypeArguments.FirstOrDefault() is IErrorTypeSymbol)
                    {
                        //unbound generic
                        convertedType = "__UNBOUND";
                    }
                    else
                    {
                        convertedType = TryConvertType(named.TypeArguments.FirstOrDefault(), false);
                    }


                    return("Nullable__G!(" + convertedType + ")");
                }
            }

            var typeStr = GenericTypeName(typeSymbol);

            if (named != null && named.IsGenericType)
            {
                if (!named.IsUnboundGenericType && TypeArguments(named).Any())
                {
                    return(GetFullGenericName(named));
                }
                else
                {
                    return(GetFullGenericName(named.OriginalDefinition));
                }
            }


            switch (typeStr)
            {
            case "System.Namespace.Void":
                return("void");

            case "System.Namespace.Boolean":
                return("bool");

            case "System.Object":
            case "System.Namespace.Object":
                return("NObject");

            case "System.Namespace.UInt64":
                return("ulong");

            case "System.Namespace.Double":
                return("double");

            case "System.Namespace.Single":
                return("float");

            case "System.Namespace.String":
                return("String");

            case "System.Namespace.Int32":
                return("int");

            case "System.Namespace.UInt16":
                return("ushort");

            case "System.Namespace.Int64":
                return("long");

            case "System.Namespace.UInt32":
                return("uint");    // /TODO: Looks like d's uint32 is smaller than C#'s

            case "System.Namespace.Byte":
                return("ubyte");

            case "System.Namespace.SByte":
                return("byte");

            case "System.Namespace.Int16":
                return("short");

            case "System.Namespace.Char":
                return("wchar");

            case "System.Namespace.Array":
                return("Array");    //All template (generic) classes have atleast one "_T" appended

            default:

                if (named != null)
                {
                    return(typeSymbol.ContainingNamespace.FullNameWithDot(true, false) + WriteType.TypeName(named));
                }

                //This type does not get translated and gets used as-is
                return(typeSymbol.ContainingNamespace.FullNameWithDot(true, false) + WriteIdentifierName.TransformIdentifier(typeSymbol.Name));
            }
        }
Ejemplo n.º 3
0
        public static string GetParameterListAsString(SeparatedSyntaxList <ParameterSyntax> parameters, bool includeTypes = true, ITypeSymbol iface = null, bool writebraces = true, ITypeSymbol genericClass = null)
        {
            var writer = new TempWriter(); // Temp Writer

            if (writebraces)
            {
                writer.Write("(");
            }
            var firstParam = true;

            foreach (var parameter in parameters)
            {
                var refKeyword = "";

                if (parameter.Modifiers.Any(SyntaxKind.RefKeyword))
                {
                    refKeyword = " ref ";
                }

                if (parameter.Modifiers.Any(SyntaxKind.OutKeyword))
                {
                    refKeyword = " out ";
                }

                if (parameter.Modifiers.Any(SyntaxKind.InKeyword))
                {
                    refKeyword = " in ";
                }

                bool isRef = parameter.Modifiers.Any(SyntaxKind.OutKeyword) ||
                             parameter.Modifiers.Any(SyntaxKind.RefKeyword);
                // || parameter.Modifiers.Any (SyntaxKind.InKeyword);
                if (firstParam)
                {
                    firstParam = false;
                }
                else
                {
                    writer.Write(", ");
                }

                var isParams = parameter.Modifiers.Any(SyntaxKind.ParamsKeyword);

                //if (!isParams)
                {
                    var s = refKeyword + TypeProcessor.ConvertType(parameter.Type) + " ";
                    if (includeTypes)
                    {
                        writer.Write(s);
                    }
                }

                /* else //Framework depends too much on managed arrays even for params
                 * {
                 *   var type = (TypeProcessor.GetTypeInfo(parameter.Type).Type ?? TypeProcessor.GetTypeInfo(parameter.Type).ConvertedType) as IArrayTypeSymbol;
                 *   var s = refKeyword + TypeProcessor.ConvertType(type.ElementType) + "[]";
                 *
                 *   if (includeTypes)
                 *       writer.Write(s);
                 *
                 * }*/

                writer.Write(WriteIdentifierName.TransformIdentifier(parameter.Identifier.Text));
                if (parameter.Default == null)
                {
                    continue;
                }
                writer.Write(" = ");
                Core.Write(writer, parameter.Default.Value);
            }

            if (genericClass != null)
            {
                writer.Write(TypeProcessor.ConvertType(genericClass) + " __obj");

                if (firstParam)
                {
                    firstParam = false;
                }
                else
                {
                    writer.Write(", ");
                }
            }
            else
            if (iface != null)
            {
                if (firstParam)
                {
                    firstParam = false;
                }
                else
                {
                    writer.Write(", ");
                }

                writer.Write(TypeProcessor.ConvertType(iface) + " __j = null");
            }
            if (writebraces)
            {
                writer.Write(")");
            }
            return(writer.ToString());
        }