異なるファイル間で構文ツリーを移動する必要があるカスタムルールを実装しようとしています。ような何か:Sonarqube:クロスファイルのカスタムJavaルール?
にClassA - >プライベートClassBのフィールド - > ClassBの - >プライベートクラスCフィールド - >クラスC ...
しかし、私はこれを行う可能性があるかどうかわからないんだけど。私はサンプルリポジトリだけでなく、書かれている既存のソナーチェックを見ましたが、ほとんどではないにせよ、ファイルスコープに制限されているようです。私はこれにアプローチする方法があるかどうか疑問に思っていましたか?
私は現在そうのような、クラスのシンボルタイプから宣言変数を取得しようとしました:
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();
}
しかし、このフィールドはnullです。私が試したすべての場合にあるようだ。カスタムソナー拡張でこのタスクにアプローチする別の方法はありますか?
ありがとうございました。
ますセマンティックAPIがあなたをここで助けることができるので、あなたが検出したいものを正確に正確にしたいかもしれません。 – benzonico
@benzonico返事をありがとう。私たちのケースでは、シリアライズを助けるルールを実装しようとしています - 他の理由ではシリアライズ可能ではないシリアライズ可能クラスのシリアライズされたクラス(つまり、IDEや既存のルールとして警告として表示されないクラス) 。たとえば、ClassAでは、ClassBとMyBeanの2つのフィールドがあります。 MyBeanにはClassDが含まれています。私たちの場合、このルールでclassAをスキャンし、classBにフラグを立て、それに違反する他のフィールド(MyBean)のスキャンを続行したいと考えています。この場合、ClassDにフラグが立てられます。 –
あなたの必要性をカバーするこのルールではありませんか? https://sonarqube.com/coding_rules#rule_key=squid%3AS1948 – benzonico