2016-04-25 20 views
0

Javaパーサによって生成されたASTに対していくつかの操作を行う必要があります。私の問題はクラスの初期化サイクルの問題をチェックしたいのですか?Javaparser ASTパターンの一致

一例は、クラスの初期化順序がmark1.xとmark2.pに対して異なる値の計算を引き起こし、変えることができ、

class mark1 { 
    public static final int x = mark2.p * 5; 
    //Do some operations here 
} 

class mark2 { 
public static final int p = mark1.x + 100; 
//Do some operations here 
} 

あります。私はjavaparser ASTを使用して実装しようとしていますが、実現可能な解決策を得られませんでした。

答えて

0

JavaParserを使用すると、すべての静的フィールドと静的初期化子を簡単に取得できます。

この問題は、参照を解決する必要があることがわかります。たとえば、 "mark2.p"と "mark1.x"は他のクラスの静的フィールドを参照することを理解する必要があります。 ASTの観点からはフィールドアクセスですが、ASTとJavaParserだけではその特定のフィールドが静的であるとは言えません。これを行うには、https://github.com/ftomassetti/java-symbol-solver/のようなシンボルソルバーを使用するか、自分でロジックを構築する必要があります。たとえば、インポートを見て、mark1クラスがインポートされているか、mark1という名前のクラスがmark2と同じパッケージに存在するかどうかを確認する必要があります。 Mark1はクラスの名前であり、シンボルpのそのクラスを調べることができます。あなたはそれを見つけることができ、静的なフィールドであることに気づくでしょう。

出典:私は返信先生のための

+0

感謝をJavaParserに寄稿しています。私はこのルールを実装したいと思うhttps://www.securecoding.cert.org/confluence/display/java/DCL00-J.+Prevent+class+initialization+cycles。 javaparserを使ってASTを取得しました。私はこの脆弱性を見つけるためにパターンマッチングを行いたいと思いますが、私はここで立ち往生しました。 –

関連する問題