コード例 #1
0
        private void BuildSystemManager(AbcFile abc)
        {
            var superType = _compiler.ImportType(abc, "mx.managers.SystemManager");
            var flexModuleFactoryInterface = FlexTypes.GetFlexModuleFactoryInterface(abc);

            if (HasCrossDomainRsls)
            {
                // Cause the CrossDomainRSLItem class to be linked into this application.
                var crossDomainRSLItem = _compiler.ImportType(abc, "mx.core.CrossDomainRSLItem");
                Debug.Assert(crossDomainRSLItem != null);
            }

            var instance = new AbcInstance(true)
            {
                Name  = DefineSystemManagerName(abc),
                Flags = AbcClassFlags.FinalSealed,
                //ProtectedNamespace = abc.DefineProtectedNamespace(NameMxSysManager),
                Type         = _compiler.FlexAppType,
                BaseTypeName = superType.Name,
                BaseInstance = superType
            };

            instance.Interfaces.Add(flexModuleFactoryInterface.Name);

            instance.Initializer = abc.DefineMethod(
                Sig.@void(),
                code =>
            {
                code.ConstructSuper();
                code.ReturnVoid();
            });
            instance.Class.Initializer = abc.DefineEmptyMethod();

            abc.AddInstance(instance);

            _mxSystemManager = instance;

            BuildSystemManagerCreate(abc, instance);
            BuildSystemManagerInfo(abc, instance);

            abc.DefineScript(instance);
            abc.DefineEmptyScript();
        }