Извлечение значений переменных в пользовательском плагине SonarQube - PullRequest
0 голосов
/ 18 октября 2019

Я пишу пользовательский плагин Sonar Qube, и как часть этого плагина я должен заменить переменные фактическими значениями внутри метода, а затем продолжить анализ.

Если функция напрямую возвращает мне литерал, тогда все в порядке (см. Первый код), но если функция возвращает мне переменную-член, и эта переменная-член устанавливается каким-либо другим методом, то я не могуполучить это. (См. второй код)

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

class VariableReplacement {


void    foo2(int value) { 
    Model model = new Model();
    String tableName=model.getTableName();

    k = method("something "+ tableName);// Noncompliant


  }

class Model {

    public Model() {

    }

    public String getTableName() {
        return "sample";
    }

}

В приведенном выше коде, k = метод ("что-то"+ tableName); , я могу заменить переменную tableName на sample , которая возвращается методом getTableName () .

Но теперь у меня есть следующая ситуация, когда переменная tableName в классе Model задается методом сеттера, и я пытаюсь получить переменную с помощью метода getTableName () и он не работает

class VariableReplacement1 {


void    foo2(int value) { 
    Model model = new Model();
    model.setTableName("sample");
    String tableName=model.getTableName();

    k = method("something"+ tableName);// Noncompliant


  }

class Model {
    private String tableName;

    public Model() {

    }

    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tabName) {
        this.tableName=tabName;
    }

}

}

Хорошо, есть концепция SymbolicExecution и CFG (ControlFlowGraph), но не ясно, как решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...