[
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 ... 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.
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 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)