Как добавить изменение для 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 внутри это не работает).

0 ответов

Другие вопросы по тегам