[ 
https://issues.apache.org/jira/browse/FLEX-34649?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14231446#comment-14231446
 ] 

Mihai Chira edited comment on FLEX-34649 at 12/2/14 1:13 PM:
-------------------------------------------------------------

I attached some trace outputs from pasting a text which doesn't reproduce the 
bug, and from the one which does. (For more info about the trace format, see 
traffic-debug-tools on github.) If you do a diff, you can see that although the 
resulting text in the TextArea of the AIR application has the same number of 
lines (3 lines with text, and two empty new lines), the construction is done 
differently in BaseCompose.composeBlockElement():

In the *no* bug scenario:
# After the paste, EditManager.pasteTextScrap() calls [many functions] which 
end up calling FlowElement.shallowCopy(), which creates three instances of 
ParagraphElement ("ParagraphElement-3", "ParagraphElement-4" and 
"ParagraphElement-5")
# among others, BaseCompose.composeBlockElement() calls 
BaseCompose.composeParagraphElement(ParagraphElement-4)
## in turn, this calls ParagraphElement-4.createTextBlock() and
## ParagraphElement-4.releaseTextBlock()

Everything is identical in the buggy scenario, except the last step, where 
ParagraphElement-4.releaseTextBlock() doesn't happen. I don't understand the 
algorithm in BaseCompose.composeParagraphElement() around the okToRelease 
variable which controls this.

PS: there are other differences in the diff between the buggy and no-bug 
scenarios; the one above is just the first one.


was (Author: evolverine):
I attached some trace outputs from pasting a text which doesn't reproduce the 
bug, and from the one which does. (For more info about the trace format, see 
traffic-debug-tools on github.) If you do a diff, you can see that although the 
resulting text in the TextArea of the AIR application has the same number of 
lines (3 lines with text, and two empty new lines), the construction is done 
differently in BaseCompose.composeBlockElement():

In the *no* bug scenario:
# After the paste, EditManager.pasteTextScrap() calls ... which calls 
FlowElement.shallowCopy(), which creates three instances of ParagraphElement 
("ParagraphElement-3", "ParagraphElement-4" and "ParagraphElement-5")
# among others, BaseCompose.composeBlockElement() calls 
BaseCompose.composeParagraphElement(ParagraphElement-4)
## in turn, this calls ParagraphElement-4.createTextBlock() and
## ParagraphElement-4.releaseTextBlock()

Everything is identical in the buggy scenario, except the last step, where 
ParagraphElement-4.releaseTextBlock() doesn't happen. I don't understand the 
algorithm in BaseCompose.composeParagraphElement() around the okToRelease 
variable which controls this.

PS: there are other differences in the diff between the buggy and no-bug 
scenarios; the one above is just the first one.

> Fatal errors in TextBlock after pasting text of specific length in TextArea
> ---------------------------------------------------------------------------
>
>                 Key: FLEX-34649
>                 URL: https://issues.apache.org/jira/browse/FLEX-34649
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: Spark: TextArea
>    Affects Versions: Apache Flex 4.12.1
>            Reporter: Mihai Chira
>            Assignee: Mihai Chira
>              Labels: easytest
>         Attachments: FLEX-34649.ZIP, bug.txt, noBug.txt
>
>
> h2. Scenario 1
> *Steps to reproduce*:
> # Compile and run the attached project
> # Click on the TextArea and press SPACE, then LEFT
> # Paste this text, _including the empty line at the end_: {noformat}This 
> sentence needs to wrap with one or two characters lik: w
> {noformat}
> # Press DELETE
> *Desired behaviour*: the space is deleted without a fatal
> *Actual behaviour*: {noformat}TypeError: Error #1009: Cannot access a 
> property or method of a null object reference.
> at 
> flashx.textLayout.elements::ParagraphElement/findNextAtomBoundary()[C:\Users\evolverine\Adobe
>  Flash Builder 
> 4.7\FLEX-26478\src\flashx\textLayout\elements\ParagraphElement.as:576]
> at 
> flashx.textLayout.utils::NavigationUtil$/nextAtomHelper()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/utils/NavigationUtil.as:93]
> at 
> flashx.textLayout.utils::NavigationUtil$/doIncrement()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/utils/NavigationUtil.as:58]
> at 
> flashx.textLayout.utils::NavigationUtil$/nextAtomPosition()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/utils/NavigationUtil.as:104]
> at 
> flashx.textLayout.edit::EditManager/deleteNextCharacter()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/edit/EditManager.as:1273]
> at 
> flashx.textLayout.edit::EditManager/keyDownHandler()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/edit/EditManager.as:371]
> at 
> flashx.textLayout.container::ContainerController/keyDownHandler()[C:\Users\evolverine\Adobe
>  Flash Builder 
> 4.7\FLEX-26478\src\flashx\textLayout\container\ContainerController.as:2539]
> at 
> flashx.textLayout.container::TextContainerManager/keyDownHandler()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/container/TextContainerManager.as:1889]
> at 
> spark.components.supportClasses::RichEditableTextContainerManager/keyDownHandler()[/Users/aharui/release4.13.0/frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as:665]
> {noformat}
> ----
> h2. Scenario 2
> *Steps to reproduce*:
> # Compile and run the attached project
> # Click on the TextArea
> # Paste this text: {noformat}:Boolean = tl.getAtomBidiLevel(currentAtomIndex)
> if{noformat}
> # Press LEFT / BACKSPACE
> *Desired behaviour*: the cursor moves left without an error / the last 
> character ("f") is deleted without an error.
> *Actual behaviour*: {noformat}TypeError: Error #1009: Cannot access a 
> property or method of a null object reference.
> at 
> flashx.textLayout.elements::ParagraphElement/findPreviousAtomBoundary()[C:\Users\evolverine\Adobe
>  Flash Builder 
> 4.7\FLEX-26478\src\flashx\textLayout\elements\ParagraphElement.as:493]
> at 
> flashx.textLayout.utils::NavigationUtil$/previousAtomHelper()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/utils/NavigationUtil.as:70]
> at 
> flashx.textLayout.utils::NavigationUtil$/doIncrement()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/utils/NavigationUtil.as:58]
> at 
> flashx.textLayout.utils::NavigationUtil$/previousAtomPosition()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/utils/NavigationUtil.as:81]
> at 
> flashx.textLayout.utils::NavigationUtil$/moveBackwardHelper()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/utils/NavigationUtil.as:229]
> at 
> flashx.textLayout.utils::NavigationUtil$/previousCharacter()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/utils/NavigationUtil.as:292]
> at 
> flashx.textLayout.edit::SelectionManager/handleLeftArrow()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/edit/SelectionManager.as:1640]
> at 
> flashx.textLayout.edit::SelectionManager/handleKeyEvent()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/edit/SelectionManager.as:1807]
> at 
> flashx.textLayout.edit::SelectionManager/keyDownHandler()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/edit/SelectionManager.as:1870]
> at 
> flashx.textLayout.edit::EditManager/keyDownHandler()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/edit/EditManager.as:291]
> at 
> flashx.textLayout.container::ContainerController/keyDownHandler()[C:\Users\evolverine\Adobe
>  Flash Builder 
> 4.7\FLEX-26478\src\flashx\textLayout\container\ContainerController.as:2539]
> at 
> flashx.textLayout.container::TextContainerManager/keyDownHandler()[/Users/aharui/git/flex/master/flex-tlf/textLayout/src/flashx/textLayout/container/TextContainerManager.as:1889]
> at 
> spark.components.supportClasses::RichEditableTextContainerManager/keyDownHandler()[/Users/aharui/release4.13.0/frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as:665]
> {noformat}



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

Reply via email to