最近不調だった:sコマンドを直してみた

いつの頃からはもう忘れてしまったが,IdeaVIMでexコマンドの:sを使うと,もれなくArrayOutOfBoundsExceptionが出て動かなくなってしまってた。困ったなー,しかたないなーと思いつつ,ずーっと放置してたんだけど,今日ちょっとその気になったので調べてみたら,意外とあっさり解決した。:-)


ただし,原因は結構オカルト。ArrayOutOfBoundsExceptionを送出していた犯人は,[http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/CharSequence.html#subSequence(int,%20int):title=CharSequence.subSequence(int, int)](実体はjava.nio.StringCharBuffer)なんだけど,どうゆうわけかJava5では普通に動き,Java6になるとArrayOutOfBoundsExceptionを吐く。
やらしいことに,問題のコードだけ抜き出したミニプロで再現させようとすると再現しない。なに,このオカルト。


仕方ないんで,IdeaVIM側のCharPointerクラス(com.maddyhome.idea.vim.regexp)を下記のように直してお茶を濁す

CharSequence cs2 = str.seq.subSequence(str.pointer, str.normalize(str.pointer + len));
                                  ↓
CharSequence cs2 = str.seq.toString().substring(str.pointer, str.normalize(str.pointer + len));


まー,なんというしょっぱいパッチだ。それに説明めんどくさくて本家にパッチ送れない。:-P


ps.
IdeaVIM,できたらGitHubあたりにソース移してほしいな。どーも,sf.netにあるのとplugins.intellij.netにあるのと,jarを逆コンパイルしたのとで,どれもビミョーにコードベースが違ってるようなんだよねー。HEADブランチは一体どこにあるんだ!?