Мы стремимся реализовать пользовательское правило, которое предполагает необходимость навигации по дереву синтаксиса в разных файлах. Что-то вроде:Sonarqube: обычное java-правило для перекрестных ссылок?
ClassA -> частного поля ClassB -> ClassB -> частного поля ClassC -> ClassC ...
Однако, я не уверен, если есть возможность сделать это , Я посмотрел на репозиторий примера, а также на существующие звуковые проверки, которые написаны, но большинство (если не все), по-видимому, ограничены областью файлов. Мне было интересно, есть ли способ приблизиться к этому?
В настоящее время я пытался извлечения объявления переменной от типа символа класса, например, так:
public void visitNode(final Tree tree) {
final ClassTree clazz = (ClassTree) tree;
final VariableTree memberField = tree.members().get(0);
final JavaSymbol memberClassSymbol = (JavaSymbol) memberField.symbol().type().symbol();
final ClassTree memberClass = memberClassSymbol.declaration();
}
Однако, это поле пустым. Кажется, в каждом случае я пробовал. Есть ли другой способ приблизиться к этой задаче с помощью специального расширения сонара?
Спасибо.
Вы может захотеть точно определить, что вы хотите обнаружить, потому что семантический API может помочь вам здесь. – benzonico
@benzonico Спасибо за ответ. В нашем случае мы пытаемся внедрить правило, помогающее с сериализованными классами, которые помечены как сериализуемые (и, следовательно, не отображаются как предупреждения в IDE или как существующие правила) в сериализуемых классах, которые на самом деле не сериализуемы по другим причинам , Так, например, в ClassA мы имеем два поля: ClassB и MyBean. MyBean содержит ClassD. В нашем случае мы хотим иметь возможность сканировать classA и флаг classB с этим правилом, а затем продолжить сканирование других полей (MyBean) для других, которые будут нарушать его. В этом случае ClassD будет помечен. –
не это правило, покрывающее вашу потребность? https://sonarqube.com/coding_rules#rule_key=squid%3AS1948 – benzonico