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.

Reply via email to