You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jo...@apache.org on 2014/03/23 14:09:37 UTC

[03/17] git commit: [flex-falcon] [refs/heads/maven] - changes needed to compile basictests in flex-asjs for SWF

changes needed to compile basictests in flex-asjs for SWF


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/13592ed2
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/13592ed2
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/13592ed2

Branch: refs/heads/maven
Commit: 13592ed21cb3ca24f1f33f50fdfa1c1605a3a898
Parents: c87817b
Author: Alex Harui <ah...@apache.org>
Authored: Thu Mar 20 07:24:00 2014 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Mar 20 07:24:52 2014 -0700

----------------------------------------------------------------------
 .../internal/targets/FlexAppSWFTarget.java      | 470 +++++++++++--------
 .../targets/FlexApplicationFrame1Info.java      |   7 +
 .../internal/targets/FlexLibrarySWFTarget.java  |   3 +-
 .../compiler/internal/targets/FlexTarget.java   | 134 +++---
 4 files changed, 354 insertions(+), 260 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13592ed2/compiler/src/org/apache/flex/compiler/internal/targets/FlexAppSWFTarget.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/targets/FlexAppSWFTarget.java b/compiler/src/org/apache/flex/compiler/internal/targets/FlexAppSWFTarget.java
index 8a2afeb..87976bd 100644
--- a/compiler/src/org/apache/flex/compiler/internal/targets/FlexAppSWFTarget.java
+++ b/compiler/src/org/apache/flex/compiler/internal/targets/FlexAppSWFTarget.java
@@ -748,10 +748,13 @@ public class FlexAppSWFTarget extends AppSWFTarget
         protected void createFrames(SWFTarget swfTarget, ISWF swf, ImmutableSet<ICompilationUnit> builtCompilationUnits, Set<ICompilationUnit> emittedCompilationUnits, Collection<ICompilerProblem> problems) throws InterruptedException
         {
             final FlexDelegate delegate = getDelegate();
+            final ClassDefinition rootClassDefinition =
+                getRootClassDefinition();
             frame1Info = new FlexApplicationFrame1Info(flexProject,
                                 targetSettings,
-                                getRootClassDefinition(),
+                                rootClassDefinition,
                                 delegate.getGenerateSystemManagerAndFlexInit(),
+                                delegate.isFlexInfo(rootClassDefinition),
                                 builtCompilationUnits);
             SWFFrame applicationSWFFrame = null;
             for (final SWFFrameInfo frameInfo : frameInfos)
@@ -780,8 +783,6 @@ public class FlexAppSWFTarget extends AppSWFTarget
             }
             else
             {
-                final ClassDefinition rootClassDefinition =
-                    getRootClassDefinition();
                 swf.setTopLevelClass(rootClassDefinition.getQualifiedName());
                 
                 // if we are not generating a system manager but have RSLs to load, generate
@@ -1172,7 +1173,8 @@ public class FlexAppSWFTarget extends AppSWFTarget
             if (frame1Info != null)
                 return frame1Info;
             frame1Info = new FlexApplicationFrame1Info(flexProject,
-                    targetSettings, mainApplicationClassDefinition, getGenerateSystemManagerAndFlexInit(), getBuiltCompilationUnitSet().compilationUnits);
+                    targetSettings, mainApplicationClassDefinition, getGenerateSystemManagerAndFlexInit(), 
+                    isFlexInfo((ClassDefinition)mainApplicationClassDefinition), getBuiltCompilationUnitSet().compilationUnits);
             return frame1Info;
         }
         
