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

Bug 340840

Summary: NPE during validating an erroneous jsp file
Product: [WebTools] WTP Source Editing Reporter: Patric Rufflar <patric>
Component: jst.jspAssignee: Nick Sandonato <nsand.dev>
Status: RESOLVED FIXED QA Contact: Nick Sandonato <nsand.dev>
Severity: major    
Priority: P3 CC: thatnitind
Version: unspecifiedFlags: thatnitind: review+
Target Milestone: 3.2.4   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
patch none

Description Patric Rufflar CLA 2011-03-24 06:46:59 EDT
Build Identifier: 3.2.1


!ENTRY org.eclipse.wst.sse.ui 4 4 2011-03-24 11:41:50.268
!MESSAGE null
!STACK 0
java.lang.NullPointerException
	at org.eclipse.jst.jsp.core.internal.java.JSPTranslator.translate(JSPTranslator.java:1114)
	at org.eclipse.jst.jsp.core.internal.java.JSPTranslation.retranslate(JSPTranslation.java:527)
	at org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapter.getJSPTranslation(JSPTranslationAdapter.java:167)
	at org.eclipse.jst.jsp.core.internal.validation.JSPJavaValidator.performValidation(JSPJavaValidator.java:309)
	at org.eclipse.jst.jsp.core.internal.validation.JSPJavaValidator.validateFile(JSPJavaValidator.java:406)
	at org.eclipse.jst.jsp.core.internal.validation.JSPValidator.validate(JSPValidator.java:196)
	at org.eclipse.wst.sse.ui.internal.reconcile.validator.ReconcileStepForValidator.validate(ReconcileStepForValidator.java:292)
	at org.eclipse.wst.sse.ui.internal.reconcile.validator.ReconcileStepForValidator.reconcileModel(ReconcileStepForValidator.java:258)
	at org.eclipse.jface.text.reconciler.AbstractReconcileStep.reconcile(AbstractReconcileStep.java:95)
	at org.eclipse.wst.sse.ui.internal.reconcile.validator.ValidatorStrategy.reconcile(ValidatorStrategy.java:267)
	at org.eclipse.wst.sse.ui.internal.reconcile.DocumentRegionProcessor.process(DocumentRegionProcessor.java:303)
	at org.eclipse.wst.sse.ui.internal.reconcile.StructuredRegionProcessor.process(StructuredRegionProcessor.java:248)
	at org.eclipse.wst.sse.ui.internal.reconcile.DirtyRegionProcessor.run(DirtyRegionProcessor.java:667)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

!ENTRY org.eclipse.wst.validation 4 0 2011-03-24 11:41:50.283
!MESSAGE Validator JSP Syntax Validator finished validating: file:/C:/IDE/runtime-EclipseApplication(1)/testa/WebContent/test.jsp

!ENTRY org.eclipse.wst.validation 4 0 2011-03-24 11:41:50.283
!MESSAGE 
!STACK 0
java.lang.NullPointerException
	at org.eclipse.jst.jsp.core.internal.java.JSPTranslator.translate(JSPTranslator.java:1114)
	at org.eclipse.jst.jsp.core.internal.java.JSPTranslation.retranslate(JSPTranslation.java:527)
	at org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapter.getJSPTranslation(JSPTranslationAdapter.java:167)
	at org.eclipse.jst.jsp.core.internal.validation.JSPJavaValidator.performValidation(JSPJavaValidator.java:309)
	at org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator.performValidation(JSPBatchValidator.java:386)
	at org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator.validateFile(JSPBatchValidator.java:443)
	at org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator$2.run(JSPBatchValidator.java:519)
	at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:39)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:4777)
	at org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator.validate(JSPBatchValidator.java:532)
	at org.eclipse.wst.validation.Validator$V2.validate(Validator.java:1159)
	at org.eclipse.wst.validation.internal.ValManager.validate(ValManager.java:704)
	at org.eclipse.wst.validation.internal.ValManager$1.visit(ValManager.java:665)
	at org.eclipse.wst.validation.internal.ValManager.accept(ValManager.java:783)
	at org.eclipse.wst.validation.internal.ValManager.validate(ValManager.java:669)
	at org.eclipse.wst.validation.internal.ValBuilderJob$Visitor.visit(ValBuilderJob.java:321)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:68)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:48)
	at org.eclipse.wst.validation.internal.ValBuilderJob.deltaBuild(ValBuilderJob.java:211)
	at org.eclipse.wst.validation.internal.ValBuilderJob.run(ValBuilderJob.java:179)
	at org.eclipse.wst.validation.internal.ValBuilderJob.runInWorkspace(ValBuilderJob.java:126)
	at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

Reproducible: Always

Steps to Reproduce:
1. Create Dynamic Project
2. Create empty jsp file in web content folder
3. Paste the following line into the editor:
<% NPE %> 
4. Save
5. NPE.
Comment 1 Nick Sandonato CLA 2011-03-24 14:48:55 EDT
Created attachment 191853 [details]
patch

The problem seems to have arisen from the fact that the actual translator reference changes if a document goes from empty to non-empty and vice versa. For a translator with an empty document, the structured document reference was null, so re-translation was failing and throwing an NPE while trying to iterate through the structured document regions.

Also, it seems like the previous fix would always create a new JSPTranslationExtension, which we were intending to avoid.

This fix corrects both issues.
Comment 2 Nick Sandonato CLA 2011-03-24 14:50:30 EDT
Also wanted to point out that Bug 327934 likely caused this.
Comment 3 Nick Sandonato CLA 2011-04-15 10:40:18 EDT
Code released