8

JavaソースファイルからJavaDocコメントを抽出するにはどうすればよいですか?私が望むようにそれらをフォーマットするだけでなく?

4

3 に答える 3

3

標準的なアプローチについては、Javadocツールのホームページの「ドックレット」セクションを参照してください。

ドックレット標準のドックレットはHTMLを生成し、Javadocツールに組み込まれています。Javaソフトウェアが開発した他のドックレットはここにリストされています。..

特に例-標準DocletDocletAPIのサブクラス化を参照してください。

于 2012-10-23T07:23:50.897 に答える
1

javadoc * .javaを使用してそれらを生成してから、必要に応じてstylesheet.cssを書き換えます...

于 2012-10-23T07:21:44.733 に答える
0

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()  {
   }
}
于 2014-07-04T02:16:31.827 に答える