@@ -1203,7 +1205,8 @@ public class FlexAppSWFTarget extends AppSWFTarget
                 Set<ICompilationUnit> emittedCompilationUnits,
                 Collection<ICompilerProblem> problems) throws InterruptedException
         {
-            if (getGenerateSystemManagerAndFlexInit() || isFlexInfo((ClassDefinition)mainApplicationClassDefinition))
+            boolean isAppFlexInfo = isFlexInfo((ClassDefinition)mainApplicationClassDefinition);
+            if (getGenerateSystemManagerAndFlexInit() || isAppFlexInfo)
             {
                 try
                 {
@@ -1215,7 +1218,9 @@ public class FlexAppSWFTarget extends AppSWFTarget
                     final CSSCodeGenProblem problem = new CSSCodeGenProblem(e);
                     problems.add(problem);
                 }
-                addGeneratedFlexInitToFrame(problems, mainApplicationFrame, emittedCompilationUnits);
+                FlexRSLInfo rslInfo = getDelegate().getRSLInfo();
+                addGeneratedFlexInitToFrame(problems, mainApplicationFrame, emittedCompilationUnits, 
+                        isAppFlexInfo, frame1Info, rslInfo);
             }
             else
             {
@@ -1334,7 +1339,8 @@ public class FlexAppSWFTarget extends AppSWFTarget
          * added to the speciifed {@link SWFFrame}.
          * @throws InterruptedException
          */
-        private boolean addGeneratedFlexInitToFrame(final Collection<ICompilerProblem> problems, SWFFrame frame, Set<ICompilationUnit> emittedCompilationUnits) throws InterruptedException
+        private boolean addGeneratedFlexInitToFrame(final Collection<ICompilerProblem> problems, SWFFrame frame, Set<ICompilationUnit> emittedCompilationUnits, 
+                boolean isAppFlexInfo, FlexApplicationFrame1Info frame1Info, FlexRSLInfo rslInfo) throws InterruptedException
         {
             ABCEmitter emitter = new ABCEmitter();
             emitter.visit(ABCConstants.VERSION_ABC_MAJOR_FP10, ABCConstants.VERSION_ABC_MINOR_FP10);
@@ -1393,230 +1399,281 @@ public class FlexAppSWFTarget extends AppSWFTarget
             //        local2.registerInheritingStyle(local0);  // local2 is the style manager.
             //    }
             // }
-            MethodInfo initMethodInfo = new MethodInfo();
-            initMethodInfo.setMethodName("FlexInit init method");
-            initMethodInfo.setParamTypes(new Vector<Name>(Collections.singleton(iModuleFactoryReference.getMName())));
-            initMethodInfo.setReturnType(new Name(IASLanguageConstants.void_));
-            IMethodVisitor initMethodVisitor = emitter.visitMethod(initMethodInfo);
-            initMethodVisitor.visit();
-            MethodBodyInfo initMethodBodyInfo = new MethodBodyInfo();
-            initMethodBodyInfo.setMethodInfo(initMethodInfo);
-            IMethodBodyVisitor initMethodBodyVisitor = initMethodVisitor.visitBody(initMethodBodyInfo);
-            initMethodBodyVisitor.visit();
-            
-            // local0 = temp
-            // local1 = module factory argument
-            // local2 = style manager
-            // local3 = inherited styles array
-            InstructionList initMethod = new InstructionList();
-            
-            // Since we don't need "this", we can kill local0, we'll use it later for something else.
-            initMethod.addInstruction(ABCConstants.OP_kill, 0);
-            initMethod.addInstruction(ABCConstants.OP_finddef, childManagerReference.getMName());
-            initMethod.addInstruction(ABCConstants.OP_getlocal1);
-            initMethod.addInstruction(ABCConstants.OP_constructprop, new Object[] { childManagerReference.getMName(), 1 });
-            initMethod.addInstruction(ABCConstants.OP_pop);
-            initMethod.addInstruction(ABCConstants.OP_finddef, styleManagerImplReference.getMName());
-            initMethod.addInstruction(ABCConstants.OP_getlocal1);
-            initMethod.addInstruction(ABCConstants.OP_constructprop, new Object[] { styleManagerImplReference.getMName(), 1 });
-            initMethod.addInstruction(ABCConstants.OP_setlocal2);
-            
-            Map<String, String> effectNameToTriggerMap = new TreeMap<String, String>();
-            Map<String, Boolean> inheritingStyleMap = new TreeMap<String, Boolean>();
-            Map<ClassDefinition, String> remoteClassAliasMap =
-                new TreeMap<ClassDefinition, String>(new Comparator<ClassDefinition>()
-                {
-                    @Override
-                    public int compare(ClassDefinition o1, ClassDefinition o2)
+            if (isAppFlexInfo)
+            {
+                MethodInfo initMethodInfo = new MethodInfo();
+                initMethodInfo.setMethodName("FlexInit init method");
+                initMethodInfo.setParamTypes(new Vector<Name>(Collections.singleton(new Name("Object"))));
+                initMethodInfo.setReturnType(new Name(IASLanguageConstants.void_));
+                IMethodVisitor initMethodVisitor = emitter.visitMethod(initMethodInfo);
+                initMethodVisitor.visit();
+                MethodBodyInfo initMethodBodyInfo = new MethodBodyInfo();
+                initMethodBodyInfo.setMethodInfo(initMethodInfo);
+                IMethodBodyVisitor initMethodBodyVisitor = initMethodVisitor.visitBody(initMethodBodyInfo);
+                initMethodBodyVisitor.visit();
+                
+                // local0 = temp
+                // local1 = module factory argument
+                // local2 = style manager
+                // local3 = inherited styles array
+                InstructionList initMethod = new InstructionList();
+                initMethod.addInstruction(ABCConstants.OP_returnvoid);
+                
+                initMethodBodyVisitor.visitInstructionList(initMethod);
+                initMethodBodyVisitor.visitEnd();
+                initMethodVisitor.visitEnd();
+                
+                ITraitVisitor initMethodTraitVisitor = 
+                    classGen.getCTraitsVisitor().visitMethodTrait(ABCConstants.TRAIT_Method, new Name("init"), 0, initMethodInfo);
+                initMethodTraitVisitor.visitStart();
+                initMethodTraitVisitor.visitEnd();
+
+                codegenInfoMethod(classGen, 
+                        flexProject.getCompatibilityVersion(),
+                        getMainClassQName(),
+                        getPreloaderClassReference(),
+                        getRuntimeDPIProviderClassReference(),
+                        splashScreenImage,
+                        getRootNode(),
+                        getTargetAttributes(),
+                        flexProject.getLocales(),
+                        frame1Info,
+                        accessibleClassNames,
+                        getFlexInitClassName(),
+                        getStylesClassName(),
+                        targetSettings.getRuntimeSharedLibraries(),
+                        rslInfo,
+                        problems,
+                        isAppFlexInfo);
+                
+            }
+            else
+            {
+                MethodInfo initMethodInfo = new MethodInfo();
+                initMethodInfo.setMethodName("FlexInit init method");
+                initMethodInfo.setParamTypes(new Vector<Name>(Collections.singleton(iModuleFactoryReference.getMName())));
+                initMethodInfo.setReturnType(new Name(IASLanguageConstants.void_));
+                IMethodVisitor initMethodVisitor = emitter.visitMethod(initMethodInfo);
+                initMethodVisitor.visit();
+                MethodBodyInfo initMethodBodyInfo = new MethodBodyInfo();
+                initMethodBodyInfo.setMethodInfo(initMethodInfo);
+                IMethodBodyVisitor initMethodBodyVisitor = initMethodVisitor.visitBody(initMethodBodyInfo);
+                initMethodBodyVisitor.visit();
+                
+                // local0 = temp
+                // local1 = module factory argument
+                // local2 = style manager
+                // local3 = inherited styles array
+                InstructionList initMethod = new InstructionList();
+                
+                // Since we don't need "this", we can kill local0, we'll use it later for something else.
+                initMethod.addInstruction(ABCConstants.OP_kill, 0);
+                initMethod.addInstruction(ABCConstants.OP_finddef, childManagerReference.getMName());
+                initMethod.addInstruction(ABCConstants.OP_getlocal1);
+                initMethod.addInstruction(ABCConstants.OP_constructprop, new Object[] { childManagerReference.getMName(), 1 });
+                initMethod.addInstruction(ABCConstants.OP_pop);
+                initMethod.addInstruction(ABCConstants.OP_finddef, styleManagerImplReference.getMName());
+                initMethod.addInstruction(ABCConstants.OP_getlocal1);
+                initMethod.addInstruction(ABCConstants.OP_constructprop, new Object[] { styleManagerImplReference.getMName(), 1 });
+                initMethod.addInstruction(ABCConstants.OP_setlocal2);
+                
+                Map<String, String> effectNameToTriggerMap = new TreeMap<String, String>();
+                Map<String, Boolean> inheritingStyleMap = new TreeMap<String, Boolean>();
+                Map<ClassDefinition, String> remoteClassAliasMap =
+                    new TreeMap<ClassDefinition, String>(new Comparator<ClassDefinition>()
                     {
-                        return o1.getQualifiedName().compareTo(o2.getQualifiedName());
-                    } 
-                })
-                {
-                    private static final long serialVersionUID = 1L;
-
-                    /**
-                     *  Override so warning messages can be logged. 
-                     */
-                    @Override
-                    public String put(ClassDefinition key, String value)
+                        @Override
+                        public int compare(ClassDefinition o1, ClassDefinition o2)
+                        {
+                            return o1.getQualifiedName().compareTo(o2.getQualifiedName());
+                        } 
+                    })
                     {
-                        // check for duplicate values and log a warning if any remote 
-                        // classes try to use the same alias.
-                        if (containsValue(value))
+                        private static final long serialVersionUID = 1L;
+    
+                        /**
+                         *  Override so warning messages can be logged. 
+                         */
+                        @Override
+                        public String put(ClassDefinition key, String value)
                         {
-                           for (Map.Entry<ClassDefinition,String> entry  : entrySet())
-                           {
-                               if (value != null && value.equals(entry.getValue()))
+                            // check for duplicate values and log a warning if any remote 
+                            // classes try to use the same alias.
+                            if (containsValue(value))
+                            {
+                               for (Map.Entry<ClassDefinition,String> entry  : entrySet())
                                {
-                                   problems.add(new ClassesMappedToSameRemoteAliasProblem(key.getQualifiedName(),
-                                           entry.getKey().getQualifiedName(), value));
-                                   break;
+                                   if (value != null && value.equals(entry.getValue()))
+                                   {
+                                       problems.add(new ClassesMappedToSameRemoteAliasProblem(key.getQualifiedName(),
+                                               entry.getKey().getQualifiedName(), value));
+                                       break;
+                                   }
                                }
-                           }
+                            }
+                            return super.put(key, value);
                         }
-                        return super.put(key, value);
-                    }
-                };
-                
-            for (ICompilationUnit cu : emittedCompilationUnits)
-            {
-                Collection<IDefinition> visibleDefs = cu.getFileScopeRequest().get().getExternallyVisibleDefinitions();
-                for (IDefinition visibleDef : visibleDefs)
+                    };
+                    
+                for (ICompilationUnit cu : emittedCompilationUnits)
                 {
-                    if (visibleDef instanceof ClassDefinition)
+                    Collection<IDefinition> visibleDefs = cu.getFileScopeRequest().get().getExternallyVisibleDefinitions();
+                    for (IDefinition visibleDef : visibleDefs)
                     {
-                        ClassDefinition visibleClass = (ClassDefinition) visibleDef;
-                        IEffectDefinition[] effectDefinitions = visibleClass.getEffectDefinitions(flexProject.getWorkspace());
-                        for (IEffectDefinition effectDefinition : effectDefinitions)
-                        {
-                            // TODO create compiler problem if effect already has a trigger.
-                            effectNameToTriggerMap.put(effectDefinition.getBaseName(), effectDefinition.getEvent());
-                        }
-                        
-                        IStyleDefinition[] styleDefinitions = visibleClass.getStyleDefinitions(flexProject.getWorkspace());
-                        for (IStyleDefinition styleDefinition : styleDefinitions)
+                        if (visibleDef instanceof ClassDefinition)
                         {
-                            boolean isInheriting = styleDefinition.isInheriting();
-                            // TODO create compiler problem if style definitions conflict
-                            inheritingStyleMap.put(styleDefinition.getBaseName(), isInheriting);
+                            ClassDefinition visibleClass = (ClassDefinition) visibleDef;
+                            IEffectDefinition[] effectDefinitions = visibleClass.getEffectDefinitions(flexProject.getWorkspace());
+                            for (IEffectDefinition effectDefinition : effectDefinitions)
+                            {
+                                // TODO create compiler problem if effect already has a trigger.
+                                effectNameToTriggerMap.put(effectDefinition.getBaseName(), effectDefinition.getEvent());
+                            }
+                            
+                            IStyleDefinition[] styleDefinitions = visibleClass.getStyleDefinitions(flexProject.getWorkspace());
+                            for (IStyleDefinition styleDefinition : styleDefinitions)
+                            {
+                                boolean isInheriting = styleDefinition.isInheriting();
+                                // TODO create compiler problem if style definitions conflict
+                                inheritingStyleMap.put(styleDefinition.getBaseName(), isInheriting);
+                            }
+                            
+                            String remoteClassAlias = visibleClass.getRemoteClassAlias();
+                            if (remoteClassAlias != null)
+                                remoteClassAliasMap.put(visibleClass, remoteClassAlias);
                         }
-                        
-                        String remoteClassAlias = visibleClass.getRemoteClassAlias();
-                        if (remoteClassAlias != null)
-                            remoteClassAliasMap.put(visibleClass, remoteClassAlias);
                     }
                 }
-            }
-            
-            // register effects
-            if (!effectNameToTriggerMap.isEmpty())
-            {
-                IDefinition mxInternalDef = mxInternalReference.resolve(flexProject);
-                if (!(mxInternalDef instanceof NamespaceDefinition))
-                    return false;
-                
-                
-                IResolvedQualifiersReference registerEffectTriggerRef =
-                    ReferenceFactory.resolvedQualifierQualifiedReference(flexProject.getWorkspace(), (INamespaceDefinition)mxInternalDef, 
-                            "registerEffectTrigger");
-                Name registerEffectTriggerName = registerEffectTriggerRef.getMName();
                 
-                initMethod.addInstruction(ABCConstants.OP_getlex, effectManagerReference.getMName());
-                
-                for (Map.Entry<String, String> effectEntry : effectNameToTriggerMap.entrySet())
+                // register effects
+                if (!effectNameToTriggerMap.isEmpty())
                 {
-                    initMethod.addInstruction(ABCConstants.OP_dup);  // copy the effectManager class closure
-                    initMethod.addInstruction(ABCConstants.OP_pushstring, effectEntry.getKey());
-                    initMethod.addInstruction(ABCConstants.OP_pushstring, effectEntry.getValue());
-                    initMethod.addInstruction(ABCConstants.OP_callpropvoid, new Object[] { registerEffectTriggerName, 2 });
+                    IDefinition mxInternalDef = mxInternalReference.resolve(flexProject);
+                    if (!(mxInternalDef instanceof NamespaceDefinition))
+                        return false;
+                    
+                    
+                    IResolvedQualifiersReference registerEffectTriggerRef =
+                        ReferenceFactory.resolvedQualifierQualifiedReference(flexProject.getWorkspace(), (INamespaceDefinition)mxInternalDef, 
+                                "registerEffectTrigger");
+                    Name registerEffectTriggerName = registerEffectTriggerRef.getMName();
+                    
+                    initMethod.addInstruction(ABCConstants.OP_getlex, effectManagerReference.getMName());
+                    
+                    for (Map.Entry<String, String> effectEntry : effectNameToTriggerMap.entrySet())
+                    {
+                        initMethod.addInstruction(ABCConstants.OP_dup);  // copy the effectManager class closure
+                        initMethod.addInstruction(ABCConstants.OP_pushstring, effectEntry.getKey());
+                        initMethod.addInstruction(ABCConstants.OP_pushstring, effectEntry.getValue());
+                        initMethod.addInstruction(ABCConstants.OP_callpropvoid, new Object[] { registerEffectTriggerName, 2 });
+                    }
+                    initMethod.addInstruction(ABCConstants.OP_pop);
+                    
                 }
-                initMethod.addInstruction(ABCConstants.OP_pop);
                 
-            }
-            
-            // Initialize AccessibilityClasses. Below is example code. Each
-            // accessibility class found by the compiler will have its
-            // enableAccessibility() method called.
-            // 
-            // if (Capabilities.hasAccessibility) {
-            //    spark.accessibility.TextBaseAccImpl.enableAccessibility();
-            //    mx.accessibility.UIComponentAccProps.enableAccessibility();
-            //    spark.accessibility.ButtonBaseAccImpl.enableAccessibility();
-            // }
-            if (targetSettings.isAccessible())
-            {
-                Name capabilitiesSlotName = capabilitiesReference.getMName();
-                initMethod.addInstruction(ABCConstants.OP_findpropstrict, capabilitiesSlotName);
-                initMethod.addInstruction(ABCConstants.OP_getproperty, capabilitiesSlotName);
-                initMethod.addInstruction(ABCConstants.OP_getproperty, new Name("hasAccessibility"));
-                Label accessibilityEnd = new Label();
-                initMethod.addInstruction(ABCConstants.OP_iffalse, accessibilityEnd);
-
-                IResolvedQualifiersReference enableAccessibilityReference = ReferenceFactory.packageQualifiedReference(flexProject.getWorkspace(),
-                        "enableAccessibility");            
-                Name enableAccessibilityName = enableAccessibilityReference.getMName();
-                Object[] enableAccessibilityCallPropOperands = new Object[] { enableAccessibilityName, 0 };
-                for (String accessibilityClassName : accessibleClassNames)
+                // Initialize AccessibilityClasses. Below is example code. Each
+                // accessibility class found by the compiler will have its
+                // enableAccessibility() method called.
+                // 
+                // if (Capabilities.hasAccessibility) {
+                //    spark.accessibility.TextBaseAccImpl.enableAccessibility();
+                //    mx.accessibility.UIComponentAccProps.enableAccessibility();
+                //    spark.accessibility.ButtonBaseAccImpl.enableAccessibility();
+                // }
+                if (targetSettings.isAccessible())
                 {
-                    IResolvedQualifiersReference ref = ReferenceFactory.packageQualifiedReference(flexProject.getWorkspace(),
-                            accessibilityClassName);
-                    Name accName = ref.getMName();
-                    initMethod.addInstruction(ABCConstants.OP_getlex, accName);
-                    initMethod.addInstruction(ABCConstants.OP_callproperty, enableAccessibilityCallPropOperands);
-                    initMethod.addInstruction(ABCConstants.OP_pop);
+                    Name capabilitiesSlotName = capabilitiesReference.getMName();
+                    initMethod.addInstruction(ABCConstants.OP_findpropstrict, capabilitiesSlotName);
+                    initMethod.addInstruction(ABCConstants.OP_getproperty, capabilitiesSlotName);
+                    initMethod.addInstruction(ABCConstants.OP_getproperty, new Name("hasAccessibility"));
+                    Label accessibilityEnd = new Label();
+                    initMethod.addInstruction(ABCConstants.OP_iffalse, accessibilityEnd);
+    
+                    IResolvedQualifiersReference enableAccessibilityReference = ReferenceFactory.packageQualifiedReference(flexProject.getWorkspace(),
+                            "enableAccessibility");            
+                    Name enableAccessibilityName = enableAccessibilityReference.getMName();
+                    Object[] enableAccessibilityCallPropOperands = new Object[] { enableAccessibilityName, 0 };
+                    for (String accessibilityClassName : accessibleClassNames)
+                    {
+                        IResolvedQualifiersReference ref = ReferenceFactory.packageQualifiedReference(flexProject.getWorkspace(),
+                                accessibilityClassName);
+                        Name accName = ref.getMName();
+                        initMethod.addInstruction(ABCConstants.OP_getlex, accName);
+                        initMethod.addInstruction(ABCConstants.OP_callproperty, enableAccessibilityCallPropOperands);
+                        initMethod.addInstruction(ABCConstants.OP_pop);
+                    }
+    
+                    initMethod.labelNext(accessibilityEnd);
                 }
-
-                initMethod.labelNext(accessibilityEnd);
-            }
-            
-            // register class aliases
-            if (!remoteClassAliasMap.isEmpty())
-            {
-                Name getClassByAliasName = getClassByAliasReference.getMName();
-                Name registerClassAliasName = registerClassAliasReference.getMName();
-                Object[] getClassByAliasCallPropOperands = new Object[] { getClassByAliasName, 1 };
-                Object [] registerClassAliasCallPropOperands = new Object[] { registerClassAliasName, 2 };
-                for (Map.Entry<ClassDefinition, String> classAliasEntry : remoteClassAliasMap.entrySet())
+                
+                // register class aliases
+                if (!remoteClassAliasMap.isEmpty())
                 {
-                    Label tryLabel = new Label();
-                    initMethod.labelNext(tryLabel);
-                    initMethod.addInstruction(ABCConstants.OP_finddef, getClassByAliasName);
-                    initMethod.addInstruction(ABCConstants.OP_pushstring, classAliasEntry.getValue());
-                    initMethod.addInstruction(ABCConstants.OP_callproperty, getClassByAliasCallPropOperands);
-                    Name classMName = classAliasEntry.getKey().getMName(flexProject);
-                    initMethod.addInstruction(ABCConstants.OP_getlex, classMName);
-                    Label endTryLabel = new Label();
-                    initMethod.addInstruction(ABCConstants.OP_ifeq, endTryLabel);
-                    initMethod.addInstruction(ABCConstants.OP_finddef, registerClassAliasName);
-                    initMethod.addInstruction(ABCConstants.OP_pushstring, classAliasEntry.getValue());
-                    initMethod.addInstruction(ABCConstants.OP_getlex, classMName);
-                    initMethod.addInstruction(ABCConstants.OP_callpropvoid, registerClassAliasCallPropOperands);
-                    initMethod.labelNext(endTryLabel);
-                    Label afterCatch = new Label();
-                    initMethod.addInstruction(ABCConstants.OP_jump, afterCatch);
-                    Label catchLabel = new Label();
-                    initMethod.labelNext(catchLabel);
-                    initMethod.addInstruction(ABCConstants.OP_pop);
-                    initMethod.addInstruction(ABCConstants.OP_finddef, registerClassAliasName);
-                    initMethod.addInstruction(ABCConstants.OP_pushstring, classAliasEntry.getValue());
-                    initMethod.addInstruction(ABCConstants.OP_getlex, classMName);
-                    initMethod.addInstruction(ABCConstants.OP_callpropvoid, registerClassAliasCallPropOperands);
-                    initMethod.labelNext(afterCatch);
-                    initMethodBodyVisitor.visitException(tryLabel, endTryLabel, catchLabel, 
-                            new Name(IASLanguageConstants.Error), null);
+                    Name getClassByAliasName = getClassByAliasReference.getMName();
+                    Name registerClassAliasName = registerClassAliasReference.getMName();
+                    Object[] getClassByAliasCallPropOperands = new Object[] { getClassByAliasName, 1 };
+                    Object [] registerClassAliasCallPropOperands = new Object[] { registerClassAliasName, 2 };
+                    for (Map.Entry<ClassDefinition, String> classAliasEntry : remoteClassAliasMap.entrySet())
+                    {
+                        Label tryLabel = new Label();
+                        initMethod.labelNext(tryLabel);
+                        initMethod.addInstruction(ABCConstants.OP_finddef, getClassByAliasName);
+                        initMethod.addInstruction(ABCConstants.OP_pushstring, classAliasEntry.getValue());
+                        initMethod.addInstruction(ABCConstants.OP_callproperty, getClassByAliasCallPropOperands);
+                        Name classMName = classAliasEntry.getKey().getMName(flexProject);
+                        initMethod.addInstruction(ABCConstants.OP_getlex, classMName);
+                        Label endTryLabel = new Label();
+                        initMethod.addInstruction(ABCConstants.OP_ifeq, endTryLabel);
+                        initMethod.addInstruction(ABCConstants.OP_finddef, registerClassAliasName);
+                        initMethod.addInstruction(ABCConstants.OP_pushstring, classAliasEntry.getValue());
+                        initMethod.addInstruction(ABCConstants.OP_getlex, classMName);
+                        initMethod.addInstruction(ABCConstants.OP_callpropvoid, registerClassAliasCallPropOperands);
+                        initMethod.labelNext(endTryLabel);
+                        Label afterCatch = new Label();
+                        initMethod.addInstruction(ABCConstants.OP_jump, afterCatch);
+                        Label catchLabel = new Label();
+                        initMethod.labelNext(catchLabel);
+                        initMethod.addInstruction(ABCConstants.OP_pop);
+                        initMethod.addInstruction(ABCConstants.OP_finddef, registerClassAliasName);
+                        initMethod.addInstruction(ABCConstants.OP_pushstring, classAliasEntry.getValue());
+                        initMethod.addInstruction(ABCConstants.OP_getlex, classMName);
+                        initMethod.addInstruction(ABCConstants.OP_callpropvoid, registerClassAliasCallPropOperands);
+                        initMethod.labelNext(afterCatch);
+                        initMethodBodyVisitor.visitException(tryLabel, endTryLabel, catchLabel, 
+                                new Name(IASLanguageConstants.Error), null);
+                    }
                 }
-            }
-            
-            // register inheriting styles
-            if (!inheritingStyleMap.isEmpty())
-            {
-                initMethod.addInstruction(ABCConstants.OP_getlex, stylesClassName);
-                int count = 0;
-                for (Map.Entry<String, Boolean> styleEntry : inheritingStyleMap.entrySet())
+                
+                // register inheriting styles
+                if (!inheritingStyleMap.isEmpty())
                 {
-                    if (styleEntry.getValue().booleanValue())
+                    initMethod.addInstruction(ABCConstants.OP_getlex, stylesClassName);
+                    int count = 0;
+                    for (Map.Entry<String, Boolean> styleEntry : inheritingStyleMap.entrySet())
                     {
-                        ++count;
-                        initMethod.addInstruction(ABCConstants.OP_pushstring, styleEntry.getKey());
+                        if (styleEntry.getValue().booleanValue())
+                        {
+                            ++count;
+                            initMethod.addInstruction(ABCConstants.OP_pushstring, styleEntry.getKey());
+                        }
                     }
+                    
+                    initMethod.addInstruction(ABCConstants.OP_newarray, count);
+                    initMethod.addInstruction(ABCConstants.OP_setproperty, new Name("inheritingStyles"));
+    
                 }
+    
+                initMethod.addInstruction(ABCConstants.OP_returnvoid);
                 
-                initMethod.addInstruction(ABCConstants.OP_newarray, count);
-                initMethod.addInstruction(ABCConstants.OP_setproperty, new Name("inheritingStyles"));
-
+                initMethodBodyVisitor.visitInstructionList(initMethod);
+                initMethodBodyVisitor.visitEnd();
+                initMethodVisitor.visitEnd();
+                
+                ITraitVisitor initMethodTraitVisitor = 
+                    classGen.getCTraitsVisitor().visitMethodTrait(ABCConstants.TRAIT_Method, new Name("init"), 0, initMethodInfo);
+                initMethodTraitVisitor.visitStart();
+                initMethodTraitVisitor.visitEnd();
             }
-
-            initMethod.addInstruction(ABCConstants.OP_returnvoid);
-            
-            initMethodBodyVisitor.visitInstructionList(initMethod);
-            initMethodBodyVisitor.visitEnd();
-            initMethodVisitor.visitEnd();
-            
-            ITraitVisitor initMethodTraitVisitor = 
-                classGen.getCTraitsVisitor().visitMethodTrait(ABCConstants.TRAIT_Method, new Name("init"), 0, initMethodInfo);
-            initMethodTraitVisitor.visitStart();
-            initMethodTraitVisitor.visitEnd();
             classGen.finishScript();
             
             DoABCTag doABC = new DoABCTag();
@@ -1753,7 +1810,8 @@ public class FlexAppSWFTarget extends AppSWFTarget
                     getStylesClassName(),
                     targetSettings.getRuntimeSharedLibraries(),
                     rslInfo,
-                    problemCollection);
+                    problemCollection,
+                    false);
             
             classGen.finishScript();
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13592ed2/compiler/src/org/apache/flex/compiler/internal/targets/FlexApplicationFrame1Info.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/targets/FlexApplicationFrame1Info.java b/compiler/src/org/apache/flex/compiler/internal/targets/FlexApplicationFrame1Info.java
index 382298e..792e3fd 100644
--- a/compiler/src/org/apache/flex/compiler/internal/targets/FlexApplicationFrame1Info.java
+++ b/compiler/src/org/apache/flex/compiler/internal/targets/FlexApplicationFrame1Info.java
@@ -57,12 +57,14 @@ final class FlexApplicationFrame1Info extends FlexFrame1Info
             ITargetSettings targetSettings,
             IClassDefinition mainApplicationClassDefinition,
             boolean generateSystemManagerAndFlexInit,
