さらに複雑な解析用のパッチについては、Sensorの実装クラスと次の行番号のバインディングに情報を収集する必要があります。sonarqubeプラグインのツリー構築中にノード訪問者の回線番号を取得する方法
ツリー要素の行番号はどこにありますか?
java.plugin.version:3.13.1 sonar.plugin.api.version:5.2
は、新しいバージョンがより機能していることができますか?
私たちのゴール - いくつかの命名規則の詳細を含むパッケージ名とクラス名を確認するには、いくつかのパッケージをインポートしないでください。
ノードの訪問者から、すべてのツリーノードを見ることができないことは明らかです。 しかし、ここでは、addIssue()の内部メカニズムによって、ノード固有のコード場所の問題を登録できます。
/**
* First step implementation of node visitor for complex multinode check
*/
@Rule(key = "ImportClassCheck",
name = "Import classes should not contain web or form",
description = "Import classes should not contain web or form",
priority = Priority.CRITICAL,
tags = {"bug" })
public class ImportClassCheck extends IssuableSubscriptionVisitor {
@Override
public List<Kind> nodesToVisit() {
return ImmutableList.of(Tree.Kind.IMPORT, Tree.Kind.PACKAGE, Tree.Kind.CLASS);
}
@Override
public void visitNode(Tree tree) {
if (JavaCodeSensor.packages.get(context.getFileKey()) == null) {
JavaCodeSensor.packages.put(context.getFileKey(), new ImportClassCheckState());
JavaCodeSensor.packages.get(context.getFileKey()).file = context.getFile();
}
if (tree.is(Kind.PACKAGE))
JavaCodeSensor.packages.get(context.getFileKey()).packageTree = (PackageDeclarationTree) tree;
if (tree.is(Kind.CLASS))
JavaCodeSensor.packages.get(context.getFileKey()).classTree.add((ClassTree) tree);
if (tree.is(Kind.IMPORT))
JavaCodeSensor.packages.get(context.getFileKey()).importTree.add((ImportTree) tree);
}
}
その後、我々は(分析のインタフェースの実装をSensorを来る) - おっと、ここではクラス名の問題を登録するコードの行についての情報は、ファイルの構文解析せずに、クラス宣言のラインで、たとえば、ではありません再び。
/**
* First step to register an Issue
*/
@Override
public void analyse(Project project, SensorContext sensorContext) {
for (Entry<String, ImportClassCheckState> entry : packages.entrySet()) {
if (entry.getValue().isRuleFails()) {
NewIssue newIssue = sensorContext.newIssue().forRule(
RuleKey.of("java-custom-rules-template", "ImportClassCheck"));
newIssue.at(newIssue.newLocation()
.on(filesystem
.inputFile(filesystem.predicates().is(entry.getValue().file)))
/* Here is a problem to identify code of line, but needed tree nodes are exists in
ImportClassCheckState members*/
.at(new DefaultTextRange(new DefaultTextPointer(1, 0),
new DefaultTextPointer(1, 0))));
newIssue.save();
logger.info("Issue registered for file " + entry.getValue().file.getName());
}
}
}
この質問には、あまりにも多くの情報がありません。どのSonarQubeプラグインについてお話していますか?このSQプラグインのどのバージョンですか?あなたがカバーしたいユースケースをより正確に表現できますか?ありがとう –
質問の目標を追加 –