You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/11/11 21:57:02 UTC

[2/2] git commit: [flex-falcon] [refs/heads/develop] - fix deferred state-dependent instance instantiation

fix deferred state-dependent instance instantiation


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

Branch: refs/heads/develop
Commit: 4c07f5e89a87a2ad1f6675573aee3ab125805b59
Parents: 8c08503
Author: Alex Harui <ah...@apache.org>
Authored: Tue Nov 11 11:27:14 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Tue Nov 11 11:27:14 2014 -0800

----------------------------------------------------------------------
 .../mxml/flexjs/MXMLDescriptorSpecifier.java    | 11 +++++
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  | 51 +++++++++++++++++---
 2 files changed, 54 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4c07f5e8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
index ca24ac9..cb98542 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
@@ -302,4 +302,15 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
         write(ASEmitterTokens.SQUARE_CLOSE.getToken());
     }
 
+    public String outputStateDescriptors()
+    {
+        for (MXMLDescriptorSpecifier md : propertySpecifiers)
+        {
+            write(ASEmitterTokens.SQUARE_OPEN);
+            write(md.output(false));
+            write(ASEmitterTokens.SQUARE_CLOSE);
+            writeNewline(ASEmitterTokens.COMMA);
+        }
+        return sb.toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4c07f5e8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index e76e0c1..64d1378 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -92,6 +92,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
     private ArrayList<MXMLDescriptorSpecifier> currentPropertySpecifiers;
     private ArrayList<MXMLDescriptorSpecifier> descriptorTree;
     private MXMLDescriptorSpecifier propertiesTree;
+    private MXMLDescriptorSpecifier currentStateOverrides;
     private ArrayList<MXMLEventSpecifier> events;
     private ArrayList<MXMLDescriptorSpecifier> instances;
     private ArrayList<MXMLScriptSpecifier> scripts;
@@ -135,6 +136,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         //styles = new ArrayList<MXMLStyleSpecifier>();
 
         currentInstances = new ArrayList<MXMLDescriptorSpecifier>();
+        currentStateOverrides = new MXMLDescriptorSpecifier();
         currentPropertySpecifiers = new ArrayList<MXMLDescriptorSpecifier>();
 
         eventCounter = 0;
@@ -311,6 +313,25 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         writeNewline(" */");
         writeNewline("this.mxmldd;");
 
+        // top level is 'mxmlContent', skip it...
+        if (currentStateOverrides.propertySpecifiers.size() > 0)
+        {
+            MXMLDescriptorSpecifier root = currentStateOverrides;
+            root.isTopNode = true;
+    
+	        writeNewline("/**");
+	        writeNewline(" * @private");
+	        writeNewline(" * @type {Array}");
+	        writeNewline(" */");
+	        writeNewline("this.mxmlsd = " + ASEmitterTokens.SQUARE_OPEN.getToken());
+	        indentPush();
+	        write(root.outputStateDescriptors());
+	        write("null");
+	        write(ASEmitterTokens.SQUARE_CLOSE);
+	        indentPop();
+	        writeNewline(ASEmitterTokens.SEMICOLON);
+        }
+        
         writeNewline();
         writeNewline("/**");
         writeNewline(" * @private");
@@ -1128,23 +1149,33 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         FlexProject project = (FlexProject) getMXMLWalker().getProject();
         Name instanceOverrideName = project.getInstanceOverrideClassName();
 
-        MXMLDescriptorSpecifier addItems = new MXMLDescriptorSpecifier();
-        addItems.isProperty = false;
-        addItems.name = nameToString(instanceOverrideName);
-        addItems.parent = currentInstance;
-        currentInstance.propertySpecifiers.add(addItems);
+        MXMLDescriptorSpecifier overrideInstances = getCurrentDescriptor("so");
+        int index = overrideInstances.propertySpecifiers.size();
         MXMLDescriptorSpecifier itemsDesc = new MXMLDescriptorSpecifier();
         itemsDesc.isProperty = true;
         itemsDesc.hasArray = true;
-        itemsDesc.name = "itemsDescriptor";
-        itemsDesc.parent = addItems;
-        addItems.propertySpecifiers.add(itemsDesc);
+        itemsDesc.name = "itemsDescriptorIndex";
+        itemsDesc.parent = overrideInstances;
+        overrideInstances.propertySpecifiers.add(itemsDesc);
         boolean oldInMXMLContent = inMXMLContent;
         moveDown(false, null, itemsDesc);
         inMXMLContent = true;
         getMXMLWalker().walk(instanceNode); // instance node
         inMXMLContent = oldInMXMLContent;
         moveUp(false, false);
+
+        MXMLDescriptorSpecifier addItems = new MXMLDescriptorSpecifier();
+        addItems.isProperty = false;
+        addItems.name = nameToString(instanceOverrideName);
+        addItems.parent = currentInstance;
+        currentInstance.propertySpecifiers.add(addItems);
+        MXMLDescriptorSpecifier itemsDescIndex = new MXMLDescriptorSpecifier();
+        itemsDescIndex.isProperty = true;
+        itemsDescIndex.hasArray = true;
+        itemsDescIndex.name = "itemsDescriptorIndex";
+        itemsDescIndex.parent = addItems;
+        itemsDescIndex.value = Integer.toString(index);
+        addItems.propertySpecifiers.add(itemsDescIndex);
         
         //-----------------------------------------------------------------------------
         // Second property set: maybe set destination and propertyName
@@ -1695,6 +1726,10 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
             if (index > -1)
                 currentDescriptor = currentInstances.get(index);
         }
+        else if (type.equals("so"))
+        {
+            return currentStateOverrides;
+        }
         else
         {
             index = currentPropertySpecifiers.size() - 1;