« ドキュメント区画の取得 | トップページ | サンプルプラグインのインストール方法 »

2004.01.14

RuleBasedPartitionScannerはIRuleじゃだめ!

テキストエディタのドキュメントを区画分けするためのIDocumentPartitionerインタフェース。そのデフォルト実装がDefaultPartitionerクラスなのだが,実際にドキュメントを区画分けするためのルールを処理するためにはIPartitionTokenScannerインタフェースを実装したクラスが必要になる。

ただし,IPartitionTokenScannerインタフェースの実装クラスを自作するんじゃなく,通常はRuleBasedPartitionScannerクラスを使用することが多いでしょう。このRuleBasedPartitionScannerクラスはRuleBasedScannerクラスを継承しているので,区画を分けるためのIRuleインタフェースの実装クラスを作って,setRules(IRule[] rules)メソッドに渡してあげれば,ドキュメントの区画分けは完璧だぜ!と思って実行してみたら・・・Eclipseが「おまえのエディタを作るのに失敗しちゃったよ,だめね」って拒否されちゃう。。。

実はRuleBasedPartitionScannerクラスの中で,setRulesメソッドはオーバーライドされています。しかも,その処理は,
  throw new UnsupportedOperationException();
ときたもんだ!つまり,RuleBasedParitionScannerクラスはIRuleインタフェースを受け付けてくれません

その代わり,これなんだろうな~と思いながら触れないようにしていた,IPredicateRuleインタフェースの実装クラスが必要となります。つまり,setRulesメソッドの代わりにsetPredicateRules(IPredicateRule[] rules)メソッドを使用しなければなりません。

Predicate・・・述語?うーん,よくわかりません。PatternRuleクラスがIPredicateRuleインタフェースを実装しているので,MultiLineRuleクラスとかEndOfLineRuleクラスとかを使用している分には気にしなくてもよさそう。でも,自作のルールクラスを作らないといけないような場面では,IPredicateRuleインタフェースの役割をちゃんと知ってないとダメそう。

また一つ,IPredicateRuleっていう壁がきてしまいました。。。

|

« ドキュメント区画の取得 | トップページ | サンプルプラグインのインストール方法 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12631/99608

この記事へのトラックバック一覧です: RuleBasedPartitionScannerはIRuleじゃだめ!:

« ドキュメント区画の取得 | トップページ | サンプルプラグインのインストール方法 »