[ 
https://issues.apache.org/jira/browse/FLEX-33311?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mihai Chira updated FLEX-33311:
-------------------------------
    Description: 
In some very specific cases `ConstraintLayout` will throw a nullpointer error 
when a component inside it is playing a transition. I tried a few things and 
found out that:  
 - `parseConstraints()` creates a new `rowBaselines` Vector (or empties it if 
it exists)
 - some other process calls `clearConstraintCache()` in the middle of the 
execution of `parseConstraints()`, setting `rowBaselines` back to `null`
 - `parseConstraints()` calls `parseElementConstraints()` which tries to access 
elements in `rowBaselines` and throws a nullpointer error

I know very little about how Effects and Transitions work, so the "some other 
process" part is a bit of a mistery to me.

*Steps to reproduce*:
# Compile and run Main.mxml
# Select the first item in the list
# Click on the list and, before the resize transition finishes, click on it 
again.

*Workaround*: subclass ConstraintLayout (or FormItemLayout), override 
`measure()`, put a try/cacth block around it and use this custom layout. Not 
exactly pretty but it works without apparent side effects.
*Quick fix* (but probably not the ideal solution): just test whether 
{{rowBaselines}} exists before trying to access it in 
{{ConstraintLayout.parseElementConstraints()}}.

  was:
In some very specific cases `ConstraintLayout` will throw a nullpointer error 
when a component inside it is playing a transition. I tried a few things and 
found out that:  
 - `parseConstraints()` creates a new `rowBaselines` Vector (or empties it if 
it exists)
 - some other process calls `clearConstraintCache()` in the middle of the 
execution of `parseConstraints()`, setting `rowBaselines` back to `null`
 - `parseConstraints()` calls `parseElementConstraints()` which tries to access 
elements in `rowBaselines` and throws a nullpointer error

I know very little about how Effects and Transitions work, so the "some other 
process" part is a bit of a mistery to me.
*Steps to reproduce*:
# Compile and run Main.mxml
# Select the first item in the list
# Click on the list and, before the resize transition finishes, click on it 
again.

Workaround: subclass ConstraintLayout (or FormItemLayout), override 
`measure()`, put a try/cacth block around it and use this custom layout.

public class FormItemLayout extends spark.layouts.FormItemLayout {

    override public function measure():void {
        try {
            super.measure();
        }
        catch (e:Error) { }
    }

}

Not exactly pretty but it works without apparent side effects.


Quick fix (but probably not the ideal solution): just test whether 
`rowBaselines` exists before trying to access it >

if (rowBaselines && rowBaselines[bIndex][1]) ...
instead of 
if (rowBaselines[bIndex][1]) ...


> Nullpointer in ConstraintLayout when executing Transition on DropDownList
> -------------------------------------------------------------------------
>
>                 Key: FLEX-33311
>                 URL: https://issues.apache.org/jira/browse/FLEX-33311
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: Spark: Layout, Transitions
>    Affects Versions: Apache Flex 4.8 (parity release)
>            Reporter: Maxime Cowez
>            Assignee: Mihai Chira
>             Fix For: Apache Flex 4.9.0
>
>         Attachments: Main.mxml, SpecifiableListWrapper.as, 
> SpecifiableListWrapperHorizontalSkin.mxml
>
>
> In some very specific cases `ConstraintLayout` will throw a nullpointer error 
> when a component inside it is playing a transition. I tried a few things and 
> found out that:  
>  - `parseConstraints()` creates a new `rowBaselines` Vector (or empties it if 
> it exists)
>  - some other process calls `clearConstraintCache()` in the middle of the 
> execution of `parseConstraints()`, setting `rowBaselines` back to `null`
>  - `parseConstraints()` calls `parseElementConstraints()` which tries to 
> access elements in `rowBaselines` and throws a nullpointer error
> I know very little about how Effects and Transitions work, so the "some other 
> process" part is a bit of a mistery to me.
> *Steps to reproduce*:
> # Compile and run Main.mxml
> # Select the first item in the list
> # Click on the list and, before the resize transition finishes, click on it 
> again.
> *Workaround*: subclass ConstraintLayout (or FormItemLayout), override 
> `measure()`, put a try/cacth block around it and use this custom layout. Not 
> exactly pretty but it works without apparent side effects.
> *Quick fix* (but probably not the ideal solution): just test whether 
> {{rowBaselines}} exists before trying to access it in 
> {{ConstraintLayout.parseElementConstraints()}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to