Пользовательское правило SonarQube для определения переменных экземпляра - PullRequest
0 голосов
/ 13 сентября 2018

Я создаю собственное правило SonarQube для предупреждения об именах переменных экземпляра, которые содержат определенную строку. Похоже, что Kind.VARIABLE обнаруживает все переменные, включая локальные переменные. Есть ли способ обнаруживать и обрабатывать только переменные экземпляра?

1 Ответ

0 голосов
/ 18 сентября 2018

Почему бы не проверить Kind родителя? Для переменных экземпляра это должно быть CLASS.

Рабочее правило, запрещающее строку BLABLA в переменных экземпляра, будет выглядеть примерно так:

@Rule(key = "Banned Keyword Rule")
public class BannedKeywordRule extends IssuableSubscriptionVisitor {
    // Define the word to ban
    private static final String BANNED_KEYWORD = "BLABLA";

    @Override
    public List<Tree.Kind> nodesToVisit() {
        //  visit only the variables
        return ImmutableList.of(Tree.Kind.VARIABLE);
    }

    @Override
    public void visitNode(Tree tree) {
        VariableTree variableTree = (VariableTree) tree;
        // check if parent is CLASS aka variable is instance
        if(variableTree.parent().is(Tree.Kind.CLASS) && variableTree.simpleName().name().contains(BANNED_KEYWORD)) {
            reportIssue(variableTree, "String " + BANNED_KEYWORD + " can not be used as a instance variable.");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...