private List<ITypeWriter> WriteMethods(StringBuilder sb) { List<ITypeWriter> extendedTypes = new List<ITypeWriter>(); var methodSignatures = new HashSet<string>(); foreach (var method in TypeDefinition.Methods) { var methodSb = new StringBuilder(); var methodName = method.Name; // ignore special event handler methods if (method.HasParameters && method.Parameters[0].Name.StartsWith("__param0") && (methodName.StartsWith("add_") || methodName.StartsWith("remove_"))) continue; if (method.IsSpecialName && !method.IsConstructor) continue; // already handled properties if (method.IsGetter || method.IsSetter) continue; // translate the constructor function if (method.IsConstructor) { methodName = "constructor"; } // Lowercase first char of the method methodName = methodName.ToTypeScriptName(); Indent(methodSb); Indent(methodSb); if (method.IsStatic) { methodSb.Append("static "); } methodSb.Append(methodName); var outTypes = new List<ParameterDefinition>(); methodSb.Append("("); method.Parameters.Where(w => w.IsOut).Each(e => outTypes.Add(e)); method.Parameters.Where(w => !w.IsOut).For((parameter, i, isLast) => { methodSb.AppendFormat("{0}{1}: {2}{3}", (i == 0 ? "" : " "), // spacer parameter.Name, // argument name parameter.ParameterType.ToTypeScriptType(), // type (isLast ? "" : ",")); // last one gets a comma }); methodSb.Append(")"); // constructors don't have return types. if (!method.IsConstructor) { string returnType; if (outTypes.Any()) { var outWriter = new OutParameterReturnTypeWriter(Config, IndentCount, TypeDefinition, methodName, method.ReturnType, outTypes); extendedTypes.Add(outWriter); //TypeCollection.Add(TypeDefinition.Namespace, outWriter.TypeName, outWriter); returnType = outWriter.TypeName; } else { returnType = method.ReturnType.ToTypeScriptType(); } methodSb.AppendFormat(": {0}", returnType); } methodSb.AppendLine(";"); var renderedMethod = methodSb.ToString(); if (!methodSignatures.Contains(renderedMethod)) methodSignatures.Add(renderedMethod); } // HACK: This not a sustainable approach (but working for now) // The IWebSocket inherits from IClosable and the websocket's close // conflicts with the closable close so we have to hack this method // onto the websocket interface. if (TypeDefinition.FullName == "Windows.Networking.Sockets.IWebSocket") { methodSignatures.Add(IndentValue + IndentValue + "close(): void;" + Environment.NewLine); } methodSignatures.Each(method => sb.Append(method)); return extendedTypes; }
private List <ITypeWriter> WriteMethods(StringBuilder sb) { List <ITypeWriter> extendedTypes = new List <ITypeWriter>(); var methodSignatures = new HashSet <string>(); foreach (var method in TypeDefinition.Methods) { var methodSb = new StringBuilder(); var methodName = method.Name; // ignore special event handler methods if (method.HasParameters && method.Parameters[0].Name.StartsWith("__param0") && (methodName.StartsWith("add_") || methodName.StartsWith("remove_"))) { continue; } if (method.IsSpecialName && !method.IsConstructor) { continue; } // already handled properties if (method.IsGetter || method.IsSetter) { continue; } // translate the constructor function if (method.IsConstructor) { methodName = "constructor"; } // Lowercase first char of the method methodName = methodName.ToTypeScriptName(); Indent(methodSb); Indent(methodSb); if (method.IsStatic) { methodSb.Append("static "); } methodSb.Append(methodName); var outTypes = new List <ParameterDefinition>(); methodSb.Append("("); method.Parameters.Where(w => w.IsOut).Each(e => outTypes.Add(e)); method.Parameters.Where(w => !w.IsOut).For((parameter, i, isLast) => { var paramName = parameter.Name; paramName = paramName.RenameInvalidNamesToSaveName(); methodSb.AppendFormat("{0}{1}: {2}{3}", (i == 0 ? "" : " "), // spacer paramName, // argument name parameter.ParameterType.ToTypeScriptType(), // type (isLast ? "" : ",")); // last one gets a comma }); methodSb.Append(")"); // constructors don't have return types. if (!method.IsConstructor) { string returnType; if (outTypes.Any()) { var outWriter = new OutParameterReturnTypeWriter(Config, IndentCount, TypeDefinition, methodName, method.ReturnType, outTypes); extendedTypes.Add(outWriter); //TypeCollection.Add(TypeDefinition.Namespace, outWriter.TypeName, outWriter); returnType = outWriter.TypeName; } else { returnType = method.ReturnType.ToTypeScriptType(); } methodSb.AppendFormat(": {0}", returnType); } methodSb.AppendLine(";"); var renderedMethod = methodSb.ToString(); if (!methodSignatures.Contains(renderedMethod)) { methodSignatures.Add(renderedMethod); } } // HACK: This not a sustainable approach (but working for now) // The IWebSocket inherits from IClosable and the websocket's close // conflicts with the closable close so we have to hack this method // onto the websocket interface. if (TypeDefinition.FullName == "Windows.Networking.Sockets.IWebSocket") { methodSignatures.Add(IndentValue + IndentValue + "close(): void;" + Environment.NewLine); } methodSignatures.Each(method => sb.Append(method)); return(extendedTypes); }
private List<ITypeWriter> WriteMethods(StringBuilder sb) { List<ITypeWriter> extendedTypes = new List<ITypeWriter>(); var methodSignatures = new HashSet<string>(); foreach (var method in TypeDefinition.Methods) { var methodSb = new StringBuilder(); var methodName = method.Name; // ignore special event handler methods if (method.HasParameters && method.Parameters[0].Name.StartsWith("__param0") && (methodName.StartsWith("add_") || methodName.StartsWith("remove_"))) continue; // already handled properties if (method.IsGetter || method.IsSetter) continue; // translate the constructor function if (method.IsConstructor) { continue; } // Lowercase first char of the method methodName = methodName.ToTypeScriptName(); Indent(methodSb); Indent(methodSb); if (method.IsStatic) { methodSb.Append("static "); } methodSb.Append(methodName); var outTypes = new List<ParameterDefinition>(); methodSb.Append("("); method.Parameters.Where(w => w.IsOut).Each(e => outTypes.Add(e)); method.Parameters.Where(w => !w.IsOut).For((parameter, i, isLast) => { methodSb.AppendFormat("{0}{1}: {2}{3}", (i == 0 ? "" : " "), // spacer parameter.Name, // argument name parameter.ParameterType.ToTypeScriptType(), // type (isLast ? "" : ",")); // last one gets a comma }); methodSb.Append(")"); // constructors don't have return types. if (!method.IsConstructor) { string returnType; if (outTypes.Any()) { var outWriter = new OutParameterReturnTypeWriter(Config, IndentCount, TypeDefinition, methodName, method.ReturnType, outTypes); extendedTypes.Add(outWriter); returnType = outWriter.TypeName; } else { returnType = method.ReturnType.ToTypeScriptType(); } methodSb.AppendFormat(": {0}", returnType); } methodSb.AppendLine(";"); var renderedMethod = methodSb.ToString(); if (!methodSignatures.Contains(renderedMethod)) methodSignatures.Add(renderedMethod); } methodSignatures.Each(method => sb.Append(method)); return extendedTypes; }
private List <ITypeWriter> WriteMethods(StringBuilder sb) { List <ITypeWriter> extendedTypes = new List <ITypeWriter>(); var methodSignatures = new HashSet <string>(); foreach (var method in TypeDefinition.Methods) { var methodSb = new StringBuilder(); var methodName = method.Name; // ignore special event handler methods if (method.HasParameters && method.Parameters[0].Name.StartsWith("__param0") && (methodName.StartsWith("add_") || methodName.StartsWith("remove_"))) { continue; } // already handled properties if (method.IsGetter || method.IsSetter) { continue; } // translate the constructor function if (method.IsConstructor) { continue; } // Lowercase first char of the method methodName = methodName.ToTypeScriptName(); Indent(methodSb); Indent(methodSb); if (method.IsStatic) { methodSb.Append("static "); } methodSb.Append(methodName); var outTypes = new List <ParameterDefinition>(); methodSb.Append("("); method.Parameters.Where(w => w.IsOut).Each(e => outTypes.Add(e)); method.Parameters.Where(w => !w.IsOut).For((parameter, i, isLast) => { methodSb.AppendFormat("{0}{1}: {2}{3}", (i == 0 ? "" : " "), // spacer parameter.Name, // argument name parameter.ParameterType.ToTypeScriptType(), // type (isLast ? "" : ",")); // last one gets a comma }); methodSb.Append(")"); // constructors don't have return types. if (!method.IsConstructor) { string returnType; if (outTypes.Any()) { var outWriter = new OutParameterReturnTypeWriter(Config, IndentCount, TypeDefinition, methodName, method.ReturnType, outTypes); extendedTypes.Add(outWriter); returnType = outWriter.TypeName; } else { returnType = method.ReturnType.ToTypeScriptType(); } methodSb.AppendFormat(": {0}", returnType); } methodSb.AppendLine(";"); var renderedMethod = methodSb.ToString(); if (!methodSignatures.Contains(renderedMethod)) { methodSignatures.Add(renderedMethod); } } methodSignatures.Each(method => sb.Append(method)); return(extendedTypes); }