public IClassifier GetClassifier(ITextBuffer buffer) { try { if (_outputClassifier == null) { Interlocked.CompareExchange( ref _outputClassifier, new GCCErrorListOutputClassifier(), null); GCCErrorGenerator.Initialize(ServiceProvider.GlobalProvider); _outputClassifier.Initialize(); } } catch (Exception ex) { Log.LogError(ex.ToString()); throw; } return(_outputClassifier); }
public IList <ClassificationSpan> GetClassificationSpans(SnapshotSpan span) { try { var spans = new List <ClassificationSpan>(); var snapshot = span.Snapshot; if (snapshot == null || snapshot.Length == 0) { return(spans); } if (_classifiers == null) { UpdateClassifiers(); } var classifiers = _classifiers ?? new List <Classifier>(); var start = span.Start.GetContainingLine().LineNumber; var end = (span.End - 1).GetContainingLine().LineNumber; for (var i = start; i <= end; i++) { var line = snapshot.GetLineFromLineNumber(i); if (line == null) { continue; } var snapshotSpan = new SnapshotSpan(line.Start, line.Length); var text = line.Snapshot.GetText(snapshotSpan); if (string.IsNullOrEmpty(text)) { continue; } var classificationName = classifiers.FirstOrDefault(classifier => classifier.Test(text)).Type; if (classificationName == null) { continue; } switch (classificationName) { case ClassificationTypeDefinitions.LogError: GCCErrorGenerator.AddError(GCCErrorListItem.Parse(text)); break; case ClassificationTypeDefinitions.LogWarn: GCCErrorGenerator.AddWarning(GCCErrorListItem.Parse(text)); break; case ClassificationTypeDefinitions.LogInfo: GCCErrorGenerator.AddMessage(GCCErrorListItem.Parse(text)); break; } } return(spans); } catch (FormatException) { // eat it. return(new List <ClassificationSpan>()); } catch (RegexMatchTimeoutException) { // eat it. return(new List <ClassificationSpan>()); } catch (NullReferenceException) { // eat it. return(new List <ClassificationSpan>()); } catch (Exception ex) { Log.LogError(ex.ToString()); throw; } }