読者です 読者をやめる 読者になる 読者になる

Javadoc を組み込む その 1

Eclipse の機能の 1 つに Javadoc を表示するというのがありますね。LG3D 3D API に関しても、同じように Javadoc を表示したいのすね。実際は Project Looking GlassJavadoc はかなり貧弱なので、表示してもあまり意味はないのですが、今後充実してくるでしょう。

それはそれでいいのですが、困ったのはどこを調べればいいかが分からないところ。ダメジャン ^^;;

だいたい、普通のプロジェクトでも Javadoc を追加するにはどうすればいいか知らないのですから、話にもなりません。調べてみたら、JAR 単位で Javadoc を追加できるんですね。JAR ファイルのプロパティで設定できました。

これが分かっただけでも、後はずいぶん調べやすくなります。

プロジェクトの外部ライブラリの JAR ファイルのプロパティということは、IJavaProject インタフェースに関連するのではと予想できます。そこで、まず IJavaProject インタフェースの Javadoc を見てみたのですが、いまいちよく分かりません。

やっぱり CLASSPATH 関連なのかなぁと思ったので、IJavaProject#getRowClasspath の戻り値である IClasspathEntry インタフェースを見てみます。そうすると、なにやらにおうメソッドが... getExtraAttributes です。この戻り値が IClasspathAttribute オブジェクトの配列。

そして、IClasspathAttribute インタフェースの Javadoc を見てみると、getValue と getName というメソッドがあります。そして、定数には JAVADOC_LOCATION_ATTRIBUTE_NAME という文字が...

しかし、IClasspathAttribute インタフェースも IClasspathEntry インタフェースも setter などの更新系のメソッドがありません。ということは、IJavaProject#getRowClasspath メソッドで取得した IClasspathEntry オブジェクトを更新するということはできないということです。

IJavaProject#setRawClasspath メソッドはあるので、引数に必要な情報を保持させた IClasspathEntry オブジェクトを指定すればいいのでしょう。

現在はこの CLASSPATH の設定は LG3DProjectWizard#perfromFinish メソッドでおこなっています。該当箇所を抜き出してみると

                IClasspathEntry[] initialEntries = javaProject.getRawClasspath();
                IClasspathEntry[] entries = new IClasspathEntry[initialEntries.length + 1];
                System.arraycopy(initialEntries, 0, entries, 0, initialEntries.length);
                entries[initialEntries.length] = JavaCore.newLibraryEntry(corePath, null, null);
                javaProject.setRawClasspath(entries, monitor);

これを見ると、JavaCore#newLibraryEntry メソッドを使用して lg3d-core.jar に相当する IClasspathEntry オブジェクトを生成しています。

JavaCore クラスの Javadoc を見ると、newLibraryEntry メソッドは 2 つオーバーロードされており、一方は引数に IClasspathAttribute[] を指定できるようです。

実際にどのようにすればいいかは明日考えることにします。