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(