This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/develop by this push:
     new 95a8ca4  handle calling custom namespace methods. Fixes 
apache/royale-asjs#419.
95a8ca4 is described below

commit 95a8ca4465c627892dcae6e0df266fd8f918b85e
Author: Alex Harui <[email protected]>
AuthorDate: Thu May 2 09:37:59 2019 -0700

    handle calling custom namespace methods. Fixes apache/royale-asjs#419.
---
 .../internal/codegen/js/jx/FunctionCallEmitter.java  | 20 ++++++++++++++++++++
 .../codegen/js/royale/TestRoyaleExpressions.java     | 10 ++++++++++
 2 files changed, 30 insertions(+)

diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
index 570bf9d..1e0bae0 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
@@ -34,10 +34,14 @@ import 
org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitterToke
 import org.apache.royale.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.royale.compiler.internal.definitions.AppliedVectorDefinition;
 import org.apache.royale.compiler.internal.definitions.ClassDefinition;
+import org.apache.royale.compiler.internal.definitions.FunctionDefinition;
 import org.apache.royale.compiler.internal.definitions.InterfaceDefinition;
+import org.apache.royale.compiler.internal.definitions.NamespaceDefinition;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
 import org.apache.royale.compiler.internal.tree.as.ContainerNode;
+import org.apache.royale.compiler.internal.tree.as.IdentifierNode;
 import org.apache.royale.compiler.internal.tree.as.MemberAccessExpressionNode;
+import org.apache.royale.compiler.internal.tree.as.NamespaceIdentifierNode;
 import org.apache.royale.compiler.internal.tree.as.VectorLiteralNode;
 import org.apache.royale.compiler.problems.TooFewFunctionParametersProblem;
 import org.apache.royale.compiler.problems.TooManyFunctionParametersProblem;
@@ -323,6 +327,22 @@ public class FunctionCallEmitter extends JSSubEmitter 
implements ISubEmitter<IFu
                         getEmitter().emitArguments(node.getArgumentsNode());
                        return;
                     }
+                    else if (nameNode.getNodeID() == 
ASTNodeID.NamespaceAccessExpressionID && def instanceof FunctionDefinition)
+                    {
+                       if (fjs.isCustomNamespace((FunctionDefinition)def))
+                       {
+                               write(ASEmitterTokens.THIS);
+                               NamespaceIdentifierNode nin = 
(NamespaceIdentifierNode)nameNode.getChild(0);
+                               NamespaceDefinition nsDef = 
(NamespaceDefinition)nin.resolve(getProject());
+                               IdentifierNode idNode = 
(IdentifierNode)nameNode.getChild(1);
+                               String propName = idNode.getName();
+                                       
fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
+                                       String s = nsDef.getURI();
+                                       
write(JSRoyaleEmitter.formatNamespacedProperty(s, propName, true));
+                            
getEmitter().emitArguments(node.getArgumentsNode());
+                            return;
+                       }
+                    }
                 }
                 else if (nameNode.getNodeID() == 
ASTNodeID.MemberAccessExpressionID && 
((JSRoyaleEmitter)getEmitter()).isProxy(((MemberAccessExpressionNode)nameNode).getLeftOperandNode())
 && def == null)
                 {
diff --git 
a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
 
b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
index 24a0101..0b32b4a 100644
--- 
a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
+++ 
b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
@@ -1314,6 +1314,16 @@ public class TestRoyaleExpressions extends 
TestGoogExpressions
     }
 
     @Test
+    public void testFunctionCallCustomNamespace()
+    {
+        IFunctionNode node = (IFunctionNode) getNode(
+                "import custom.custom_namespace; public class B 
{custom_namespace function b() { custom_namespace::b(); }}",
+                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
+        asBlockWalker.visitFunction(node);
+        assertOut("/**\n * @export\n 
*/\nfoo.bar.B.prototype.http_$$ns_apache_org$2017$custom$namespace__b = 
function() {\n  this.http_$$ns_apache_org$2017$custom$namespace__b();\n}");
+    }
+
+    @Test
     public void testFunctionMemberFullyQualified()
     {
         IFunctionNode node = (IFunctionNode) getNode(

Reply via email to