private CodeTypeDeclaration GenerateEnum(IDescribeEnum declaration) { var newType = new CodeTypeDeclaration { Name = declaration.Name.Replace("::", "_"), IsEnum = true, TypeAttributes = TypeAttributes.Public }; //TODO: Comments, we have none yet newType.CustomAttributes.AddRange(declaration.Attributes.ToArray()); foreach (var valueDecl in declaration.Values) { var value = new CodeMemberField { Name = valueDecl.Name, InitExpression = new CodePrimitiveExpression(valueDecl.Value), Attributes = MemberAttributes.Public, }; value.CustomAttributes.AddRange(valueDecl.Attributes.ToArray()); newType.Members.Add(value); } return(newType); }
protected override void VisitChild(VisitorCursor cursor, List <VisitorCursor> Parents) { if (cursor.Kind == CXCursorKind.CXCursor_EnumDecl) { var enumSpelling = string.IsNullOrWhiteSpace(cursor.Spelling) ? Parents.ToNamespace() : cursor.Spelling; if (config.NativeEnums.Any(i => i.Name == enumSpelling) && !info.Enums.Any(e => e.Name == enumSpelling)) { var enumType = cursor.EnumType; if (enumType == typeof(IntPtr)) { enumType = typeof(int); } var enumDecl = new IDescribeEnum { Name = enumSpelling, Type = enumType }; cursor.VisitChildren((valueCursor) => { if (valueCursor.Kind != CXCursorKind.CXCursor_EnumConstantDecl && valueCursor.Kind != CXCursorKind.CXCursor_EnumDecl) { return; } var enumValue = new IDescribeEnumValue { Name = valueCursor.Spelling, Value = valueCursor.EnumValue }; enumDecl.Values.Add(enumValue); }); info.Enums.Add(enumDecl); } } }