public static string ToJavascriptName(AstType astType, IEmitter emitter) { string name = null; var primitive = astType as PrimitiveType; name = XmlToJsDoc.GetPrimitivie(primitive); if (name != null) { return(name); } var composedType = astType as ComposedType; if (composedType != null && composedType.ArraySpecifiers != null && composedType.ArraySpecifiers.Count > 0) { return(JS.Types.ARRAY + ".<" + BridgeTypes.ToTypeScriptName(composedType.BaseType, emitter) + ">"); } var simpleType = astType as SimpleType; if (simpleType != null && simpleType.Identifier == "dynamic") { return("object"); } var resolveResult = emitter.Resolver.ResolveNode(astType, emitter); return(XmlToJsDoc.ToJavascriptName(resolveResult.Type, emitter)); }
public static string ToTypeScriptName(AstType astType, IEmitter emitter, bool asDefinition = false, bool ignoreDependency = false) { string name = null; var primitive = astType as PrimitiveType; name = BridgeTypes.GetTsPrimitivie(primitive); if (name != null) { return(name); } var composedType = astType as ComposedType; if (composedType != null && composedType.ArraySpecifiers != null && composedType.ArraySpecifiers.Count > 0) { return(BridgeTypes.ToTypeScriptName(composedType.BaseType, emitter) + string.Concat(Enumerable.Repeat("[]", composedType.ArraySpecifiers.Count))); } var simpleType = astType as SimpleType; if (simpleType != null && simpleType.Identifier == "dynamic") { return("any"); } var resolveResult = emitter.Resolver.ResolveNode(astType, emitter); return(BridgeTypes.ToTypeScriptName(resolveResult.Type, emitter, asDefinition: asDefinition, ignoreDependency: ignoreDependency)); }
public static string ObjectLiteralSignature(IType type, IEmitter emitter) { var typeDef = type.GetDefinition(); var isObjectLiteral = typeDef != null && emitter.Validator.IsObjectLiteral(typeDef); if (isObjectLiteral) { StringBuilder sb = new StringBuilder(); sb.Append("{"); var fields = type.GetFields().Where(f => f.IsPublic && f.DeclaringTypeDefinition.FullName != "System.Object"); var properties = type.GetProperties().Where(p => p.IsPublic && p.DeclaringTypeDefinition.FullName != "System.Object"); var comma = false; foreach (var field in fields) { if (comma) { sb.Append(", "); } sb.Append(OverloadsCollection.Create(emitter, field).GetOverloadName()); sb.Append(": "); sb.Append(BridgeTypes.ToTypeScriptName(field.Type, emitter)); comma = true; } foreach (var property in properties) { if (comma) { sb.Append(", "); } sb.Append(OverloadsCollection.Create(emitter, property).GetOverloadName()); sb.Append(": "); sb.Append(BridgeTypes.ToTypeScriptName(property.ReturnType, emitter)); comma = true; } sb.Append("}"); return(sb.ToString()); } return(null); }
public static string ToTypeScriptName(IType type, IEmitter emitter, bool asDefinition = false, bool excludens = false, bool ignoreDependency = false, List <string> guard = null) { if (type.Kind == TypeKind.Delegate) { if (guard == null) { guard = new List <string>(); } if (guard.Contains(type.FullName)) { return("Function"); } guard.Add(type.FullName); var method = type.GetDelegateInvokeMethod(); StringBuilder sb = new StringBuilder(); sb.Append("{"); sb.Append("("); var last = method.Parameters.LastOrDefault(); foreach (var p in method.Parameters) { var ptype = BridgeTypes.ToTypeScriptName(p.Type, emitter, guard: guard); if (p.IsOut || p.IsRef) { ptype = "{v: " + ptype + "}"; } sb.Append(p.Name + ": " + ptype); if (p != last) { sb.Append(", "); } } sb.Append(")"); sb.Append(": "); sb.Append(BridgeTypes.ToTypeScriptName(method.ReturnType, emitter, guard: guard)); sb.Append("}"); guard.Remove(type.FullName); return(sb.ToString()); } var oname = ObjectLiteralSignature(type, emitter); if (oname != null) { return(oname); } if (type.IsKnownType(KnownTypeCode.String)) { return("string"); } if (type.IsKnownType(KnownTypeCode.Boolean)) { return("boolean"); } if (type.IsKnownType(KnownTypeCode.Void)) { return("void"); } if (type.IsKnownType(KnownTypeCode.Byte) || type.IsKnownType(KnownTypeCode.Char) || type.IsKnownType(KnownTypeCode.Decimal) || type.IsKnownType(KnownTypeCode.Double) || type.IsKnownType(KnownTypeCode.Int16) || type.IsKnownType(KnownTypeCode.Int32) || type.IsKnownType(KnownTypeCode.Int64) || type.IsKnownType(KnownTypeCode.SByte) || type.IsKnownType(KnownTypeCode.Single) || type.IsKnownType(KnownTypeCode.UInt16) || type.IsKnownType(KnownTypeCode.UInt32) || type.IsKnownType(KnownTypeCode.UInt64)) { return("number"); } if (type.Kind == TypeKind.Array) { ICSharpCode.NRefactory.TypeSystem.ArrayType arrayType = (ICSharpCode.NRefactory.TypeSystem.ArrayType)type; return(BridgeTypes.ToTypeScriptName(arrayType.ElementType, emitter, asDefinition, excludens, guard: guard) + "[]"); } if (type.Kind == TypeKind.Dynamic) { return("any"); } if (type.Kind == TypeKind.Enum && type.DeclaringType != null && !excludens) { return("number"); } if (NullableType.IsNullable(type)) { return(BridgeTypes.ToTypeScriptName(NullableType.GetUnderlyingType(type), emitter, asDefinition, excludens, guard: guard)); } BridgeType bridgeType = emitter.BridgeTypes.Get(type, true); //string name = BridgeTypes.ConvertName(excludens ? type.Name : type.FullName); var name = excludens ? "" : type.Namespace; var hasTypeDef = bridgeType != null && bridgeType.TypeDefinition != null; if (hasTypeDef) { var typeDef = bridgeType.TypeDefinition; if (typeDef.IsNested && !excludens) { name = (string.IsNullOrEmpty(name) ? "" : (name + ".")) + BridgeTypes.GetParentNames(emitter, typeDef); } name = (string.IsNullOrEmpty(name) ? "" : (name + ".")) + BridgeTypes.ConvertName(emitter.GetTypeName(bridgeType.Type.GetDefinition(), typeDef)); } else { if (type.DeclaringType != null && !excludens) { name = (string.IsNullOrEmpty(name) ? "" : (name + ".")) + BridgeTypes.GetParentNames(emitter, type); if (type.DeclaringType.TypeArguments.Count > 0) { name += Helpers.PrefixDollar(type.TypeArguments.Count); } } name = (string.IsNullOrEmpty(name) ? "" : (name + ".")) + BridgeTypes.ConvertName(type.Name); } bool isCustomName = false; if (bridgeType != null) { if (!ignoreDependency && emitter.AssemblyInfo.OutputBy != OutputBy.Project && bridgeType.TypeInfo != null && bridgeType.TypeInfo.Namespace != emitter.TypeInfo.Namespace) { var info = BridgeTypes.GetNamespaceFilename(bridgeType.TypeInfo, emitter); var ns = info.Item1; var fileName = info.Item2; if (!emitter.CurrentDependencies.Any(d => d.DependencyName == fileName)) { emitter.CurrentDependencies.Add(new ModuleDependency() { DependencyName = fileName }); } } name = BridgeTypes.AddModule(name, bridgeType, excludens, out isCustomName); } if (!hasTypeDef && !isCustomName && type.TypeArguments.Count > 0) { name += Helpers.PrefixDollar(type.TypeArguments.Count); } if (!asDefinition && type.TypeArguments.Count > 0 && !Helpers.IsIgnoreGeneric(type, emitter, true)) { StringBuilder sb = new StringBuilder(name); bool needComma = false; sb.Append("<"); foreach (var typeArg in type.TypeArguments) { if (needComma) { sb.Append(","); } needComma = true; sb.Append(BridgeTypes.ToTypeScriptName(typeArg, emitter, asDefinition, excludens, guard: guard)); } sb.Append(">"); name = sb.ToString(); } return(name); }