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

commit 9a5ff1cf89a7d0b1a6e41029bccd1ca7e2d00f17
Author: Alex Harui <[email protected]>
AuthorDate: Thu Dec 21 22:44:18 2017 -0800

    special case the HTML package to allow either child tags or html content
---
 .../tree/mxml/MXMLClassReferenceNodeBase.java      | 82 ++++++++++++++++++++++
 .../internal/tree/mxml/MXMLExpressionNodeBase.java |  2 +-
 2 files changed, 83 insertions(+), 1 deletion(-)

diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
index dca076a..2d49c32 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.royale.compiler.constants.IASLanguageConstants;
+import org.apache.royale.compiler.constants.IMXMLCoreConstants;
 import org.apache.royale.compiler.definitions.IClassDefinition;
 import org.apache.royale.compiler.definitions.IDefinition;
 import org.apache.royale.compiler.definitions.IEffectDefinition;
@@ -35,6 +36,9 @@ import 
org.apache.royale.compiler.definitions.IStyleDefinition;
 import org.apache.royale.compiler.definitions.IVariableDefinition;
 import org.apache.royale.compiler.internal.definitions.ClassDefinition;
 import org.apache.royale.compiler.internal.mxml.MXMLDialect;
+import org.apache.royale.compiler.internal.mxml.MXMLTagData;
+import org.apache.royale.compiler.internal.mxml.MXMLTextData;
+import org.apache.royale.compiler.internal.parsing.mxml.MXMLToken;
 import org.apache.royale.compiler.internal.projects.RoyaleProject;
 import org.apache.royale.compiler.internal.scopes.ASProjectScope;
 import org.apache.royale.compiler.internal.tree.as.NodeBase;
@@ -42,9 +46,11 @@ import org.apache.royale.compiler.mxml.IMXMLTagAttributeData;
 import org.apache.royale.compiler.mxml.IMXMLTagData;
 import org.apache.royale.compiler.mxml.IMXMLTextData;
 import org.apache.royale.compiler.mxml.IMXMLUnitData;
+import org.apache.royale.compiler.parsing.MXMLTokenTypes;
 import org.apache.royale.compiler.problems.ICompilerProblem;
 import org.apache.royale.compiler.problems.MXMLDuplicateChildTagProblem;
 import org.apache.royale.compiler.projects.ICompilerProject;
+import org.apache.royale.compiler.tree.ASTNodeID;
 import org.apache.royale.compiler.tree.as.IASNode;
 import org.apache.royale.compiler.tree.mxml.IMXMLClassReferenceNode;
 import org.apache.royale.compiler.tree.mxml.IMXMLEventSpecifierNode;
@@ -153,6 +159,12 @@ abstract class MXMLClassReferenceNodeBase extends 
MXMLNodeBase implements IMXMLC
     private IVariableDefinition defaultPropertyDefinition;
 
     /**
+     * The definition of an alternate default property. This gets lazily 
initialized by
+     * {@code getDefaultPropertyDefinition()} if we need to know it.
+     */
+    private IVariableDefinition altDefaultPropertyDefinition;
+    
+    /**
      * A flag that keeps track of whether the {@code defaultPropertyDefinition}
      * field has been initialized. Simply checking whether it is
      * <code>null</code> doesn't work, because <code>null</code> means
@@ -518,6 +530,59 @@ abstract class MXMLClassReferenceNodeBase extends 
MXMLNodeBase implements IMXMLC
                         }
                        }
                 }
+                else if (altDefaultPropertyDefinition != null && 
!processedDefaultProperty && 
altDefaultPropertyDefinition.getBaseName().equals("textContent"))
+                {
+                       String uri = childTag.getURI();
+                       if (uri.equals("library://ns.apache.org/royale/html"))
+                       {
+                        IVariableDefinition textDef = 
(IVariableDefinition)project.resolveSpecifier(classReference, "textContent");
+                        if (textDef != null)
+                        {
+                               List<IMXMLNode> nodes = info.getChildNodeList();
+                               if (nodes.size() > 0)
+                               {
+                                       IMXMLNode lastNode = 
nodes.get(nodes.size() - 1);
+                                       if (lastNode.getNodeID() == 
ASTNodeID.MXMLPropertySpecifierID)
+                                       {
+                                               MXMLPropertySpecifierNode 
propNode = (MXMLPropertySpecifierNode)lastNode;
+                                               String name = 
propNode.getName();
+                                               if (name.equals("textContent"))
+                                               {
+                                                       MXMLStringNode 
stringNode = (MXMLStringNode)propNode.getChild(0);
+                                                       MXMLLiteralNode 
valueNode = (MXMLLiteralNode)stringNode.getChild(0);
+                                                       String tagAsString = 
((MXMLTagData)childTag).stringify();
+                                                       String currentString = 
(String)valueNode.getValue();
+                                                       MXMLLiteralNode 
newValueNode = new MXMLLiteralNode(stringNode, 
+                                                                       
currentString + tagAsString);
+                                                       IMXMLNode[] newChildren 
= new IMXMLNode[1];
+                                                       newChildren[0] = 
newValueNode;
+                                                       
stringNode.setChildren(newChildren);
+                                                       
stringNode.setExpressionNode(newValueNode);
+                                               }
+                                       }
+                               }
+                               else
+                               {
+                                childNode = createSpecifierNode(builder, 
"textContent");
+                                if (childNode != null)
+                                {
+                                    childNode.setSuffix(builder, 
childTag.getStateName());
+                                               String tagAsString = 
((MXMLTagData)childTag).stringify();
+                                               String tagAsCData = 
IMXMLCoreConstants.cDataStart + tagAsString + IMXMLCoreConstants.cDataEnd;
+                                               MXMLToken token = new 
MXMLToken(MXMLTokenTypes.TOKEN_CDATA,
+                                                               
childTag.getStart(), childTag.getEnd(),
+                                                               
childTag.getLine(), childTag.getColumn(),
+                                                               tagAsCData);
+                                               MXMLTextData text = new 
MXMLTextData(token);
+                                               
text.setSourceLocation(childTag.getLocationOfChildUnits());
+                                               
childNode.initializeFromText(builder, text, info);
+                                    info.addChildNode(childNode);
+                                }
+                               }
+                               return;
+                        }
+                       }
+                }
                 // Handle child tags that are something other than 
property/style/event tags
                 // or instance tags.
 
@@ -541,6 +606,13 @@ abstract class MXMLClassReferenceNodeBase extends 
MXMLNodeBase implements IMXMLC
             String defaultPropertyName = 
classReference.getDefaultPropertyName(project);
             if (defaultPropertyName != null)
             {
+               if (defaultPropertyName.contains("|"))
+               {
+                       int c = defaultPropertyName.indexOf("|");
+                       String alt = defaultPropertyName.substring(c + 1);
+                       defaultPropertyName = defaultPropertyName.substring(0, 
c);
+                       altDefaultPropertyDefinition = 
(IVariableDefinition)project.resolveSpecifier(classReference, alt);
+               }
                 defaultPropertyDefinition =
                         
(IVariableDefinition)project.resolveSpecifier(classReference, 
defaultPropertyName);
             }
@@ -651,6 +723,16 @@ abstract class MXMLClassReferenceNodeBase extends 
MXMLNodeBase implements IMXMLC
                 info.addChildNode(childNode);
             }
         }
+        else if (altDefaultPropertyDefinition != null && 
altDefaultPropertyDefinition.getTypeAsDisplayString().equals(IASLanguageConstants.String))
+        {
+            MXMLSpecifierNodeBase childNode =
+                    createSpecifierNode(builder, 
altDefaultPropertyDefinition.getBaseName());
+            if (childNode != null)
+            {
+                childNode.initializeFromText(builder, text, info);
+                info.addChildNode(childNode);
+            }
+        }
         else
         {
             super.processChildNonWhitespaceUnit(builder, tag, text, info);
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLExpressionNodeBase.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLExpressionNodeBase.java
index 6a114a5..1bb26bc 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLExpressionNodeBase.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLExpressionNodeBase.java
@@ -90,7 +90,7 @@ abstract class MXMLExpressionNodeBase extends 
MXMLInstanceNode implements IMXMLE
         return expressionNode;
     }
 
-    void setExpressionNode(NodeBase value)
+    public void setExpressionNode(NodeBase value)
     {
         this.expressionNode = value;
         if (value != null)

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to