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 221f48b event handlers in inner components were incorrectly output.
Fixes apache/royale-asjs#514
221f48b is described below
commit 221f48b22192d01726c47de433bc839d7dcdab00
Author: Alex Harui <[email protected]>
AuthorDate: Sat Oct 19 17:06:15 2019 -0700
event handlers in inner components were incorrectly output. Fixes
apache/royale-asjs#514
---
.../compiler/internal/codegen/as/ASEmitter.java | 4 +-
.../codegen/mxml/royale/MXMLRoyaleEmitter.java | 1 +
.../mxml/royale/TestRoyaleMXMLApplication.java | 175 +++++++++++++++++++++
.../internal/tree/mxml/MXMLComponentNode.java | 1 +
4 files changed, 179 insertions(+), 2 deletions(-)
diff --git
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/as/ASEmitter.java
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/as/ASEmitter.java
index f2ef37d..3441a40 100644
---
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/as/ASEmitter.java
+++
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/as/ASEmitter.java
@@ -86,12 +86,12 @@ public class ASEmitter implements IASEmitter, IEmitter
private StringBuilder builder;
- protected StringBuilder getBuilder()
+ public StringBuilder getBuilder()
{
return builder;
}
- protected void setBuilder(StringBuilder sb)
+ public void setBuilder(StringBuilder sb)
{
builder = sb;
}
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 71e6731..430b7be 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
@@ -813,6 +813,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter
implements
JSRoyaleEmitter fjs = (JSRoyaleEmitter) ((IMXMLBlockWalker)
getMXMLWalker())
.getASEmitter();
+ fjs.setBuilder(getBuilder());
fjs.getModel().setCurrentClass(cdef);
// visit tags
diff --git
a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLApplication.java
b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLApplication.java
index deec96c..7b4b592 100644
---
a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLApplication.java
+++
b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLApplication.java
@@ -1313,6 +1313,181 @@ public class TestRoyaleMXMLApplication extends
RoyaleTestBase
}
@Test
+ public void testFXComponentEventHandler()
+ {
+ String code = "<basic:Application
xmlns:fx=\"http://ns.adobe.com/mxml/2009\"
xmlns:basic=\"library://ns.apache.org/royale/basic\">"
+ + "<fx:Declarations><fx:Component><basic:DropDownList
change=\"trace('bar')\" />"
+ + "</fx:Component></fx:Declarations></basic:Application>";
+
+ IMXMLDocumentNode dnode = (IMXMLDocumentNode) getNode(code,
+ IMXMLDocumentNode.class,
RoyaleTestBase.WRAP_LEVEL_NONE);
+
+
((JSRoyaleEmitter)(mxmlBlockWalker.getASEmitter())).getModel().setCurrentClass(dnode.getDefinition());
+ mxmlBlockWalker.visitDocument(dnode);
+ String appName = dnode.getQualifiedName();
+ String outTemplate = "/**\n" +
+ " * AppName\n" +
+ " *\n" +
+ " * @fileoverview\n" +
+ " *\n" +
+ " * @suppress {checkTypes|accessControls}\n" +
+ " */\n" +
+ "\n" +
+ "goog.provide('AppName');\n" +
+ "goog.provide('AppName.AppName_component0');\n" +
+ "\n" +
+ "goog.require('org.apache.royale.core.Application');\n"
+
+ "goog.require('org.apache.royale.events.Event');\n" +
+
"goog.require('org.apache.royale.html.DropDownList');\n" +
+
"goog.require('org.apache.royale.core.ClassFactory');\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "/**\n" +
+ " * @constructor\n" +
+ " * @extends {org.apache.royale.core.Application}\n" +
+ " */\n" +
+ "AppName = function() {\n" +
+ " AppName.base(this, 'constructor');\n" +
+ " \n" +
+ " /**\n" +
+ " * @private\n" +
+ " * @type {Array}\n" +
+ " */\n" +
+ " this.mxmldd;\n" +
+ " \n" +
+ " /**\n" +
+ " * @private\n" +
+ " * @type {Array}\n" +
+ " */\n" +
+ " this.mxmldp;\n" +
+ "};\n" +
+ "goog.inherits(AppName,
org.apache.royale.core.Application);\n" +
+ "\n" +
+ "\n" +
+ "/**\n" +
+ " * Prevent renaming of class. Needed for
reflection.\n" +
+ " */\n" +
+ "goog.exportSymbol('AppName', AppName);\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "/**\n" +
+ " * @constructor\n" +
+ " * @extends {org.apache.royale.html.DropDownList}\n" +
+ " */\n" +
+ "AppName.AppName_component0 = function() {\n" +
+ " AppName.AppName_component0.base(this,
'constructor');\n" +
+ " \n" +
+ " /**\n" +
+ " * @private\n" +
+ " * @type {Array}\n" +
+ " */\n" +
+ " this.mxmldd;\n" +
+ " \n" +
+ " /**\n" +
+ " * @private\n" +
+ " * @type {Array}\n" +
+ " */\n" +
+ " this.mxmldp;\n" +
+ "\n" +
+ " this.generateMXMLAttributes\n" +
+ " ([0,\n" +
+ "0,\n" +
+ "1,\n" +
+ "'change',\n" +
+ "this.$EH0\n" +
+ " ]);\n" +
+ " \n" +
+ "};\n" +
+ "goog.inherits(AppName.AppName_component0,
org.apache.royale.html.DropDownList);\n" +
+ "\n" +
+ "\n" +
+ "/**\n" +
+ " * Prevent renaming of class. Needed for
reflection.\n" +
+ " */\n" +
+ "goog.exportSymbol('AppName.AppName_component0',
AppName.AppName_component0);\n" +
+ "\n" +
+ "\n" +
+ "/**\n" +
+ " * Metadata\n" +
+ " *\n" +
+ " * @type {Object.<string, Array.<Object>>}\n" +
+ " */\n" +
+ "AppName.AppName_component0.prototype.ROYALE_CLASS_INFO
= { names: [{ name: 'AppName_component0', qName: 'AppName.AppName_component0',
kind: 'class' }] };\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "/**\n" +
+ " * Reflection\n" +
+ " *\n" +
+ " * @return {Object.<string, Function>}\n" +
+ " */\n" +
+
"AppName.AppName_component0.prototype.ROYALE_REFLECTION_INFO = function () {\n"
+
+ " return {\n" +
+ " variables: function () {return {};},\n" +
+ " accessors: function () {return {};},\n" +
+ " methods: function () {\n" +
+ " return {\n" +
+ " 'AppName_component0': { type: '',
declaredBy: 'AppName_component0'}\n"+
+ " };\n" +
+ " }\n" +
+ " };\n" +
+ "};\n" +
+ "/**\n" +
+ " * @const\n" +
+ " * @type {number}\n" +
+ " */\n" +
+
"AppName.AppName_component0.prototype.ROYALE_REFLECTION_INFO.compileFlags = 9;"
+
+ "\n" +
+ "\n" +
+ "\n" +
+ "/**\n" +
+ " * @export\n" +
+ " * @param {org.apache.royale.events.Event} event\n" +
+ " */\n" +
+ "AppName.AppName_component0.prototype.$EH0 =
function(event)\n" +
+ "{\n" +
+ "
org.apache.royale.utils.Language.trace('bar');\n" +
+ "};\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "/**\n" +
+ " * Metadata\n" +
+ " *\n" +
+ " * @type {Object.<string, Array.<Object>>}\n" +
+ " */\n" +
+ "AppName.prototype.ROYALE_CLASS_INFO = { names: [{
name: 'AppName', qName: 'AppName', kind: 'class' }] };\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "/**\n" +
+ " * Reflection\n" +
+ " *\n" +
+ " * @return {Object.<string, Function>}\n" +
+ " */\n" +
+ "AppName.prototype.ROYALE_REFLECTION_INFO = function ()
{\n" +
+ " return {\n" +
+ " variables: function () {return {};},\n" +
+ " accessors: function () {return {};},\n" +
+ " methods: function () {\n" +
+ " return {\n" +
+ " 'AppName': { type: '', declaredBy:
'AppName'}\n"+
+ " };\n" +
+ " }\n" +
+ " };\n" +
+ "};\n" +
+ "/**\n" +
+ " * @const\n" +
+ " * @type {number}\n" +
+ " */\n" +
+ "AppName.prototype.ROYALE_REFLECTION_INFO.compileFlags
= 9;";
+
+ assertOutMXMLPostProcess(outTemplate.replaceAll("AppName", appName),
true);
+ }
+
+ @Test
public void testRoyaleMainFileDual()
{
MXMLJSC mxmlc = new MXMLJSC();
diff --git
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLComponentNode.java
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLComponentNode.java
index 58db22b..8f4ee91 100644
---
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLComponentNode.java
+++
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLComponentNode.java
@@ -133,6 +133,7 @@ class MXMLComponentNode extends MXMLFactoryNode implements
IMXMLComponentNode
// TODO Add a problem subclass for this.
ICompilerProblem problem = new MXMLSemanticProblem(childTag);
builder.addProblem(problem);
+ return;
}
// Check that the definition is for a class.