public async Task CraeteAsync(int issueId, string tagsString) { if (string.IsNullOrWhiteSpace(tagsString)) { return; } var parsedTags = this.stringService .SplitByEmptySpace(tagsString.ToLower()); var uniqueTags = new HashSet <string>(parsedTags); foreach (var uniqueTag in uniqueTags) { var tag = await this.tagsService.CreateAsync(uniqueTag); var issueTag = new IssueTag { IssueId = issueId, Tag = tag, }; await this.repository.AddAsync(issueTag); } await this.repository.SaveChangesAsync(); }
private void Issues_ItemDoubleClick(object sender, ListViewItem item) { if (item != null && item.Tag != null) { IssueTag tag = (IssueTag)item.Tag; TextPosition pos = tag.Pos; EditorState state = tag.State; TabPage tab = (TabPage)state.Tag; tcFiles.SelectedTab = tab; state.GoToPosition(pos.Index); } }
private void AddIssue(FilterListView listView, IssueTag tag, IssueType type, string message, string symbolName, string symbolType, string group, int line, string file) { ListViewItem newItem = new ListViewItem(message); newItem.Tag = tag; newItem.ImageIndex = (int)type; newItem.SubItems.Add(symbolName); newItem.SubItems.Add(symbolType); newItem.SubItems.Add(group); newItem.SubItems.Add(line.ToString()); newItem.SubItems.Add(file); listView.AddItem(newItem); }
private void RefreshIssues(IEnumerable <EditorState> states) { int selectedCppIssueIndex = lvCppIssues.SelectedIndex; int selectedDoxyIssueIndex = lvCppIssues.SelectedIndex; IssueTag selectedCppIssue = lvCppIssues.SelectedItem?.Tag as IssueTag; IssueTag selectedDoxyIssue = lvDoxygenIssues.SelectedItem?.Tag as IssueTag; lvCppIssues.BeginUpdate(); lvDoxygenIssues.BeginUpdate(); lvCppIssues.ClearSelection(); lvDoxygenIssues.ClearSelection(); lvCppIssues.ClearItems(); lvDoxygenIssues.ClearItems(); // Validate symbols from cache var symbolErrors = SymbolCache.Validate(); foreach (var errorPair in symbolErrors) { var error = errorPair.Value; var state = (EditorState)errorPair.Key; var symbol = (ReferenceSymbol)error.Tag; var nodeType = symbol.Node.GetType(); if (typeof(CppNode).Equals(nodeType)) { AddIssue(lvCppIssues, new IssueTag(state, error.Pos), IssueType.Error, error.Message, error.Symbol, error.Type, error.Category, error.Pos.Line + 1, state.Name); } else if (typeof(DoxygenNode).Equals(nodeType)) { AddIssue(lvDoxygenIssues, new IssueTag(state, error.Pos), IssueType.Error, error.Message, error.Symbol, error.Type, error.Category, error.Pos.Line + 1, state.Name); } } foreach (EditorState state in states) { foreach (var error in state.Errors) { var errorType = error.Tag.GetType(); if (typeof(CppLexer).Equals(errorType) || typeof(CppParser).Equals(errorType)) { AddIssue(lvCppIssues, new IssueTag(state, error.Pos), IssueType.Error, error.Message, null, null, error.Category, error.Pos.Line + 1, state.Name); } else if (typeof(DoxygenLexer).Equals(errorType) || typeof(DoxygenParser).Equals(errorType)) { AddIssue(lvDoxygenIssues, new IssueTag(state, error.Pos), IssueType.Error, error.Message, null, null, error.Category, error.Pos.Line + 1, state.Name); } } if (state.CppTree != null) { AddIssuesFromNode(states, state, state.CppTree, state.Name, "Root"); } } lvCppIssues.RefreshItems(); lvDoxygenIssues.RefreshItems(); lvCppIssues.SelectItemOrIndex(selectedCppIssue, selectedCppIssueIndex); lvDoxygenIssues.SelectItemOrIndex(selectedDoxyIssue, selectedDoxyIssueIndex); lvCppIssues.EndUpdate(); lvDoxygenIssues.EndUpdate(); tpCppIssues.Text = $"C/C++ Issues [{lvCppIssues.ItemCount}]"; tpDoxygenIssues.Text = $"Doxygen Issues [{lvDoxygenIssues.ItemCount}]"; }