You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by er...@apache.org on 2013/03/27 16:30:50 UTC
[4/7] git commit: FlexJS MXML emitter update
FlexJS MXML emitter update
The FlexJS MXML emitter now uses the new FlexJS JS and JSDoc emitters.
Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
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 <er...@ixsoftware.nl>
Authored: Wed Mar 27 16:28:35 2013 +0100
Committer: Erik de Bruin <er...@ixsoftware.nl>
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)