From e6daf6bfb0c3c3e3ba03c825d778436c369f19a3 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Fri, 24 Jun 2016 17:27:18 +0200 Subject: Fix check for calls to OWeakObject::release Change-Id: I90030dee12676eb356ebe2244358052cfcd725de --- compilerplugins/clang/weakobject.cxx | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/compilerplugins/clang/weakobject.cxx b/compilerplugins/clang/weakobject.cxx index 42bdf6e16481..cac13cdcc7db 100644 --- a/compilerplugins/clang/weakobject.cxx +++ b/compilerplugins/clang/weakobject.cxx @@ -106,16 +106,23 @@ public: { // note: this is only sometimes a CXXMethodDecl FunctionDecl const*const pCalled(pCallExpr->getDirectCallee()); - if (pCalled->getName() == "release" -//this never works && pCalled == pOverridden - && (pCalled->getParent() == pOverridden->getParent() - // allow this convenient shortcut - || loplugin::TypeCheck(QualType(pMethodDecl->getParent()->getTypeForDecl(), 0)).Class("OWeakObject").Namespace("cppu") - || loplugin::TypeCheck(QualType(pMethodDecl->getParent()->getTypeForDecl(), 0)).Class("OWeakAggObject").Namespace("cppu"))) + if (pCalled->getName() == "release") { - return true; +//this never works && pCalled == pOverridden + if (pCalled->getParent() == pOverridden->getParent()) + { + return true; + } + // Allow this convenient shortcut: + auto td = dyn_cast(pCalled->getParent()); + if (td != nullptr + && (loplugin::TypeCheck(QualType(td->getTypeForDecl(), 0)).Class("OWeakObject").Namespace("cppu") + || loplugin::TypeCheck(QualType(td->getTypeForDecl(), 0)).Class("OWeakAggObject").Namespace("cppu"))) + { + return true; + } } - if (pCalled->getName() == "relase_ChildImpl") // FIXME remove this lunacy + else if (pCalled->getName() == "relase_ChildImpl") // FIXME remove this lunacy { return true; } -- cgit v1.2.3