aInfo.fieldName = fieldDecl->getNameAsString(); // sometimes the name (if it's an anonymous thing) contains the full path of the build folder, which we don't need
size_t idx = aInfo.fieldName.find(SRCDIR); if (idx != std::string::npos)
{
aInfo.fieldName = aInfo.fieldName.replace(idx, strlen(SRCDIR), "");
}
aInfo.fieldType = fieldDecl->getType().getAsString();
void FieldCast::checkCast(const CXXNamedCastExpr* expr)
{ if (ignoreLocation(expr)) return; if (isInUnoIncludeFile(compiler.getSourceManager().getSpellingLoc(expr->getBeginLoc()))) return; auto castToType = expr->getTypeAsWritten()->getPointeeCXXRecordDecl(); if (!castToType) return; const Expr* subExpr = compat::getSubExprAsWritten(expr); const FieldDecl* fieldDecl = nullptr; if (const MemberExpr* memberExpr = dyn_cast_or_null<MemberExpr>(subExpr->IgnoreImplicit()))
{
fieldDecl = dyn_cast_or_null<FieldDecl>(memberExpr->getMemberDecl());
} elseif (const CXXMemberCallExpr* memberCallExpr
= dyn_cast_or_null<CXXMemberCallExpr>(subExpr->IgnoreImplicit()))
{ if (!memberCallExpr->getMethodDecl()->getIdentifier()
|| memberCallExpr->getMethodDecl()->getName() != "get") return; const MemberExpr* memberExpr = dyn_cast_or_null<MemberExpr>(
memberCallExpr->getImplicitObjectArgument()->IgnoreImplicit()); if (!memberExpr) return;
fieldDecl = dyn_cast_or_null<FieldDecl>(memberExpr->getMemberDecl());
} if (!fieldDecl) return; if (isInUnoIncludeFile(compiler.getSourceManager().getSpellingLoc(fieldDecl->getBeginLoc()))) return;
// ignore casting to a less specific type auto castFromType = subExpr->getType()->getPointeeCXXRecordDecl(); if (castFromType && castFromType->isDerivedFrom(castToType)) return;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.