Я пытаюсь написать несколько пользовательских правил SONARQUBE для моего проекта.После прочтения приведенного ниже документа - https://docs.sonarqube.org/display/PLUG/Writing+Custom+Java+Rules+101 и https://github.com/SonarSource/sonar-custom-rules-examples, я создал собственное правило, подобное приведенным ниже классам -
Файл правил:
@Rule(key = "MyAssertionRule")
public class FirstSonarCustomRule extends BaseTreeVisitor implements JavaFileScanner {
private static final String DEFAULT_VALUE = "Inject";
private JavaFileScannerContext context;
/**
* Name of the annotation to avoid. Value can be set by users in Quality
* profiles. The key
*/
@RuleProperty(defaultValue = DEFAULT_VALUE, description = "Name of the annotation to avoid, without the prefix @, for instance 'Override'")
protected String name;
@Override
public void scanFile(JavaFileScannerContext context) {
this.context = context;
System.out.println(PrinterVisitor.print(context.getTree()));
scan(context.getTree());
}
@Override
public void visitMethod(MethodTree tree) {
List<StatementTree> statements = tree.block().body();
for (StatementTree statement : statements) {
System.out.println("KIND IS " + statement.kind());
if (statement.is(Kind.EXPRESSION_STATEMENT)) {
if (statement.firstToken().text().equals("Assert")) {
System.out.println("ERROR");
}
}
}
}
}
Тестовый класс:
public class FirstSonarCustomRuleTest {
@Test
public void verify() {
FirstSonarCustomRule f = new FirstSonarCustomRule();
f.name = "ASSERTION";
JavaCheckVerifier.verify("src/test/files/FirstSonarCustom.java", f);
}
}
И наконец - файл Test
:
class FirstSonarCustom {
int aField;
public void methodToUseTestNgAssertions() {
Assert.assertTrue(true);
}
}
Приведенный выше тестовый файл позже будет исходным кодом моего Проекта.Согласно документации SONAR - // Несовместимый является обязательным комментарием в моем тестовом файле.Таким образом, мой первый вопрос должен ли я добавить этот комментарий везде в моем исходном коде тоже?Если да - могу ли я избежать добавления этого комментария, потому что я не хочу добавлять это упражнение по рефакторингу повсюду.
Может кто-нибудь подсказать мне, что мне нужно сделать здесь?
Я использую SONARQUBE 6.3.