私はかなり長い間ASTで遊んでいて、Eclipseからこのプラグインで解析された特定のノードに関連付けられた行と列の情報を取得しようとしていました。ここに記載されているAPIによると、このメソッドgetStartPosition()
で解析されたファイルの文字の位置を特定できることがわかりましたが、これは私が望んでいたことではありません。
私はCompilationUnitクラスのAPIドキュメントgetLineNumber(int position)
にアクセスして、メソッドとgetColumnNumber(int position)
、私の理解からトリックを実行できるメソッドを見つけました。パラメータは、メソッドが返すposition
ものに他なりません。getStartPosition()
node.getStartPosition()
ここで問題となるのは、ソースファイルの行と列を取得する2つの方法が、すべてのノードで使用できるとは限らないことです。たとえば、メソッド宣言ノードにはそれらがありません!
どうすればすべてのツリーでそのような情報を取得できますか?すべてのastノードに行と列が関連付けられている他の言語のパーサーを使用できたので、これは不可能ではないことを私は知っています。実際、クラスにはハードコードされた行と列の属性が含まれているため、javaparserはjavaの1つであると思います。Eclipse JDTを見ると、私にとってはるかに堅牢で、かなり長い間そこにいるように見えたので、そのような情報を取得できないことに驚きました。
編集:繰り返しますが、問題は、ルートにのみ表示されるコンパイル単位とは異なるものから行番号を取得することです。
<type 'org.eclipse.jdt.core.dom.CompilationUnit'>
1
<type 'org.eclipse.jdt.core.dom.TypeDeclaration'>
<type 'org.eclipse.jdt.core.dom.Javadoc'>
<type 'org.eclipse.jdt.core.dom.TagElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
ありがとうございました。