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 04b917f41dc97a50d25d00a0749921419cf4b33c
Author: Josh Tynjala <[email protected]>
AuthorDate: Tue May 28 13:39:05 2024 -0700

    compiler: fix parsing of source, destination, and twoWay values in 
MXMLBindingNode
    
    Had a null exception of attribute existed without value, and twoWay didn't 
report an error for value that wasn't true or false
---
 RELEASE_NOTES.md                                   |  2 ++
 .../internal/tree/mxml/MXMLBindingNode.java        | 33 ++++++++++++++++++----
 2 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index c775e8638..a0245d597 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -35,6 +35,8 @@ Apache Royale Compiler 0.9.11
 - compiler: Add CSS support for declaring custom properties (CSS variables) 
and using `var` function in JS.
 - compiler: Fix crash when `[Style]` is of type `Object` and value is passed 
in MXML.
 - compiler: Fix null pointer exception when omitting quoted `<fx:Style>` value 
for `source` attribute.
+- compiler: Fix null pointer exception when omitting quoted `<fx:Binding>` 
value for `source`, `destination`, and `twoWay` attributes.
+- compiler: Fix missing problem for invalid `twoWay` value for `<fx:Binding>` 
tag.
 - debugger: Fix exception when evaluating certain expressions at run-time.
 - formatter: Added `insert-new-line-else` configuration option.
 - formatter: Filtered out unnecessary compiler warnings.
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLBindingNode.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLBindingNode.java
index 5ed122b3f..193422ab1 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLBindingNode.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLBindingNode.java
@@ -27,6 +27,7 @@ import org.apache.royale.compiler.mxml.IMXMLTagAttributeData;
 import org.apache.royale.compiler.mxml.IMXMLTagData;
 import org.apache.royale.compiler.problems.ICompilerProblem;
 import org.apache.royale.compiler.problems.MXMLEmptyAttributeProblem;
+import org.apache.royale.compiler.problems.MXMLInvalidTextForTypeProblem;
 import org.apache.royale.compiler.problems.MXMLRequiredAttributeProblem;
 import 
org.apache.royale.compiler.problems.MXMLSameBindingSourceAndDestinationProblem;
 import org.apache.royale.compiler.tree.ASTNodeID;
@@ -109,14 +110,24 @@ public class MXMLBindingNode extends MXMLNodeBase 
implements IMXMLBindingNode
         }
         else if (attribute.isSpecialAttribute(ATTRIBUTE_TWO_WAY))
         {
-            String value = 
attribute.getMXMLDialect().trim(attribute.getRawValue());
-            if (value.equals(IASLanguageConstants.TRUE))
+            String twoWayValue = "";
+            String rawTwoWayValue = attribute.getRawValue();
+            if (rawTwoWayValue != null)
+            {
+                twoWayValue = attribute.getMXMLDialect().trim(rawTwoWayValue);
+            }
+            if (twoWayValue.equals(IASLanguageConstants.TRUE))
+            {
                 twoWay = true;
-            else if (value.equals(IASLanguageConstants.FALSE))
+            }
+            else if (twoWayValue.equals(IASLanguageConstants.FALSE))
+            {
                 twoWay = false;
+            }
             else
             {
-                // TODO Report a problem;
+                MXMLInvalidTextForTypeProblem problem = new 
MXMLInvalidTextForTypeProblem(attribute, twoWayValue, "Boolean");
+                builder.addProblem(problem);
             }
         }
         else
@@ -154,7 +165,12 @@ public class MXMLBindingNode extends MXMLNodeBase 
implements IMXMLBindingNode
         }
         else
         {
-            trimmedSourceValue = 
builder.getMXMLDialect().trim(sourceAttribute.getRawValue());
+            trimmedSourceValue = "";
+            String rawSourceValue = sourceAttribute.getRawValue();
+            if (rawSourceValue != null)
+            {
+                trimmedSourceValue = 
builder.getMXMLDialect().trim(rawSourceValue);
+            }
             if (trimmedSourceValue.isEmpty())
             {
                 // 'source' attribute value cannot be empty
@@ -173,7 +189,12 @@ public class MXMLBindingNode extends MXMLNodeBase 
implements IMXMLBindingNode
         }
         else
         {
-            trimmedDestinationValue = 
builder.getMXMLDialect().trim(destinationAttribute.getRawValue());
+            trimmedDestinationValue = "";
+            String rawDestValue = destinationAttribute.getRawValue();
+            if (rawDestValue != null)
+            {
+                trimmedDestinationValue = 
builder.getMXMLDialect().trim(rawDestValue);
+            }
             if (trimmedDestinationValue.isEmpty())
             {
                 // 'destination' attribute value cannot be empty

Reply via email to