FlexJS MXML emitter update

The FlexJS MXML emitter now uses the new FlexJS JS and JSDoc emitters.

Signed-off-by: Erik de Bruin <[email protected]>


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

Branch: refs/heads/develop
Commit: 797b7c8112f5ab8103616f25dc380f4e59f5faa0
Parents: 38ca8a6
Author: Erik de Bruin <[email protected]>
Authored: Wed Mar 27 16:28:35 2013 +0100
Committer: Erik de Bruin <[email protected]>
Committed: Wed Mar 27 16:29:59 2013 +0100

----------------------------------------------------------------------
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java     |  128 +++------------
 .../driver/mxml/flexjs/MXMLFlexJSBackend.java      |   17 ++-
 2 files changed, 41 insertions(+), 104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/797b7c81/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 de8db43..62cf8fb 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
@@ -23,6 +23,7 @@ import java.io.FilterWriter;
 import java.util.ArrayList;
 
 import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
 import org.apache.flex.compiler.codegen.mxml.flexjs.IMXMLFlexJSEmitter;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
@@ -30,10 +31,8 @@ import 
org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.mxml.MXMLEmitter;
 import org.apache.flex.compiler.projects.ICompilerProject;
-import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
-import org.apache.flex.compiler.tree.as.IScopedNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLArrayNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLDocumentNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLEventSpecifierNode;
@@ -350,53 +349,10 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
         eventSpecifier.type = node.getEventParameterDefinition()
                 .getTypeAsDisplayString();
 
-        // XXX (erikdebruin) "not really sure" the next bit is generic code ;-)
         IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
                 .getASEmitter();
-        String originalHandler = asEmitter.stringifyNode(node.getChild(0));
 
-        StringBuilder jsFormattedHandler = new StringBuilder();
-        String[] splitOnFirstMethod = originalHandler.split("\\(");
-        if (splitOnFirstMethod[0].equals("MyModel"))
-        {
-            // MyModel(model).labelText = 'Hello World';
-            // becomes:
-            // this.model.set_labelText("Hello World");
-            String[] classPropertyAndValue = 
splitOnFirstMethod[1].split("\\)");
-            String[] propertyAndValue = classPropertyAndValue[1].split(" = ");
-
-            String className = classPropertyAndValue[0];
-            String property = propertyAndValue[0].substring(1);
-            String value = propertyAndValue[1];
-
-            jsFormattedHandler.append(ASEmitterTokens.THIS.getToken());
-            
jsFormattedHandler.append(ASEmitterTokens.MEMBER_ACCESS.getToken());
-            jsFormattedHandler.append(className);
-            
jsFormattedHandler.append(ASEmitterTokens.MEMBER_ACCESS.getToken());
-            jsFormattedHandler.append("set_");
-            jsFormattedHandler.append(property);
-            jsFormattedHandler.append(ASEmitterTokens.PAREN_OPEN.getToken());
-            jsFormattedHandler.append(value);
-            jsFormattedHandler.append(ASEmitterTokens.PAREN_CLOSE.getToken());
-        }
-        else if (splitOnFirstMethod[0].equals("dispatchEvent"))
-        {
-            // dispatchEvent(new Event('buttonClicked'));
-            // becomes:
-            // 
this.dispatchEvent(org.apache.flex.FlexGlobal.newObject(flash.events.Event, 
["buttonClicked"]));
-            String[] eventNameMain = splitOnFirstMethod[2].split("'");
-
-            jsFormattedHandler.append(ASEmitterTokens.THIS.getToken());
-            
jsFormattedHandler.append(ASEmitterTokens.MEMBER_ACCESS.getToken());
-            jsFormattedHandler.append(splitOnFirstMethod[0]);
-            jsFormattedHandler.append(ASEmitterTokens.PAREN_OPEN.getToken());
-            jsFormattedHandler
-                    
.append("org.apache.flex.FlexGlobal.newObject(flash.events.Event, [\"");
-            jsFormattedHandler.append(eventNameMain[1]);
-            jsFormattedHandler.append("\"])");
-            jsFormattedHandler.append(ASEmitterTokens.PAREN_CLOSE.getToken());
-        }
-        eventSpecifier.value = jsFormattedHandler.toString();
+        eventSpecifier.value = asEmitter.stringifyNode(node.getChild(0));
 
         if (currentDescriptor != null)
             currentDescriptor.eventSpecifiers.add(eventSpecifier);
