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

Mihai Chira edited comment on FLEX-35100 at 6/18/16 12:47 PM:
--------------------------------------------------------------

The only other instance of this error I could find (though the stack traces are 
not identical, the null object reference error happens in the same function) 
was in [a comment on 
FLEX-33409|https://issues.apache.org/jira/browse/FLEX-33409?focusedCommentId=13745886&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13745886],
 where the line in question was '{{textLine.x = this.x}}', implying that 
{{textLine}} is {{null}}. This means that {{TextBlock.createTextLine()}} or 
{{TextBlock.recreateTextLine()}} returned {{null}}.

This was the same as I had inferred (we didn't have the line numbers in the 
stack trace). Here's my debugging investigation on this stack trace:
* what can be null in {{TextFlowLine.recreateTextLine()}}: {{_para}}, 
{{textFlow}}, {{textFlow.computedFormat}}, {{flowComposer}}, {{swfContext}}, 
{{textBlock}}, *{{textLine}}*, {{elem}}, {{_para.getAncestorWithContainer()}}. 
However:
** there are no adornments (bold, strikethrough, etc.) in the line, so we can 
exclude {{elem}} and {{_para.getAncestorWithContainer()}}.
** we know from {{BaseCompose.composeBlockElement()}} that {{para}}, which 
becomes {{BaseCompose._curParaElement}}, which then reaches 
{{TextFlowLine._para}} through {{TextFlowLine.initialize()}}, cannot be null 
(due to the null-checking {{if}} statement surrounding the function call). So 
we can exclude {{_para}}.
** We can also exclude {{textFlow}} because {{FlowElement.getTextFlow()}} 
cannot return {{null}}.
** Same for {{textFlow.computedFormat}}, because {{FlowElement.computedFormat}} 
cannot return {{null}}
** We'll also exclude {{flowComposer}} because every time it's set through the 
{{TextFlow.flowComposer}} setter it's set to a non-null value.
** {{swfContext}} also cannot be {{null}} by virtue of how it's instantiated.
** {{textBlock}} is also not {{null}} because in the calling function 
({{TextFlowLine.getTextLineInternal()}}) it already had one of its members 
called.
** So it must be that {{textLine}} is {{null}}. Which means that one of 
{{TextBlock.createTextLine()}} or {{TextBlock.recreateTextLine()}} returns 
{{null}} for the arguments given it.
* {{forceValid ==  true}} in {{TextFlowLine.getTextLine()}}
* {{StandardFlowComposer._composing == false}} in 
{{StandardFlowComposer.updateToController}}
* {{StandardFlowComposer.internalCompose()}} called with {{(-1, int.MAX_VALUE}}
* in {{TextFlowLine.getTextLine()}}, {{TextFlowLine.validity == 
FlowDamageType.GEOMETRY || TextFlowLine.validity == TextLineValidity.VALID}}
* The text in the screenshot is "The Creative Design and development of 3 x web 
pages, 3 x emailers, 3 x 2 page product literature".
* The (description) text field was focused when the screenshot was taken.
* {{StandardFlowComposer.updateAllControllers()}} is called with every new 
character introduced in the text field.
* {{TextBlock.createTextLine()}} and {{TextBlock.recreateTextLine()}} return 
{{null}} when: {{width}} is insufficient for at least one character (unless the 
{{fitSomething}} parameter is {{true}}); when there's no more text to create 
lines for (as indicated by the {{previousLine}} parameter); the TextBlock's 
content's {{text}} is {{null}} or {{""}}.
** Note that when the {{textLine}} and {{previousLine}} parameters are equal, 
this function throws an {{ArgumentError}}.
** Given that {{fitSomething}} parameter is {{true}} for the calls in question, 
we can exclude the insufficient {{width}} scenario.
** Also, if the TextBlock were the wrong one, we'd get an ArgumentError.


was (Author: evolverine):
The only other instance of this error I could find (though the stack traces are 
not identical, the null object reference error happens in the same function) 
was in [a comment on 
FLEX-33409|https://issues.apache.org/jira/browse/FLEX-33409?focusedCommentId=13745886&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13745886],
 where the line in question is '{{textLine.x = this.x}}', implying that 
{{textLine}} is {{null}}.

> TextFlowLine.recreateTextLine() throws a null object reference error
> --------------------------------------------------------------------
>
>                 Key: FLEX-35100
>                 URL: https://issues.apache.org/jira/browse/FLEX-35100
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: TLF
>    Affects Versions: Apache Flex 4.14.1
>            Reporter: Mihai Chira
>            Assignee: Mihai Chira
>            Priority: Minor
>
> A user of our application (at the time running on Flex SDK 4.14.1) has 
> reported encountering this fatal error:
> {noformat}
> TypeError: Error #1009
> at 
> flashx.textLayout.compose::TextFlowLine/http://ns.adobe.com/textLayout/internal/2008::recreateTextLine()
> at flashx.textLayout.compose::TextFlowLine/getTextLineInternal()
> at flashx.textLayout.compose::TextFlowLine/getTextLine()
> at flashx.textLayout.compose::ComposeState/composeNextLine()
> at flashx.textLayout.compose::BaseCompose/composeParagraphElementIntoLines()
> at flashx.textLayout.compose::BaseCompose/composeParagraphElement()
> at flashx.textLayout.compose::ComposeState/composeParagraphElement()
> at flashx.textLayout.compose::BaseCompose/composeBlockElement()
> at flashx.textLayout.compose::BaseCompose/composeInternal()
> at flashx.textLayout.compose::ComposeState/composeInternal()
> at flashx.textLayout.compose::BaseCompose/composeTextFlow()
> at flashx.textLayout.compose::ComposeState/composeTextFlow()
> at 
> flashx.textLayout.compose::StandardFlowComposer/http://ns.adobe.com/textLayout/internal/2008::callTheComposer()
> at flashx.textLayout.compose::StandardFlowComposer/internalCompose()
> at flashx.textLayout.compose::StandardFlowComposer/updateToController()
> at flashx.textLayout.compose::StandardFlowComposer/updateAllControllers()
> at flashx.textLayout.container::TextContainerManager/updateContainer()
> at spark.components::RichEditableText/updateDisplayList()
> at mx.core::UIComponent/validateDisplayList()
> at mx.managers::LayoutManager/validateDisplayList()
> at mx.managers::LayoutManager/doPhasedInstantiation()
> at mx.managers::LayoutManager/doPhasedInstantiationCallback()
> {noformat}



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

Reply via email to