【问题标题】:Flex Metadata Compiler Extension in FlashDevelop tutorialFlashDevelop 教程中的 Flex 元数据编译器扩展
【发布时间】: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-18718SDK-26041)、unfinished forum posthow 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


【解决方案1】:

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

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

【讨论】:

  • 感谢您的博文。我创建了一个 Eclipse 项目并添加了您所写的内容。然后我在 MANIFEST 文件中添加了这一行,最后进入 FlashDevelop 并在我的编译器中添加了 -extension=MyTest.jar 行。我编译了我的项目,但什么也没发生。 ://
  • @pek 好的。让我们试着找出问题所在。你能以某种方式分享你的罐子吗?
  • @pek,您使用的是什么编译器?如果您使用的是内置 FlashDevelop 编译器,则可能会出现问题。您可以尝试指向 SDK 文件夹中的原始文件吗?我在我的 flex 项目中使用 IntelliJ IDEA,但在我指向设置中的原始 mxmlc 之前它也不起作用。
  • 我尝试了所有三个:FlashDevelop 编译器、最新的 4.x SDK,甚至从 SVN 编译了一个。他们都没有工作:/
  • @pek 你所说的“什么都没发生”是什么意思?它编译时没有“hello world”消息吗?还是根本没有编译错误?
【解决方案2】:

如何使元数据标签在动作脚本中起作用

Timofei Davydik's 在他的博客中写了一个快速简单的教程来回答我的问题,命名为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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2016-07-05
    • 2014-05-06
    • 1970-01-01
    • 2019-08-31
    相关资源
    最近更新 更多