configuration エレメントには,isTest も isAbstract も無い.(3.x系)

対象読者:

次の条件を満たす,Eclipse/CDT開発者.
ついカッとなって 3.x系MBS に configuration エレメントを増やしてしまった,今は後悔している.
ここで再度カッとなってconfigureエレメントを消せば,既に存在するプロジェクトを救えない.破滅.
どうすりゃいいのよと頭を抱えている,

つまり,プラグイン開発者以外は全くハマらないはずの,どうでも良い話.
ていうか,日本語圏では,たぶん私以外にそんな人はいないと思う.

非対称性

MBSでは大抵のエレメントに isAbstract や isTest といったアトリビュートがあり,後で設定すれば隠してくれる*1


しかし,微妙に帯タスキな3.x系MBSは,ここでも(悪い意味での)期待を裏切らない.configurationエレメントには,何故か isAbstract や isTest がアトリビュートに無い.


CDT4.0は大幅にschemaが替わって私は追いきれていないのだけれど, Configuration.java を斜め読みした限りでは,どうやら isTest に相当する処理が含まれているらしい.まあ,それが真っ当な設計というものだろう.


さて,CDT3.2 ではどうやって解決するか. org.eclipse.cdt.managedbuilder.internal.core パッケージをいじるというのが正攻法. でも,これは org.eclipse.cdt.managedbuilder.core への影響はもちろんのこと,プラグインを跨いで ui にも影響する.もうCDT3.x系は更新されないとしても,自分が管理していないフィーチャーへの影響が少し心配ではある.

dirtyでquickな解法

答えは,ui側にあった.CProjectPlatformPage.java から引用.

IToolChain tc = cfgs[i].getToolChain();
// Determine if the tool-chain has 'convertToId' attribute, If so
// do not add this configuration to the list.
if (!tc.getConvertToId().equals(""))
	continue;

toolchainエレメントのconvertToIdアトリビュートに値があるとき,そのtoolchainを持っているconfigurationはNew Wizardで一覧に出てこない.
そこで,plugin.xml側を,このように記述する.

<toolChain
 id="pizza.toppers.jsp.armv4.at91sam7s.toolchain.gnu.arm.elf.exe.debug"
 convertToId="pizza.toppers.jsp.armv4.at91sam7s.toolchain.gnu.arm.elf.exe.debug"
 isToolChainSupported="jp.pizzafactory.toppers.kernels.jsp.armv4.at91sam7s.ManagedIsToolChainSupport"
 superClass="pizza.managedbuild.toolchain.gnu.arm.elf.exe.debug">

へんな副作用が出ないように,idとconvertToIdを一緒にしてみた*2

結果

既に作ってしまったプロジェクトはそのままに,New Wizardでのconfiguraion一覧には出なくなった.めでたい.

12/09加筆

…と,思ったけれども,もう一工夫必要だった.具体的な内容はトラックバックを参照.

*1:isAbstractとisTestの違いは,ヘルプ読めば判る.

*2:でも,思わぬ副作用が出ないという絶対の保証は無い.たぶん大丈夫だろうけれども