Как добавить изменение для VarDecl внутри узла Expr в правиле OCLint?
Я пишу пользовательское правило OCLint на основе AbstractASTVisitorRule
,
Правило реализует VisitExpr(Expr *node)
метод. Внутри этого метода я нахожу VarDecl
узлы и нужно добавить нарушения для некоторых из них (но не для всего Expr
).
Но, похоже, этот параметр для addViolation(...)
метод должен быть того же типа, что и в методе, который вызывает addViolation(...)
(в моем случае это Expr*
).
Поэтому я создал дополнительную функцию addViolationForVarInBlock(VarDecl *node)
что получает VardDecl*
аргумент, но это не работает. То есть:
void addViolationForVarInBlock(VarDecl *node) {
cout << "addViolationForVarInBlock";
addViolation(node, this, "Var");
}
bool VisitExpr(Expr *node) {
...
VarDecl *varDecl = iterateByCaptures->getVariable();
string varName = varDecl->getNameAsString();
if (varName == "Name") {
addViolation(node, this, "The block contains self reference."); // (1)
addViolationForVarInBlock(varDecl); // (2)
}
}
Линия (1)
добавляет нарушение в целом Expr
, но линия (2)
нет (хотя cout << "addViolationForVarInBlock"
выполняется, так кажется addViolationForVarInBlock(VarDecl *node)
функция называется, но addViolation
внутри это не работает).