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();
}