You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jo...@apache.org on 2016/01/13 01:46:58 UTC

git commit: [flex-falcon] [refs/heads/develop] - IdentifierEmitter: identifier that isn't on the left hand side of a member access expression should not be qualified

Repository: flex-falcon
Updated Branches:
  refs/heads/develop 498716d12 -> 3be965da1


IdentifierEmitter: identifier that isn't on the left hand side of a member access expression should not be qualified


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

Branch: refs/heads/develop
Commit: 3be965da1b9d056f58fc0f63e38c4b019071c6da
Parents: 498716d
Author: Josh Tynjala <jo...@apache.org>
Authored: Tue Jan 12 16:46:48 2016 -0800
Committer: Josh Tynjala <jo...@apache.org>
Committed: Tue Jan 12 16:46:48 2016 -0800

----------------------------------------------------------------------
 .../js/flexjs/TestFlexJSExpressions.java        | 20 +++++++
 .../codegen/js/jx/IdentifierEmitter.java        | 61 +++++++++++++-------
 2 files changed, 59 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3be965da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
index 8148424..61c4e8d 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
@@ -744,6 +744,26 @@ public class TestFlexJSExpressions extends TestGoogExpressions
         asBlockWalker.visitFunction(node);
         assertOut("FalconTest_A.prototype.foo = function() {\n  bar(b).text = '';\n}");
     }
+    
+    @Test
+    public void testFunctionCallFullyQualified()
+    {
+        IFunctionNode node = (IFunctionNode) getNode(
+                "import goog.bind; public class B {public function b() { goog.bind(b, this); }}",
+                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
+        asBlockWalker.visitFunction(node);
+        assertOut("/**\n * @export\n */\nfoo.bar.B.prototype.b = function() {\n  goog.bind(org.apache.flex.utils.Language.closure(this.b, this, 'b'), this);\n}");
+    }
+
+    @Test
+    public void testFunctionMemberFullyQualified()
+    {
+        IFunctionNode node = (IFunctionNode) getNode(
+                "import flash.utils.clearTimeout; public class B {public function b() { clearTimeout.length; }}",
+                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
+        asBlockWalker.visitFunction(node);
+        assertOut("/**\n * @export\n */\nfoo.bar.B.prototype.b = function() {\n  flash.utils.clearTimeout.length;\n}");
+    }
 
     @Test
     public void testComplexBooleanExpression()

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3be965da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
index 174ae61..cf1faa5 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
@@ -37,6 +37,7 @@ import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
 import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
 import org.apache.flex.compiler.utils.NativeUtils;
 
 public class IdentifierEmitter extends JSSubEmitter implements
@@ -75,12 +76,12 @@ public class IdentifierEmitter extends JSSubEmitter implements
             boolean identifierIsLocalOrInstanceFunctionAsValue = false;
             if (identifierIsPlainFunction)
             {
-            	FunctionClassification fc = ((FunctionDefinition)nodeDef).getFunctionClassification();
-            	identifierIsLocalOrInstanceFunctionAsValue = 
-            		(fc == FunctionClassification.LOCAL || fc == FunctionClassification.CLASS_MEMBER) && 
-            		// not a value if parent is a function call or member access expression
-            		(!(parentNodeId == ASTNodeID.MemberAccessExpressionID || parentNodeId == ASTNodeID.FunctionCallID));
-            	
+                FunctionClassification fc = ((FunctionDefinition)nodeDef).getFunctionClassification();
+                identifierIsLocalOrInstanceFunctionAsValue =
+                        (fc == FunctionClassification.LOCAL || fc == FunctionClassification.CLASS_MEMBER) &&
+                                // not a value if parent is a function call or member access expression
+                                (!(parentNodeId == ASTNodeID.MemberAccessExpressionID || parentNodeId == ASTNodeID.FunctionCallID));
+
             }
             // an instance method as a parameter or
             // a local function
@@ -91,7 +92,7 @@ public class IdentifierEmitter extends JSSubEmitter implements
 
             if (generateClosure)
             {
-            	getEmitter().emitClosureStart();
+                getEmitter().emitClosureStart();
             }
 
             if (EmitterUtils.writeThis(getProject(), getModel(), node))
@@ -114,7 +115,7 @@ public class IdentifierEmitter extends JSSubEmitter implements
 
                 writeToken(ASEmitterTokens.COMMA);
                 write(ASEmitterTokens.THIS);
-            	getEmitter().emitClosureEnd(node);
+                getEmitter().emitClosureEnd(node);
                 emitName = false;
             }
         }
@@ -126,10 +127,11 @@ public class IdentifierEmitter extends JSSubEmitter implements
         {
             if (nodeDef != null)
             {
-            	// this can be optimized but this way lets
-            	// us breakpoint on the node.getName() to make
-            	// sure it is ok to always use the short name in an MAE
-            	String qname = nodeDef.getQualifiedName();
+                // this can be optimized but this way lets
+                // us breakpoint on the node.getName() to make
+                // sure it is ok to always use the short name in an MAE
+                String qname = nodeDef.getQualifiedName();
+                boolean isPackageOrFileMember = false;
                 if (nodeDef instanceof IVariableDefinition)
                 {
                     IVariableDefinition variable = (IVariableDefinition) nodeDef;
@@ -137,8 +139,7 @@ public class IdentifierEmitter extends JSSubEmitter implements
                     if (classification == VariableClassification.PACKAGE_MEMBER ||
                             classification == VariableClassification.FILE_MEMBER)
                     {
-                        write(getEmitter().formatQualifiedName(qname));
-                        return;
+                        isPackageOrFileMember = true;
                     }
                 }
                 else if (nodeDef instanceof IFunctionDefinition)
@@ -148,18 +149,34 @@ public class IdentifierEmitter extends JSSubEmitter implements
                     if (classification == FunctionClassification.PACKAGE_MEMBER ||
                             classification == FunctionClassification.FILE_MEMBER)
                     {
-                        write(getEmitter().formatQualifiedName(qname));
-                        return;
+                        isPackageOrFileMember = true;
                     }
                 }
-            	if (parentNodeId == ASTNodeID.MemberAccessExpressionID)
+                boolean needsFormattedName = false;
+                if (isPackageOrFileMember && parentNodeId == ASTNodeID.MemberAccessExpressionID)
                 {
-                    write(node.getName());
+                    IMemberAccessExpressionNode parentMemberAccessNode = (IMemberAccessExpressionNode) parentNode;
+                    //if the package or file member isn't on the left side of a
+                    //member access expression, it shouldn't be fully qualified
+                    needsFormattedName = parentMemberAccessNode.getLeftOperandNode() == node;
                 }
-            	else if (nodeDef instanceof TypeDefinitionBase)
-            		write(getEmitter().formatQualifiedName(qname));
-            	else 
-            		write(qname);
+                if (parentNodeId == ASTNodeID.MemberAccessExpressionID)
+                {
+                    if (needsFormattedName)
+                    {
+                        write(getEmitter().formatQualifiedName(qname));
+                    }
+                    else
+                    {
+                        write(node.getName());
+                    }
+                }
+                else if (isPackageOrFileMember)
+                    write(getEmitter().formatQualifiedName(qname));
+                else if (nodeDef instanceof TypeDefinitionBase)
+                    write(getEmitter().formatQualifiedName(qname));
+                else
+                    write(qname);
             }
             else
                 write(node.getName());