From f775771ab47cb5528f2a82389c170fc9bd467d27 Mon Sep 17 00:00:00 2001 From: Francesco Montorsi Date: Sat, 27 Dec 2008 13:38:40 +0000 Subject: [PATCH] implement a runtime check to test if wxEvent::Clone is implemented correctly for all wxWidgets events git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57587 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/init.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/common/init.cpp b/src/common/init.cpp index ee3847634f..5154c1afd7 100644 --- a/src/common/init.cpp +++ b/src/common/init.cpp @@ -249,6 +249,37 @@ static bool DoCommonPostInit() return false; } +#if defined(__WXDEBUG__) + // check if event classes implement Clone() correctly + // NOTE: the check is done against _all_ event classes which are linked to + // the executable currently running, which are not necessarily all + // wxWidgets event classes. + const wxClassInfo *ci = wxClassInfo::GetFirst(); + while (ci) + { + // is this class derived from wxEvent? + if (ci->IsKindOf(CLASSINFO(wxEvent)) && wxString(ci->GetClassName()) != "wxEvent") + { + if (!ci->IsDynamic()) + wxLogWarning("The event class '%s' should have a DECLARE_DYNAMIC_CLASS macro!", + ci->GetClassName()); + + // yes; test if it implements Clone() correctly + wxEvent* test = dynamic_cast(ci->CreateObject()); + wxASSERT_MSG(test, "The event class should have a DECLARE_DYNAMIC_CLASS macro!"); + + wxEvent* cloned = test->Clone(); + if (!cloned || cloned->GetClassInfo() != ci) + wxLogWarning("The event class '%s' does not correctly implements wxEvent::Clone()!", + ci->GetClassName()); + + delete test; + } + + ci = ci->GetNext(); + } +#endif + return true; } -- 2.45.2