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])); } }