This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<extension | |
id="AIRFlexProjectNature" | |
point="org.eclipse.core.resources.natures"> | |
<runtime> | |
<run class="net.sf.amateras.air.natures.AIRFlexProjectNature"/> | |
</runtime> | |
<builder id="net.sf.amateras.air.MXMLBuilder"/> | |
</extension> | |
<extension | |
id="MXMLBuilder" | |
point="org.eclipse.core.resources.builders"> | |
<builder hasNature="true"> | |
<run class="net.sf.amateras.air.builder.AirBuilderManager"/> | |
</builder> | |
</extension> |
こんな定義をかいてても、Natureのconfigure()で BuilderのIDを使ってICommandを作成し、IProjectDescription#setBuildSpecで設定する必要がある。
plugin.xmlで、そのNatureで使うBuilderのIDを設定しているんだから勝手に入ってくれてもいいのになぁーなんて。思って。
せめて、plugin.xmlで記述しているBuilderIDが取得できないもんか?
....コードにもIDを書かないといけないのが2重管理で面倒だし....
と思ってちょっと調べてみた。
Natureの拡張ポイントで設定されたBuilderIDは、IProjectNatureDescriptorの実装にはいってみるみたいです。
しかしながら、このインターフェースでは取得できるメソッドがなく、
org.eclipse.core.internal.resources.ProjectNatureDescriptor
という実装にキャストする必要があるみたい。internalだ。。なんか残念。
ちなみに、IProjectNatureDescriptorにはNatureの拡張ポイントで指定するrequires-natureを取得できるメソッドが用意されていて、Workspace#validateNatureSetから呼ばれています。
IProjectNatureDescriptorを取得するのは簡単で、こんな感じでとれます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
IProjectNatureDescriptor natureDescriptor = project.getWorkspace().getNatureDescriptor(NATURE_ID); | |
String[] builderIds = ((ProjectNatureDescriptor) natureDescriptor).getBuilderIds(); |
これで、Builderの設定があるIProjectNatureついて汎用的なコードが書けそうな気がする。
Natureの制約(requires-natureとかの記述)のチェックをして、Builderとして定義されているもの上記のコードを使って取得して登録してあげればOKOK?!
...internalだけど。
※追記
Natureの制約(requires-natureとかの記述)のチェックはNature#Configureではなくて、プロジェクト作成Wizardの時が正しいかも。