はじめに(NetBeans 8.2更新版でのスクロールバグ)
NetBeans IDE 8.2の更新版および開発版では、テキストエディタ機能においてIME経由で文字を入力すると、キー操作でのスクロールができなくなるバグが発生しています。
https://netbeans.org/bugzilla/show_bug.cgi?id=269262
このバグを登録したjunich11さんのブログに、修正パッチも添付した旨書かれていました。
http://junichi11.com/?p=3620
そこで、そのパッチを自分の環境でビルドして差し替えてみようとNetBeans IDEのソースを取得し、パッチを適用してビルドしてみようと思いました。
NetBeans IDEのソースコード入手
NetBeans IDEは、それ自身がJavaで記述されています。また、コード量もとても大きく、単純にjavaのソースファイルの行数を数えると2千万行超でした。
まず、ソースコードをNetBeans IDEのリポジトリから取得します。リポジトリはmercurialで管理されているので、mercurialをインストールしてからリポジトリをクローンします。取得方法は以前に調べて次に記載しています。
NetBeans - ソフトウェアエンジニアリング - Torutk
特定の機能をビルドしたい
IME使用時、キー操作によるスクロールが出来なくなる問題の暫定パッチは、ソースファイルを検索したところ、editor.lib2フォルダにありました。これをNetBeansで開き、パッチの修正をしてビルドを実行するとエラーになってしまいました。
ant -f D:\\work\\netbeans_src\\main\\editor.lib2 -Dcontinue.after.failing.tests=true netbeans
init-tasks:
D:\work\netbeans_src\main\nbbuild\default.xml:55: taskdef class org.netbeans.nbbuild.JNLPUpdateManifestStartup cannot be found
using the classloader AntClassLoader[]
ぐぐって次のチケットにコメントされている、nbbuildプロジェクトを開きbuild.xmlを展開し、bootstrapターゲットを実行する方法を試してみます。
https://netbeans.org/bugzilla/show_bug.cgi?id=253319
プロジェクトペインで、nbbuildのbuild.xmlを展開し、bootstrapを右クリックして[ターゲット実行]をクリックします。
警告が多数でるものの実行が終了(ビルド成功)しました。
続いて、再びeditor.lib2(Editor Library 2)プロジェクトをビルドします。今度はビルド成功しました。
では、ビルドされたJARファイルを取り出します。が、editor.lib2の下にはビルド結果のJARファイルが見当たりません。editor.lib2のプロジェクト・プロパティでパッケージングを見ると、JARファイルの生成先が、nbbuild\netbeans\ide\modules\org-netbeans-modules-editor-lib2.jar となっていました。
ビルド結果のJARと差し替え
NetBeansのインストールディレクトリ下のide\modulesフォルダにあるorg-netbeans-modules-editor-lib2.jar と、今ビルドしたものとを差し替えます。差し替え後NetBeansを起動して、IMEで文字を入力後カーソルキーでスクロールさせてみます。
うぉー、たしかにスクロールされるようになりました。
要注意
最初、差し替えるJARファイルを削除した後、差し替えJARをコピーせずにうっかりNetBeansを起動してしまい、起動時にエラーとなってその後復旧することができなくなってしまいました。
アンインストールもできなくなって、手でディレクトリを消して対処しました。
別ユーザーで実行してから
最初の検証では、jarファイルの差し替え後、NetBeansの起動オプション--userdirで新規ディレクトリを指定して起動、カーソルの挙動を確認後、--userdirオプションを使わずに起動していました。
次に、別環境でjarファイルの差し替え後、--userdirを指定せずに起動したときは、カーソル挙動が変わりませんでした。
あれ?
念のため、--userdirを指定してNetBeansを起動したら、カーソル挙動が変わりました。そのあと--userdirを指定せずに起動してもカーソル挙動は変わったままとなりました。
どうやら、jarファイルを差し替えただけではだめなようです。