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 79aee652525c916738f26f6b911d344486a60e18
Author: Josh Tynjala <joshtynj...@apache.org>
AuthorDate: Thu Feb 1 10:26:02 2024 -0800

    MXMLHTTPServiceNode, MXMLHTTPServiceRequestPropertyNode: improve broken 
parsing of <request> tag under <HTTPService>
---
 .../internal/tree/mxml/MXMLHTTPServiceNode.java    | 19 ++++++++--------
 .../mxml/MXMLHTTPServiceRequestPropertyNode.java   | 26 +++++++++++++++++++---
 2 files changed, 32 insertions(+), 13 deletions(-)

diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLHTTPServiceNode.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLHTTPServiceNode.java
index 82a01e781..afcae8d8d 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLHTTPServiceNode.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLHTTPServiceNode.java
@@ -23,6 +23,7 @@ import 
org.apache.royale.compiler.definitions.IClassDefinition;
 import org.apache.royale.compiler.definitions.IDefinition;
 import org.apache.royale.compiler.internal.projects.RoyaleProject;
 import org.apache.royale.compiler.internal.tree.as.NodeBase;
+import org.apache.royale.compiler.mxml.IMXMLTagData;
 import org.apache.royale.compiler.tree.ASTNodeID;
 import org.apache.royale.compiler.tree.mxml.IMXMLHTTPServiceNode;
 
@@ -53,7 +54,6 @@ import 
org.apache.royale.compiler.tree.mxml.IMXMLHTTPServiceNode;
  */
 class MXMLHTTPServiceNode extends MXMLInstanceNode implements 
IMXMLHTTPServiceNode
 {
-
     private static final String TAG_REQUEST = "request";
 
     /**
@@ -72,15 +72,10 @@ class MXMLHTTPServiceNode extends MXMLInstanceNode 
implements IMXMLHTTPServiceNo
         return ASTNodeID.MXMLHTTPServiceID;
     }
 
-    /**
-     * Create special {@link MXMLHTTPServiceRequestPropertyNode} for
-     * {@code <s:request>} tag. Otherwise, fall-back to the normal creation
-     * logic.
-     */
     @Override
-    protected final MXMLSpecifierNodeBase createSpecifierNode(MXMLTreeBuilder 
builder, String specifierName)
+    protected void processChildTag(MXMLTreeBuilder builder, IMXMLTagData tag, 
IMXMLTagData childTag, MXMLNodeInfo info)
     {
-        if (TAG_REQUEST.equals(specifierName))
+        if (TAG_REQUEST.equals(childTag.getShortName()) && 
childTag.getURI().equals(tag.getURI()))
         {
             final RoyaleProject project = builder.getProject();
             final IClassDefinition classHTTPService = 
getClassReference(project);
@@ -89,9 +84,13 @@ class MXMLHTTPServiceNode extends MXMLInstanceNode 
implements IMXMLHTTPServiceNo
             {
                 final MXMLHTTPServiceRequestPropertyNode requestPropertyNode = 
new MXMLHTTPServiceRequestPropertyNode(this);
                 requestPropertyNode.setDefinition(definitionRequest);
-                return requestPropertyNode;
+                requestPropertyNode.initializeFromTag(builder, childTag);
+                info.addChildNode(requestPropertyNode);
             }
         }
-        return super.createSpecifierNode(builder, specifierName);
+        else
+        {
+            super.processChildTag(builder, tag, childTag, info);
+        }
     }
 }
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLHTTPServiceRequestPropertyNode.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLHTTPServiceRequestPropertyNode.java
index aad543a77..f81e76cf3 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLHTTPServiceRequestPropertyNode.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLHTTPServiceRequestPropertyNode.java
@@ -22,6 +22,7 @@ package org.apache.royale.compiler.internal.tree.mxml;
 import org.apache.royale.compiler.constants.IASLanguageConstants;
 import org.apache.royale.compiler.internal.projects.RoyaleProject;
 import org.apache.royale.compiler.mxml.IMXMLTagData;
+import org.apache.royale.compiler.mxml.IMXMLUnitData;
 import org.apache.royale.compiler.tree.ASTNodeID;
 import org.apache.royale.compiler.tree.as.IASNode;
 import 
org.apache.royale.compiler.tree.mxml.IMXMLHTTPServiceRequestPropertyNode;
@@ -32,7 +33,6 @@ import org.apache.royale.compiler.tree.mxml.IMXMLNode;
  */
 class MXMLHTTPServiceRequestPropertyNode extends MXMLPropertySpecifierNode 
implements IMXMLHTTPServiceRequestPropertyNode
 {
-
     /**
      * Create node for {@code <s:request>} tag.
      * 
@@ -68,10 +68,32 @@ class MXMLHTTPServiceRequestPropertyNode extends 
MXMLPropertySpecifierNode imple
     public IASNode getChild(int i)
     {
         if (i != 0)
+        {
             throw new IndexOutOfBoundsException("Request node only have one 
child node.");
+        }
         return objectNode;
     }
 
+    @Override
+    protected void initializeFromTag(MXMLTreeBuilder builder, IMXMLTagData tag)
+    {
+        setLocation(tag);
+
+        MXMLNodeInfo info = createNodeInfo(builder);
+
+        // Process each child tag.
+        for (IMXMLUnitData unit = tag.getFirstChildUnit(); unit != null; unit 
= unit.getNextSiblingUnit())
+        {
+            if (unit instanceof IMXMLTagData)
+            {
+                processChildTag(builder, tag, (IMXMLTagData) unit, info);
+            }
+        }
+
+        // Do any final processing.
+        initializationComplete(builder, tag, info);
+    }
+
     /**
      * Add child tags as dynamic properties to the "object" node.
      */
@@ -105,8 +127,6 @@ class MXMLHTTPServiceRequestPropertyNode extends 
MXMLPropertySpecifierNode imple
     {
         final RoyaleProject project = builder.getProject();
         objectNode.setClassReference(project, IASLanguageConstants.Object);
-        objectNode.initializeFromTag(builder, tag);
-        objectNode.initializationComplete(builder, tag, 
createNodeInfo(builder));
         objectNode.setChildren(info.getChildNodeList().toArray(new 
IMXMLNode[0]));
     }
 }

Reply via email to