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 2015/06/04 08:06:35 UTC
[29/42] git commit: [flex-falcon] [refs/heads/develop] - Removed
getDoc() with getDocEmitter(), override with interface.
Removed getDoc() with getDocEmitter(), override with interface.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/26deda9b
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/26deda9b
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/26deda9b
Branch: refs/heads/develop
Commit: 26deda9b18b9045a41fd9f1efd50576ce6832df1
Parents: 8393290
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 14:20:04 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:14 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/JSFlexJSEmitter.java | 7 +-
.../internal/codegen/js/goog/JSGoogEmitter.java | 23 +-
.../codegen/js/vf2js/JSVF2JSEmitter.java | 449 ++++++++++---------
3 files changed, 251 insertions(+), 228 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/26deda9b/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 5b8b1fe..d9b1c4e 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
@@ -21,8 +21,8 @@ package org.apache.flex.compiler.internal.codegen.js.flexjs;
import java.io.FilterWriter;
-import org.apache.flex.compiler.codegen.IDocEmitter;
import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
+import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
import org.apache.flex.compiler.common.ASModifier;
import org.apache.flex.compiler.common.IMetaInfo;
import org.apache.flex.compiler.definitions.IFunctionDefinition;
@@ -110,8 +110,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
return accessorEmitter;
}
+ // TODO (mschmalle) Fix; this is not using the backend doc strategy for replacement
@Override
- public IDocEmitter getDocEmitter()
+ public IJSGoogDocEmitter getDocEmitter()
{
if (docEmitter == null)
docEmitter = new JSFlexJSDocEmitter(this);
@@ -283,7 +284,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
if (isBindableSetter)
{
- getDoc().emitMethodDoc(fn, getWalker().getProject());
+ getDocEmitter().emitMethodDoc(fn, getWalker().getProject());
write(formatQualifiedName(type.getQualifiedName()));
if (!node.hasModifier(ASModifier.STATIC))
{
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/26deda9b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index b685fe0..c431553 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.Map;
import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants.BuiltinType;
-import org.apache.flex.compiler.codegen.IDocEmitter;
import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
import org.apache.flex.compiler.codegen.js.goog.IJSGoogEmitter;
import org.apache.flex.compiler.common.ASModifier;
@@ -88,15 +87,15 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
// TODO (mschmalle) Remove this (not used in JSFlexJSEmitter and JSGoogEmitter anymore)
public ICompilerProject project;
- protected IJSGoogDocEmitter getDoc()
- {
- return (IJSGoogDocEmitter) getDocEmitter();
- }
+ private JSGoogDocEmitter docEmitter;
+ // TODO (mschmalle) Fix; this is not using the backend doc strategy for replacement
@Override
- public IDocEmitter getDocEmitter()
+ public IJSGoogDocEmitter getDocEmitter()
{
- return new JSGoogDocEmitter(this);
+ if (docEmitter == null)
+ docEmitter = new JSGoogDocEmitter(this);
+ return docEmitter;
}
protected void writeIndent()
@@ -267,7 +266,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
{
ICompilerProject project = getWalker().getProject();
- getDoc().emitInterfaceDoc(node, project);
+ getDocEmitter().emitInterfaceDoc(node, project);
String qname = node.getQualifiedName();
if (qname != null && !qname.equals(""))
@@ -334,7 +333,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
if (enode != null)
def = enode.resolveType(getWalker().getProject());
- getDoc().emitFieldDoc(node, def);
+ getDocEmitter().emitFieldDoc(node, def);
/* x.prototype.y = z */
@@ -388,11 +387,11 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
String opcode = avnode.getNodeID().getParaphrase();
if (opcode != "AnonymousFunction")
- getDoc().emitVarDoc(node, def);
+ getDocEmitter().emitVarDoc(node, def);
}
else
{
- getDoc().emitVarDoc(node, null);
+ getDocEmitter().emitVarDoc(node, null);
}
emitDeclarationName(node);
@@ -458,7 +457,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
ICompilerProject project = getWalker().getProject();
- getDoc().emitMethodDoc(node, project);
+ getDocEmitter().emitMethodDoc(node, project);
boolean isConstructor = node.isConstructor();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/26deda9b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index b11193b..dab4472 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -29,7 +29,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants;
-import org.apache.flex.compiler.codegen.IDocEmitter;
+import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
import org.apache.flex.compiler.codegen.js.vf2js.IJSVF2JSEmitter;
import org.apache.flex.compiler.common.ASModifier;
import org.apache.flex.compiler.common.ModifiersSet;
@@ -207,7 +207,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
ICompilerProject project = getWalker().getProject();
- getDoc().emitInterfaceDoc(node, project);
+ getDocEmitter().emitInterfaceDoc(node, project);
String qname = parseQualifiedName(node);
if (qname != null && !qname.equals(""))
@@ -225,7 +225,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SEMICOLON);
}
-
final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
for (IDefinitionNode mnode : members)
{
@@ -236,8 +235,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeNewline();
writeNewline();
- getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
-
+ getDocEmitter().emitInterfaceMemberDoc(mnode, project);
+
write(qname);
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSEmitterTokens.PROTOTYPE);
@@ -277,11 +276,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (node.isConstructor())
{
- emitVarNonLiteralAssignments();
+ emitVarNonLiteralAssignments();
}
-
- if (node.isConstructor()
- && hasSuperClass(node) && !hasSuperCall(node.getScopedNode()))
+
+ if (node.isConstructor() && hasSuperClass(node)
+ && !hasSuperCall(node.getScopedNode()))
emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
}
@@ -290,50 +289,49 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
// (erikdebruin): If the initial value of a variable is set using
// a method, JS needs this initialization to be done
// in the constructor
- IClassNode cdnode = (IClassNode) getModel().getCurrentClass().getNode();
+ IClassNode cdnode = (IClassNode) getModel().getCurrentClass().getNode();
IDefinitionNode[] dnodes = cdnode.getAllMemberNodes();
for (IDefinitionNode dnode : dnodes)
{
if (dnode.getNodeID() == ASTNodeID.VariableID)
{
- IVariableNode vnode = (IVariableNode) dnode;
- IExpressionNode avnode = vnode.getAssignedValueNode();
- if (avnode != null &&
- !(avnode instanceof ILiteralNode) &&
- !(avnode instanceof IEmbedNode))
+ IVariableNode vnode = (IVariableNode) dnode;
+ IExpressionNode avnode = vnode.getAssignedValueNode();
+ if (avnode != null && !(avnode instanceof ILiteralNode)
+ && !(avnode instanceof IEmbedNode))
{
- writeNewline("", true);
- if (vnode.hasModifier(ASModifier.STATIC))
- {
- write(parseQualifiedName(cdnode));
- }
- else
- {
- write(ASEmitterTokens.THIS);
- }
- write(ASEmitterTokens.MEMBER_ACCESS);
- writeToken(vnode.getName());
- writeToken(ASEmitterTokens.EQUAL);
- getWalker().walk(avnode);
- indentPop();
- writeNewline(ASEmitterTokens.SEMICOLON);
+ writeNewline("", true);
+ if (vnode.hasModifier(ASModifier.STATIC))
+ {
+ write(parseQualifiedName(cdnode));
+ }
+ else
+ {
+ write(ASEmitterTokens.THIS);
+ }
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ writeToken(vnode.getName());
+ writeToken(ASEmitterTokens.EQUAL);
+ getWalker().walk(avnode);
+ indentPop();
+ writeNewline(ASEmitterTokens.SEMICOLON);
}
}
}
}
-
+
@Override
public void emitVarDeclaration(IVariableNode node)
{
if (!(node instanceof ChainedVariableNode))
{
- // (erikdebruin): check for 'var i:int = 0, j:int = 0' containers
- IASNode pnode = node.getParent();
- if (!(pnode instanceof IVariableExpressionNode) ||
- node.getChild(0) instanceof IKeywordNode)
- {
- emitMemberKeyword(node);
- }
+ // (erikdebruin): check for 'var i:int = 0, j:int = 0' containers
+ IASNode pnode = node.getParent();
+ if (!(pnode instanceof IVariableExpressionNode)
+ || node.getChild(0) instanceof IKeywordNode)
+ {
+ emitMemberKeyword(node);
+ }
}
IExpressionNode avnode = node.getAssignedValueNode();
@@ -343,16 +341,16 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
String opcode = avnode.getNodeID().getParaphrase();
if (opcode != "AnonymousFunction")
- getDoc().emitVarDoc(node, def);
+ getDocEmitter().emitVarDoc(node, def);
}
else
{
- getDoc().emitVarDoc(node, null);
+ getDocEmitter().emitVarDoc(node, null);
}
emitDeclarationName(node);
if (!(avnode instanceof IEmbedNode))
- emitAssignedValue(avnode);
+ emitAssignedValue(avnode);
if (!(node instanceof ChainedVariableNode))
{
@@ -398,7 +396,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
def = enode.resolveType(project);
}
- getDoc().emitFieldDoc(node, def);
+ getDocEmitter().emitFieldDoc(node, def);
IDefinition ndef = node.getDefinition();
@@ -448,40 +446,52 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeNewline("@expose");
writeNewline(" */");
writeNewline(parseQualifiedName(definition)
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
- + "get_" + node.getName()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.EQUAL.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
- + ASEmitterTokens.PAREN_OPEN.getToken() + ASEmitterTokens.PAREN_CLOSE.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
- writeNewline(ASEmitterTokens.RETURN.getToken() + ASEmitterTokens.SPACE.getToken()
- + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
- + node.getName() + ASEmitterTokens.SEMICOLON.getToken());
- writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken() + ASEmitterTokens.SEMICOLON.getToken());
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + root + "get_"
+ + node.getName() + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.EQUAL.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.FUNCTION.getToken()
+ + ASEmitterTokens.PAREN_OPEN.getToken()
+ + ASEmitterTokens.PAREN_CLOSE.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
+ writeNewline(ASEmitterTokens.RETURN.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+ + ASEmitterTokens.SEMICOLON.getToken());
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken()
+ + ASEmitterTokens.SEMICOLON.getToken());
writeNewline();
writeNewline("/**");
writeNewline("@expose");
writeNewline(" */");
writeNewline(parseQualifiedName(definition)
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
- + "set_" + node.getName()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.EQUAL.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
- + ASEmitterTokens.PAREN_OPEN.getToken() + "value" + ASEmitterTokens.PAREN_CLOSE.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + root + "set_"
+ + node.getName() + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.EQUAL.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.FUNCTION.getToken()
+ + ASEmitterTokens.PAREN_OPEN.getToken() + "value"
+ + ASEmitterTokens.PAREN_CLOSE.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName() + ") {");
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+ + ") {");
writeNewline(" var oldValue = "
- + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
- + node.getName() + ASEmitterTokens.SEMICOLON.getToken());
- writeNewline(" " + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
- + node.getName() + " = value;");
+ + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+ + ASEmitterTokens.SEMICOLON.getToken());
+ writeNewline(" " + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+ + " = value;");
writeNewline(" this.dispatchEvent(org.apache.flex.events.ValueChangeEvent.createUpdateEvent(");
- writeNewline(" this, \"" + node.getName() + "\", oldValue, value));");
+ writeNewline(" this, \"" + node.getName()
+ + "\", oldValue, value));");
writeNewline("}");
write(ASEmitterTokens.BLOCK_CLOSE.getToken());
-
-
+
}
}
@@ -506,7 +516,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
ICompilerProject project = getWalker().getProject();
- getDoc().emitMethodDoc(node, project);
+ getDocEmitter().emitMethodDoc(node, project);
boolean isConstructor = node.isConstructor();
@@ -559,39 +569,43 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.PAREN_OPEN);
write(qname);
writeToken(ASEmitterTokens.COMMA);
- String sname = parseQualifiedName(getSuperClassDefinition(node, project));
+ String sname = parseQualifiedName(getSuperClassDefinition(node,
+ project));
if (sname.equals(IASLanguageConstants.Object))
- sname = IASLanguageConstants.Class;
+ sname = IASLanguageConstants.Class;
write(sname);
write(ASEmitterTokens.PAREN_CLOSE);
}
}
-
+
@Override
protected boolean hasSuperClass(IDefinitionNode node)
{
ICompilerProject project = getWalker().getProject();
IClassDefinition superClassDefinition = getSuperClassDefinition(node,
project);
-
+
if (superClassDefinition == null)
return false;
-
+
String qname = parseQualifiedName(superClassDefinition);
// ToDo (erikdebruin): need this to get the JS version of the SDK in
// shape?
- boolean useClassAsSuperClass = !qname.equals(IASLanguageConstants.Object);
+ boolean useClassAsSuperClass = !qname
+ .equals(IASLanguageConstants.Object);
if (!useClassAsSuperClass)
{
- if (parseQualifiedName(node).equals("mx.core.EmbeddedFontRegistry") ||
- parseQualifiedName(node).equals("mx.managers.HistoryManagerImpl") ||
- parseQualifiedName(node).equals("mx.core.TextFieldFactory"))
- {
- useClassAsSuperClass = true;
- }
+ if (parseQualifiedName(node).equals("mx.core.EmbeddedFontRegistry")
+ || parseQualifiedName(node).equals(
+ "mx.managers.HistoryManagerImpl")
+ || parseQualifiedName(node).equals(
+ "mx.core.TextFieldFactory"))
+ {
+ useClassAsSuperClass = true;
+ }
}
-
+
return superClassDefinition != null && useClassAsSuperClass;
}
@@ -622,9 +636,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
def = node.getNameNode().resolve(project);
- isClassCast = (def instanceof ClassDefinition ||
- def instanceof InterfaceDefinition) &&
- !(NativeUtils.isJSNative(def.getBaseName()));
+ isClassCast = (def instanceof ClassDefinition || def instanceof InterfaceDefinition)
+ && !(NativeUtils.isJSNative(def.getBaseName()));
}
if (node.isNewExpression())
@@ -647,15 +660,18 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
if (def != null)
{
- boolean isInt = def.getBaseName().equals(IASGlobalFunctionConstants._int);
- if (isInt ||
- def.getBaseName().equals(IASGlobalFunctionConstants.trace) ||
- def.getBaseName().equals(IASGlobalFunctionConstants.uint))
+ boolean isInt = def.getBaseName().equals(
+ IASGlobalFunctionConstants._int);
+ if (isInt
+ || def.getBaseName().equals(
+ IASGlobalFunctionConstants.trace)
+ || def.getBaseName().equals(
+ IASGlobalFunctionConstants.uint))
{
write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
write(ASEmitterTokens.MEMBER_ACCESS);
if (isInt)
- write(JSFlexJSEmitterTokens.UNDERSCORE);
+ write(JSFlexJSEmitterTokens.UNDERSCORE);
}
}
getWalker().walk(node.getNameNode());
@@ -665,7 +681,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
else
{
- emitIsAs(node.getArgumentNodes()[0], node.getNameNode(), ASTNodeID.Op_AsID, true);
+ emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
+ ASTNodeID.Op_AsID, true);
}
}
else
@@ -686,11 +703,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
if (node instanceof NonResolvingIdentifierNode)
return false;
-
+
IClassNode classNode = (IClassNode) node
.getAncestorOfType(IClassNode.class);
- IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+ IDefinition nodeDef = node.resolve(project);
IASNode parentNode = node.getParent();
ASTNodeID parentNodeId = parentNode.getNodeID();
@@ -704,7 +721,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
if (nodeDef instanceof ParameterDefinition)
return false;
-
+
if (nodeDef instanceof VariableDefinition)
{
IDefinition pdef = ((VariableDefinition) nodeDef).getParent();
@@ -745,19 +762,18 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
else
{
- if (nodeDef != null
- && !nodeDef.isInternal()
+ if (nodeDef != null && !nodeDef.isInternal()
&& isClassMember(nodeDef, classNode))
{
if (identifierIsMemberAccess)
{
- if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID
+ if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID
&& parentNode.getChild(0).getNodeID() == ASTNodeID.SuperID
&& !isSuperCallForOverride(node))
- {
- return true;
- }
-
+ {
+ return true;
+ }
+
return node == firstChild;
}
else
@@ -768,8 +784,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
.getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL;
if (nodeDef instanceof IParameterDefinition)
- return false;
-
+ return false;
+
return !identifierIsLocalFunction;
}
}
@@ -793,7 +809,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
while (visiblePropertiesIterator.hasNext())
{
if (parseQualifiedName(nodeDef).equals(
- parseQualifiedName(visiblePropertiesIterator.next())))
+ parseQualifiedName(visiblePropertiesIterator.next())))
return true;
}
@@ -806,7 +822,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (pdef == thisClass)
return true;
- IDefinition cdef = ((ClassDefinition) thisClass).resolveBaseClass(project);
+ IDefinition cdef = ((ClassDefinition) thisClass)
+ .resolveBaseClass(project);
while (cdef != null)
{
// needs to be a loop
@@ -823,7 +840,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (project == null)
project = getWalker().getProject();
- IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+ IDefinition nodeDef = node.resolve(project);
IASNode parentNode = node.getParent();
ASTNodeID parentNodeId = parentNode.getNodeID();
@@ -834,8 +851,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
boolean emitName = true;
- if (nodeDef != null
- && nodeDef.isStatic() && nodeDef.getParent() != null)
+ if (nodeDef != null && nodeDef.isStatic()
+ && nodeDef.getParent() != null)
{
String sname = parseQualifiedName(nodeDef.getParent());
if (sname.length() > 0)
@@ -937,7 +954,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
// ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
if (cnode == null)
return;
-
+
write(parseQualifiedName(cnode));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSGoogEmitterTokens.GOOG_BASE);
@@ -966,16 +983,17 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (anode != null && isAssignment)
{
- getWalker().walk(((BinaryOperatorAssignmentNode) anode)
- .getRightOperandNode());
+ getWalker().walk(
+ ((BinaryOperatorAssignmentNode) anode)
+ .getRightOperandNode());
}
if (!(node instanceof NonResolvingIdentifierNode))
- write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.PAREN_CLOSE);
}
else if (emitName)
{
- if (nodeDef != null)
+ if (nodeDef != null)
write(parseQualifiedName(nodeDef));
else
write(node.getName());
@@ -984,15 +1002,15 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
private boolean isSuperCallForOverride(IIdentifierNode node)
{
- IFunctionNode pfnode = (IFunctionNode) node.
- getAncestorOfType(FunctionNode.class);
+ IFunctionNode pfnode = (IFunctionNode) node
+ .getAncestorOfType(FunctionNode.class);
- if (pfnode == null)
- return false;
-
- return pfnode.getName().equals(node.getName());
+ if (pfnode == null)
+ return false;
+
+ return pfnode.getName().equals(node.getName());
}
-
+
//--------------------------------------------------------------------------
@Override
@@ -1024,7 +1042,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (cnode == null)
return;
-
+
// (erikdebruin): Catch when a 'super' call does NOT match the enclosing
// function call. The GCC only allows '.base()' calls
// to matching super methods, so we need to use
@@ -1032,20 +1050,23 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
boolean isCallToOtherSuperMethod = false;
try
{
- IExpressionNode d = fcnode.getNameNode();
- if (d != null && d instanceof IMemberAccessExpressionNode)
- {
- IIdentifierNode b = (IIdentifierNode) ((IMemberAccessExpressionNode) d).getRightOperandNode();
-
- isCallToOtherSuperMethod =
- b != null && !b.getName().equals(fnode.getName());
- }
+ IExpressionNode d = fcnode.getNameNode();
+ if (d != null && d instanceof IMemberAccessExpressionNode)
+ {
+ IIdentifierNode b = (IIdentifierNode) ((IMemberAccessExpressionNode) d)
+ .getRightOperandNode();
+
+ isCallToOtherSuperMethod = b != null
+ && !b.getName().equals(fnode.getName());
+ }
}
- catch (Exception e) { /* Eat it! */ }
-
+ catch (Exception e)
+ { /* Eat it! */
+ }
+
if (isCallToOtherSuperMethod)
{
- write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSGoogEmitterTokens.SUPERCLASS);
write(ASEmitterTokens.MEMBER_ACCESS);
@@ -1071,22 +1092,22 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
if (!isCallToOtherSuperMethod)
{
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
}
-
+
if (fnode.getNodeID() == ASTNodeID.GetterID
|| fnode.getNodeID() == ASTNodeID.SetterID)
writeGetSetPrefix(fnode.getNodeID() == ASTNodeID.GetterID);
-
+
// (erikdebruin): write(fnode.getName());
- IMemberAccessExpressionNode aenode =
- (IMemberAccessExpressionNode) fcnode.getNameNode();
+ IMemberAccessExpressionNode aenode = (IMemberAccessExpressionNode) fcnode
+ .getNameNode();
write(((IIdentifierNode) aenode.getRightOperandNode()).getName());
-
+
if (!isCallToOtherSuperMethod)
{
- write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.SINGLE_QUOTE);
}
else
{
@@ -1114,9 +1135,10 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
else if (fnode == null && node instanceof BinaryOperatorAssignmentNode)
{
BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
-
- IFunctionNode pnode = (IFunctionNode) bnode.getAncestorOfType(IFunctionNode.class);
-
+
+ IFunctionNode pnode = (IFunctionNode) bnode
+ .getAncestorOfType(IFunctionNode.class);
+
if (pnode.getNodeID() == ASTNodeID.SetterID)
{
writeToken(ASEmitterTokens.COMMA);
@@ -1222,15 +1244,15 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
public void emitBinaryOperator(IBinaryOperatorNode node)
{
ASTNodeID id = node.getNodeID();
- if (id == ASTNodeID.Op_InID
- || id == ASTNodeID.Op_LogicalAndAssignID
+ if (id == ASTNodeID.Op_InID || id == ASTNodeID.Op_LogicalAndAssignID
|| id == ASTNodeID.Op_LogicalOrAssignID)
{
super.emitBinaryOperator(node);
}
else if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
{
- emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id, false);
+ emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id,
+ false);
}
else if (id == ASTNodeID.Op_InstanceOfID)
{
@@ -1238,7 +1260,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.INSTANCEOF);
-
+
IDefinition dnode = (node.getRightOperandNode()).resolve(project);
if (dnode != null)
write(parseQualifiedName(dnode));
@@ -1283,7 +1305,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
getWalker().walk(leftSide);
}
- else if (isSuper)
+ else if (isSuper)
{
emitSuperCall(node, "");
}
@@ -1307,7 +1329,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
}
- private void emitIsAs(IExpressionNode left, IExpressionNode right,
+ private void emitIsAs(IExpressionNode left, IExpressionNode right,
ASTNodeID id, boolean coercion)
{
write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
@@ -1325,16 +1347,16 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(parseQualifiedName(dnode));
else
getWalker().walk(right);
-
- if (coercion)
+
+ if (coercion)
{
writeToken(ASEmitterTokens.COMMA);
write(ASEmitterTokens.TRUE);
}
-
+
write(ASEmitterTokens.PAREN_CLOSE);
}
-
+
@Override
public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
{
@@ -1353,12 +1375,12 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (!isStatic)
{
if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
- .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
+ .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
{
- if (rightNode instanceof UnaryOperatorAtNode)
+ if (rightNode instanceof UnaryOperatorAtNode)
{
- // ToDo (erikdebruin): properly handle E4X
-
+ // ToDo (erikdebruin): properly handle E4X
+
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
@@ -1369,10 +1391,10 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SQUARE_CLOSE);
continueWalk = false;
}
- else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
- {
- // ToDo (erikdebruin): properly handle E4X
-
+ else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
+ {
+ // ToDo (erikdebruin): properly handle E4X
+
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
@@ -1382,8 +1404,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.SQUARE_CLOSE);
continueWalk = false;
- }
- else if (leftNode.getNodeID() != ASTNodeID.SuperID)
+ }
+ else if (leftNode.getNodeID() != ASTNodeID.SuperID)
{
getWalker().walk(node.getLeftOperandNode());
write(node.getOperator().getOperatorText());
@@ -1394,11 +1416,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.THIS);
write(node.getOperator().getOperatorText());
}
-
+
}
-
+
if (continueWalk)
- getWalker().walk(node.getRightOperandNode());
+ getWalker().walk(node.getRightOperandNode());
}
private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
@@ -1428,11 +1450,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
// ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
if (type == null)
return;
-
+
if (project == null)
project = getWalker().getProject();
- getDoc().emitMethodDoc(fn, project);
+ getDocEmitter().emitMethodDoc(fn, project);
write(parseQualifiedName(type));
if (!node.hasModifier(ASModifier.STATIC))
{
@@ -1460,7 +1482,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
@Override
- public IDocEmitter getDocEmitter()
+ public IJSGoogDocEmitter getDocEmitter()
{
return new JSVF2JSDocEmitter(this);
}
@@ -1481,7 +1503,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeNewline(" * @suppress {checkTypes}");
writeNewline(" */");
writeNewline();
-
+
/* goog.provide('x');\n\n */
write(JSGoogEmitterTokens.GOOG_PROVIDE);
write(ASEmitterTokens.PAREN_OPEN);
@@ -1507,7 +1529,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
project = getWalker().getProject();
FlexJSProject flexProject = (FlexJSProject) project;
- ASProjectScope projectScope = (ASProjectScope) flexProject.getScope();
+ ASProjectScope projectScope = flexProject.getScope();
ICompilationUnit cu = projectScope
.getCompilationUnitForDefinition(type);
ArrayList<String> requiresList = flexProject.getRequires(cu);
@@ -1542,14 +1564,14 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
-
+
writtenInstances.add(imp);
-
+
emitsRequires = true;
}
}
}
-
+
boolean emitsInterfaces = false;
if (interfacesList != null)
{
@@ -1562,17 +1584,17 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
-
+
emitsInterfaces = true;
}
}
-
+
// erikdebruin: Add missing language feature support, with e.g. 'is' and
// 'as' operators. We don't need to worry about requiring
// this in every project: ADVANCED_OPTIMISATIONS will NOT
// include any of the code if it is not used in the project.
- boolean isMainCU = flexProject.mainCU != null &&
- cu.getName().equals(flexProject.mainCU.getName());
+ boolean isMainCU = flexProject.mainCU != null
+ && cu.getName().equals(flexProject.mainCU.getName());
if (isMainCU)
{
write(JSGoogEmitterTokens.GOOG_REQUIRE);
@@ -1612,11 +1634,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeNewline();
writeNewline();
writeNewline();
- getDoc().begin();
+ getDocEmitter().begin();
writeNewline(" * Metadata");
writeNewline(" *");
writeNewline(" * @type {Object.<string, Array.<Object>>}");
- getDoc().end();
+ getDocEmitter().end();
// a.B.prototype.AFJS_CLASS_INFO = { };
write(parseQualifiedName(type));
@@ -1626,7 +1648,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeToken(JSFlexJSEmitterTokens.FLEXJS_CLASS_INFO);
writeToken(ASEmitterTokens.EQUAL);
writeToken(ASEmitterTokens.BLOCK_OPEN);
-
+
// names: [{ name: '', qName: '' }]
write(JSFlexJSEmitterTokens.NAMES);
writeToken(ASEmitterTokens.COLON);
@@ -1651,7 +1673,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
else
enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
-
+
if (enodes.length > 0)
{
writeToken(ASEmitterTokens.COMMA);
@@ -1662,7 +1684,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SQUARE_OPEN);
int i = 0;
for (IExpressionNode enode : enodes)
- {
+ {
write(parseQualifiedName(enode.resolve(project)));
if (i < enodes.length - 1)
writeToken(ASEmitterTokens.COMMA);
@@ -1823,16 +1845,16 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
public void emitLiteral(ILiteralNode node)
{
boolean isWritten = false;
-
+
String s = node.getValue(true);
if (!(node instanceof RegExpLiteralNode))
{
if (node.getLiteralType() == LiteralType.XML)
{
// ToDo (erikdebruin): VF2JS -> handle XML output properly...
-
+
write("'" + s + "'");
-
+
isWritten = true;
}
s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
@@ -1850,33 +1872,34 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
-
+
Character c = s.charAt(0);
if (c.equals('"'))
{
- s = s.substring(1, s.length() - 1);
- s = s.replaceAll("\"", "\\\\\"");
- s = "\"" + s + "\"";
+ s = s.substring(1, s.length() - 1);
+ s = s.replaceAll("\"", "\\\\\"");
+ s = "\"" + s + "\"";
}
if (s.length() == 3)
{
- c = s.charAt(1);
- if (c.equals('\\')) {
- s = "\"\\\\\"";
- }
+ c = s.charAt(1);
+ if (c.equals('\\'))
+ {
+ s = "\"\\\\\"";
+ }
}
}
-
+
if (!isWritten)
{
write(s);
}
}
-
+
@Override
public void emitE4XFilter(IMemberAccessExpressionNode node)
{
- // ToDo (erikdebruin): implement E4X replacement !?!
+ // ToDo (erikdebruin): implement E4X replacement !?!
write(ASEmitterTokens.SINGLE_QUOTE);
write("E4XFilter");
write(ASEmitterTokens.SINGLE_QUOTE);
@@ -1889,36 +1912,36 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
for (int i = 0; i < nodeCount; i++)
{
getWalker().walk(node.getChild(i));
-
+
if (i < nodeCount - 1)
- writeToken(ASEmitterTokens.COMMA);
+ writeToken(ASEmitterTokens.COMMA);
}
}
-
+
private String parseQualifiedName(IDefinitionNode def)
{
- return parseQualifiedNameString(def.getQualifiedName());
+ return parseQualifiedNameString(def.getQualifiedName());
}
-
+
private String parseQualifiedName(IDefinition def)
{
- return parseQualifiedNameString(def.getQualifiedName());
+ return parseQualifiedNameString(def.getQualifiedName());
}
private String parseQualifiedNameString(String qNameString)
{
- // ToDo (erikdebruin): Ugly hacks for VF2JS ...
- if (qNameString.equals(IASLanguageConstants._int))
- {
- qNameString = qNameString.toUpperCase();
- }
-
- if (qNameString.equals("byte"))
- {
- qNameString = "$" + qNameString;
- }
-
- return qNameString;
+ // ToDo (erikdebruin): Ugly hacks for VF2JS ...
+ if (qNameString.equals(IASLanguageConstants._int))
+ {
+ qNameString = qNameString.toUpperCase();
+ }
+
+ if (qNameString.equals("byte"))
+ {
+ qNameString = "$" + qNameString;
+ }
+
+ return qNameString;
}
}