void ProcessFinalSemanticErrors(CodeGenerationUnitSyntax syntax, CancellationToken cancellationToken) { // ===================== // Unused Includes var unusedIncludes = _includes.Where(i => !i.TaskDeklarations.SelectMany(td => td.References).Any()); foreach (var includeSymbol in unusedIncludes) { cancellationToken.ThrowIfCancellationRequested(); _diagnostics.Add(new Diagnostic( includeSymbol.Syntax.GetLocation(), DiagnosticDescriptors.DeadCode.Nav1003IncludeNotRequired)); } // ===================== // Unused Task Declarations var unusedTaskDeclarations = _taskDeclarations.Where(td => !td.IsIncluded && td.Origin == TaskDeclarationOrigin.TaskDeclaration && !td.References.Any()); foreach (var taskDeclarationSymbol in unusedTaskDeclarations) { cancellationToken.ThrowIfCancellationRequested(); var location = taskDeclarationSymbol.Location; // wenn möglich markieren wir "taskref Identifier" var taskDeclarationSyntax = syntax.FindNode(taskDeclarationSymbol.Location.Start) as TaskDeclarationSyntax; if (taskDeclarationSyntax != null) { var start = taskDeclarationSyntax.TaskrefKeyword.Start; var end = taskDeclarationSyntax.Identifier.End; var extent = TextExtent.FromBounds(start, end); location = syntax.SyntaxTree.GetLocation(extent); } _diagnostics.Add(new Diagnostic( location, DiagnosticDescriptors.DeadCode.Nav1005TaskDeclaration0NotRequired, taskDeclarationSymbol.Name)); } }