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));
            }
        }