Flash コンパイラが外部クラスファイルをキャッシュする

Flash MX 2004 で作業をしていたら、突然、クラスファイルの更新内容が反映されなくなった。コメントアウトした関数が動いてしまったり、記述したはずの trace が表示されなかったり。最初は「実は全く別のクラスファイルを編集しているのでは」と思ったのだが、そうでもない。

また、同ファイルのコンパイルエラーは確実に検出され "一部が正確" な挙動をする。Flash の再起動と Windows の再起動を行っても直らなかったので、インストールしたまま放置状態だった Flash 8 で作業を続けました。嫌な汗がでた……。

で、家に帰って原因を調べました。既知の問題として TechNote に載っていました。

Flash TechNote : Compiler caches external class files

A system timestamp is stored in the file header. Flash uses the timestamp to determine if the file needs to be recompiled. If there is a timestamp conflict between the cached ASO files and the saved class files (AS), then the Flash compiler may not detect that the corresponding class files have been updated.

Flash コンパイラがクラスファイルをキャッシュしてくれちゃう。のはいいんだけど、そのキャッシュと更新済みファイルの、タイムスタンプの比較に失敗すると、それらが同じファイルと勘違いしてクラスファイルをコンパイルしてくれなくなる。キャッシュは、ユーザフォルダ内の
\Macromedia\Flash MX 2004\ja\Configuration\Classes\aso
に入っている。その aso フォルダごと消してしまえば解決するようだ。