Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 322818

Summary: NPE from label update job and detail job
Product: [WebTools] JSDT Reporter: Michael Rennie <Michael_Rennie>
Component: DebugAssignee: Michael Rennie <Michael_Rennie>
Status: ASSIGNED --- QA Contact: Simon Kaegi <simon_kaegi>
Severity: major    
Priority: P3 CC: thatnitind
Version: 3.2   
Target Milestone: Future   
Hardware: All   
OS: All   
Whiteboard:

Description Michael Rennie CLA 2010-08-16 12:59:51 EDT
code from HEAD

If you are debugging and a packet happens to time-out retrieving an underlying value for a property we do not check for this case when we ask for the value string.

Stack trace:

java.lang.NullPointerException
at org.eclipse.wst.jsdt.debug.internal.core.model.JavaScriptValue.getValueString(JavaScriptValue.java:164)
at org.eclipse.wst.jsdt.debug.internal.core.model.JavaScriptValue.getValueString(JavaScriptValue.java:139)
at org.eclipse.debug.internal.ui.model.elements.VariableLabelProvider.getValueText(VariableLabelProvider.java:166)
at org.eclipse.debug.internal.ui.model.elements.VariableLabelProvider.getColumnText(VariableLabelProvider.java:112)
at org.eclipse.debug.internal.ui.model.elements.VariableLabelProvider.getLabel(VariableLabelProvider.java:92)
at org.eclipse.debug.internal.ui.model.elements.ElementLabelProvider.getLabel(ElementLabelProvider.java:312)
at org.eclipse.debug.internal.ui.model.elements.ElementLabelProvider.retrieveLabel(ElementLabelProvider.java:215)
at org.eclipse.debug.internal.ui.model.elements.ElementLabelProvider$LabelUpdater.run(ElementLabelProvider.java:160)
at org.eclipse.debug.internal.ui.model.elements.ElementLabelProvider$LabelJob.run(ElementLabelProvider.java:74)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

This is also a problem if Rhino times out getting the detail string:

java.lang.NullPointerException
at org.eclipse.wst.jsdt.debug.internal.core.model.JavaScriptValue.getDetailString(JavaScriptValue.java:101)
at org.eclipse.wst.jsdt.debug.internal.ui.JavaScriptModelPresentation.computeDetail(JavaScriptModelPresentation.java:90)
at org.eclipse.debug.internal.ui.LazyModelPresentation.computeDetail(LazyModelPresentation.java:230)
at org.eclipse.debug.internal.ui.DelegatingModelPresentation.computeDetail(DelegatingModelPresentation.java:206)
at org.eclipse.debug.internal.ui.views.variables.details.DefaultDetailPane$DetailJob.run(DefaultDetailPane.java:228)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Comment 1 Michael Rennie CLA 2010-08-16 13:01:29 EDT
I'm not entirely sure what we should be doing in the time-out case, as Rhino is extremely intolerant to continuing execution after a timeout. We can guard against these failures, but the variables view will be filled with a pile of vars that are all null, with null values, null types and null details (not at all useful)
Comment 2 Michael Rennie CLA 2010-08-16 13:02:39 EDT
a quick test of guarding against the other failures just pushed the NPE to another locale:

java.lang.NullPointerException
at org.eclipse.wst.jsdt.debug.internal.core.model.JavaScriptStackFrame.getVariables(JavaScriptStackFrame.java:141)
at org.eclipse.debug.internal.ui.model.elements.StackFrameContentProvider.getAllChildren(StackFrameContentProvider.java:51)
at org.eclipse.debug.internal.ui.model.elements.StackFrameContentProvider.getChildCount(StackFrameContentProvider.java:28)
at org.eclipse.debug.internal.ui.model.elements.ElementContentProvider.retrieveChildCount(ElementContentProvider.java:114)
at org.eclipse.debug.internal.ui.model.elements.ElementContentProvider$2.run(ElementContentProvider.java:63)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

We need to look at making Rhino more resilient to timeouts.