Repository: flex-falcon
Updated Branches:
  refs/heads/develop 13b29e17d -> 9c05264f8


handle text/html as default property.  If text is specified as default 
property, but html is provided and an html property exists the html property 
will be set.  This solution needs to be tested and generalized against mixed 
text and html tags


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/9c05264f
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/9c05264f
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/9c05264f

Branch: refs/heads/develop
Commit: 9c05264f858675cf080882177426e4e73338e44e
Parents: cd0908b
Author: Alex Harui <aha...@apache.org>
Authored: Sat Oct 15 23:26:52 2016 -0700
Committer: Alex Harui <aha...@apache.org>
Committed: Sat Oct 15 23:27:57 2016 -0700

----------------------------------------------------------------------
 .../compiler/internal/mxml/MXMLTagData.java     | 37 ++++++++++++++++++++
 .../compiler/internal/mxml/MXMLTextData.java    |  2 +-
 .../tree/mxml/MXMLClassReferenceNodeBase.java   | 18 ++++++++++
 .../tree/mxml/MXMLPropertySpecifierNode.java    | 15 ++++++++
 4 files changed, 71 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9c05264f/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTagData.java
----------------------------------------------------------------------
diff --git 
a/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTagData.java
 
b/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTagData.java
index 2b5eec3..5ddd780 100644
--- 
a/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTagData.java
+++ 
b/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTagData.java
@@ -1132,4 +1132,41 @@ public class MXMLTagData extends MXMLUnitData implements 
IMXMLTagData
 
         return sb.toString();
     }
+    
+    public String stringify()
+    {
+       StringBuilder sb = new StringBuilder();
+        sb.append('<');
+        if (isCloseTag())
+            sb.append('/');
+        sb.append(getName());
+
+        // Verify the attributes.
+        for (IMXMLTagAttributeData attribute : getAttributeDatas())
+        {
+               sb.append(" ");
+            sb.append(attribute.getName());
+            sb.append("=\"");
+            sb.append(attribute.getRawValue());
+            sb.append("\"");
+        }
+        if (isEmptyTag())
+            sb.append('/');
+        sb.append('>');
+        for (IMXMLUnitData unit = getFirstChildUnit(); unit != null; unit = 
unit.getNextSiblingUnit())
+        {
+            if (unit.isText())
+                sb.append(((IMXMLTextData)unit).getCompilableText());
+            else if (unit instanceof MXMLTagData)
+               sb.append(((MXMLTagData)unit).stringify());
+        }
+        if (!isEmptyTag())
+        {
+            sb.append('<');
+            sb.append('/');
+            sb.append(getName());
+            sb.append('>');
+        }
+        return sb.toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9c05264f/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTextData.java
----------------------------------------------------------------------
diff --git 
a/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTextData.java
 
b/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTextData.java
index 2a35c19..5411912 100644
--- 
a/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTextData.java
+++ 
b/compiler/src/main/java/org/apache/flex/compiler/internal/mxml/MXMLTextData.java
@@ -39,7 +39,7 @@ public class MXMLTextData extends MXMLUnitData implements 
IMXMLTextData
     /**
      * Constructor.
      */
-    MXMLTextData(MXMLToken textToken)
+    public MXMLTextData(MXMLToken textToken)
     {
         text = textToken.getText();
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9c05264f/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
----------------------------------------------------------------------
diff --git 
a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
 
b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
index 0d3aab9..fc8ed36 100644
--- 
a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
+++ 
b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLClassReferenceNodeBase.java
@@ -489,6 +489,24 @@ abstract class MXMLClassReferenceNodeBase extends 
MXMLNodeBase implements IMXMLC
             }
             else
             {
+                IVariableDefinition defaultPropertyDefinition = 
getDefaultPropertyDefinition(builder);
+                if (defaultPropertyDefinition != null && 
!processedDefaultProperty && 
defaultPropertyDefinition.getBaseName().equals("text"))
+                {
+                       String uri = childTag.getURI();
+                       if (uri.equals("http://www.w3.org/1999/xhtml";))
+                       {
+                        IVariableDefinition htmlDef = 
(IVariableDefinition)project.resolveSpecifier(classReference, "html");
+                        if (htmlDef != null)
+                        {
+                               defaultPropertyDefinition = 
this.defaultPropertyDefinition = htmlDef;
+                               processDefaultPropertyContentUnit(builder, 
childTag, info);
+                               // seems strange we have to finish default 
property processing
+                               // by calling nonDefaultProperty code
+                               processNonDefaultPropertyContentUnit(builder, 
info);
+                               return;
+                        }
+                       }
+                }
                 // Handle child tags that are something other than 
property/style/event tags
                 // or instance tags.
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9c05264f/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
----------------------------------------------------------------------
diff --git 
a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
 
b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
index 8429c21..f4a43f1 100644
--- 
a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
+++ 
b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
@@ -31,8 +31,12 @@ import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.definitions.IVariableDefinition;
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
+import org.apache.flex.compiler.internal.mxml.MXMLData;
 import org.apache.flex.compiler.internal.mxml.MXMLDialect.TextParsingFlags;
+import org.apache.flex.compiler.internal.mxml.MXMLTagData;
+import org.apache.flex.compiler.internal.mxml.MXMLTextData;
 import org.apache.flex.compiler.internal.parsing.ISourceFragment;
+import org.apache.flex.compiler.internal.parsing.mxml.MXMLToken;
 import org.apache.flex.compiler.internal.projects.FlexProject;
 import org.apache.flex.compiler.internal.scopes.ASScope;
 import org.apache.flex.compiler.internal.scopes.MXMLFileScope;
@@ -42,6 +46,7 @@ import org.apache.flex.compiler.mxml.IMXMLTagAttributeData;
 import org.apache.flex.compiler.mxml.IMXMLTagData;
 import org.apache.flex.compiler.mxml.IMXMLTextData;
 import org.apache.flex.compiler.mxml.IMXMLUnitData;
+import org.apache.flex.compiler.parsing.MXMLTokenTypes;
 import org.apache.flex.compiler.problems.ICompilerProblem;
 import org.apache.flex.compiler.problems.MXMLUnresolvedTagProblem;
 import org.apache.flex.compiler.tree.ASTNodeID;
@@ -378,6 +383,16 @@ class MXMLPropertySpecifierNode extends 
MXMLSpecifierNodeBase implements IMXMLPr
                 instanceNode.setClassReference(project, 
(ClassDefinition)definition); // TODO Move this logic to initializeFromTag().
                 instanceNode.initializeFromTag(builder, tag);
             }
+            else if (definition == null && 
defaultPropertyDefinition.getBaseName().equals("html"))
+            {
+               String text = ((MXMLTagData)tag).stringify();
+               MXMLToken textToken = new MXMLToken(MXMLTokenTypes.TOKEN_TEXT, 
+                                                                               
        tag.getStart(), tag.getEnd(),
+                                                                               
        tag.getLine(), tag.getColumn(), text);
+               MXMLTextData textData = new MXMLTextData(textToken);
+               textData.setLocation((MXMLData) tag.getParent(), 
tag.getIndex());
+               initializeFromText(builder, textData, createNodeInfo(builder));
+            }
         }
     }
     

Reply via email to