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 string GetEnumName(TypeScriptEnumAttributeValues attributeValues) { if (!string.IsNullOrEmpty(attributeValues.NamePrefix)) { return(attributeValues.NamePrefix + attributeValues.Name); } return(attributeValues.Name); }
private TypeScriptEnum BuildEnum(CodeEnum codeEnum, TypeScriptEnumAttributeValues attributeValues, TypeContext typeContext) { var tsEnum = new TypeScriptEnum { FullName = codeEnum.FullName, Name = GetEnumName(attributeValues) }; new EnumTraverser(codeEnum, (variable, index) => { TypeScriptEnumMember member; if (TryGetEnumMember(variable, typeContext, index, out member)) { tsEnum.Members.Add(member); } }); return(tsEnum); }
private void ProcessCodeEnum(TypeContext typeContext, IDictionary <CodeEnum, TypeScriptEnum> tsEnumMap, IDictionary <string, TypeScriptModule> byModuleName, CodeEnum codeEnum) { EnumType enumType; if (typeContext.TryGetEnumType(codeEnum.FullName, out enumType)) { TypeScriptEnumAttributeValues values = enumType.AttributeValues; TypeScriptModule module; if (!byModuleName.TryGetValue(values.Module, out module)) { module = new TypeScriptModule { QualifiedName = values.Module }; byModuleName.Add(values.Module, module); } TypeScriptEnum tsEnum = BuildEnum(codeEnum, values, typeContext); tsEnumMap.Add(codeEnum, tsEnum); tsEnum.Module = module; module.Enums.Add(tsEnum); } }
private TypeScriptInterface BuildInterface(CodeClass codeClass, TypeScriptInterfaceAttributeValues attributeValues, TypeContext typeContext) { var tsInterface = new TypeScriptInterface { FullName = codeClass.FullName, Name = GetInterfaceName(attributeValues) }; // Add sub-classes to the interface foreach (var codeSubClass in codeClass.Members.OfType <CodeClass>().Where(cc => cc.Access == vsCMAccess.vsCMAccessPublic)) { var subAttributeValues = new TypeScriptInterfaceAttributeValues { Name = codeSubClass.Name }; InterfaceType interfaceType; if (typeContext.TryGetInterfaceType(codeSubClass.FullName, out interfaceType)) { subAttributeValues = interfaceType.AttributeValues; subAttributeValues.Module = attributeValues.Module + "." + tsInterface.Name; } TypeScriptInterface subInterface = BuildInterface(codeSubClass, subAttributeValues, typeContext); subInterface.Owner = tsInterface; tsInterface.SubClasses.Add(subInterface); } // Add sub-enums to the interface foreach (CodeEnum codeSubEnum in codeClass.Members.OfType <CodeEnum>().Where(cc => cc.Access == vsCMAccess.vsCMAccessPublic)) { var subAttributeValues = new TypeScriptEnumAttributeValues { Name = codeSubEnum.Name }; EnumType enumType; if (typeContext.TryGetEnumType(codeSubEnum.FullName, out enumType)) { subAttributeValues = enumType.AttributeValues; subAttributeValues.Module = attributeValues.Module + "." + tsInterface.Name; } TypeScriptEnum subEnum = BuildEnum(codeSubEnum, subAttributeValues, typeContext); subEnum.Owner = tsInterface; tsInterface.SubEnums.Add(subEnum); } TypescriptType indexedType; if (TryGetIndexedType(codeClass, typeContext, out indexedType)) { tsInterface.IndexedType = indexedType; } new ClassTraverser(codeClass, property => { TypeScriptInterfaceMember member; if (TryGetMember(property, typeContext, out member)) { tsInterface.Members.Add(member); } }); return(tsInterface); }
private string GetEnumName(TypeScriptEnumAttributeValues attributeValues) { if (!string.IsNullOrEmpty(attributeValues.NamePrefix)) return attributeValues.NamePrefix + attributeValues.Name; return attributeValues.Name; }
private TypeScriptInterface BuildInterface(CodeClass codeClass, TypeScriptInterfaceAttributeValues attributeValues, TypeContext typeContext) { var tsInterface = new TypeScriptInterface { FullName = codeClass.FullName, Name = GetInterfaceName(attributeValues), Comment = codeClass.Comment, DocComment = codeClass.DocComment }; // Add sub-classes to the interface foreach (var codeSubClass in codeClass.Members.OfType<CodeClass>().Where(cc => cc.Access == vsCMAccess.vsCMAccessPublic)) { var subAttributeValues = new TypeScriptInterfaceAttributeValues { Name = codeSubClass.Name }; InterfaceType interfaceType; if (typeContext.TryGetInterfaceType(codeSubClass.FullName, out interfaceType)) { subAttributeValues = interfaceType.AttributeValues; subAttributeValues.Module = attributeValues.Module + "." + tsInterface.Name; } var subInterface = BuildInterface(codeSubClass, subAttributeValues, typeContext); subInterface.Owner = tsInterface; tsInterface.SubClasses.Add(subInterface); } // Add sub-enums to the interface foreach (CodeEnum codeSubEnum in codeClass.Members.OfType<CodeEnum>().Where(cc => cc.Access == vsCMAccess.vsCMAccessPublic)) { var subAttributeValues = new TypeScriptEnumAttributeValues { Name = codeSubEnum.Name }; EnumType enumType; if (typeContext.TryGetEnumType(codeSubEnum.FullName, out enumType)) { subAttributeValues = enumType.AttributeValues; subAttributeValues.Module = attributeValues.Module + "." + tsInterface.Name; } var subEnum = BuildEnum(codeSubEnum, subAttributeValues, typeContext); subEnum.Owner = tsInterface; tsInterface.SubEnums.Add(subEnum); } TypescriptType indexedType; if (TryGetIndexedType(codeClass, typeContext, out indexedType)) tsInterface.IndexedType = indexedType; new ClassTraverser(codeClass, property => { TypeScriptInterfaceMember member; if (TryGetMember(property, typeContext, out member)) tsInterface.Members.Add(member); }); return tsInterface; }
private TypeScriptEnum BuildEnum(CodeEnum codeEnum, TypeScriptEnumAttributeValues attributeValues, TypeContext typeContext) { var tsEnum = new TypeScriptEnum { FullName = codeEnum.FullName, Name = GetEnumName(attributeValues), Comment = codeEnum.Comment, DocComment = codeEnum.DocComment }; new EnumTraverser(codeEnum, (variable, index) => { TypeScriptEnumMember member; if (TryGetEnumMember(variable, typeContext, index, out member)) tsEnum.Members.Add(member); }); return tsEnum; }