#author("2021-12-14T02:32:07+00:00","","")
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents

書きかけです!!!!!

J2SE 5.0からAnnotationが導入されました。これはソースに注釈をつけるための機能ですが、この注釈を解釈していろいろな操作((なんか検証したり、別ソース作ったり、いろいろ、、、))を行うAPT([[Annotation Processing Tool>http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/apt/GettingStarted.html]])というツール(注釈プロセッサっていってますね)もJDK 5.0と一緒に配布されています。((ちなみにJavaSE 6からはコンパイラが直接注釈を解析できるようになるみたいですね。コンパイラにオプションをつけてProcessorクラスをコンパイルするとチェックが実行されるようです。http://www.techscore.com/tech/J2SE/JavaSE6/8.html ))

さて今回はこれをEclipseプラグインで制御する方法を調べました。色々とめんどくさいです。。

稼動確認はEclipse3.3で行いました。((Eclipse 3.2系ではFactoryを設定する画面が出てこず、うまくいきませんでした。))

**やってみる [#wd8dca8a]
やってみます。Annotationは
 package nu.mine.kino.annotations;
 
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.SOURCE)
 public @interface SpringBean {
     boolean singleton() default false;
 }
みたいなモノを作ってみました。このAnnotationがされたクラスは、そのクラス名のBeanIDにしてSpringのBean定義ファイルに出力されるようにしてみます((本質じゃないんで、プロパティなどのInjectionとかはムシしてみる))。このAnnotationはjar化しておいて、後に出てくるプラグインにも、このAnnotationを使用するプロジェクトにも配置します。

これを読みこんでパースする処理は、APTのフレームワークを使用します。具体的には
-com.sun.mirror.apt.AnnotationProcessorFactory
-com.sun.mirror.apt.AnnotationProcessor

などの実装クラスを作成すればOKです。詳細は後述したいと思います。

さて、上のインタフェースの実装がもうあるとして、Eclipseのプラグインを作ってみます。プラグインは
 nu.mine.kino.plugin.aptsamples
というプロジェクトにします。

-MANIFEST.MF
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: APT Samples Plug-in
 Bundle-SymbolicName: nu.mine.kino.plugin.aptsamples;singleton:=true
 Bundle-Version: 0.0.1
 Bundle-Activator: nu.mine.kino.plugin.aptsamples.Activator
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.jdt.apt.core,
  nu.mine.kino.plugin.log4j,
  org.apache.ant,
  org.eclipse.core.resources
 Eclipse-LazyStart: true
 Bundle-ClassPath: .,
  beansanno.jar,
  lib/commons-collections.jar,
  lib/oro.jar,
  lib/xjavadoc-1.1.jar,
  lib/velocity-1.4.jar

-plugin.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.2"?>
 <plugin>
    <extension
          point="org.eclipse.jdt.apt.core.annotationProcessorFactory">
       <factories enableDefault="true">
          <factory class="nu.mine.kino.plugin.aptsamples.
                            SpringAnnotationProcessorFactory"/>
       </factories>
    </extension>
 </plugin>
 
org.eclipse.jdt.apt.core.annotationProcessorFactory拡張ポイントを使用しています。Javaプロジェクトの設定画面に「どのcom.sun.mirror.apt.AnnotationProcessorFactoryを使用するか」を設定する画面があるのですが、上の指定により、その画面にこのプラグインが表示されるようになります。具体的には各プロジェクトのプロパティの
 Java Compiler >> Annotation Processing >> Factory Path
ですね。実際の画面はこんな感じ。


#ref(pre01.png)








***関連リンク [#dca7e7c1]
-[[Introduction to Annotation Processing in Eclipse>http://www.eclipse.org/jdt/apt/introToAPT.html]]
-[[Help - Eclipse SDK>http://help.eclipse.org/stable/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/apt/overview-summary.html]]
-[[Luca Zoni - ConditionAnnotatoin>http://www.ce.unipr.it/~lzoni/conditionAnnotation.html]]




----
この記事は
#vote(おもしろかった[0],そうでもない[2])
#vote(おもしろかった[1],そうでもない[2])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS