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 f2808fde5f93c7e65bd3bf985665e82e5376bbff Author: Josh Tynjala <[email protected]> AuthorDate: Wed Mar 6 12:25:11 2024 -0800 RPC: arguments/request tags are now parsed the same as <fx:Model> Nested objects and attributes for fields are now supported. This brings the Royale compiler closer in compatibility to the Flex SDK compiler. --- .../mxml/MXMLHTTPServiceRequestPropertyNode.java | 108 ++++++++++++-------- ...XMLRemoteObjectMethodArgumentsPropertyNode.java | 108 ++++++++++++-------- ...MLWebServiceOperationArgumentsPropertyNode.java | 110 +++++++++++++-------- .../java/mxml/tags/MXMLHTTPServiceTagTests.java | 12 +++ .../java/mxml/tags/MXMLRemoteObjectTagTests.java | 14 ++- .../java/mxml/tags/MXMLWebServiceTagTests.java | 34 +++++++ 6 files changed, 263 insertions(+), 123 deletions(-) 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 d519cc790..e4f077db4 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 @@ -20,17 +20,16 @@ package org.apache.royale.compiler.internal.tree.mxml; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; 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; +import org.apache.royale.compiler.tree.mxml.IMXMLModelPropertyContainerNode; +import org.apache.royale.compiler.tree.mxml.IMXMLModelPropertyNode; import org.apache.royale.compiler.tree.mxml.IMXMLNode; /** @@ -86,58 +85,84 @@ class MXMLHTTPServiceRequestPropertyNode extends MXMLPropertySpecifierNode imple MXMLNodeInfo info = createNodeInfo(builder); - + // parse it like <fx:Model>, but convert to property specifiers + MXMLModelRootNode modelRootNode = new MXMLModelRootNode(this); + modelRootNode.initializeFromTag(builder, tag); - // look for duplicate property tags - // if there's more than one of the same tag, the value will be an array - Map<String, List<IMXMLTagData>> propertyNameToTags = new HashMap<>(); - for (IMXMLUnitData unit = tag.getFirstChildUnit(); unit != null; unit = unit.getNextSiblingUnit()) + final RoyaleProject project = builder.getProject(); + for (MXMLPropertySpecifierNode specifierNode : getPropertySpecifiers(builder, modelRootNode, objectNode, this, project)) { - if (unit instanceof IMXMLTagData) - { - IMXMLTagData childTag = (IMXMLTagData) unit; - String propertyName = childTag.getShortName(); - List<IMXMLTagData> tagsForProperty = propertyNameToTags.get(propertyName); - if (tagsForProperty == null) - { - tagsForProperty = new ArrayList<IMXMLTagData>(); - propertyNameToTags.put(propertyName, tagsForProperty); - } - tagsForProperty.add(childTag); - } + info.addChildNode(specifierNode); + } + + // Do any final processing. + initializationComplete(builder, tag, info); + } + + protected MXMLPropertySpecifierNode[] getPropertySpecifiers(MXMLTreeBuilder builder, IMXMLModelPropertyContainerNode containerNode, MXMLObjectNode parentNode, MXMLPropertySpecifierNode parentSpecifierNode, RoyaleProject project) + { + List<MXMLPropertySpecifierNode> propSpecifiers = new ArrayList<MXMLPropertySpecifierNode>(); + for (String propertyName : containerNode.getPropertyNames()) { + IMXMLModelPropertyNode[] propertyNodes = containerNode.getPropertyNodes(propertyName); + MXMLPropertySpecifierNode specifierNode = getPropertySpecifier(builder, propertyName, propertyNodes, parentNode, parentSpecifierNode, project); + propSpecifiers.add(specifierNode); } + return propSpecifiers.toArray(new MXMLPropertySpecifierNode[0]); + } - // for each property found, initialize its tags - for (String propertyName : propertyNameToTags.keySet()) + protected MXMLPropertySpecifierNode getPropertySpecifier(MXMLTreeBuilder builder, String propertyName, IMXMLModelPropertyNode[] propertyNodes, MXMLObjectNode parentNode, MXMLPropertySpecifierNode parentSpecifierNode, RoyaleProject project) + { + final MXMLPropertySpecifierNode specifierNode = new MXMLPropertySpecifierNode(parentNode); + specifierNode.setDynamicName(propertyName); + if (propertyNodes.length > 1) { - final List<IMXMLTagData> tagsForProperty = propertyNameToTags.get(propertyName); - final MXMLPropertySpecifierNode specifierNode = new MXMLPropertySpecifierNode(this); - specifierNode.setDynamicName(propertyName); - if (tagsForProperty.size() > 1) + MXMLArrayNode argsArrayNode = new MXMLArrayNode(this); + argsArrayNode.setClassReference(project, IASLanguageConstants.Array); + + List<IMXMLNode> argsChildNodes = new ArrayList<IMXMLNode>(); + for (IMXMLModelPropertyNode propNode : propertyNodes) { - List<IMXMLNode> argsChildNodes = new ArrayList<IMXMLNode>(); - for (IMXMLTagData childTag : tagsForProperty) + if (propNode.hasLeafValue()) { - final MXMLPropertySpecifierNode childSpecifierNode = new MXMLPropertySpecifierNode(this); - childSpecifierNode.setDynamicName(propertyName); - childSpecifierNode.initializeFromTag(builder, childTag); - argsChildNodes.add(childSpecifierNode.getInstanceNode()); + MXMLInstanceNode propInstanceNode = (MXMLInstanceNode) propNode.getInstanceNode(); + propInstanceNode.setParent(argsArrayNode); + argsChildNodes.add(propInstanceNode); } + else + { + MXMLObjectNode propObjectNode = new MXMLObjectNode(this); + propObjectNode.setLocation(propNode); + propObjectNode.setClassReference(project, IASLanguageConstants.Object); + MXMLPropertySpecifierNode[] propSpecifiers = getPropertySpecifiers(builder, propNode, propObjectNode, specifierNode, project); + propObjectNode.setChildren(propSpecifiers); + argsChildNodes.add(propObjectNode); + } + } - MXMLArrayNode argsArrayNode = new MXMLArrayNode(objectNode); - argsArrayNode.setChildren(argsChildNodes.toArray(new IMXMLNode[0])); - specifierNode.setInstanceNode(argsArrayNode); + argsArrayNode.setChildren(argsChildNodes.toArray(new IMXMLNode[0])); + specifierNode.setInstanceNode(argsArrayNode); + } + else + { + IMXMLModelPropertyNode propNode = propertyNodes[0]; + if (propNode.hasLeafValue()) + { + MXMLInstanceNode propInstanceNode = (MXMLInstanceNode) propNode.getInstanceNode(); + propInstanceNode.setParent(parentSpecifierNode); + specifierNode.setLocation(propNode); + specifierNode.setInstanceNode(propInstanceNode); } else { - specifierNode.initializeFromTag(builder, tagsForProperty.get(0)); + MXMLObjectNode propObjectNode = new MXMLObjectNode(this); + propObjectNode.setLocation(propNode); + propObjectNode.setClassReference(project, IASLanguageConstants.Object); + MXMLPropertySpecifierNode[] propSpecifiers = getPropertySpecifiers(builder, propNode, propObjectNode, specifierNode, project); + propObjectNode.setChildren(propSpecifiers); + specifierNode.setInstanceNode(propObjectNode); } - specifierNode.setParent(objectNode); - info.addChildNode(specifierNode); } - - // Do any final processing. - initializationComplete(builder, tag, info); + return specifierNode; } /** @@ -161,5 +186,6 @@ class MXMLHTTPServiceRequestPropertyNode extends MXMLPropertySpecifierNode imple final RoyaleProject project = builder.getProject(); objectNode.setClassReference(project, IASLanguageConstants.Object); objectNode.setChildren(info.getChildNodeList().toArray(new IMXMLNode[0])); + objectNode.setLocation(tag); } } diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLRemoteObjectMethodArgumentsPropertyNode.java b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLRemoteObjectMethodArgumentsPropertyNode.java index 52da032c7..c4722768e 100644 --- a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLRemoteObjectMethodArgumentsPropertyNode.java +++ b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLRemoteObjectMethodArgumentsPropertyNode.java @@ -20,16 +20,15 @@ package org.apache.royale.compiler.internal.tree.mxml; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; 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.IMXMLModelPropertyContainerNode; +import org.apache.royale.compiler.tree.mxml.IMXMLModelPropertyNode; import org.apache.royale.compiler.tree.mxml.IMXMLNode; import org.apache.royale.compiler.tree.mxml.IMXMLRemoteObjectMethodArgumentsPropertyNode; @@ -86,56 +85,84 @@ class MXMLRemoteObjectMethodArgumentsPropertyNode extends MXMLPropertySpecifierN MXMLNodeInfo info = createNodeInfo(builder); - // look for duplicate property tags - // if there's more than one of the same tag, the value will be an array - Map<String, List<IMXMLTagData>> propertyNameToTags = new HashMap<>(); - for (IMXMLUnitData unit = tag.getFirstChildUnit(); unit != null; unit = unit.getNextSiblingUnit()) + // parse it like <fx:Model>, but convert to property specifiers + MXMLModelRootNode modelRootNode = new MXMLModelRootNode(this); + modelRootNode.initializeFromTag(builder, tag); + + final RoyaleProject project = builder.getProject(); + for (MXMLPropertySpecifierNode specifierNode : getPropertySpecifiers(builder, modelRootNode, objectNode, this, project)) { - if (unit instanceof IMXMLTagData) - { - IMXMLTagData childTag = (IMXMLTagData) unit; - String propertyName = childTag.getShortName(); - List<IMXMLTagData> tagsForProperty = propertyNameToTags.get(propertyName); - if (tagsForProperty == null) - { - tagsForProperty = new ArrayList<IMXMLTagData>(); - propertyNameToTags.put(propertyName, tagsForProperty); - } - tagsForProperty.add(childTag); - } + info.addChildNode(specifierNode); } - // for each property found, initialize its tags - for (String propertyName : propertyNameToTags.keySet()) + // Do any final processing. + initializationComplete(builder, tag, info); + } + + protected MXMLPropertySpecifierNode[] getPropertySpecifiers(MXMLTreeBuilder builder, IMXMLModelPropertyContainerNode containerNode, MXMLObjectNode parentNode, MXMLPropertySpecifierNode parentSpecifierNode, RoyaleProject project) + { + List<MXMLPropertySpecifierNode> propSpecifiers = new ArrayList<MXMLPropertySpecifierNode>(); + for (String propertyName : containerNode.getPropertyNames()) { + IMXMLModelPropertyNode[] propertyNodes = containerNode.getPropertyNodes(propertyName); + MXMLPropertySpecifierNode specifierNode = getPropertySpecifier(builder, propertyName, propertyNodes, parentNode, parentSpecifierNode, project); + propSpecifiers.add(specifierNode); + } + return propSpecifiers.toArray(new MXMLPropertySpecifierNode[0]); + } + + protected MXMLPropertySpecifierNode getPropertySpecifier(MXMLTreeBuilder builder, String propertyName, IMXMLModelPropertyNode[] propertyNodes, MXMLObjectNode parentNode, MXMLPropertySpecifierNode parentSpecifierNode, RoyaleProject project) + { + final MXMLPropertySpecifierNode specifierNode = new MXMLPropertySpecifierNode(parentNode); + specifierNode.setDynamicName(propertyName); + if (propertyNodes.length > 1) { - final List<IMXMLTagData> tagsForProperty = propertyNameToTags.get(propertyName); - final MXMLPropertySpecifierNode specifierNode = new MXMLPropertySpecifierNode(this); - specifierNode.setDynamicName(propertyName); - if (tagsForProperty.size() > 1) + MXMLArrayNode argsArrayNode = new MXMLArrayNode(this); + argsArrayNode.setClassReference(project, IASLanguageConstants.Array); + + List<IMXMLNode> argsChildNodes = new ArrayList<IMXMLNode>(); + for (IMXMLModelPropertyNode propNode : propertyNodes) { - List<IMXMLNode> argsChildNodes = new ArrayList<IMXMLNode>(); - for (IMXMLTagData childTag : tagsForProperty) + if (propNode.hasLeafValue()) { - final MXMLPropertySpecifierNode childSpecifierNode = new MXMLPropertySpecifierNode(this); - childSpecifierNode.setDynamicName(propertyName); - childSpecifierNode.initializeFromTag(builder, childTag); - argsChildNodes.add(childSpecifierNode.getInstanceNode()); + MXMLInstanceNode propInstanceNode = (MXMLInstanceNode) propNode.getInstanceNode(); + propInstanceNode.setParent(argsArrayNode); + argsChildNodes.add(propInstanceNode); } + else + { + MXMLObjectNode propObjectNode = new MXMLObjectNode(this); + propObjectNode.setLocation(propNode); + propObjectNode.setClassReference(project, IASLanguageConstants.Object); + MXMLPropertySpecifierNode[] propSpecifiers = getPropertySpecifiers(builder, propNode, propObjectNode, specifierNode, project); + propObjectNode.setChildren(propSpecifiers); + argsChildNodes.add(propObjectNode); + } + } - MXMLArrayNode argsArrayNode = new MXMLArrayNode(objectNode); - argsArrayNode.setChildren(argsChildNodes.toArray(new IMXMLNode[0])); - specifierNode.setInstanceNode(argsArrayNode); + argsArrayNode.setChildren(argsChildNodes.toArray(new IMXMLNode[0])); + specifierNode.setInstanceNode(argsArrayNode); + } + else + { + IMXMLModelPropertyNode propNode = propertyNodes[0]; + if (propNode.hasLeafValue()) + { + MXMLInstanceNode propInstanceNode = (MXMLInstanceNode) propNode.getInstanceNode(); + propInstanceNode.setParent(parentSpecifierNode); + specifierNode.setLocation(propNode); + specifierNode.setInstanceNode(propInstanceNode); } else { - specifierNode.initializeFromTag(builder, tagsForProperty.get(0)); + MXMLObjectNode propObjectNode = new MXMLObjectNode(this); + propObjectNode.setLocation(propNode); + propObjectNode.setClassReference(project, IASLanguageConstants.Object); + MXMLPropertySpecifierNode[] propSpecifiers = getPropertySpecifiers(builder, propNode, propObjectNode, specifierNode, project); + propObjectNode.setChildren(propSpecifiers); + specifierNode.setInstanceNode(propObjectNode); } - specifierNode.setParent(objectNode); - info.addChildNode(specifierNode); } - - // Do any final processing. - initializationComplete(builder, tag, info); + return specifierNode; } /** @@ -159,5 +186,6 @@ class MXMLRemoteObjectMethodArgumentsPropertyNode extends MXMLPropertySpecifierN final RoyaleProject project = builder.getProject(); objectNode.setClassReference(project, IASLanguageConstants.Object); objectNode.setChildren(info.getChildNodeList().toArray(new IMXMLNode[0])); + objectNode.setLocation(tag); } } diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLWebServiceOperationArgumentsPropertyNode.java b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLWebServiceOperationArgumentsPropertyNode.java index e75a9d4cc..af1380cbe 100644 --- a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLWebServiceOperationArgumentsPropertyNode.java +++ b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLWebServiceOperationArgumentsPropertyNode.java @@ -20,18 +20,17 @@ package org.apache.royale.compiler.internal.tree.mxml; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; 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.IMXMLWebServiceOperationArgumentsPropertyNode; +import org.apache.royale.compiler.tree.mxml.IMXMLModelPropertyContainerNode; +import org.apache.royale.compiler.tree.mxml.IMXMLModelPropertyNode; import org.apache.royale.compiler.tree.mxml.IMXMLNode; +import org.apache.royale.compiler.tree.mxml.IMXMLWebServiceOperationArgumentsPropertyNode; /** * AST node for the {@code <arguments>} tag under the {@code <operation>} tag, which is under the {@code <WebService>} tag. @@ -86,56 +85,84 @@ class MXMLWebServiceOperationArgumentsPropertyNode extends MXMLPropertySpecifier MXMLNodeInfo info = createNodeInfo(builder); - // look for duplicate property tags - // if there's more than one of the same tag, the value will be an array - Map<String, List<IMXMLTagData>> propertyNameToTags = new HashMap<>(); - for (IMXMLUnitData unit = tag.getFirstChildUnit(); unit != null; unit = unit.getNextSiblingUnit()) + // parse it like <fx:Model>, but convert to property specifiers + MXMLModelRootNode modelRootNode = new MXMLModelRootNode(this); + modelRootNode.initializeFromTag(builder, tag); + + final RoyaleProject project = builder.getProject(); + for (MXMLPropertySpecifierNode specifierNode : getPropertySpecifiers(builder, modelRootNode, objectNode, this, project)) { - if (unit instanceof IMXMLTagData) - { - IMXMLTagData childTag = (IMXMLTagData) unit; - String propertyName = childTag.getShortName(); - List<IMXMLTagData> tagsForProperty = propertyNameToTags.get(propertyName); - if (tagsForProperty == null) - { - tagsForProperty = new ArrayList<IMXMLTagData>(); - propertyNameToTags.put(propertyName, tagsForProperty); - } - tagsForProperty.add(childTag); - } + info.addChildNode(specifierNode); } - // for each property found, initialize its tags - for (String propertyName : propertyNameToTags.keySet()) + // Do any final processing. + initializationComplete(builder, tag, info); + } + + protected MXMLPropertySpecifierNode[] getPropertySpecifiers(MXMLTreeBuilder builder, IMXMLModelPropertyContainerNode containerNode, MXMLObjectNode parentNode, MXMLPropertySpecifierNode parentSpecifierNode, RoyaleProject project) + { + List<MXMLPropertySpecifierNode> propSpecifiers = new ArrayList<MXMLPropertySpecifierNode>(); + for (String propertyName : containerNode.getPropertyNames()) { + IMXMLModelPropertyNode[] propertyNodes = containerNode.getPropertyNodes(propertyName); + MXMLPropertySpecifierNode specifierNode = getPropertySpecifier(builder, propertyName, propertyNodes, parentNode, parentSpecifierNode, project); + propSpecifiers.add(specifierNode); + } + return propSpecifiers.toArray(new MXMLPropertySpecifierNode[0]); + } + + protected MXMLPropertySpecifierNode getPropertySpecifier(MXMLTreeBuilder builder, String propertyName, IMXMLModelPropertyNode[] propertyNodes, MXMLObjectNode parentNode, MXMLPropertySpecifierNode parentSpecifierNode, RoyaleProject project) + { + final MXMLPropertySpecifierNode specifierNode = new MXMLPropertySpecifierNode(parentNode); + specifierNode.setDynamicName(propertyName); + if (propertyNodes.length > 1) { - final List<IMXMLTagData> tagsForProperty = propertyNameToTags.get(propertyName); - final MXMLPropertySpecifierNode specifierNode = new MXMLPropertySpecifierNode(this); - specifierNode.setDynamicName(propertyName); - if (tagsForProperty.size() > 1) + MXMLArrayNode argsArrayNode = new MXMLArrayNode(this); + argsArrayNode.setClassReference(project, IASLanguageConstants.Array); + + List<IMXMLNode> argsChildNodes = new ArrayList<IMXMLNode>(); + for (IMXMLModelPropertyNode propNode : propertyNodes) { - List<IMXMLNode> argsChildNodes = new ArrayList<IMXMLNode>(); - for (IMXMLTagData childTag : tagsForProperty) + if (propNode.hasLeafValue()) { - final MXMLPropertySpecifierNode childSpecifierNode = new MXMLPropertySpecifierNode(this); - childSpecifierNode.setDynamicName(propertyName); - childSpecifierNode.initializeFromTag(builder, childTag); - argsChildNodes.add(childSpecifierNode.getInstanceNode()); + MXMLInstanceNode propInstanceNode = (MXMLInstanceNode) propNode.getInstanceNode(); + propInstanceNode.setParent(argsArrayNode); + argsChildNodes.add(propInstanceNode); } + else + { + MXMLObjectNode propObjectNode = new MXMLObjectNode(this); + propObjectNode.setLocation(propNode); + propObjectNode.setClassReference(project, IASLanguageConstants.Object); + MXMLPropertySpecifierNode[] propSpecifiers = getPropertySpecifiers(builder, propNode, propObjectNode, specifierNode, project); + propObjectNode.setChildren(propSpecifiers); + argsChildNodes.add(propObjectNode); + } + } - MXMLArrayNode argsArrayNode = new MXMLArrayNode(objectNode); - argsArrayNode.setChildren(argsChildNodes.toArray(new IMXMLNode[0])); - specifierNode.setInstanceNode(argsArrayNode); + argsArrayNode.setChildren(argsChildNodes.toArray(new IMXMLNode[0])); + specifierNode.setInstanceNode(argsArrayNode); + } + else + { + IMXMLModelPropertyNode propNode = propertyNodes[0]; + if (propNode.hasLeafValue()) + { + MXMLInstanceNode propInstanceNode = (MXMLInstanceNode) propNode.getInstanceNode(); + propInstanceNode.setParent(parentSpecifierNode); + specifierNode.setLocation(propNode); + specifierNode.setInstanceNode(propInstanceNode); } else { - specifierNode.initializeFromTag(builder, tagsForProperty.get(0)); + MXMLObjectNode propObjectNode = new MXMLObjectNode(this); + propObjectNode.setLocation(propNode); + propObjectNode.setClassReference(project, IASLanguageConstants.Object); + MXMLPropertySpecifierNode[] propSpecifiers = getPropertySpecifiers(builder, propNode, propObjectNode, specifierNode, project); + propObjectNode.setChildren(propSpecifiers); + specifierNode.setInstanceNode(propObjectNode); } - specifierNode.setParent(objectNode); - info.addChildNode(specifierNode); } - - // Do any final processing. - initializationComplete(builder, tag, info); + return specifierNode; } /** @@ -159,5 +186,6 @@ class MXMLWebServiceOperationArgumentsPropertyNode extends MXMLPropertySpecifier final RoyaleProject project = builder.getProject(); objectNode.setClassReference(project, IASLanguageConstants.Object); objectNode.setChildren(info.getChildNodeList().toArray(new IMXMLNode[0])); + objectNode.setLocation(tag); } } diff --git a/compiler/src/test/java/mxml/tags/MXMLHTTPServiceTagTests.java b/compiler/src/test/java/mxml/tags/MXMLHTTPServiceTagTests.java index 4984a15b2..b9e461866 100644 --- a/compiler/src/test/java/mxml/tags/MXMLHTTPServiceTagTests.java +++ b/compiler/src/test/java/mxml/tags/MXMLHTTPServiceTagTests.java @@ -98,6 +98,13 @@ public class MXMLHTTPServiceTagTests extends MXMLInstanceTagTestsBase " <d>456.7</d>", " <d>hello</d>", " <d>true</d>", + " <e>", + " <e_1>890.1</e_1>", + " </e>", + " <f f_1='234.5'/>", + " <g g_1='howdy'>", + " <g_1>678.9</g_1>", + " </g>", " </mx:request>", " <mx:method>POST</mx:method>", "</mx:HTTPService>" @@ -113,6 +120,11 @@ public class MXMLHTTPServiceTagTests extends MXMLInstanceTagTestsBase "assertEqual('hs1.request.d[0]', hs1.request['d'][0], 456.7);", "assertEqual('hs1.request.d[1]', hs1.request['d'][1], 'hello');", "assertEqual('hs1.request.d[2]', hs1.request['d'][2], true);", + "assertEqual('hs1.request.e.e_1', hs1.request['e']['e_1'], 890.1);", + "assertEqual('hs1.request.f.f_1', hs1.request['f']['f_1'], 234.5);", + "assertEqual('hs1.request.g.g_1.length', hs1.request['g']['g_1'].length, 2);", + "assertEqual('hs1.request.g.g_1[0]', hs1.request['g']['g_1'][0], 'howdy');", + "assertEqual('hs1.request.g.g_1[1]', hs1.request['g']['g_1'][1], 678.9);", "assertEqual('hs1.method', hs1.method, 'POST');" }; String mxml = getMXML(declarations, asserts); diff --git a/compiler/src/test/java/mxml/tags/MXMLRemoteObjectTagTests.java b/compiler/src/test/java/mxml/tags/MXMLRemoteObjectTagTests.java index 4cb616e2f..a4fe324d8 100644 --- a/compiler/src/test/java/mxml/tags/MXMLRemoteObjectTagTests.java +++ b/compiler/src/test/java/mxml/tags/MXMLRemoteObjectTagTests.java @@ -127,6 +127,13 @@ public class MXMLRemoteObjectTagTests extends MXMLInstanceTagTestsBase " <d>456.7</d>", " <d>hello</d>", " <d>true</d>", + " <e>", + " <e_1>890.1</e_1>", + " </e>", + " <f f_1='234.5'/>", + " <g g_1='howdy'>", + " <g_1>678.9</g_1>", + " </g>", " </mx:arguments>", " </mx:method>", "</mx:RemoteObject>" @@ -140,7 +147,7 @@ public class MXMLRemoteObjectTagTests extends MXMLInstanceTagTestsBase "assertEqual('ro1 is RemoteObject', ro1 is RemoteObject, true);", "assertEqual('ro1.operations.m1', ro1.operations['m1'] is Operation, true);", "assertEqual('ro1.operations.m1.name', ro1.operations['m1'].name, 'm1');", - "assertEqual('ro1.operations.m1.argumentNames.length', ro1.operations['m1'].argumentNames.length, 4);", + "assertEqual('ro1.operations.m1.argumentNames.length', ro1.operations['m1'].argumentNames.length, 7);", "assertEqual('ro1.operations.m1.argumentNames[0]', ro1.operations['m1'].argumentNames[0], 'a');", "assertEqual('ro1.operations.m1.argumentNames[1]', ro1.operations['m1'].argumentNames[1], 'b');", "assertEqual('ro1.operations.m1.argumentNames[1]', ro1.operations['m1'].argumentNames[2], 'c');", @@ -151,6 +158,11 @@ public class MXMLRemoteObjectTagTests extends MXMLInstanceTagTestsBase "assertEqual('ro1.operations.m1.arguments.d[0]', ro1.operations['m1'].arguments['d'][0], 456.7);", "assertEqual('ro1.operations.m1.arguments.d[1]', ro1.operations['m1'].arguments['d'][1], 'hello');", "assertEqual('ro1.operations.m1.arguments.d[2]', ro1.operations['m1'].arguments['d'][2], true);", + "assertEqual('ro1.operations.m1.arguments.e.e_1', ro1.operations['m1'].arguments['e']['e_1'], 890.1);", + "assertEqual('ro1.operations.m1.arguments.f.f_1', ro1.operations['m1'].arguments['f']['f_1'], 234.5);", + "assertEqual('ro1.operations.m1.arguments.g.g_1.length', ro1.operations['m1'].arguments['g']['g_1'].length, 2);", + "assertEqual('ro1.operations.m1.arguments.g.g_1[0]', ro1.operations['m1'].arguments['g']['g_1'][0], 'howdy');", + "assertEqual('ro1.operations.m1.arguments.g.g_1[1]', ro1.operations['m1'].arguments['g']['g_1'][1], 678.9);", }; String mxml = getMXML(declarations, scriptDeclarations, asserts); compileAndRun(mxml, true, true, false, null); diff --git a/compiler/src/test/java/mxml/tags/MXMLWebServiceTagTests.java b/compiler/src/test/java/mxml/tags/MXMLWebServiceTagTests.java index 16ce452ee..6154f6eea 100644 --- a/compiler/src/test/java/mxml/tags/MXMLWebServiceTagTests.java +++ b/compiler/src/test/java/mxml/tags/MXMLWebServiceTagTests.java @@ -149,6 +149,13 @@ public class MXMLWebServiceTagTests extends MXMLInstanceTagTestsBase " <d>456.7</d>", " <d>hello</d>", " <d>true</d>", + " <e>", + " <e_1>890.1</e_1>", + " </e>", + " <f f_1='234.5'/>", + " <g g_1='howdy'>", + " <g_1>678.9</g_1>", + " </g>", " </mx:arguments>", " </mx:operation>", "</mx:WebService>" @@ -169,6 +176,11 @@ public class MXMLWebServiceTagTests extends MXMLInstanceTagTestsBase "assertEqual('ws1.operations.op1.arguments.d[0]', ws1.operations['op1'].arguments['d'][0], 456.7);", "assertEqual('ws1.operations.op1.arguments.d[1]', ws1.operations['op1'].arguments['d'][1], 'hello');", "assertEqual('ws1.operations.op1.arguments.d[2]', ws1.operations['op1'].arguments['d'][2], true);", + "assertEqual('ws1.operations.op1.arguments.e.e_1', ws1.operations['op1'].arguments['e']['e_1'], 890.1);", + "assertEqual('ws1.operations.op1.arguments.f.f_1', ws1.operations['op1'].arguments['f']['f_1'], 234.5);", + "assertEqual('ws1.operations.op1.arguments.g.g_1.length', ws1.operations['op1'].arguments['g']['g_1'].length, 2);", + "assertEqual('ws1.operations.op1.arguments.g.g_1[0]', ws1.operations['op1'].arguments['g']['g_1'][0], 'howdy');", + "assertEqual('ws1.operations.op1.arguments.g.g_1[1]', ws1.operations['op1'].arguments['g']['g_1'][1], 678.9);", "assertEqual('ws1.operations.op1.request.a', ws1.operations['op1'].request['a'], 'abc');", "assertEqual('ws1.operations.op1.request.b', ws1.operations['op1'].request['b'], 123);", "assertEqual('ws1.operations.op1.request.c', ws1.operations['op1'].request['c'], false);", @@ -176,6 +188,11 @@ public class MXMLWebServiceTagTests extends MXMLInstanceTagTestsBase "assertEqual('ws1.operations.op1.request.d[0]', ws1.operations['op1'].request['d'][0], 456.7);", "assertEqual('ws1.operations.op1.request.d[1]', ws1.operations['op1'].request['d'][1], 'hello');", "assertEqual('ws1.operations.op1.request.d[2]', ws1.operations['op1'].request['d'][2], true);", + "assertEqual('ws1.operations.op1.request.e.e_1', ws1.operations['op1'].request['e']['e_1'], 890.1);", + "assertEqual('ws1.operations.op1.request.f.f_1', ws1.operations['op1'].request['f']['f_1'], 234.5);", + "assertEqual('ws1.operations.op1.request.g.g_1.length', ws1.operations['op1'].request['g']['g_1'].length, 2);", + "assertEqual('ws1.operations.op1.request.g.g_1[0]', ws1.operations['op1'].request['g']['g_1'][0], 'howdy');", + "assertEqual('ws1.operations.op1.request.g.g_1[1]', ws1.operations['op1'].request['g']['g_1'][1], 678.9);", }; String mxml = getMXML(declarations, scriptDeclarations, asserts); compileAndRun(mxml, true, true, false, null); @@ -195,6 +212,13 @@ public class MXMLWebServiceTagTests extends MXMLInstanceTagTestsBase " <d>456.7</d>", " <d>hello</d>", " <d>true</d>", + " <e>", + " <e_1>890.1</e_1>", + " </e>", + " <f f_1='234.5'/>", + " <g g_1='howdy'>", + " <g_1>678.9</g_1>", + " </g>", " </mx:request>", " </mx:operation>", "</mx:WebService>" @@ -215,6 +239,11 @@ public class MXMLWebServiceTagTests extends MXMLInstanceTagTestsBase "assertEqual('ws1.operations.op1.arguments.d[0]', ws1.operations['op1'].arguments['d'][0], 456.7);", "assertEqual('ws1.operations.op1.arguments.d[1]', ws1.operations['op1'].arguments['d'][1], 'hello');", "assertEqual('ws1.operations.op1.arguments.d[2]', ws1.operations['op1'].arguments['d'][2], true);", + "assertEqual('ws1.operations.op1.arguments.e.e_1', ws1.operations['op1'].arguments['e']['e_1'], 890.1);", + "assertEqual('ws1.operations.op1.arguments.f.f_1', ws1.operations['op1'].arguments['f']['f_1'], 234.5);", + "assertEqual('ws1.operations.op1.arguments.g.g_1.length', ws1.operations['op1'].arguments['g']['g_1'].length, 2);", + "assertEqual('ws1.operations.op1.arguments.g.g_1[0]', ws1.operations['op1'].arguments['g']['g_1'][0], 'howdy');", + "assertEqual('ws1.operations.op1.arguments.g.g_1[1]', ws1.operations['op1'].arguments['g']['g_1'][1], 678.9);", "assertEqual('ws1.operations.op1.request.a', ws1.operations['op1'].request['a'], 'abc');", "assertEqual('ws1.operations.op1.request.b', ws1.operations['op1'].request['b'], 123);", "assertEqual('ws1.operations.op1.request.c', ws1.operations['op1'].request['c'], false);", @@ -222,6 +251,11 @@ public class MXMLWebServiceTagTests extends MXMLInstanceTagTestsBase "assertEqual('ws1.operations.op1.request.d[0]', ws1.operations['op1'].request['d'][0], 456.7);", "assertEqual('ws1.operations.op1.request.d[1]', ws1.operations['op1'].request['d'][1], 'hello');", "assertEqual('ws1.operations.op1.request.d[2]', ws1.operations['op1'].request['d'][2], true);", + "assertEqual('ws1.operations.op1.request.e.e_1', ws1.operations['op1'].request['e']['e_1'], 890.1);", + "assertEqual('ws1.operations.op1.request.f.f_1', ws1.operations['op1'].request['f']['f_1'], 234.5);", + "assertEqual('ws1.operations.op1.request.g.g_1.length', ws1.operations['op1'].request['g']['g_1'].length, 2);", + "assertEqual('ws1.operations.op1.request.g.g_1[0]', ws1.operations['op1'].request['g']['g_1'][0], 'howdy');", + "assertEqual('ws1.operations.op1.request.g.g_1[1]', ws1.operations['op1'].request['g']['g_1'][1], 678.9);", }; String mxml = getMXML(declarations, scriptDeclarations, asserts); compileAndRun(mxml, true, true, false, null);