@@ -490,72 +446,42 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
     @Override
     public void emitScript(IMXMLScriptNode node)
     {
-        String cname = node.getFileNode().getName();
-
         IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
                 .getASEmitter();
+        IJSGoogDocEmitter docEmitter = (IJSGoogDocEmitter) asEmitter
+                .getDocEmitter();
+
+        String nl = ASEmitterTokens.NEW_LINE.getToken();
 
         StringBuilder sb = null;
         MXMLScriptSpecifier scriptSpecifier = null;
 
-        indentPush();
-        String nl = ASEmitterTokens.NEW_LINE.getToken();
-        String ci = getIndent(getCurrentIndent());
-        indentPop();
-
-        IASNode[] asnodes = node.getASNodes();
-        for (IASNode asnode : asnodes)
+        int len = node.getChildCount();
+        if (len > 0)
         {
-            sb = new StringBuilder();
-            scriptSpecifier = new MXMLScriptSpecifier();
-
-            String signature = asEmitter.stringifyNode(asnode)
-                    + ASEmitterTokens.NEW_LINE.getToken();
-
-            String[] breakOnGet = signature.split("get ");
-            String[] breakOnParenOpen = breakOnGet[1].split("\\(");
-            String propertyName = breakOnParenOpen[0];
-
-            sb.append("/**" + nl);
-            sb.append(" * @this {" + cname + "}" + nl);
-            sb.append(" * @expose" + nl);
-            sb.append(" * @return {string}" + nl);
-            sb.append(" */" + nl);
-            sb.append(cname
-                    + ".prototype.get_" + propertyName + " = function()" + nl);
-            sb.append("{" + nl);
-
-            ASTNodeID nodeId = asnode.getNodeID();
-            if (nodeId == ASTNodeID.FunctionID
-                    || nodeId == ASTNodeID.GetterID
-                    || nodeId == ASTNodeID.SetterID)
+            for (int i = 0; i < len; i++)
             {
-                IScopedNode snode = ((IFunctionNode) asnode).getScopedNode();
-
-                String body = asEmitter.stringifyNode(snode.getChild(0));
-                String[] breakOnSpace = body.split(" ");
-                String[] breakOnMemberAccess = breakOnSpace[1].split("\\.");
-
-                sb.append(ci);
-                sb.append(ASEmitterTokens.RETURN.getToken());
-                sb.append(ASEmitterTokens.SPACE.getToken());
-                sb.append(ASEmitterTokens.THIS.getToken());
-                sb.append(ASEmitterTokens.MEMBER_ACCESS.getToken());
-                sb.append(breakOnMemberAccess[0]);
-                sb.append(ASEmitterTokens.MEMBER_ACCESS.getToken());
-                sb.append("get_");
-                sb.append(breakOnMemberAccess[1]);
-                sb.append(ASEmitterTokens.PAREN_OPEN.getToken());
-                sb.append(ASEmitterTokens.PAREN_CLOSE.getToken());
-                sb.append(ASEmitterTokens.SEMICOLON.getToken());
-                sb.append(nl);
-            }
+                sb = new StringBuilder();
+                scriptSpecifier = new MXMLScriptSpecifier();
+
+                IASNode cnode = node.getChild(i);
 
-            sb.append("};" + nl);
+                docEmitter.setBufferWrite(true);
+                docEmitter.emitMethodDoc((IFunctionNode) cnode, getMXMLWalker()
+                        .getProject());
+                sb.append(docEmitter.flushBuffer());
+                
+                sb.append(asEmitter.stringifyNode(cnode));
+
+                if (i == len - 1)
+                    indentPop();
 
-            scriptSpecifier.fragment = sb.toString();
+                sb.append(nl);
 
-            scripts.add(scriptSpecifier);
+                scriptSpecifier.fragment = sb.toString();
+
+                scripts.add(scriptSpecifier);
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/797b7c81/compiler.jx/src/org/apache/flex/compiler/internal/driver/mxml/flexjs/MXMLFlexJSBackend.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/driver/mxml/flexjs/MXMLFlexJSBackend.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/driver/mxml/flexjs/MXMLFlexJSBackend.java
index c8e396a..4233931 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/driver/mxml/flexjs/MXMLFlexJSBackend.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/driver/mxml/flexjs/MXMLFlexJSBackend.java
@@ -22,12 +22,15 @@ package 
org.apache.flex.compiler.internal.driver.mxml.flexjs;
 import java.io.FilterWriter;
 import java.util.List;
 
+import org.apache.flex.compiler.codegen.IDocEmitter;
 import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
 import org.apache.flex.compiler.codegen.js.IJSWriter;
 import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
 import org.apache.flex.compiler.config.Configurator;
 import org.apache.flex.compiler.driver.IBackend;
-import org.apache.flex.compiler.internal.codegen.as.ASEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogDocEmitter;
 import org.apache.flex.compiler.internal.codegen.mxml.MXMLBlockWalker;
 import org.apache.flex.compiler.internal.codegen.mxml.MXMLWriter;
 import 
org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSBlockWalker;
@@ -84,12 +87,20 @@ public class MXMLFlexJSBackend extends MXMLBackend
     }
 
     @Override
-    public IASEmitter createEmitter(FilterWriter out)
+    public IDocEmitter createDocEmitter(IASEmitter emitter)
     {
-        return new ASEmitter(out);
+        return new JSGoogDocEmitter((IJSEmitter) emitter);
     }
 
     @Override
+    public IJSEmitter createEmitter(FilterWriter out)
+    {
+        IJSEmitter emitter = new JSFlexJSEmitter(out);
+        emitter.setDocEmitter(createDocEmitter(emitter));
+        return emitter;
+    }
+    
+    @Override
     public IJSWriter createWriter(IASProject project,
             List<ICompilerProblem> problems, ICompilationUnit compilationUnit,
             boolean enableDebug)

Reply via email to