FlashDevelop中的Flex元数据编译器扩展教程

时间:2012-09-28 18:02:11

标签: actionscript-3 compiler-construction metadata

在过去的两个小时里,我一直在谷歌上寻找关于如何在as3中添加我自己的自定义元数据标签的一些简单说明,但没有成功。我开始认为我可能没有找到正确的术语。

问题

最终,我想要做的是在函数上添加自定义元数据,该函数将函数作为参数并确保给定函数具有正确的参数。

即。我有以下功能:

public function testCallback(callback:Function):void
{
    callback("test");
}

我想在这样调用时遇到编译器错误:

public function doNothing():void
{
    // doing nothing
}

public function someRandomFunction():void
    // ...
    testCallback(doNothing);
}

我想这样做的方法是使用这个元数据:

[Callback(paramName="callback",callbackParams="string")]
public function testCallback(callback:Function):void
{
    callback("test");
}

扩展将在编译期间运行 ,如果传递的函数不包含正确的参数,将抛出编译时错误。我使用flex2.compiler.util.ThreadLocalToolkit.logError(path,line,errorMessage) THINK ;我可以做到这一点。

搜索

我一直在谷歌搜索几个小时,找不到一个可以让我开始的简单教程。我发现了一些SDK错误报告(SDK-18718SDK-26041),unfinished forum posthow to add a custom metadata in FlexBuilder上的教程(?)(我正在使用FlashDevelop),{{3还有更多的死胡同。

帮助

到目前为止,据我所知,我将使用Java创建扩展,然后使用编译器命令将其添加到我的项目中。但是,我不知道开始需要什么。

我的两个主要问题是:
A)在Java中创建扩展需要什么? (我需要Flex Builder吗?Eclipse?我的类路径中需要哪些库?)
B)一旦我将其编译成某个东西(swc?),我如何在我的AS3项目中将它包含在FlashDevelop中?

提前致谢!

更新

我已经能够在eclipse中创建一个Java项目,添加Flex库,实现IMxmlcExtension接口,并使用正确的MANIFEST文件将项目编译到jar中。不幸的是,在FlashDevelop中添加额外的-extension = MyTest.jar没有做任何事情。

如果它有用,编译器的结果命令行是

  

mxmlc -load-config + = obj \ MyProject.xml -debug = true -incremental = true   -swf-version = 10 -extension = flex_test.jar -o obj \ MyProject634846490611881374

更新2

not-so-useful answer in StackOverflow帮助我缩小了问题的范围。似乎FlashDevelop是主要问题。创建扩展并在命令行中编译它。我在FlashDeveloper的论坛中开始了一个主题。如果您有兴趣,该主题是:Timofei Davydik

更新3

-extension compiler option是正确的,似乎问题来自FlashDevelop使用Pilippe的事实。我现在正在研究如何切换编译器。

2 个答案:

答案 0 :(得分:2)

非常有趣的问题。我做了一些研究。是的,我们可以编写mxmlc扩展并添加一些自定义功能。但处理自定义元数据确实很复杂,需要很多时间来调试和探索flex编译器源。我在博客中创建了一篇关于扩展程序的帖子,您可以查看它:

http://tim-davydik.blogspot.com/2012/09/flex-compiler-mxmlc-extensions-forcing.html

答案 1 :(得分:0)

如何使元数据标记在Action Script中运行

Timofei Davydik在他的博客中写了一个快速而简单的教程来回答我的问题,名为Flex compiler mxmlc extensions. Forcing compiler language,并帮助我找了一堆来追查问题是什么(这就是为什么我是给他赏金)。在他的帖子中,他使用Flash Builder而不是FlashDevelop,这让我们回答下一个问题:

如何使用Flash Develop对其进行编程

不幸的是,正如Phillipe指出的那样,对于AS3项目,FlashDevelop使用Flex Compiler SHell(FCSH),它不支持元数据。由于FlashDevelop是开源的,我会尝试(并且可能会失败)切换编译器以进行测试。对于任何对此感兴趣的人,我认为这个论坛帖子是一个好的开始:[ GIFT ] Try new AS3 compiler (ASC 2.0) in flashDevelop 4.x