カスタムコンポーネントと呼び出し元の名前の関係

例えば、以下のような配置を考えます。

┬Test.mxml
└jp─ne─sakura─hl2─Text.as

この時 Text.mxml で以下のように記述します。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()">
  <mx:Script>
    <![CDATA[
      import jp.ne.sakura.hl2.*;

      public function init():void {
        var t:Test = new Test();
        this.addChild(t);
      }
    ]]>
  </mx:Script>
</mx:Application>

Text.as の方には適当なコンポーネントが定義されているものとお考え下さい。これをコンパイルすると問題なく通るのですが…実行時にブラウザがクラッシュします。
一方で、このように記述すると問題なかったりします。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:hl2="jp.ne.sakura.hl2.*">
  <hl2:Test />
</mx:Application>

最初は原因不明だったのですが、どうやら前者は呼び出し時に Test.mxml の方を呼び出そうとしてしまう様子。その結果、自身を延々と呼び出し続けてスタックオーバーフローが起こってしまったと。
同じパッケージ内で同じ名前をつけた mxml と as ファイルが混在しているとコンパイル時に警告が出るのですが、外部から呼び出す場合はそこまで見ていないのかもしれません。


ともかく、本日のまとめ。(特に自分が作っていない)外部ライブラリなどを読み込むときは、名前の確認をきちんと行う事!