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. 15 class VirtualMethodsInHeaders { 16 public: 17 // Don't complain about these. 18 virtual void MethodIsAbstract() = 0; 19 virtual void MethodHasNoArguments(); MethodHasEmptyDefaultImpl()20 virtual void MethodHasEmptyDefaultImpl() {} 21 22 // But complain about this: ComplainAboutThis()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. 31 class WarnOnMissingVirtual : public VirtualMethodsInHeaders { 32 public: 33 void MethodHasNoArguments() override; 34 }; 35 36 // Don't complain about things in a 'testing' namespace. 37 namespace testing { 38 struct TestStruct {}; 39 } // namespace testing 40 41 class 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