JavaソースファイルからJavaDocコメントを抽出するにはどうすればよいですか?私が望むようにそれらをフォーマットするだけでなく?
3 に答える
標準的なアプローチについては、Javadocツールのホームページの「ドックレット」セクションを参照してください。
ドックレット標準のドックレットはHTMLを生成し、Javadocツールに組み込まれています。Javaソフトウェアが開発した他のドックレットはここにリストされています。..
特に例-標準DocletとDocletAPIのサブクラス化を参照してください。
javadoc * .javaを使用してそれらを生成してから、必要に応じてstylesheet.cssを書き換えます...
FilteredLineIterator
別の方法として、ソースファイルからすべてのJavaDoc行をスクレイプするために使用できる、と呼ばれる私が作成したクラスを検討することもできます。
(この回答は、この質問で書いたものと似ています。)
AFilteredLineIterator
は、各行が存在する「エンティティ」(単一行、ブロック、および「ステルス」ブロック)に基づいて、別のイテレーターの要素をフィルター処理(保持または抑制)する文字列イテレーターです。保持された行はオプションで変更できます。
(XBN-JavaFilteredLineIterator
の一部です。Jarsはここからダウンロードできます。)
トップとセットアップの例:
import com.github.xbn.linefilter.FilteredLineIterator;
import com.github.xbn.linefilter.KeepUnmatched;
import com.github.xbn.linefilter.Returns;
import com.github.xbn.linefilter.entity.BlockEntity;
import com.github.xbn.linefilter.entity.EntityRequired;
import com.github.xbn.linefilter.entity.KeepMatched;
import com.github.xbn.linefilter.entity.NewBlockEntityFor;
import com.github.xbn.linefilter.entity.NewStealthBlockEntityFor;
import com.github.xbn.linefilter.entity.StealthBlockEntity;
import com.github.xbn.testdev.GetFromCommandLineAtIndex;
import com.github.xbn.util.IncludeJavaDoc;
import java.util.Iterator;
/**
<P>{@code java ExtractAllJavaDocBlockTextRaw examples\com\github\xbn\examples\linefilter\JavaClassWithOneCommentAndTwoJavaDocBlocks_input.txt}</P>
**/
public class ExtractAllJavaDocBlockTextRaw {
public static final void main(String[] cmd_lineParams) {
//Example setup:
Iterator<String> rawInputLineItr = GetFromCommandLineAtIndex.fileLineIterator(
cmd_lineParams, 0,
null); //debugPath
メインセクションは以下から始まります。JavaDocブロックは、ブロックエンティティとして定義され、中央(開始行または終了行ではない)行のみが保持されます。JavaDocと「通常の」(JavaDoc以外の)複数行コメントの両方の終了行がであるため、誤った「ブロックを開く前に終了行が見つかりました」エラーを防ぐには、通常の複数行コメントの*/
ステルスブロックを宣言する必要があります。
入力の生の行イテレーター、および両方のエンティティは、フィルター処理された行イテレーターに送られます。
StealthBlockEntity javaMlcBlock = NewStealthBlockEntityFor.javaComment(
"comment", IncludeJavaDoc.NO,
null, //dbgStart (on=System.out, off=null)
null, //dbgEnd
KeepMatched.NO, EntityRequired.YES, null,
null); //dbgLineNums
BlockEntity javaDocBlock = NewBlockEntityFor.javaDocComment_Cfg(
"doccomment",
null, //dbgStart
null, //dbgEnd
EntityRequired.YES, null,
null). //dbgLineNums
keepMidsOnly().build();
FilteredLineIterator filteredItr = new FilteredLineIterator(
rawInputLineItr, Returns.KEPT, KeepUnmatched.NO,
null, null, //dbgEveryLine and its line-range
javaMlcBlock, javaDocBlock);
while(filteredItr.hasNext()) {
System.out.println(filteredItr.next());
}
}
}
出力(入力ファイルはこの回答投稿の下部にあります):
<P>The main class JavaDoc block.</P>
<P>Constructor JavaDoc block</P>
* <P>Function JavaDoc block.</P>
* <P>This function does some stuff.</P>
* <P>Lots and lots of stuff.</P>
前の空白を含め、各行からオプションのアスタリスクを削除するには、JavaDocブロックエンティティに「ミッドラインアルター」を追加します。
TextLineAlterer asteriskStripper = NewTextLineAltererFor.replacement(
Pattern.compile("[ \t]*(?:\\*[ \t]*)?(.*)"), "$1",
ReplacedInEachInput.FIRST,
null, //debug
null);
keepMidsOnly().build();
次のように変更して、変更者をブロックエンティティに追加します
midAlter(asteriskStripper).keepMidsOnly().build();
出力:
<P>The main class JavaDoc block.</P>
<P>Constructor JavaDoc block</P>
<P>Function JavaDoc block.</P>
<P>This function does some stuff.</P>
<P>Lots and lots of stuff.</P>
入力ファイル:
/*
A Java comment block.
*/
package fully.qualified.package.name;
/**
<P>The main class JavaDoc block.</P>
*/
public class StayClassy {
/**
<P>Constructor JavaDoc block</P>
*/
public StayClassy() {
//Do stuff
}
/**
* <P>Function JavaDoc block.</P>
* <P>This function does some stuff.</P>
* <P>Lots and lots of stuff.</P>
*/
public void doStuff() {
}
}