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// Note: This is not actual windows.h but the stub file in system/windows.h
9#include <windows.h>
10
11#define CR_BEGIN_MSG_MAP_EX(theClass) virtual int f() { return 4; }
12#define BEGIN_SAFE_MSG_MAP_EX(theClass) virtual int g() { return 4; }
13
14// Should warn about virtual method usage.
15class VirtualMethodsInHeaders {
16 public:
17  // Don't complain about these.
18  virtual void MethodIsAbstract() = 0;
19  virtual void MethodHasNoArguments();
20  virtual void MethodHasEmptyDefaultImpl() {}
21
22  // But complain about this:
23  virtual bool ComplainAboutThis() { return true; }
24
25  SYSTEM_INLINE_VIRTUAL
26  CR_BEGIN_MSG_MAP_EX(Sub)
27  BEGIN_SAFE_MSG_MAP_EX(Sub)
28};
29
30// Complain on missing 'virtual' keyword in overrides.
31class WarnOnMissingVirtual : public VirtualMethodsInHeaders {
32 public:
33  void MethodHasNoArguments() override;
34};
35
36// Don't complain about things in a 'testing' namespace.
37namespace testing {
38struct TestStruct {};
39}  // namespace testing
40
41class VirtualMethodsInHeadersTesting : public VirtualMethodsInHeaders {
42 public:
43  // Don't complain about no virtual testing methods.
44  void MethodHasNoArguments();
45
46 private:
47  testing::TestStruct tester_;
48};
49
50#endif  // VIRTUAL_METHODS_H_
51