I'll try to keep this brief and clear, bear with me and please request
additional information if it would help.  We came across a situation
in a very large Flex2 application where we wanted to know the types of
items inside of collections at runtime.  I can provide more details if
desired, but in short we are doing a lot of automatic detection of
object and property types to make a "running locally on xml" version
of the product work with very little pain and very little extra
configuration.

In Java 1.5, you can specify these types like this:

List<ContactVO> foo;

In Flex2, if you have something like this:

var foo : ArrayCollection;

There is obviously no way of discovering at runtime, by reading the
class definition, what types of objects are meant to be in that
ArrayCollection.

So we took advantage of the metadata construct in Flex2 to create a
sort of annotation, which would make the Flex2 example look like this:

[Collection(type="ContactVO")]
var foo : ArrayCollection;

Now by reading the metadata of the property foo, we are able to
determine at runtime both that foo is an ArrayCollection, and that it
is meant to contain ContactVO object instances.  This doesn't have the
Java benefit of actually enforcing the fact that only ContactVOs are
in the collection, but it at least allows us to make very useful
convention-based assumptions.

This is a pretty powerful option in my opinion, unfortunately Flex2
blindly throws out all metadata it doesn't understand.  Through some
google code searching, we were able to discover an obscure compiler
option that looks like this:

-keep-as3-metadata+=Collection

This option would then make it such that Flex does not throw out
[Collection] metadata.

The problem is, this compiler option only works in DEBUG mode.  In
debug mode all of our code affected by this works beautifully and
without fault (and would probably be a very useful tool to provide to
the community).  In RUN mode, it fails miserably.  In short, Flex2 is
ignoring these extra compiler options when not in DEBUG mode.  We are
no longer able to see the [Collection] metadata.

Does anyone have any idea for working around this?  We are using ANT
for our builds, and I can guarantee that the -keep-as3-metadata
compiler option is being used identically in all cases.  It simply
gets ignored in RUN mode, and Flex2 goes back to throwing out all
metadata it doesn't understand.



Reply via email to