AS3: Как IDE извлекают информацию о наследовании классов?
Мне интересно, как проще всего получить - в моем собственном пользовательском коде - полное дерево наследования AS3 и унаследованные члены для каждого класса:
Найдите catalog.xml для каждого SWC, затем найдите каждый соответствующий файл класса, указанный в каталоге, и проанализируйте его?
Или каким-то другим, гораздо более простым способом?
Другими словами, мне требуется полная осведомленность о цепочке наследования AS3 (все основные и пользовательские классы), включая открытые и защищенные члены, принадлежащие суперклассам, которые могут появляться в подклассах. Эта информация должна быть включена в конвертер языка, который я пишу (AS3-> некоторый другой язык).
Мне интересно как например. Это делает FlashDevelop или FlashBuilder (Eclipse). Я посмотрел на файл catalog.xml, который появляется в каждом.SWC, но хотя он дает некоторое представление о цепочке наследования, он не дает указания на то, как IDE извлекают информацию, такую как унаследованные члены, используемые в автозаполнении.
Откуда взять эту информацию? ... Принимая во внимание, что FD (например) написан на C# и так describeType
вероятно, не вариант.
2 ответа
Чтобы получить доступ к полному графу зависимостей, включая частные и внутренние API, вам придется использовать интроспекцию байт-кода - синтаксический анализ файлов классов (текста) не даст никакой информации об импортированных классах из библиотек.SWC. Посмотрите спецификацию AVM2 для получения дополнительной информации о байт-коде ActionScript.
Если вы собираетесь работать в AS3, вы можете получить доступ к информации о типе для любого класса во время выполнения, используя describeType()
, Однако его область действия ограничена (включены только открытые члены), и это сильно сказывается на производительности, поэтому вам придется реализовать какой-то механизм кэширования и, возможно, настроить ваш синтаксический анализ XML.
Если вы хотите уберечь себя от неприятностей, посмотрите как 3-коммон-отражения. Он предоставляет все вышеперечисленное, а также очень удобный API. Каждый раз, когда вы используете размышления более чем редко, я очень рекомендую это - вы сэкономите много времени и энергии, написав то, что уже написали другие;).
Кроме того, если вам нужен доступ к закрытым и внутренним членам или если вы хотите манипулировать классами во время выполнения, есть as3commons-bytecode, который работает с реальным байт-кодом загруженных классов и учитывает все виды вуду и темной магии.
Я действительно хочу избежать ссылки на программное обеспечение, но это, кажется, то, что вы ищете.
Кроме того, документация всегда выглядела очень хорошо организованной, чтобы увидеть иерархию классов.
Вы также можете получить автономную версию... где я могу скачать полную документацию по платформе AS3 flash?