| Index: tools/clang/plugins/SuppressibleDiagnosticBuilder.h
|
| diff --git a/tools/clang/plugins/SuppressibleDiagnosticBuilder.h b/tools/clang/plugins/SuppressibleDiagnosticBuilder.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a56e5169a1974d47e43157cb3a1caf283bec7ac1
|
| --- /dev/null
|
| +++ b/tools/clang/plugins/SuppressibleDiagnosticBuilder.h
|
| @@ -0,0 +1,55 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef TOOLS_CLANG_PLUGINS_HESIENDIAGNOSTICBUILDER_H_
|
| +#define TOOLS_CLANG_PLUGINS_HESIENDIAGNOSTICBUILDER_H_
|
| +
|
| +#include "clang/Basic/Diagnostic.h"
|
| +#include "clang/Basic/SourceLocation.h"
|
| +
|
| +namespace chrome_checker {
|
| +
|
| +// A simple wrapper around DiagnosticBuilder that allows a diagnostic to be
|
| +// suppressed. The intended use case is for helper functions that return a
|
| +// DiagnosticBuilder, but only want to emit the diagnostic if some conditions
|
| +// are met.
|
| +class SuppressibleDiagnosticBuilder : public clang::DiagnosticBuilder {
|
| + public:
|
| + SuppressibleDiagnosticBuilder(clang::DiagnosticsEngine* diagnostics,
|
| + clang::SourceLocation loc,
|
| + unsigned diagnostic_id,
|
| + bool suppressed)
|
| + : DiagnosticBuilder(diagnostics->Report(loc, diagnostic_id)),
|
| + diagnostics_(diagnostics),
|
| + suppressed_(suppressed) {}
|
| +
|
| + ~SuppressibleDiagnosticBuilder() {
|
| + if (suppressed_) {
|
| + // Clear the counts and underlying data, so the base class destructor
|
| + // doesn't try to emit the diagnostic.
|
| + FlushCounts();
|
| + Clear();
|
| + // Also clear the current diagnostic being processed by the
|
| + // DiagnosticsEngine, since it won't be emitted.
|
| + diagnostics_->Clear();
|
| + }
|
| + }
|
| +
|
| + template <typename T>
|
| + friend const SuppressibleDiagnosticBuilder& operator<<(
|
| + const SuppressibleDiagnosticBuilder& builder,
|
| + const T& value) {
|
| + const DiagnosticBuilder& base_builder = builder;
|
| + base_builder << value;
|
| + return builder;
|
| + }
|
| +
|
| + private:
|
| + clang::DiagnosticsEngine* const diagnostics_;
|
| + const bool suppressed_;
|
| +};
|
| +
|
| +} // namespace chrome_checker
|
| +
|
| +#endif // TOOLS_CLANG_PLUGINS_HESIENDIAGNOSTICBUILDER_H_
|
|
|