clang  3.7.0
ChainedDiagnosticConsumer.h
Go to the documentation of this file.
1 //===- ChainedDiagnosticConsumer.h - Chain Diagnostic Clients ---*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef LLVM_CLANG_FRONTEND_CHAINEDDIAGNOSTICCONSUMER_H
11 #define LLVM_CLANG_FRONTEND_CHAINEDDIAGNOSTICCONSUMER_H
12 
13 #include "clang/Basic/Diagnostic.h"
14 #include <memory>
15 
16 namespace clang {
17 class LangOptions;
18 
19 /// ChainedDiagnosticConsumer - Chain two diagnostic clients so that diagnostics
20 /// go to the first client and then the second. The first diagnostic client
21 /// should be the "primary" client, and will be used for computing whether the
22 /// diagnostics should be included in counts.
24  virtual void anchor();
25  std::unique_ptr<DiagnosticConsumer> OwningPrimary;
26  DiagnosticConsumer *Primary;
27  std::unique_ptr<DiagnosticConsumer> Secondary;
28 
29 public:
30  ChainedDiagnosticConsumer(std::unique_ptr<DiagnosticConsumer> Primary,
31  std::unique_ptr<DiagnosticConsumer> Secondary)
32  : OwningPrimary(std::move(Primary)), Primary(OwningPrimary.get()),
33  Secondary(std::move(Secondary)) {}
34 
35  /// \brief Construct without taking ownership of \c Primary.
37  std::unique_ptr<DiagnosticConsumer> Secondary)
38  : Primary(Primary), Secondary(std::move(Secondary)) {}
39 
40  void BeginSourceFile(const LangOptions &LO,
41  const Preprocessor *PP) override {
42  Primary->BeginSourceFile(LO, PP);
43  Secondary->BeginSourceFile(LO, PP);
44  }
45 
46  void EndSourceFile() override {
47  Secondary->EndSourceFile();
48  Primary->EndSourceFile();
49  }
50 
51  void finish() override {
52  Secondary->finish();
53  Primary->finish();
54  }
55 
56  bool IncludeInDiagnosticCounts() const override {
57  return Primary->IncludeInDiagnosticCounts();
58  }
59 
61  const Diagnostic &Info) override {
62  // Default implementation (Warnings/errors count).
63  DiagnosticConsumer::HandleDiagnostic(DiagLevel, Info);
64 
65  Primary->HandleDiagnostic(DiagLevel, Info);
66  Secondary->HandleDiagnostic(DiagLevel, Info);
67  }
68 };
69 
70 } // end namspace clang
71 
72 #endif
ChainedDiagnosticConsumer(DiagnosticConsumer *Primary, std::unique_ptr< DiagnosticConsumer > Secondary)
Construct without taking ownership of Primary.
void EndSourceFile() override
Callback to inform the diagnostic client that processing of a source file has ended.
virtual void EndSourceFile()
Callback to inform the diagnostic client that processing of a source file has ended.
Definition: Diagnostic.h:1342
Abstract interface, implemented by clients of the front-end, which formats and prints fully processed...
Definition: Diagnostic.h:1309
void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override
Callback to inform the diagnostic client that processing of a source file is beginning.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:48
virtual bool IncludeInDiagnosticCounts() const
Indicates whether the diagnostics handled by this DiagnosticConsumer should be included in the number...
Definition: Diagnostic.cpp:984
bool IncludeInDiagnosticCounts() const override
Indicates whether the diagnostics handled by this DiagnosticConsumer should be included in the number...
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.
virtual void finish()
Callback to inform the diagnostic client that processing of all source files has ended.
Definition: Diagnostic.h:1346
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:398
Defines the Diagnostic-related interfaces.
ChainedDiagnosticConsumer(std::unique_ptr< DiagnosticConsumer > Primary, std::unique_ptr< DiagnosticConsumer > Secondary)
void finish() override
Callback to inform the diagnostic client that processing of all source files has ended.
Level
The level of the diagnostic, after it has been through mapping.
Definition: Diagnostic.h:141
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:1334
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
Definition: Preprocessor.h:96