Hi Josh, thanks for getting to the source of the problem. To solve it, maybe we need to upgrade the Closure compiler to a newer version? Don't know the implications of this but probably we should try to keep up to date if possible. If we have some hard coded changes, that could be tricky.
El mié., 9 sept. 2020 a las 0:34, Josh Tynjala (<[email protected]>) escribió: > I should add that this dead code removal does not happen in a release build > of TourDeJewel. In TourDeJewel, the if() statement body is not removed. > > -- > Josh Tynjala > Bowler Hat LLC <https://bowlerhat.dev> > > > On Tue, Sep 8, 2020 at 3:27 PM Josh Tynjala <[email protected]> > wrote: > > > So far, I've determined that Closure compiler is removing what it thinks > > is dead code in StyledLayoutBase.performLayout(). When that happens, the > > code that creates the DataGridColumnListPresentationModel is never run. > > That leads to the null reference exception. > > > > This is the original ActionScript: > > > > if (layout()) { > > if(layoutChildren) > > layoutChildren.executeLayoutChildren(); > > viewBead.afterLayout(); > > } > > > > In a JS release build, the code above basically gets reduced to this: > > > > this.layout(); > > > > In other words, it removes the body of the if() block completely. The > > reason for this appears to be because LayoutBase.layout() returns false, > > and Closure compiler isn't properly detecting that an override might > exist > > in a subclass. In our case, VerticalLayout.layout() returns true, but I > > have not yet determined why Closure compiler hasn't noticed this fact. > > > > -- > > Josh Tynjala > > Bowler Hat LLC <https://bowlerhat.dev> > > > > > > On Tue, Sep 8, 2020 at 11:20 AM Carlos Rovira <[email protected]> > > wrote: > > > >> Hi Josh, > >> I remember the problem was not showing in TDJ, Piotr sent me a minimal > >> project that showed the problem. > >> Will try to send you directly to your email so you can try that. > >> Thanks for taking the time to look at it. > >> > >> El mar., 8 sept. 2020 a las 19:34, Josh Tynjala (< > >> [email protected]>) > >> escribió: > >> > >> > I checked out the bug/presentationmodel branch, rebuilt royale-asjs, > and > >> > then built and ran a release build of TourDeJewel. I am seeing the > >> correct > >> > console.log() output, and I'm not getting any runtime exceptions. > >> > > >> > Tried building with both the normal SDK and with Maven. Same result. > >> Both > >> > good. > >> > > >> > -- > >> > Josh Tynjala > >> > Bowler Hat LLC <https://bowlerhat.dev> > >> > > >> > > >> > On Thu, Sep 3, 2020 at 2:27 AM Carlos Rovira <[email protected] > > > >> > wrote: > >> > > >> > > Hi Josh, > >> > > > >> > > it seems that my latest changes to solve the problem is making no > >> > behaving > >> > > as before. > >> > > So I created a branch to get the fail again. > >> > > > >> > > You can checkout the branch: "bug/presentationmodel" to reproduce > the > >> > > problem. > >> > > You'll see how debug works, but release fails. > >> > > > >> > > The changes done in the branch are 2: > >> > > > >> > > 1.- In "IDataGridColumnList" remove again interface " > >> > > IListWithPresentationModel" > >> > > 2.- change the use in DataGridView to avoid using "beadsAdded": > >> > > > >> > > (_listArea as IParent).addElement(list as IChild); > >> > > > >> > > var pm:DataGridColumnListPresentationModel = list.getBeadByType( > >> > > IListPresentationModel) as DataGridColumnListPresentationModel; > >> > > var zzz:Object = list.getBeadByType(IListPresentationModel); > >> > > COMPILE::JS { > >> > > console.log(zzz, zzz as DataGridColumnListPresentationModel); > >> > > } > >> > > pm.rowHeight = _presentationModel.rowHeight; > >> > > pm.variableRowHeight = false; > >> > > pm.align = list.columnInfo.align; > >> > > > >> > > columnLists.push(list); > >> > > > >> > > js code created for DataGridView is: > >> > > > >> > > > >> > > >> > this.org_apache_royale_jewel_beads_views_DataGridView__listArea.addElement > >> > > (list); > >> > > var /** @type {Object} */ pm = > >> > list.getBeadByType(org.apache.royale.jewel. > >> > > supportClasses.list.IListPresentationModel); > >> > > var /** @type {Object} */ zzz = > >> > list.getBeadByType(org.apache.royale.jewel. > >> > > supportClasses.list.IListPresentationModel); > >> > > console.log(zzz, zzz); > >> > > pm.rowHeight = this. > >> > > org_apache_royale_jewel_beads_views_DataGridView__presentationModel. > >> > > rowHeight; > >> > > pm.variableRowHeight = false; > >> > > pm.align = list.columnInfo.align; > >> > > this.columnLists.push(list); > >> > > > >> > > a) In DEBUG mode I get the logs of zzz, zzz right with the instances > >> > > > >> > > > >> org.apache.royale.jewel.beads.models.DataGridColumnListPresentationModel > >> > > {disposed_: > >> > > false, onDisposeCallbacks_: undefined, eventTargetListeners_: > >> > > g…g.e…s.ListenerMap, actualEventTarget_: > >> > > org.a…e.r…e.j…l.b…s.m…s.DataGridColumnListPresentationModel, > >> > > parentEventTarget_: null, …} > >> > > > >> org.apache.royale.jewel.beads.models.DataGridColumnListPresentationModel > >> > > {disposed_: > >> > > false, onDisposeCallbacks_: undefined, eventTargetListeners_: > >> > > g…g.e…s.ListenerMap, actualEventTarget_: > >> > > org.a…e.r…e.j…l.b…s.m…s.DataGridColumnListPresentationModel, > >> > > parentEventTarget_: null, …} > >> > > , > >> > > > >> org.apache.royale.jewel.beads.models.DataGridColumnListPresentationModel > >> > > {disposed_: > >> > > false, onDisposeCallbacks_: undefined, eventTargetListeners_: > >> > > g…g.e…s.ListenerMap, actualEventTarget_: > >> > > org.a…e.r…e.j…l.b…s.m…s.DataGridColumnListPresentationModel, > >> > > parentEventTarget_: null, …} > >> > > > >> org.apache.royale.jewel.beads.models.DataGridColumnListPresentationModel > >> > > {disposed_: > >> > > false, onDisposeCallbacks_: undefined, eventTargetListeners_: > >> > > g…g.e…s.ListenerMap, actualEventTarget_: > >> > > org.a…e.r…e.j…l.b…s.m…s.DataGridColumnListPresentationModel, > >> > > parentEventTarget_: null, …} > >> > > > >> > > b) In RELEASE it fails with this error: > >> > > > >> > > DataGridView.as:244 null null > >> > > DataGridView.as:246 Uncaught TypeError: Cannot set property > >> 'rowHeight' > >> > of > >> > > null > >> > > at yo (DataGridView.as:246) > >> > > at wo.G.m (DataGridView.as:134) > >> > > at ul.G.addBead (ElementWrapper.as:270) > >> > > at ul.Yk.addBead (HTMLElementWrapper.js:43) > >> > > at ul.G.addBead (UIBase.js:372) > >> > > at cl (loadBeadFromValuesManager.js:41) > >> > > at ul.G.loadBeads (UIBase.as:1415) > >> > > at ul.G.addedToParent (UIBase.as:1398) > >> > > at ul.G.addedToParent (GroupBase.js:58) > >> > > at ul.tl.addedToParent (Group.js:67) > >> > > > >> > > > >> > > El mié., 2 sept. 2020 a las 21:16, Josh Tynjala (< > >> > > [email protected]>) > >> > > escribió: > >> > > > >> > > > I don't think that this code is compiled incorrectly. I think that > >> we > >> > > > haven't found the proper code to reproduce your original issue. As > >> > best I > >> > > > can tell, the list.presentationModel getter is where the > >> > > > IListPresentationModel is created, so returning null is the > correct > >> > > > behavior for getBeadByType() in this particular code. Clearly, > this > >> is > >> > > not > >> > > > the right way to reproduce the issue that you described (which > >> involved > >> > > the > >> > > > release build not behaving the same as the debug build), so I need > >> your > >> > > > help to find out how to reproduce it. > >> > > > > >> > > > -- > >> > > > Josh Tynjala > >> > > > Bowler Hat LLC <https://bowlerhat.dev> > >> > > > > >> > > > > >> > > > On Wed, Sep 2, 2020 at 12:01 PM Carlos Rovira < > >> [email protected] > >> > > > >> > > > wrote: > >> > > > > >> > > > > Hi Josh, > >> > > > > > >> > > > > If I change that function to this code: > >> > > > > > >> > > > > /** > >> > > > > * @private > >> > > > > */ > >> > > > > protected function > >> > > configureColumnListPresentationModel(event:Event):void > >> > > > > { > >> > > > > var list:IDataGridColumnList = event.target as > >> IDataGridColumnList; > >> > > > > var zzz:Object = (list as > >> > > IStrand).getBeadByType(IListPresentationModel); > >> > > > > COMPILE::JS { > >> > > > > console.log(zzz, zzz as DataGridColumnListPresentationModel); > >> > > > > } > >> > > > > //var pm:DataGridColumnListPresentationModel = > >> > > > > list.getBeadByType(IListPresentationModel) as > >> > > > > DataGridColumnListPresentationModel; --> this line doesn't work > >> > > > > var pm:DataGridColumnListPresentationModel = > >> list.presentationModel > >> > as > >> > > > > DataGridColumnListPresentationModel; > >> > > > > pm.rowHeight = _presentationModel.rowHeight; > >> > > > > pm.variableRowHeight = false; > >> > > > > pm.align = list.columnInfo.align; > >> > > > > } > >> > > > > > >> > > > > I get null, null too > >> > > > > > >> > > > > I think it's ok with the current problem, instead of getting the > >> > IBead, > >> > > > we > >> > > > > are getting null, so I guess something is compiling wrongly > >> > > > > > >> > > > > The compiled code I get is this: > >> > > > > > >> > > > > /** > >> > > > > * @asprivate > >> > > > > * @protected > >> > > > > * @param {org.apache.royale.events.Event} event > >> > > > > */ > >> > > > > org.apache.royale.jewel.beads.views.DataGridView.prototype. > >> > > > > configureColumnListPresentationModel = function(event) { > >> > > > > var /** @type > >> > > > > > >> {org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList} > >> > > */ > >> > > > > list = org.apache.royale.utils.Language.as(event.target, > >> > > > > org.apache.royale. > >> > > > > jewel.supportClasses.datagrid.IDataGridColumnList); > >> > > > > var /** @type {Object} */ zzz = > >> org.apache.royale.utils.Language.as > >> > > > (list, > >> > > > > > >> > org.apache.royale.core.IStrand).getBeadByType(org.apache.royale.jewel. > >> > > > > supportClasses.list.IListPresentationModel); > >> > > > > console.log(zzz, org.apache.royale.utils.Language.as(zzz, > >> > > > > org.apache.royale. > >> > > > > jewel.beads.models.DataGridColumnListPresentationModel)); > >> > > > > var /** @type > >> > > > > > >> > > > > >> > > > >> > > >> > {org.apache.royale.jewel.beads.models.DataGridColumnListPresentationModel} > >> > > > > */ pm = org.apache.royale.utils.Language.as > >> (list.presentationModel, > >> > > org. > >> > > > > > >> > apache.royale.jewel.beads.models.DataGridColumnListPresentationModel); > >> > > > > pm.rowHeight = this. > >> > > > > > >> org_apache_royale_jewel_beads_views_DataGridView__presentationModel. > >> > > > > rowHeight; > >> > > > > pm.variableRowHeight = false; > >> > > > > pm.align = list.columnInfo.align; > >> > > > > }; > >> > > > > > >> > > > > > >> > > > > El mié., 2 sept. 2020 a las 19:44, Josh Tynjala (< > >> > > > > [email protected]>) > >> > > > > escribió: > >> > > > > > >> > > > > > I had a free moment to look into this, but I'm having trouble > >> > > > reproducing > >> > > > > > the same behavior. > >> > > > > > > >> > > > > > I added the following code inside > >> > > > > > DataGridView.configureColumnListPresentationModel(): > >> > > > > > > >> > > > > > var zzz:Object = list.getBeadByType(IListPresentationModel); > >> > > > > > COMPILE::JS { > >> > > > > > console.log(zzz, zzz as > >> DataGridColumnListPresentationModel); > >> > > > > > } > >> > > > > > > >> > > > > > If I build and run TourDeJewel, it prints "null null" to the > >> debug > >> > > > > console. > >> > > > > > There's no difference between debug and release builds, so I > >> guess > >> > > I'm > >> > > > > > doing something wrong. > >> > > > > > > >> > > > > > Can you put together some simple code that will reproduce the > >> > issue? > >> > > > > > > >> > > > > > -- > >> > > > > > Josh Tynjala > >> > > > > > Bowler Hat LLC <https://bowlerhat.dev> > >> > > > > > > >> > > > > > > >> > > > > > On Wed, Sep 2, 2020 at 9:27 AM Josh Tynjala < > >> > > [email protected] > >> > > > > > >> > > > > > wrote: > >> > > > > > > >> > > > > > > In a release build, what gets returned by > >> > > > > > > getBeadByType(IListPresentationModel) if you don't cast it > >> with > >> > "as > >> > > > > > > DataGridColumnListPresentationModel"? Is it the correct > >> object? > >> > Or > >> > > is > >> > > > > it > >> > > > > > > also null? > >> > > > > > > > >> > > > > > > -- > >> > > > > > > Josh Tynjala > >> > > > > > > Bowler Hat LLC <https://bowlerhat.dev> > >> > > > > > > > >> > > > > > > > >> > > > > > > On Wed, Sep 2, 2020 at 6:43 AM Carlos Rovira < > >> > > > [email protected]> > >> > > > > > > wrote: > >> > > > > > > > >> > > > > > >> Hi, > >> > > > > > >> > >> > > > > > >> I did some more testing and it's not a timing issue. > >> > > > > > >> I refactored the PM code to "beadsAdded" since is the right > >> > place > >> > > to > >> > > > > > >> configure it (or was retrieved from the beads array or it's > >> > > created > >> > > > > from > >> > > > > > >> scratch). > >> > > > > > >> Trying to use the "getBeadByType" line fails the same way, > so > >> > the > >> > > > > > problem > >> > > > > > >> is clearly a compiler issue, from my point of view. > >> > > > > > >> > >> > > > > > >> El mié., 2 sept. 2020 a las 14:17, Carlos Rovira (< > >> > > > > > >> [email protected]>) > >> > > > > > >> escribió: > >> > > > > > >> > >> > > > > > >> > Hi, > >> > > > > > >> > > >> > > > > > >> > I just committed a fix to solve an issue Piotr was > getting > >> in > >> > > > > > DataGrid. > >> > > > > > >> > > >> > > > > > >> > The issue only can be seen in release mode, in debug > >> works, so > >> > > it > >> > > > > > seems > >> > > > > > >> a > >> > > > > > >> > compiler bug so hope others like Greg or Josh with more > >> > > knowledge > >> > > > in > >> > > > > > >> that > >> > > > > > >> > field can see what could be wrong, or if maybe it is just > >> some > >> > > > issue > >> > > > > > in > >> > > > > > >> the > >> > > > > > >> > code. > >> > > > > > >> > > >> > > > > > >> > Problem is in DataGridView line 239: > >> > > > > > >> > > >> > > > > > >> > // var pm:DataGridColumnListPresentationModel = > >> > > > > > >> > list.getBeadByType(IListPresentationModel) as > >> > > > > > >> > DataGridColumnListPresentationModel; > >> > > > > > >> > var pm:DataGridColumnListPresentationModel = > >> > > > list.presentationModel > >> > > > > as > >> > > > > > >> > DataGridColumnListPresentationModel; > >> > > > > > >> > Commented line does not work, I need to refactor to the > >> next > >> > > one. > >> > > > > > >> > > >> > > > > > >> > in the commit I added missed coercions and need to make > >> > > > > > >> > IDataGridColumnList implement > "IListWithPresentationModel" > >> > > (what I > >> > > > > > think > >> > > > > > >> > is ok since that is needed for all column lists. > >> > > > > > >> > > >> > > > > > >> > So the problem is: Why can't I retrieve the bead from the > >> > list? > >> > > > > > >> > > >> > > > > > >> > I'm thinking this could be a timing issue, since the list > >> > needs > >> > > to > >> > > > > be > >> > > > > > >> > added to the parent to process the beads and be able to > >> > retrieve > >> > > > the > >> > > > > > >> one. > >> > > > > > >> > I'll try one more test now trying to put some time out > >> after > >> > > > > > addElement. > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> > ---------- Forwarded message --------- > >> > > > > > >> > De: Piotr Zarzycki <[email protected]> > >> > > > > > >> > Date: mié., 2 sept. 2020 a las 12:48 > >> > > > > > >> > Subject: Re: NPE in DataGridView - release build of > >> > application > >> > > > > > >> > To: Apache Royale Development <[email protected]> > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> > I have sent you. > >> > > > > > >> > > >> > > > > > >> > śr., 2 wrz 2020 o 12:41 Carlos Rovira < > >> > [email protected]> > >> > > > > > >> > napisał(a): > >> > > > > > >> > > >> > > > > > >> > > cool :) > >> > > > > > >> > > yeah send me :) > >> > > > > > >> > > > >> > > > > > >> > > >> > > > > > >> > -- > >> > > > > > >> > Carlos Rovira > >> > > > > > >> > http://about.me/carlosrovira > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> > >> > > > > > >> -- > >> > > > > > >> Carlos Rovira > >> > > > > > >> http://about.me/carlosrovira > >> > > > > > >> > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > > >> > > > > -- > >> > > > > Carlos Rovira > >> > > > > http://about.me/carlosrovira > >> > > > > > >> > > > > >> > > > >> > > > >> > > -- > >> > > Carlos Rovira > >> > > http://about.me/carlosrovira > >> > > > >> > > >> > >> > >> -- > >> Carlos Rovira > >> http://about.me/carlosrovira > >> > > > -- Carlos Rovira http://about.me/carlosrovira
