1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef VIRTUAL_METHODS_H_
6#define VIRTUAL_METHODS_H_
7
8// Should warn about virtual method usage.
9class VirtualMethodsInHeaders {
10 public:
11  // Don't complain about these.
12  virtual void MethodIsAbstract() = 0;
13  virtual void MethodHasNoArguments();
14  virtual void MethodHasEmptyDefaultImpl() {}
15
16  // But complain about this:
17  virtual bool ComplainAboutThis() { return true; }
18};
19
20// Complain on missing 'virtual' keyword in overrides.
21class WarnOnMissingVirtual : public VirtualMethodsInHeaders {
22 public:
23  void MethodHasNoArguments() override;
24};
25
26// Don't complain about things in a 'testing' namespace.
27namespace testing {
28struct TestStruct {};
29}  // namespace testing
30
31class VirtualMethodsInHeadersTesting : public VirtualMethodsInHeaders {
32 public:
33  // Don't complain about no virtual testing methods.
34  void MethodHasNoArguments();
35 private:
36  testing::TestStruct tester_;
37};
38
39#endif  // VIRTUAL_METHODS_H_
40