loplugin:unusedfields improve checking for fields guarded by existence check
which resulted in only a couple of real finds, mostly false+ Change-Id: I26058a29c27bff50e9526bedd54fb04589c2934d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87765 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
@@ -447,11 +447,30 @@ bool UnusedFields::TraverseIfStmt(IfStmt* ifStmt)
|
||||
{
|
||||
FieldDecl const * memberFieldDecl = nullptr;
|
||||
Expr const * cond = ifStmt->getCond()->IgnoreParenImpCasts();
|
||||
if (auto memberExpr = dyn_cast<MemberExpr>(cond))
|
||||
|
||||
if (auto memberCallExpr = dyn_cast<CXXMemberCallExpr>(cond))
|
||||
{
|
||||
if (auto cxxConvert = dyn_cast_or_null<CXXConversionDecl>(memberCallExpr->getMethodDecl()))
|
||||
{
|
||||
if (cxxConvert->getConversionType()->isBooleanType())
|
||||
if (auto memberExpr = dyn_cast<MemberExpr>(memberCallExpr->getImplicitObjectArgument()->IgnoreParenImpCasts()))
|
||||
if ((memberFieldDecl = dyn_cast<FieldDecl>(memberExpr->getMemberDecl())))
|
||||
insideConditionalCheckOfMemberSet.push_back(memberFieldDecl);
|
||||
}
|
||||
else if (auto cxxMethod = memberCallExpr->getMethodDecl())
|
||||
{
|
||||
if (cxxMethod->getIdentifier() && cxxMethod->getName() == "get" && memberCallExpr->getNumArgs()==0)
|
||||
if (auto memberExpr = dyn_cast<MemberExpr>(memberCallExpr->getImplicitObjectArgument()->IgnoreParenImpCasts()))
|
||||
if ((memberFieldDecl = dyn_cast<FieldDecl>(memberExpr->getMemberDecl())))
|
||||
insideConditionalCheckOfMemberSet.push_back(memberFieldDecl);
|
||||
}
|
||||
}
|
||||
else if (auto memberExpr = dyn_cast<MemberExpr>(cond))
|
||||
{
|
||||
if ((memberFieldDecl = dyn_cast<FieldDecl>(memberExpr->getMemberDecl())))
|
||||
insideConditionalCheckOfMemberSet.push_back(memberFieldDecl);
|
||||
}
|
||||
|
||||
bool ret = RecursiveASTVisitor::TraverseIfStmt(ifStmt);
|
||||
if (memberFieldDecl)
|
||||
insideConditionalCheckOfMemberSet.pop_back();
|
||||
|
Reference in New Issue
Block a user