Есть два способа:
Во-первых, традиционная чистая реализация as3:
Создайте класс, который регистрирует все интересующие вас классы при инициализации класса (когда он впервые используется в коде).
Примерно так:
package {
import flash.utils.getQualifiedClassName;
public class ClassesRegister {
private static const PACKAGE_RESOLVER_PATTERN : RegExp = /^(?P<packageName>[a-zA-Z_\.]+)::/;
private static const registeredClasses : Object = { };
public static function registerClass ( clazz : Class ) : void {
var packageName : String = PACKAGE_RESOLVER_PATTERN.exec( getQualifiedClassName( clazz ) ).packageName || "";
if ( !registeredClasses[ packageName ] ) {
registeredClasses[ packageName ] = [];
}
registeredClasses[ packageName ].push( clazz );
}
public static function getClassesOfPackage ( packageName : String ) : Array {
return registeredClasses[ packageName ].concat();
}
}
}
Класс, зарегистрированный при инициализации:
package {
public class SomeClass {
// Add class to register in static initializer
{
ClassesRegister.registerClass( SomeClass );
}
/**
* Class constructor
*/
public function SomeClass () {
}
}
}
И есть еще один, не проверенный мной, но очень многообещающий:
Используйте as3commons библиотеку байт-кода .
Class ByteCodeTypeCache в свойстве definitionNames
хранит все полные имена определений, которые встречались во всем проверенном байт-коде. Вы можете просто просмотреть этот список и взять то, что вам нужно. Конечно, вы должны убедиться, что все классы, которые вам понадобятся во время выполнения, скомпилированы в байт-код (вы должны где-то инициализировать эти классы или использовать директивы компилятора as3).