+            boolean isFlexInfo,
             ImmutableSet<ICompilationUnit> builtCompilationUnits) throws InterruptedException
     {
         super(flexProject);
         this.targetSettings = targetSettings;
         this.mainApplicationClassDefinition = mainApplicationClassDefinition;
         this.generateSystemManagerAndFlexInit = generateSystemManagerAndFlexInit;
+        this.isFlexInfo = isFlexInfo;
         
         // sorted set of mixin classes
         mixinClassNames = new TreeSet<String>();
@@ -77,6 +79,7 @@ final class FlexApplicationFrame1Info extends FlexFrame1Info
     private final ITargetSettings targetSettings;
     private final IClassDefinition mainApplicationClassDefinition;
     private final boolean generateSystemManagerAndFlexInit;
+    private final boolean isFlexInfo;
     private final ApplicationAndModuleDefinitions appAndModuleDefs;
     
     /**
@@ -107,6 +110,10 @@ final class FlexApplicationFrame1Info extends FlexFrame1Info
             collectContributingSWCs(contributingSWCs, cu);
             checkForCompiledAsAComponentProblem(appAndModuleDefs, problems, cu);
         }
+        else if (isFlexInfo)
+        {
+            collectMixinMetaData(mixinClassNames, cu);            
+        }
     }
     
     /**

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13592ed2/compiler/src/org/apache/flex/compiler/internal/targets/FlexLibrarySWFTarget.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/targets/FlexLibrarySWFTarget.java b/compiler/src/org/apache/flex/compiler/internal/targets/FlexLibrarySWFTarget.java
index 2dfb8a1..2f9a996 100644
--- a/compiler/src/org/apache/flex/compiler/internal/targets/FlexLibrarySWFTarget.java
+++ b/compiler/src/org/apache/flex/compiler/internal/targets/FlexLibrarySWFTarget.java
@@ -460,7 +460,8 @@ public final class FlexLibrarySWFTarget extends LibrarySWFTarget
                     null, // styles class name
                     null, // rsls
                     null, // rslinof
-                    problemCollection);
+                    problemCollection,
+                    false);
             
         }
         

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13592ed2/compiler/src/org/apache/flex/compiler/internal/targets/FlexTarget.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/targets/FlexTarget.java b/compiler/src/org/apache/flex/compiler/internal/targets/FlexTarget.java
index f9a9e60..52348fb 100644
--- a/compiler/src/org/apache/flex/compiler/internal/targets/FlexTarget.java
+++ b/compiler/src/org/apache/flex/compiler/internal/targets/FlexTarget.java
@@ -270,14 +270,25 @@ public abstract class FlexTarget
             String stylesClassName,
             List<String> rsls,
             FlexRSLInfo rslInfo,
-            Collection<ICompilerProblem> problemCollection) 
+            Collection<ICompilerProblem> problemCollection,
+            boolean isAppFlexInfo) 
             throws InterruptedException
     {
         IResolvedQualifiersReference applicationDomainRef = ReferenceFactory.packageQualifiedReference(flexProject.getWorkspace(),
                 IASLanguageConstants.ApplicationDomain);
-        NamespaceDefinition.IPrivateNamespaceDefinition privateNSDef = NamespaceDefinition.createPrivateNamespaceDefinition("");
-        IResolvedQualifiersReference infoSlotReference = ReferenceFactory.resolvedQualifierQualifiedReference(flexProject.getWorkspace(),
-                privateNSDef, "info");
+        IResolvedQualifiersReference infoSlotReference;
+        if (isAppFlexInfo)
+        {
+            NamespaceDefinition.IStaticProtectedNamespaceDefinition staticNSDef = NamespaceDefinition.createStaticProtectedNamespaceDefinition("");
+            infoSlotReference = ReferenceFactory.resolvedQualifierQualifiedReference(flexProject.getWorkspace(),
+                    staticNSDef, "_info");            
+        }
+        else
+        {
+            NamespaceDefinition.IPrivateNamespaceDefinition privateNSDef = NamespaceDefinition.createPrivateNamespaceDefinition("");
+            infoSlotReference = ReferenceFactory.resolvedQualifierQualifiedReference(flexProject.getWorkspace(),
+                    privateNSDef, "info");
+        }
         Name infoSlotName = infoSlotReference.getMName();
 
         InstructionList info = new InstructionList();
@@ -332,53 +343,56 @@ public abstract class FlexTarget
             infoEntries++;
         }
 
-        // preloader:
-        if (preloaderReference != null)
+        if (!isAppFlexInfo)
         {
-            info.addInstruction(ABCConstants.OP_pushstring, ATTRIBUTE_PRELOADER);
-            info.addInstruction(ABCConstants.OP_getlex, preloaderReference.getMName());
-            infoEntries++;            
-        }
-        
-        // runtimeDPIProvider:
-        if (runtimeDPIProviderReference != null)
-        {
-            info.addInstruction(ABCConstants.OP_pushstring, ATTRIBUTE_RUNTIME_DPI_PROVIDER);
-            info.addInstruction(ABCConstants.OP_getlex, runtimeDPIProviderReference.getMName());
-            infoEntries++;            
-        }
-        
-        // splashScreenImage:
-        if (splashScreen.generatedEmbedClassReference != null)
-        {
-            info.addInstruction(ABCConstants.OP_pushstring, ATTRIBUTE_SPLASH_SCREEN_IMAGE);
-            info.addInstruction(ABCConstants.OP_getlex, splashScreen.generatedEmbedClassReference.getMName());
-            infoEntries++;            
+            // preloader:
+            if (preloaderReference != null)
+            {
+                info.addInstruction(ABCConstants.OP_pushstring, ATTRIBUTE_PRELOADER);
+                info.addInstruction(ABCConstants.OP_getlex, preloaderReference.getMName());
+                infoEntries++;            
+            }
+            
+            // runtimeDPIProvider:
+            if (runtimeDPIProviderReference != null)
+            {
+                info.addInstruction(ABCConstants.OP_pushstring, ATTRIBUTE_RUNTIME_DPI_PROVIDER);
+                info.addInstruction(ABCConstants.OP_getlex, runtimeDPIProviderReference.getMName());
+                infoEntries++;            
+            }
+            
+            // splashScreenImage:
+            if (splashScreen.generatedEmbedClassReference != null)
+            {
+                info.addInstruction(ABCConstants.OP_pushstring, ATTRIBUTE_SPLASH_SCREEN_IMAGE);
+                info.addInstruction(ABCConstants.OP_getlex, splashScreen.generatedEmbedClassReference.getMName());
+                infoEntries++;            
+            }
+            
+            // Add various root node attributes:
+            infoEntries += codegenRootNodeAttributes(targetAttributes, info, rootNode, problemCollection);
+            
+            // compiledLocales:
+            if (compiledLocales != null)
+            {
+                info.addInstruction(ABCConstants.OP_pushstring, "compiledLocales");
+                for(String locale : compiledLocales)
+                    info.addInstruction(ABCConstants.OP_pushstring, locale);
+                info.addInstruction(ABCConstants.OP_newarray, compiledLocales.size());
+                infoEntries++;            
+            }
+    
+            // compiledResourceBundleNames:
+            if (!frame1Info.compiledResourceBundleNames.isEmpty())
+            {
+                info.addInstruction(ABCConstants.OP_pushstring, "compiledResourceBundleNames");
+                for(String bundleName : frame1Info.compiledResourceBundleNames)
+                    info.addInstruction(ABCConstants.OP_pushstring, bundleName);
+                info.addInstruction(ABCConstants.OP_newarray, frame1Info.compiledResourceBundleNames.size());
+                infoEntries++;            
+            }
         }
         
-        // Add various root node attributes:
-        infoEntries += codegenRootNodeAttributes(targetAttributes, info, rootNode, problemCollection);
-        
-        // compiledLocales:
-        if (compiledLocales != null)
-        {
-            info.addInstruction(ABCConstants.OP_pushstring, "compiledLocales");
-            for(String locale : compiledLocales)
-                info.addInstruction(ABCConstants.OP_pushstring, locale);
-            info.addInstruction(ABCConstants.OP_newarray, compiledLocales.size());
-            infoEntries++;            
-        }
-
-        // compiledResourceBundleNames:
-        if (!frame1Info.compiledResourceBundleNames.isEmpty())
-        {
-            info.addInstruction(ABCConstants.OP_pushstring, "compiledResourceBundleNames");
-            for(String bundleName : frame1Info.compiledResourceBundleNames)
-                info.addInstruction(ABCConstants.OP_pushstring, bundleName);
-            info.addInstruction(ABCConstants.OP_newarray, frame1Info.compiledResourceBundleNames.size());
-            infoEntries++;            
-        }
-               
         // styleDataClassName
         if (stylesClassName != null)
         {
@@ -461,12 +475,26 @@ public abstract class FlexTarget
         info.addInstruction(ABCConstants.OP_setproperty, infoSlotName);
         info.labelNext(infoL1);
         info.addInstruction(ABCConstants.OP_returnvalue);
-        classGen.addITraitsMethod(new Name("info"), Collections.<Name> emptyList(), 
-                new Name("Object"), Collections.emptyList(), false, true, true, info);
 
-        ITraitsVisitor itraitsVisitor = classGen.getITraitsVisitor();
-        ITraitVisitor infoSlotVisitor = itraitsVisitor.visitSlotTrait(ABCConstants.TRAIT_Var, infoSlotName,
-                ITraitsVisitor.RUNTIME_SLOT, new Name(IASLanguageConstants.Object), LexicalScope.noInitializer);
+        ITraitsVisitor itraitsVisitor;
+        ITraitVisitor infoSlotVisitor;
+        if (isAppFlexInfo)
+        {
+            classGen.addCTraitsMethod(new Name("info"), Collections.<Name> emptyList(), 
+                new Name("Object"), Collections.emptyList(), false, info);
+            itraitsVisitor = classGen.getCTraitsVisitor();
+            infoSlotVisitor = itraitsVisitor.visitSlotTrait(ABCConstants.TRAIT_Var, infoSlotName,
+                    ITraitsVisitor.RUNTIME_SLOT, new Name(IASLanguageConstants.Object), LexicalScope.noInitializer);
+        }
+        else
+        {
+            classGen.addITraitsMethod(new Name("info"), Collections.<Name> emptyList(), 
+                    new Name("Object"), Collections.emptyList(), false, true, true, info);
+            itraitsVisitor = classGen.getITraitsVisitor();
+            infoSlotVisitor = itraitsVisitor.visitSlotTrait(ABCConstants.TRAIT_Var, infoSlotName,
+                    ITraitsVisitor.RUNTIME_SLOT, new Name(IASLanguageConstants.Object), LexicalScope.noInitializer);
+        }
+        
         infoSlotVisitor.visitStart();
         infoSlotVisitor.visitEnd();