メタデータで再戦

結局Functionから直接引数やメソッド名を取得することが出来なかったため、目先を変えて
メタデータを試してみた。
とりあえず「ARGS」メタデータコンパイル時に残すように設定。
まず「metadata.xml」の名前で以下のXMLをプロジェクト直下に保存。

<?xml version="1.0"?>
<flex-config xmlns="http://www.adobe.com/2006/flex-config">
    <compiler>
        <keep-as3-metadata>
            <name>ARGS</name>
        </keep-as3-metadata>
    </compiler>
</flex-config>

次にプロジェクトのコンパイラー設定。
 -load-config+=metadata.xml
コンパイラー引数に設定。
で、以下のコードを実行

//クラス定義
package{
  public class FunctionTest{
    public var value:int;
    [ARGS(length=2)]
    public function test(arg:String,arg2:String="default"):void{
          trace(arg + value + arg2);
        }
  }
}
//実行
public function main():void { 
 var functionTest:FunctionTest = new FunctionTest();
 trace("----インスタンス");
 trace(describeType(functionTest));
 trace("----Function");
 var f:Function = functionTest.test;
 trace(describeType(f));
}

結果はこれ

----インスタンス
<type name="FunctionTest" base="Object" isDynamic="false" isFinal="false" isStatic="false">
  <extendsClass type="Object"/>
  <variable name="value" type="int"/>
  <method name="test" declaredBy="FunctionTest" returnType="void">
    <parameter index="1" type="String" optional="false"/>
    <parameter index="2" type="String" optional="true"/>
    <metadata name="ARGS">
      <arg key="length" value="2"/>
    </metadata>
  </method>
</type>
----Function
<type name="builtin.as$0::MethodClosure" base="Function" isDynamic="false" isFinal="true" isStatic="false">
  <extendsClass type="Function"/>
  <extendsClass type="Object"/>
  <accessor name="prototype" access="readwrite" type="*" declaredBy="builtin.as$0::MethodClosure"/>
  <accessor name="length" access="readonly" type="int" declaredBy="builtin.as$0::MethodClosure"/>
</type>

予想してたとはいえ、結局メタデータ取れじ。

まあ、あきらめます。メタデータが意外と簡単に使えることが分かっただけよしとしましょう・・・