【发布时间】:2012-10-09 01:04:25
【问题描述】:
在过去的 2 个小时里,我一直在谷歌搜索,寻找一些关于如何在 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");
}
扩展将在编译期间运行,如果传递的函数不包含正确的参数,将抛出编译时错误。我 THINK 通过使用 flex2.compiler.util.ThreadLocalToolkit.logError(path, line, errorMessage);我可以做到这一点。
搜索
我已经在谷歌上搜索了几个小时,但找不到可以让我入门的简单教程。我发现了一些 SDK 错误报告(SDK-18718、SDK-26041)、unfinished forum post、how to add a custom metadata in FlexBuilder 上的教程(?)(我正在使用 FlashDevelop)、not-so-useful answer in StackOverflow 以及更多死胡同。
帮助
到目前为止,据我所知,我将使用 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
Timofei Davydik 帮助我缩小了问题的范围。似乎 FlashDevelop 是主要问题。创建一个扩展并在命令行中编译它是可行的。我在 FlashDeveloper 的论坛中创建了一个主题。如果您有兴趣,该主题是:-extension compiler option
更新 3
Pilippe是正确的,看来问题出在FlashDevelop使用Flex Compiler SHell (fcsh)。我现在正在研究如何切换编译器。
【问题讨论】:
-
假设您可以编写扩展程序并生成一些代码,那会是什么?你想抛出一些自定义异常吗?但是,如果参数类型不正确的参数数量不正确,而无需任何附加代码,它将引发异常。你能描述一下处理它的想法吗?谢谢
-
@TimofeiDavydik 用我的目标更新了我的问题。
-
您能否检查它在使用 FlashDevelop 内部用于优化增量编译的 Flex Compiler SHell (FCSH) 时是否有效。
-
@Philippe 我尝试使用 fcsh 进行编译,但扩展不起作用。所以我认为你是对的,问题是 fcsh。
标签: actionscript-3 compiler-construction metadata