You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2025/03/06 00:15:47 UTC
(royale-compiler) 03/06: compiler-jx: pass LANGUAGE_QNAME to formatQualifiedName(), like other qualified names
This is an automated email from the ASF dual-hosted git repository.
joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
commit e5953d3986bd207490d13bce3ff7a3fef6269927
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Wed Mar 5 14:32:48 2025 -0800
compiler-jx: pass LANGUAGE_QNAME to formatQualifiedName(), like other qualified names
This will help if we ever support other module systems, and the module imports require rewriting/formatting qnames
---
.../royale/compiler/internal/codegen/js/JSEmitter.java | 10 +++++-----
.../compiler/internal/codegen/js/jx/AsIsEmitter.java | 9 ++++++---
.../internal/codegen/js/jx/BinaryOperatorEmitter.java | 5 ++++-
.../internal/codegen/js/jx/DynamicAccessEmitter.java | 2 +-
.../internal/codegen/js/jx/FunctionCallEmitter.java | 18 +++++++++---------
.../internal/codegen/js/jx/IdentifierEmitter.java | 2 +-
.../internal/codegen/js/jx/UnaryOperatorEmitter.java | 7 +++++--
.../internal/codegen/js/royale/JSRoyaleEmitter.java | 6 +++---
.../codegen/mxml/royale/MXMLRoyaleASDocEmitter.java | 2 +-
.../codegen/mxml/royale/MXMLRoyaleEmitter.java | 2 +-
10 files changed, 36 insertions(+), 27 deletions(-)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
index a991d6af0..03dbe93a6 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
@@ -742,7 +742,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
endMapping(assignedNode);
} else {
startMapping(assignedNode);
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSRoyaleEmitterTokens.SYNTH_VECTOR);
write(ASEmitterTokens.PAREN_OPEN);
@@ -764,7 +764,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
&& project instanceof RoyaleJSProject
&& ((RoyaleJSProject)project).config.getJsVectorEmulationClass() == null ){
startMapping(assignedNode);
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSRoyaleEmitterTokens.SYNTH_VECTOR);
write(ASEmitterTokens.PAREN_OPEN);
@@ -890,7 +890,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
if (needsCoercion) {
//add a comment tag leader, so implicit casts are identifiable in the output
coercionStart = "/* implicit cast */ "
- + JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()
+ + formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken())
+ ASEmitterTokens.MEMBER_ACCESS.getToken()
+ ASEmitterTokens.AS.getToken()
+ ASEmitterTokens.PAREN_OPEN.getToken();
@@ -899,12 +899,12 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
String synthCall;
String synthethicType;
if (NativeUtils.isVector(coercionTypeString)) {
- synthCall = JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()
+ synthCall = formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken())
+ ASEmitterTokens.MEMBER_ACCESS.getToken()
+ JSRoyaleEmitterTokens.SYNTH_VECTOR.getToken();
synthethicType = formatQualifiedName(coercionTypeString.substring(8, coercionTypeString.length() -1));
} else {
- synthCall = JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()
+ synthCall = formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken())
+ ASEmitterTokens.MEMBER_ACCESS.getToken()
+ JSRoyaleEmitterTokens.SYNTH_TYPE.getToken();
synthethicType = coercionTypeString;
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/AsIsEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/AsIsEmitter.java
index d32ef6e87..828a826de 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/AsIsEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/AsIsEmitter.java
@@ -50,6 +50,9 @@ public class AsIsEmitter extends JSSubEmitter
public void emitIsAs(IExpressionNode node, IExpressionNode left, IExpressionNode right,
ASTNodeID id, boolean coercion)
{
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSRoyaleEmitter fjs = (JSRoyaleEmitter) getEmitter();
+
// project is null in unit tests
//IDefinition dnode = project != null ? (right).resolve(project) : null;
IDefinition dnode = getProject() != null ? (right)
@@ -157,7 +160,7 @@ public class AsIsEmitter extends JSSubEmitter
{
startMapping(node);
}
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
if (id == ASTNodeID.Op_IsID)
@@ -188,13 +191,13 @@ public class AsIsEmitter extends JSSubEmitter
String langMethod;
String synthName;
if (NativeUtils.isVector(dnode.getQualifiedName()) && dnode instanceof IAppliedVectorDefinition) {
- langMethod = JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()
+ langMethod = fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken())
+ ASEmitterTokens.MEMBER_ACCESS.getToken()
+ JSRoyaleEmitterTokens.SYNTH_VECTOR.getToken();
synthName = getEmitter().formatQualifiedName(((IAppliedVectorDefinition) dnode).resolveElementType(project).getQualifiedName());
} else {
//non-vector, e.g. int/uint
- langMethod = JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()
+ langMethod = fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken())
+ ASEmitterTokens.MEMBER_ACCESS.getToken()
+ JSRoyaleEmitterTokens.SYNTH_TYPE.getToken();
synthName = getEmitter().formatQualifiedName(dnode.getQualifiedName());
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index 507d4765c..816e6bc6b 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -678,6 +678,9 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
private void super_emitBinaryOperator(IBinaryOperatorNode node, boolean isAssignment)
{
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSRoyaleEmitter fjs = (JSRoyaleEmitter) getEmitter();
+
if (ASNodeUtils.hasParenOpen(node))
write(ASEmitterTokens.PAREN_OPEN);
@@ -725,7 +728,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
//the dynamic access field name is a constant on Language, so it can be different/shorter in release build
getWalker().walk(((MemberAccessExpressionNode) node.getLeftOperandNode()).getLeftOperandNode());
write(ASEmitterTokens.SQUARE_OPEN);
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken());
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSRoyaleEmitterTokens.ROYALE_SYNTH_TAG_FIELD_NAME);
write(ASEmitterTokens.SQUARE_CLOSE);
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
index 9ae75e366..d31736107 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
@@ -125,7 +125,7 @@ public class DynamicAccessEmitter extends JSSubEmitter implements
((RoyaleJSProject) getProject()).needLanguage = true;
getWalker().walk(leftOperandNode);
write(ASEmitterTokens.SQUARE_OPEN);
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSRoyaleEmitterTokens.VECTOR_INDEX_CHECK_METHOD_NAME);
write(ASEmitterTokens.SQUARE_CLOSE);
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 3d1c87f98..83219178a 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
@@ -122,7 +122,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
if (wrapResolve) {
((RoyaleJSProject) getProject()).needLanguage = true;
getModel().needLanguage = true;
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write("resolveUncertain");
write(ASEmitterTokens.PAREN_OPEN);
@@ -154,7 +154,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
} else {
//no 'new' output in this case, just coercion, so map from the start of 'new'
startMapping(node);
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSRoyaleEmitterTokens.SYNTH_VECTOR);
write(ASEmitterTokens.PAREN_OPEN);
@@ -246,7 +246,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
if (project instanceof RoyaleJSProject)
((RoyaleJSProject) project).needLanguage = true;
getEmitter().getModel().needLanguage = true;
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
if (isInt)
write(JSRoyaleEmitterTokens.UNDERSCORE);
@@ -339,7 +339,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
if (getProject() instanceof RoyaleJSProject)
((RoyaleJSProject) getProject()).needLanguage = true;
getEmitter().getModel().needLanguage = true;
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
startMapping(node.getNameNode());
write("arrayAsVector");
@@ -420,7 +420,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
((RoyaleJSProject) project).needLanguage = true;
getEmitter().getModel().needLanguage = true;
startMapping(node.getNameNode());
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
if (isInt)
write(JSRoyaleEmitterTokens.UNDERSCORE);
@@ -436,7 +436,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
if (project instanceof RoyaleJSProject)
((RoyaleJSProject) project).needLanguage = true;
getEmitter().getModel().needLanguage = true;
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write("sortOn");
IContainerNode newArgs = EmitterUtils.insertArgumentsBefore(node.getArgumentsNode(), cnode);
@@ -471,7 +471,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
if (project instanceof RoyaleJSProject)
((RoyaleJSProject) project).needLanguage = true;
getEmitter().getModel().needLanguage = true;
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write("sort(");
// can't use parameter emitter because the parameter types would be for
@@ -612,7 +612,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
} else {
//default Vector implementation
startMapping(node.getNameNode());
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSRoyaleEmitterTokens.SYNTH_VECTOR);
write(ASEmitterTokens.PAREN_OPEN);
@@ -667,7 +667,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
wrapResolve = true;
((RoyaleJSProject) getProject()).needLanguage = true;
getModel().needLanguage = true;
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write("resolveUncertain");
write(ASEmitterTokens.PAREN_OPEN);
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/IdentifierEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/IdentifierEmitter.java
index 83c70dad8..c504d7bd6 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/IdentifierEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/IdentifierEmitter.java
@@ -300,7 +300,7 @@ public class IdentifierEmitter extends JSSubEmitter implements
((RoyaleJSProject)project).needLanguage = true;
}
getEmitter().getModel().needLanguage = true;
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSRoyaleEmitterTokens.SYNTH_TYPE);
write(ASEmitterTokens.PAREN_OPEN);
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/UnaryOperatorEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/UnaryOperatorEmitter.java
index 5aedb00c3..c8988b70d 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/UnaryOperatorEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/UnaryOperatorEmitter.java
@@ -23,6 +23,7 @@ import org.apache.royale.compiler.codegen.ISubEmitter;
import org.apache.royale.compiler.codegen.js.IJSEmitter;
import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter;
import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitterTokens;
import org.apache.royale.compiler.internal.definitions.AppliedVectorDefinition;
import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
@@ -43,7 +44,7 @@ public class UnaryOperatorEmitter extends JSSubEmitter implements
@Override
public void emit(IUnaryOperatorNode node)
- {
+ {
if (ASNodeUtils.hasParenOpen(node))
write(ASEmitterTokens.PAREN_OPEN);
@@ -64,7 +65,9 @@ public class UnaryOperatorEmitter extends JSSubEmitter implements
((RoyaleJSProject)getProject()).needLanguage = true;
}
getModel().needLanguage = true;
- String synthTagName = JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSRoyaleEmitter fjs = (JSRoyaleEmitter) getEmitter();
+ String synthTagName = fjs.formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken())
+ ASEmitterTokens.MEMBER_ACCESS.getToken()
+ JSRoyaleEmitterTokens.ROYALE_SYNTH_TAG_FIELD_NAME.getToken();
LiteralNode synthType = new LiteralNode(ILiteralNode.LiteralType.STRING, synthTagName);
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
index b62ca6773..ecf679d18 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
@@ -958,7 +958,7 @@ public class JSRoyaleEmitter extends JSEmitter implements IJSRoyaleEmitter
|| name.equals(IASLanguageConstants.uint))
result = IASLanguageConstants.Number;
else if (name.equals(IASLanguageConstants.Vector) || name.equals("__AS3__.vec.Vector")) {
- result = JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()
+ result = formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken())
+ ASEmitterTokens.MEMBER_ACCESS.getToken()
+ JSRoyaleEmitterTokens.VECTOR.getToken();
}
@@ -1467,7 +1467,7 @@ public class JSRoyaleEmitter extends JSEmitter implements IJSRoyaleEmitter
if (project instanceof RoyaleJSProject)
((RoyaleJSProject)project).needLanguage = true;
getModel().needLanguage = true;
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSRoyaleEmitterTokens.CLOSURE_FUNCTION_NAME);
write(ASEmitterTokens.PAREN_OPEN);
@@ -1881,7 +1881,7 @@ public class JSRoyaleEmitter extends JSEmitter implements IJSRoyaleEmitter
if (node instanceof TypedExpressionNode) {
startMapping(node);
write(ASEmitterTokens.PAREN_OPEN);
- write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
+ write(formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSRoyaleEmitterTokens.SYNTH_VECTOR);
write(ASEmitterTokens.PAREN_OPEN);
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleASDocEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleASDocEmitter.java
index c98b16b0b..0d5702f3f 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleASDocEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleASDocEmitter.java
@@ -679,7 +679,7 @@ public class MXMLRoyaleASDocEmitter extends MXMLEmitter implements
handler.isProperty = true;
handler.name = "handlerFunction";
handler.parent = setEvent;
- handler.value = JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()
+ handler.value = formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken())
+ ASEmitterTokens.MEMBER_ACCESS.getToken()
+ JSRoyaleEmitterTokens.CLOSURE_FUNCTION_NAME.getToken()
+ ASEmitterTokens.PAREN_OPEN.getToken()
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
index df98f5cb6..1576125db 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
@@ -2822,7 +2822,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
handler.isProperty = true;
handler.name = "handlerFunction";
handler.parent = setEvent;
- handler.value = JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()
+ handler.value = formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken())
+ ASEmitterTokens.MEMBER_ACCESS.getToken()
+ JSRoyaleEmitterTokens.CLOSURE_FUNCTION_NAME.getToken()
+ ASEmitterTokens.PAREN_OPEN.getToken()