clang 20.0.0git
ChainedDiagnosticConsumer.h
Go to the documentation of this file.
1//===- ChainedDiagnosticConsumer.h - Chain Diagnostic Clients ---*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_CLANG_FRONTEND_CHAINEDDIAGNOSTICCONSUMER_H
10#define LLVM_CLANG_FRONTEND_CHAINEDDIAGNOSTICCONSUMER_H
11
13#include <memory>
14
15namespace clang {
16class LangOptions;
17
18/// ChainedDiagnosticConsumer - Chain two diagnostic clients so that diagnostics
19/// go to the first client and then the second. The first diagnostic client
20/// should be the "primary" client, and will be used for computing whether the
21/// diagnostics should be included in counts.
23 virtual void anchor();
24 std::unique_ptr<DiagnosticConsumer> OwningPrimary;
25 DiagnosticConsumer *Primary;
26 std::unique_ptr<DiagnosticConsumer> Secondary;
27
28public:
29 ChainedDiagnosticConsumer(std::unique_ptr<DiagnosticConsumer> Primary,
30 std::unique_ptr<DiagnosticConsumer> Secondary)
31 : OwningPrimary(std::move(Primary)), Primary(OwningPrimary.get()),
32 Secondary(std::move(Secondary)) {}
33
34 /// Construct without taking ownership of \c Primary.
36 std::unique_ptr<DiagnosticConsumer> Secondary)
37 : Primary(Primary), Secondary(std::move(Secondary)) {}
38
40 const Preprocessor *PP) override {
41 Primary->BeginSourceFile(LO, PP);
42 Secondary->BeginSourceFile(LO, PP);
43 }
44
45 void EndSourceFile() override {
46 Secondary->EndSourceFile();
47 Primary->EndSourceFile();
48 }
49
50 void finish() override {
51 Secondary->finish();
52 Primary->finish();
53 }
54
55 bool IncludeInDiagnosticCounts() const override {
56 return Primary->IncludeInDiagnosticCounts();
57 }
58
60 const Diagnostic &Info) override {
61 // Default implementation (Warnings/errors count).
63
64 Primary->HandleDiagnostic(DiagLevel, Info);
65 Secondary->HandleDiagnostic(DiagLevel, Info);
66 }
67};
68
69} // end namspace clang
70
71#endif
Defines the Diagnostic-related interfaces.
ChainedDiagnosticConsumer - Chain two diagnostic clients so that diagnostics go to the first client a...
void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override
Callback to inform the diagnostic client that processing of a source file is beginning.
ChainedDiagnosticConsumer(std::unique_ptr< DiagnosticConsumer > Primary, std::unique_ptr< DiagnosticConsumer > Secondary)
void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override
Handle this diagnostic, reporting it to the user or capturing it to a log as needed.
bool IncludeInDiagnosticCounts() const override
Indicates whether the diagnostics handled by this DiagnosticConsumer should be included in the number...
void EndSourceFile() override
Callback to inform the diagnostic client that processing of a source file has ended.
ChainedDiagnosticConsumer(DiagnosticConsumer *Primary, std::unique_ptr< DiagnosticConsumer > Secondary)
Construct without taking ownership of Primary.
void finish() override
Callback to inform the diagnostic client that processing of all source files has ended.
Abstract interface, implemented by clients of the front-end, which formats and prints fully processed...
Definition: Diagnostic.h:1684
virtual void EndSourceFile()
Callback to inform the diagnostic client that processing of a source file has ended.
Definition: Diagnostic.h:1716
virtual void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info)
Handle this diagnostic, reporting it to the user or capturing it to a log as needed.
Definition: Diagnostic.cpp:711
virtual void finish()
Callback to inform the diagnostic client that processing of all source files has ended.
Definition: Diagnostic.h:1720
virtual bool IncludeInDiagnosticCounts() const
Indicates whether the diagnostics handled by this DiagnosticConsumer should be included in the number...
virtual void BeginSourceFile(const LangOptions &LangOpts, const Preprocessor *PP=nullptr)
Callback to inform the diagnostic client that processing of a source file is beginning.
Definition: Diagnostic.h:1708
A little helper class (which is basically a smart pointer that forwards info from DiagnosticsEngine a...
Definition: Diagnostic.h:1512
Level
The level of the diagnostic, after it has been through mapping.
Definition: Diagnostic.h:234
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:499
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
Definition: Preprocessor.h:138
The JSON file list parser is used to communicate input to InstallAPI.