Archive for the ‘Flash Builder 4’ Category

switch文内のコメントからimportの整理バグを発動

火曜日, 7月 12th, 2011

とあるソースを改修することになった際に
import文がなぜかメソッドの中にあったり、それを削るとエラーになったりで
意味不明のままずっと謎だった記述の発生原因がわかりました。

簡単に説明するとswitch文の中に/** */ 形式でコメントを記述し
その状態でimport の整理をすると一部のimportが削除される現象が発生します。

実際にサンプルソースで説明します。

まずはswitch文とimportを必要とするクラスを入れたソースを記述
(サンプルは、条件によって描画の色を変更する簡単なクラス)

package
{
  import flash.display.Graphics;
  import flash.display.Sprite;

  public class SwitchTest extends Sprite
  {
    public function SwitchTest()
    {
      var hoge:uint = 0;

      switch (hoge)
      {
        case 0:
          draw(this.graphics, 0xff0000);
          break;
        case 1:
          draw(this.graphics, 0xffff00);
          break;
      }
    }

    private function draw(g:Graphics, color:uint):void
    {
      g.clear();
      g.beginFill(color);
      g.drawRect(0, 0, 100, 100);
      g.endFill();
    }
  }
}

次に上記のswitch文の中に/** */の形式でコメントを記述します。

      switch (hoge)
      {
        /**
         * このコメントは危険です。
         */
        case 0:
          draw(this.graphics, 0xff0000);
          break;

この状態でimportの整理(Ctrl+Shit+O)をすると、、

package
{
  import flash.display.Sprite;

  public class SwitchTest extends Sprite
  {
    public function SwitchTest()
    {
      var hoge:uint = 0;

      switch (hoge)
      {
        /**
         * このコメントは危険です。
         */
        case 0:
          draw(this.graphics, 0xff0000);
          break;
        case 1:
          draw(this.graphics, 0xffff00);
          break;
      }
    }

    private function draw(g:Graphics, color:uint):void
    {
      g.clear();
      g.beginFill(color);
      g.drawRect(0, 0, 100, 100);
      g.endFill();
    }
  }
}

ソースからGraphicsクラスのimportが消えます!

そして、仕方なくこの状態でGraphicsクラスを定義している箇所(g:Graphics)で
コンテンツアシスト(Ctrl+Space)からGraphicsクラスを選択してimportしようとすると

package
{
  import flash.display.Sprite;

  public class SwitchTest extends Sprite
  {
    public function SwitchTest()
    {
      var hoge:uint = 0;

      switch (hoge)
      {
        /**
         * このコメントは危険です。
         */
        case 0:
          draw(this.graphics, 0xff0000);
          break;
        case 1:
          draw(this.graphics, 0xffff00);
          break;
      }
import flash.display.Graphics;

    }

    private function draw(g:Graphics, color:uint):void
    {
      g.clear();
      g.beginFill(color);
      g.drawRect(0, 0, 100, 100);
      g.endFill();
    }
  }
}

今度はGraphicsクラスのimportがメソッドの中に記述されます!!

これを発見したときはかなりの衝撃でした。

今回のサンプルでコンパイルするとエラーになってしまいますが、
エラーにならないこともあるようです。。
(実際自分が触ったソースはコンパイルとおってました。。。)

FlashBuilderのバグと言っていいとは思いますが、
メソッド内ではswitch文に限らず、クラスの説明などで使用する/** */形式での
コメントは避けるべきだと思われます。

ちなみに、
// 形式のコメントや、 /* */ 形式のコメントは問題ありませんでした。

Flash Builder4 Beta を試してみる

水曜日, 6月 10th, 2009

Flex Builder 4 Beta(コードネーム:Gumbo、旧姓:Flex Builder 4)が
Adobe Labs にアップされていましたので早速試しました。
fb4beta0

まだ触りはじめですが、
単語補完なども結構さくさく動く。
処理速度も速い気がします。
使用感は、3のころよりかなり良いです。

そこで、ちょっと嬉しい追加点をいくつか紹介します。

1. 新規クラス作成時にスーパークラスを入力する際、補完してくれる。
fb4beta1
今までは、直接入力するか、いちいち参照から探さないといけなかったので
地味に嬉しいです。
 
 
2. html-templateのデフォルトが変更されている。

Flashコンテンツのサイズを指定して、
「アプリケーションの実行」でHTMLをみると、
今まで左揃えだったコンテンツが中央揃えになっている。

ついでに、今までFlashコンテンツの読み込みに
AC_OETags.jsを使っていたのがswfobject.jsに変わっている。

swfobjectがデフォルトで入っているのは嬉しいです。
バージョンは今のところ2.1。
 
 
3. Getter/Setter を自動生成してくれる。
fb4beta3
ついにできるようになりました。
単純作業は、地味に大変なのでこれも嬉しい。
 
 
4. ASDocとの連携が強化されている。
fb4beta4_1
クラス、変数、メソッド、引数、戻り値を認識して
ASDoc のコメント欄を生成してくれる。
かなり嬉しいです。
fb4beta4_2
あと、ASDocのビューで、変数やメソッドに記述しているASDocを
見ることができます。
 
 
5. インデントを整えてくれる。

ソースの改修などの際に便利。
 
 
6. SWCの中身が確認できる。
fb4beta6
FlashDevelopなどでは以前からできたようなのですが、
今回からクラスが確認できるようになっています。
 
 
とりあえず、こんな感じですが、
まだまだ、便利な機能がありそうです。

Flex Unit テストとか気になります。