This is an automated email from the ASF dual-hosted git repository.

greg-dove pushed a commit to branch 182-binding-data-missing
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/182-binding-data-missing by 
this push:
     new c4f66a40d Use qualified name string keys for binding data instead of 
definition references. Assumption: This is assumed to be some sort of memory 
management race condition between Garbage Collection and AST re-parsing - 
Converted the `bindingMap` in RoyaleProject to use qualified Name String keys 
instead of volatile IClassDefinition objects. - Intended to ensure that 
data-binding information remains accessible even if the compiler re-parses MXML 
files and re-creates class definit [...]
c4f66a40d is described below

commit c4f66a40d58721d1f60ebfe6718b841d269a87a6
Author: greg-dove <[email protected]>
AuthorDate: Mon Jun 8 16:05:03 2026 +0200

    Use qualified name string keys for binding data instead of definition 
references.
    Assumption: This is assumed to be some sort of memory management race 
condition between Garbage Collection and AST re-parsing
    - Converted the `bindingMap` in RoyaleProject to use qualified Name String 
keys instead of volatile IClassDefinition objects.
    - Intended to ensure that data-binding information remains accessible even 
if the compiler re-parses MXML files and re-creates class definitions during a 
build.
---
 .../internal/codegen/mxml/royale/MXMLRoyaleASDocEmitter.java         | 2 +-
 .../compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java     | 4 ++--
 .../internal/codegen/databinding/MXMLBindingDirectiveHelper.java     | 2 +-
 .../org/apache/royale/compiler/internal/projects/RoyaleProject.java  | 5 +++--
 .../java/org/apache/royale/compiler/projects/IRoyaleProject.java     | 2 +-
 5 files changed, 8 insertions(+), 7 deletions(-)

diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleASDocEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleASDocEmitter.java
index b16d7721c..d116ad378 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleASDocEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleASDocEmitter.java
@@ -611,7 +611,7 @@ public class MXMLRoyaleASDocEmitter extends MXMLEmitter 
implements
                setProp.id = overrideID;
                instances.add(setProp);
             IRoyaleProject project = (IRoyaleProject)(walker.getProject());
-            BindingDatabase bd = project.getBindingMap().get(classDefinition);
+            BindingDatabase bd = 
project.getBindingMap().get(classDefinition.getQualifiedName());
                Set<BindingInfo> bindingInfo = bd.getBindingInfo();
                IMXMLDataBindingNode bindingNode = 
(IMXMLDataBindingNode)propertyOrStyleNode.getChild(0);
                for (BindingInfo bi : bindingInfo)
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
index ccc010b9f..976d569fb 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
@@ -1593,7 +1593,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter 
implements
     protected void emitBindingData(String cname, IClassDefinition cdef)
     {
                IRoyaleProject project = (IRoyaleProject)(walker.getProject());
-               BindingDatabase bd = project.getBindingMap().get(cdef);
+  BindingDatabase bd = project.getBindingMap().get(cdef.getQualifiedName());
         if (bd == null)
             return;
         if (bd.getBindingInfo().isEmpty())
@@ -2853,7 +2853,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter 
implements
                setProp.id = overrideID;
                instances.add(setProp);
                        IRoyaleProject project = 
(IRoyaleProject)(walker.getProject());
-                       BindingDatabase bd = 
project.getBindingMap().get(classDefinition);
+   BindingDatabase bd = 
project.getBindingMap().get(classDefinition.getQualifiedName());
                Set<BindingInfo> bindingInfo = bd.getBindingInfo();
                IMXMLDataBindingNode bindingNode = 
(IMXMLDataBindingNode)propertyOrStyleNode.getChild(0);
                for (BindingInfo bi : bindingInfo)
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/codegen/databinding/MXMLBindingDirectiveHelper.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/codegen/databinding/MXMLBindingDirectiveHelper.java
index fed2bc62e..fffbe9ce4 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/codegen/databinding/MXMLBindingDirectiveHelper.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/codegen/databinding/MXMLBindingDirectiveHelper.java
@@ -89,7 +89,7 @@ public class MXMLBindingDirectiveHelper
     public MXMLBindingDirectiveHelper(MXMLClassDirectiveProcessor ddp, 
IABCVisitor emitter)
     {
         host = ddp;
-        ddp.getProject().getBindingMap().put(ddp.getClassDefinition(), 
bindingDataBase);
+        
ddp.getProject().getBindingMap().put(ddp.getClassDefinition().getQualifiedName(),
 bindingDataBase);
         this.emitter = emitter;
     }
     
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleProject.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleProject.java
index 1f83fa685..e3238b05e 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleProject.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleProject.java
@@ -2177,6 +2177,7 @@ public class RoyaleProject extends ASProject implements 
IRoyaleProject, ICompile
     {
         super.clean();
         manifestManager = null;
+        bindingMap.clear();
     }
 
     @Override
@@ -2732,12 +2733,12 @@ public class RoyaleProject extends ASProject implements 
IRoyaleProject, ICompile
     }
 
 
-    private HashMap<IClassDefinition, BindingDatabase> bindingMap = new 
HashMap<IClassDefinition, BindingDatabase>();
+    private HashMap<String, BindingDatabase> bindingMap = new HashMap<String, 
BindingDatabase>();
     /**
      * Support for access to BindingData from the class definition as key.
      * @return
      */
-    public HashMap<IClassDefinition, BindingDatabase> getBindingMap(){
+    public HashMap<String, BindingDatabase> getBindingMap(){
         return bindingMap;
     }
 
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/projects/IRoyaleProject.java
 
b/compiler/src/main/java/org/apache/royale/compiler/projects/IRoyaleProject.java
index 0836a82b4..cd20d60ec 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/projects/IRoyaleProject.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/projects/IRoyaleProject.java
@@ -250,6 +250,6 @@ public interface IRoyaleProject extends IASProject, 
IXMLNameResolver, IWriteOnly
      * Support for access to BindingData from the class definition as key.
      * @return
      */
-    HashMap<IClassDefinition, BindingDatabase> getBindingMap();
+    HashMap<String, BindingDatabase> getBindingMap();
 
 }

Reply via email to