private void BuildCodeEnum(TypeContext typeContext, CodeEnum codeEnum, CodeClass owner = null) { if (codeEnum == null) { return; } CodeAttribute attribute; EnumType enumType = null; if (owner != null) { TypescriptType tsType = typeContext.GetTypeScriptType(owner.FullName); if (tsType != null) { enumType = new EnumType(codeEnum.Name); } } if (TryGetAttribute(codeEnum.Attributes, EnumAttributeFullName, out attribute)) { TypeScriptEnumAttributeValues values = GetEnumValues(codeEnum, attribute); enumType = new EnumType(values); } if (enumType != null) { if (!typeContext.ContainsEnumType(codeEnum.FullName)) { typeContext.AddEnumType(codeEnum.FullName, enumType); } } }
private bool TryGetIndexedType(CodeClass codeClass, TypeContext typeContext, out TypescriptType indexedType) { indexedType = null; if (codeClass.Bases == null || codeClass.Bases.Count == 0) { return(false); } foreach (CodeElement baseClass in codeClass.Bases) { if (typeContext.IsGenericEnumerable(baseClass.FullName)) { string fullName = typeContext.UnwrapGenericType(baseClass.FullName); indexedType = typeContext.GetTypeScriptType(fullName); return(true); } } return(false); }
private bool TryGetIndexedType(CodeClass codeClass, TypeContext typeContext, out TypescriptType indexedType) { indexedType = null; if (codeClass.Bases == null || codeClass.Bases.Count == 0) return false; foreach (CodeElement baseClass in codeClass.Bases) { if (typeContext.IsGenericEnumerable(baseClass.FullName)) { string fullName = typeContext.UnwrapGenericType(baseClass.FullName); indexedType = typeContext.GetTypeScriptType(fullName); return true; } } return false; }
private void BuildCodeClass(TypeContext typeContext, CodeClass codeClass, CodeClass owner = null, bool forcedProcessing = false) { if (codeClass == null) { return; } CodeAttribute attribute; InterfaceType interfaceType = null; if (owner != null) { TypescriptType tsType = typeContext.GetTypeScriptType(owner.FullName); if (tsType != null) { interfaceType = new InterfaceType(codeClass.Name); } } if (forcedProcessing) { var values = new TypeScriptInterfaceAttributeValues { Name = codeClass.Name, Module = Settings.DefaultModule ?? "T4TS", NamePrefix = Settings.DefaultInterfaceNamePrefix ?? string.Empty }; interfaceType = new InterfaceType(values); } if (TryGetAttribute(codeClass.Attributes, InterfaceAttributeFullName, out attribute)) { TypeScriptInterfaceAttributeValues values = GetInterfaceValues(codeClass, attribute); interfaceType = new InterfaceType(values); } else if (Settings.ProcessDataContracts && TryGetAttribute(codeClass.Attributes, "System.Runtime.Serialization.DataContractAttribute", out attribute)) { var values = new TypeScriptInterfaceAttributeValues { Name = codeClass.Name, Module = Settings.DefaultModule ?? "T4TS", NamePrefix = Settings.DefaultInterfaceNamePrefix ?? string.Empty }; interfaceType = new InterfaceType(values); } if (interfaceType != null) { // Process parent classes anyway if it has not TypeScriptAttribute or DataContractAttribute if (Settings.ProcessParentClasses) { CodeClass parentClass = null; if (codeClass.Bases.Count > 0) { parentClass = codeClass.Bases.Item(1) as CodeClass; } if (parentClass != null && parentClass.FullName != "System.Object") { BuildCodeClass(typeContext, parentClass, null, true); } } if (!typeContext.ContainsInterfaceType(codeClass.FullName)) { typeContext.AddInterfaceType(codeClass.FullName, interfaceType); } foreach (var subCodeElement in codeClass.Members) { var subCodeClass = subCodeElement as CodeClass; if (subCodeClass != null && subCodeClass.Access == vsCMAccess.vsCMAccessPublic) { BuildCodeClass(typeContext, subCodeClass, codeClass); } var subCodeEnum = subCodeElement as CodeEnum; if (subCodeEnum != null && subCodeEnum.Access == vsCMAccess.vsCMAccessPublic) { BuildCodeEnum(typeContext, subCodeEnum, codeClass); } } } }