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;