Sonar 'Исходные файлы не должны иметь повторяющихся блоков' правило не различает guish разных литералов - PullRequest
0 голосов
/ 07 августа 2020

У меня есть простая двухуровневая иерархия, состоящая из абстрактного суперкласса с именем AbstractTable и трех определенных c подклассов, Table1, Table2 и Table3.

Каждый подкласс предоставляет одну другую реализацию для трех методов абстракции . Например, класс Table1 говорит:

  @Override
  protected String getSequence() {
    return "seq_table1";
  }
  @Override
  protected String getIdColumn() {
    return "id_table1";
  }
  @Override
  protected String getTable() {
    return "table1";
  }

Table2 и Table3 имеют похожие реализации, они отвечают на разные литералы. Однако Sonar, похоже, не различает guish разные литералы, и он говорит мне, что все строки дублируются. Правило: в исходных файлах не должно быть дублированных блоков.

Почему? Я думаю, что сонар должен рассматривать разные литералы как разные строки.

Правильно ли текущее действие правила? Может ли кто-нибудь объяснить мне, как передать правило в таких ситуациях?

Спасибо за аванс.

1 Ответ

1 голос
/ 07 августа 2020

Ответ в https://github.com/SonarSource/SonarJS/issues/717 предназначен для сонара JS, но я думаю, что он также верен для сонара Java.

Что касается способа его избежать: вы можете возможно, переопределить конструктор для дочерних классов можно примерно так:

public class Table {
    private String sequence;
    private String idColumn;
    private String table;

    public Table(String sequence, String idColumn, String table) {
        this.sequence = sequence;
        this.idColumn = idColumn;
        this.table = table;
    }

    //getters and setters if needed
}

public class Table1 {
    
    public Table1() {
        super("seq_table1", "id_table1", "table1");
    }
} 
...