Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: tools/clang/blink_gc_plugin/DiagnosticsReporter.h

Issue 1926863002: GC plugin: split out reporting of errors/warnings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: whitespace Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/clang/blink_gc_plugin/DiagnosticsReporter.h
diff --git a/tools/clang/blink_gc_plugin/DiagnosticsReporter.h b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
new file mode 100644
index 0000000000000000000000000000000000000000..2f9076ec7b9d610726337585a70f7cb963c7e398
--- /dev/null
+++ b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
@@ -0,0 +1,137 @@
+// Copyright 2016 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_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
+#define TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
+
+#include "CheckFieldsVisitor.h"
+#include "CheckFinalizerVisitor.h"
+#include "CheckGCRootsVisitor.h"
+#include "Config.h"
+#include "clang/AST/AST.h"
+#include "clang/AST/ASTConsumer.h"
+#include "clang/Basic/Diagnostic.h"
+#include "clang/Frontend/CompilerInstance.h"
+
+class RecordInfo;
+
+// All error/warning reporting methods under one roof.
+//
+class DiagnosticsReporter {
+ public:
+ explicit DiagnosticsReporter(clang::CompilerInstance&);
+
+ bool hasErrorOccurred() const;
+ clang::DiagnosticsEngine::Level getErrorLevel() const;
+
+ void ClassMustLeftMostlyDeriveGC(RecordInfo* info);
+ void ClassRequiresTraceMethod(RecordInfo* info);
+ void BaseRequiresTracing(RecordInfo* derived,
+ clang::CXXMethodDecl* trace,
+ clang::CXXRecordDecl* base);
+ void FieldsRequireTracing(RecordInfo* info,
+ clang::CXXMethodDecl* trace);
+ void ClassContainsInvalidFields(
+ RecordInfo* info,
+ const CheckFieldsVisitor::Errors& errors);
+ void ClassContainsGCRoots(RecordInfo* info,
+ const CheckGCRootsVisitor::Errors& errors);
+ void FinalizerAccessesFinalizedFields(
+ clang::CXXMethodDecl* dtor,
+ const CheckFinalizerVisitor::Errors& errors);
+ void ClassRequiresFinalization(RecordInfo* info);
+ void ClassDoesNotRequireFinalization(RecordInfo* info);
+ void ClassMustDeclareGCMixinTraceMethod(RecordInfo* info);
+ void OverriddenNonVirtualTrace(RecordInfo* info,
+ clang::CXXMethodDecl* trace,
+ clang::CXXMethodDecl* overridden);
+ void MissingTraceDispatchMethod(RecordInfo* info);
+ void MissingFinalizeDispatchMethod(RecordInfo* info);
+ void VirtualAndManualDispatch(RecordInfo* info,
+ clang::CXXMethodDecl* dispatch);
+ void MissingTraceDispatch(const clang::FunctionDecl* dispatch,
+ RecordInfo* receiver);
+ void MissingFinalizeDispatch(const clang::FunctionDecl* dispatch,
+ RecordInfo* receiver);
+ void DerivesNonStackAllocated(RecordInfo* info, BasePoint* base);
+ void ClassOverridesNew(RecordInfo* info, clang::CXXMethodDecl* newop);
+ void ClassDeclaresPureVirtualTrace(RecordInfo* info,
+ clang::CXXMethodDecl* trace);
+ void LeftMostBaseMustBePolymorphic(RecordInfo* derived,
+ clang::CXXRecordDecl* base);
+ void BaseClassMustDeclareVirtualTrace(RecordInfo* derived,
+ clang::CXXRecordDecl* base);
+
+ void NoteManualDispatchMethod(clang::CXXMethodDecl* dispatch);
+ void NoteBaseRequiresTracing(BasePoint* base);
+ void NoteFieldRequiresTracing(RecordInfo* holder, clang::FieldDecl* field);
+ void NotePartObjectContainsGCRoot(FieldPoint* point);
+ void NoteFieldContainsGCRoot(FieldPoint* point);
+ void NoteUserDeclaredDestructor(clang::CXXMethodDecl* dtor);
+ void NoteUserDeclaredFinalizer(clang::CXXMethodDecl* dtor);
+ void NoteBaseRequiresFinalization(BasePoint* base);
+ void NoteFieldRequiresFinalization(FieldPoint* field);
+ void NoteField(FieldPoint* point, unsigned note);
+ void NoteField(clang::FieldDecl* field, unsigned note);
+ void NoteOverriddenNonVirtualTrace(clang::CXXMethodDecl* overridden);
+
+ private:
+ clang::DiagnosticBuilder ReportDiagnostic(
+ clang::SourceLocation location,
+ unsigned diag_id);
+
+ void ReportMissingDispatchMethod(RecordInfo* info, unsigned error);
+ void ReportMissingDispatch(const clang::FunctionDecl* dispatch,
+ RecordInfo* receiver,
+ unsigned error);
+
+ clang::CompilerInstance& instance_;
+ clang::DiagnosticsEngine& diagnostic_;
+
+ unsigned diag_class_must_left_mostly_derive_gc_;
+ unsigned diag_class_requires_trace_method_;
+ unsigned diag_base_requires_tracing_;
+ unsigned diag_fields_require_tracing_;
+ unsigned diag_class_contains_invalid_fields_;
+ unsigned diag_class_contains_gc_root_;
+ unsigned diag_class_requires_finalization_;
+ unsigned diag_class_does_not_require_finalization_;
+ unsigned diag_finalizer_accesses_finalized_field_;
+ unsigned diag_finalizer_eagerly_finalized_field_;
+ unsigned diag_overridden_non_virtual_trace_;
+ unsigned diag_missing_trace_dispatch_method_;
+ unsigned diag_missing_finalize_dispatch_method_;
+ unsigned diag_virtual_and_manual_dispatch_;
+ unsigned diag_missing_trace_dispatch_;
+ unsigned diag_missing_finalize_dispatch_;
+ unsigned diag_derives_non_stack_allocated_;
+ unsigned diag_class_overrides_new_;
+ unsigned diag_class_declares_pure_virtual_trace_;
+ unsigned diag_left_most_base_must_be_polymorphic_;
+ unsigned diag_base_class_must_declare_virtual_trace_;
+
+ unsigned diag_base_requires_tracing_note_;
+ unsigned diag_field_requires_tracing_note_;
+ unsigned diag_raw_ptr_to_gc_managed_class_note_;
+ unsigned diag_ref_ptr_to_gc_managed_class_note_;
+ unsigned diag_reference_ptr_to_gc_managed_class_note_;
+ unsigned diag_own_ptr_to_gc_managed_class_note_;
+ unsigned diag_member_to_gc_unmanaged_class_note_;
+ unsigned diag_stack_allocated_field_note_;
+ unsigned diag_member_in_unmanaged_class_note_;
+ unsigned diag_part_object_to_gc_derived_class_note_;
+ unsigned diag_part_object_contains_gc_root_note_;
+ unsigned diag_field_contains_gc_root_note_;
+ unsigned diag_finalized_field_note_;
+ unsigned diag_eagerly_finalized_field_note_;
+ unsigned diag_user_declared_destructor_note_;
+ unsigned diag_user_declared_finalizer_note_;
+ unsigned diag_base_requires_finalization_note_;
+ unsigned diag_field_requires_finalization_note_;
+ unsigned diag_overridden_non_virtual_trace_note_;
+ unsigned diag_manual_dispatch_method_note_;
+
+};
+
+#endif // TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
« no previous file with comments | « tools/clang/blink_gc_plugin/CheckFieldsVisitor.cpp ('k') | tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698