public ErrorTask PostMessage(TaskErrorCategory type, TaskCategory category, CompleteErrorEvent completeError, bool writelog, string key, string msg, params string[] args) { ErrorTask result = null; string message = args.Length > 0 ? string.Format(msg + "\n", args) : msg; if (type == TaskErrorCategory.Error || type == TaskErrorCategory.Warning) { if (!_errorCache.ContainsKey(key)) { ErrorTask error = new ErrorTask(); error.Category = category; error.Removed += (sender, e) => { _errorCache.Remove(key); }; error.Text = message; error.ErrorCategory = type; completeError?.Invoke(error); _errorlist.Tasks.Add(error); _errorlist.Show(); _errorCache[key] = error; if (writelog) { WriteLine("{0} - {1}", key, message); } result = error; } else { result = _errorCache[key]; } } else if (writelog) { WriteLine("{0} - {1}", key, message); } return(result); }
void RegisterError(bool isnewversion, SQDeclaration d, string filepath, ref SQCompileError error) { if (isnewversion) { RemoveNodesWithFilepath(filepath); _nodeErrors.Remove(filepath); if (error != null) { _nodeErrors[filepath] = error; } _errorHandler.RemoveMessageWithPartialKey(filepath); //RemoveNodesWithFilepath(filepath); //MapObjects(GetNode(filepath), d); } _nodeErrors.TryGetValue(filepath, out error); if (isnewversion && error != null) { TextSpan ts = new TextSpan(); ts.iStartLine = ts.iEndLine = error.line - 1; ts.iStartIndex = error.column - 1; string key = GenerateMessageKey(filepath, ts); CompleteErrorEvent func = new CompleteErrorEvent((e) => { e.Line = ts.iStartLine; e.Column = ts.iStartIndex; e.Document = filepath; e.HierarchyItem = GetNode(filepath); int length = ts.iEndIndex - ts.iStartIndex; e.Navigate += (s, ee) => { SQVSUtils.OpenDocumentInNewWindow(filepath, _serviceProvider, ts.iStartLine, ts.iStartIndex, 1); }; }); _errorHandler.PostMessage(TaskErrorCategory.Error, TaskCategory.CodeSense, func, false, key, error.error); } }