hack in emitting sub-components as inner classes.  Implementation needs 
improvement someday


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

Branch: refs/heads/master
Commit: 47852ab48748b2a4fe865351f8aade16634395c5
Parents: eb41d25
Author: Alex Harui <[email protected]>
Authored: Mon Feb 29 14:53:47 2016 -0800
Committer: Alex Harui <[email protected]>
Committed: Mon Feb 29 17:50:29 2016 -0800

----------------------------------------------------------------------
 .../compiler/internal/codegen/as/ASEmitter.java |  2 +-
 .../codegen/js/flexjs/JSFlexJSEmitter.java      |  5 ++++
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  | 25 ++++++++++++++++----
 .../codegen/mxml/jsc/MXMLJSCJSEmitter.java      |  2 +-
 4 files changed, 27 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/47852ab4/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 32e7130..107e809 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -115,7 +115,7 @@ public class ASEmitter implements IASEmitter, IEmitter
         return bufferWrite;
     }
 
-    protected void setBufferWrite(boolean value)
+    public void setBufferWrite(boolean value)
     {
         bufferWrite = value;
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/47852ab4/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index f3fd8b6..72a59f1 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -52,6 +52,7 @@ import 
org.apache.flex.compiler.internal.codegen.js.jx.PackageHeaderEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.SelfReferenceEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.VarDeclarationEmitter;
+import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSEmitter;
 import org.apache.flex.compiler.internal.projects.FlexJSProject;
 import org.apache.flex.compiler.internal.projects.FlexProject;
 import org.apache.flex.compiler.internal.tree.as.BinaryOperatorAsNode;
@@ -327,8 +328,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter 
implements IJSFlexJSEmitter
         return formatQualifiedName(name, false);
     }
 
+    public MXMLFlexJSEmitter mxmlEmitter = null;
+    
     public String formatQualifiedName(String name, boolean isDoc)
     {
+       if (mxmlEmitter != null)
+               name = mxmlEmitter.formatQualifiedName(name);
         /*
         if (name.contains("goog.") || name.startsWith("Vector."))
             return name;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/47852ab4/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 d8d99ea..dd89f6b 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
@@ -116,6 +116,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
     private ArrayList<MXMLScriptSpecifier> scripts;
     //private ArrayList<MXMLStyleSpecifier> styles;
     private IClassDefinition classDefinition;
+    private IClassDefinition documentDefinition;
     private ArrayList<String> usedNames = new ArrayList<String>();
     private ArrayList<IMXMLMetadataNode> metadataNodes = new 
ArrayList<IMXMLMetadataNode>();
     
@@ -228,6 +229,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
         // visit MXML
         IClassDefinition cdef = node.getClassDefinition();
         classDefinition = cdef;
+        documentDefinition = cdef;
         
         // TODO (mschmalle) will remove this cast as more things get abstracted
         JSFlexJSEmitter fjs = (JSFlexJSEmitter) ((IMXMLBlockWalker) 
getMXMLWalker())
@@ -246,9 +248,6 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
 
         emitHeader(node);
 
-        write(subDocuments.toString());
-        writeNewline();
-
         emitClassDeclStart(cname, node.getBaseClassName(), false);
 
         emitComplexInitializers(node);
@@ -259,6 +258,9 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
 
         emitMetaData(cdef);
 
+        write(subDocuments.toString());
+        writeNewline();
+
         emitScripts();
 
         fjs.getBindableEmitter().emit(cdef);
@@ -318,7 +320,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
         IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
                 .getASEmitter();
         ((JSFlexJSEmitter) asEmitter).getModel().pushClass(cdef);
-
+        
         IASNode classNode = node.getContainedClassDefinitionNode();
         // visit tags
         final int len = classNode.getChildCount();
@@ -329,6 +331,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
 
         String cname = cdef.getQualifiedName();
         subDocumentNames.add(cname);
+        ((JSFlexJSEmitter) asEmitter).mxmlEmitter = this;
         String baseClassName = cdef.getBaseClassAsDisplayString();
 
         emitClassDeclStart(cname, baseClassName, false);
@@ -366,6 +369,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
         inMXMLContent = oldInMXMLContent;
         classDefinition = oldClassDef;
         ((JSFlexJSEmitter) asEmitter).getModel().popClass();
+        ((JSFlexJSEmitter) asEmitter).mxmlEmitter = null;
 
     }
 
@@ -1929,6 +1933,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
         MXMLDescriptorSpecifier ps = getCurrentDescriptor("ps");
         ps.value = "new " + 
formatQualifiedName("org.apache.flex.core.ClassFactory") + "(";
 
+        ps.value += formatQualifiedName(documentDefinition.getQualifiedName()) 
+ ".";
         ps.value += formatQualifiedName(node.getName());
         ps.value += ")";
         
@@ -1939,6 +1944,14 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
         setBufferWrite(false);
     }
 
+    @Override
+    protected void setBufferWrite(boolean value)
+    {
+       super.setBufferWrite(value);
+        IASEmitter asEmitter = ((IMXMLBlockWalker) 
getMXMLWalker()).getASEmitter();
+        ((JSFlexJSEmitter)asEmitter).setBufferWrite(value);
+    }
+    
     
//--------------------------------------------------------------------------
     //    JS output
     
//--------------------------------------------------------------------------
@@ -2146,7 +2159,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
         }
     }
 
-    protected String formatQualifiedName(String name)
+    public String formatQualifiedName(String name)
     {
        return formatQualifiedName(name, true);
     }
@@ -2158,6 +2171,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
                return name;
        name = name.replaceAll("\\.", "_");
        */
+       if (subDocumentNames.contains(name))
+               return documentDefinition.getQualifiedName() + "." + name;
                if (useName && !usedNames.contains(name))
                        usedNames.add(name);
        return name;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/47852ab4/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/jsc/MXMLJSCJSEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/jsc/MXMLJSCJSEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/jsc/MXMLJSCJSEmitter.java
index 184158b..088ee62 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/jsc/MXMLJSCJSEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/jsc/MXMLJSCJSEmitter.java
@@ -38,7 +38,7 @@ public class MXMLJSCJSEmitter extends MXMLFlexJSEmitter 
implements
        }
 
        @Override
-       protected String formatQualifiedName(String name)
+       public String formatQualifiedName(String name)
     {
        return name;
     }

Reply via email to