private bool LexDirectiveAndExcludedTrivia(
bool afterNonWhitespaceOnLine,
List<SyntaxNode> triviaList)
{
var directive = LexSingleDirective(true, true, afterNonWhitespaceOnLine, triviaList);
if (directive.Kind == SyntaxKind.IncludeDirectiveTrivia)
{
var includeDirective = (IncludeDirectiveTriviaSyntax)directive;
var includeFilename = includeDirective.TrimmedFilename;
SourceText include;
try
{
include = _fileSystem.GetInclude(includeFilename);
if (include == null)
{
includeDirective = includeDirective.WithDiagnostic(Diagnostic.Format(includeDirective.GetTextSpan(), DiagnosticId.IncludeNotFound, includeFilename));
triviaList.Add(includeDirective);
}
}
catch (Exception ex)
{
includeDirective = includeDirective.WithDiagnostic(new Diagnostic(includeDirective.GetTextSpan(), DiagnosticId.IncludeNotFound, ex.Message));
include = null;
triviaList.Add(includeDirective);
}
if (include != null)
{
triviaList.Add(includeDirective);
PushIncludeContext(include);
return false;
}
}
// also lex excluded stuff
var branching = directive as BranchingDirectiveTriviaSyntax;
if (branching != null && !branching.BranchTaken)
LexExcludedDirectivesAndTrivia(true, triviaList);
return true;
}