Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 442755 - [compiler] NPE at ProblemHandler.handle
Summary: [compiler] NPE at ProblemHandler.handle
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 4.5   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: 4.4.2   Edit
Assignee: shankha banerjee CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 407376 442426 (view as bug list)
Depends on:
Blocks:
 
Reported: 2014-08-28 02:16 EDT by shankha banerjee CLA
Modified: 2015-01-19 04:27 EST (History)
6 users (show)

See Also:
srikanth_sankaran: review+


Attachments
Patch (2.82 KB, text/plain)
2014-09-01 00:43 EDT, shankha banerjee CLA
no flags Details
Patch (3.25 KB, text/plain)
2014-09-02 07:47 EDT, shankha banerjee CLA
no flags Details
Patch (4.71 KB, patch)
2014-09-03 03:00 EDT, shankha banerjee CLA
shankhba: review?
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description shankha banerjee CLA 2014-08-28 02:16:52 EDT
NPE at org.eclipse.jdt.internal.compiler.problem.ProblemHandler.handle(ProblemHandler.java:129)

---

The issue is present on 4.4.1 as well. (Version: Luna SR1 (4.4.1)
Build id: M20140827-0800)

The issue is reproducible on master branch tip code.

---

Test Case:

//Descriptor.java 
package test;
public interface Descriptor <UNMARSHAL_RECORD extends UnmarshalRecord, OBJECT_BUILDER extends CoreObjectBuilder> {
	public default OBJECT_BUILDER getObjectBuilder() { return null; }
}

//Unmarshaller.java
package test;
public abstract class Unmarshaller<CONTEXT extends Context, DESCRIPTOR extends Descriptor> {
   public CONTEXT getContext() {
	   return null;
   }
}

---

Call stack:


java.lang.NullPointerException
	at org.eclipse.jdt.internal.compiler.problem.ProblemHandler.handle(ProblemHandler.java:129)
	at org.eclipse.jdt.internal.compiler.problem.ProblemHandler.handle(ProblemHandler.java:208)
	at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.handle(ProblemReporter.java:2369)
	at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.rawTypeReference(ProblemReporter.java:7141)
	at org.eclipse.jdt.internal.compiler.ast.TypeReference.internalResolveType(TypeReference.java:503)
	at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:574)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.connectTypeVariables(Scope.java:949)
	at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:1099)
	at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy(CompilationUnitScope.java:323)
	at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:229)
	at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:746)
	at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:383)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:428)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:367)
	at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:330)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:304)
	at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:135)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:267)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:195)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:729)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:204)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:244)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:297)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:300)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:356)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:379)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:239)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Comment 1 shankha banerjee CLA 2014-08-28 02:27:26 EDT
Please See Bug 442426, Bug 407376.
Comment 2 shankha banerjee CLA 2014-08-28 06:22:47 EDT
(In reply to shankha banerjee from comment #1)
> Please See Bug 442426, Bug 407376.

Bug 407376 is a different issue.
Comment 3 shankha banerjee CLA 2014-08-29 00:10:34 EDT
Working on the bug.
Comment 4 shankha banerjee CLA 2014-09-01 00:43:03 EDT
Created attachment 246584 [details]
Patch

Test results are good.

---
The test case has been added to IncrementalTests18.java.
The problem is not 1.8 specific. I could not find out a better location
for the test.
---

Problem:
ProblemRporter.handle API's:

2237: handle(int, String[], int, String[], int, int, int)
2360: handle(int, String[], String[], int, int)
2379: handle(int problemId, String[], String[], int, int, CompilationResult)

set this.referenceContext = null.

The call from the API's:
2237: handle(int, String[], int, String[], int, int, int)
2360: handle(int, String[], String[], int, int)

leads to the primary problem handler function:

106: ProblemHandler#handle handle(int, String[], int, String[], int,
	int, int,
        ReferenceContext referenceContext,
        CompilationResult unitResult)

The parameter unitResult is set to null if referenceContext is null in the
handle API's.

Dereferencing of unitResult results in a NPE. 

The parameter unitResult is dereferenced further down.
There is a chance that referencContext is not null, unitResult is null and
as a result we get NPE. At this point I do not have a test case for this scenario. So leaving it as it is. 

---
Please review.
Comment 5 shankha banerjee CLA 2014-09-01 02:08:15 EDT
My contribution for this defect fix complies with http://www.eclipse.org/legal/CoO.php.
Comment 6 shankha banerjee CLA 2014-09-02 02:57:06 EDT
Comment on attachment 246584 [details]
Patch

The patch is incorrect. A new solution is being devised based on Comment 12, Bug 407376.

Thanks
Comment 7 shankha banerjee CLA 2014-09-02 02:58:03 EDT
(In reply to shankha banerjee from comment #6)
> A new solution is being devised based on Comment 12,
> Bug 407376.

Bug 407376 Comment 12.
Comment 8 shankha banerjee CLA 2014-09-02 07:47:14 EDT
Created attachment 246614 [details]
Patch

All test results are good.

---
This patch addresses the problem mentioned in Bug 442426, Bug 442755, Bug 407376.
---

Problem:
Please see Bug 407376 Comment 12.
The function ProblemReporter#rawTypeReference gets called.

This in turn calls  isClassPathCorrect:
ProblemReporter.isClassPathCorrect : 4686	
UnresolvedReferenceBinding.resolve : 104	
BinaryTypeBinding.resolveType : 183	
TypeVariableBinding.resolve : 664	
BinaryTypeBinding.typeVariables : 1836	
BinaryTypeBinding(ReferenceBinding).readableName : 1599	
ProblemReporter.rawTypeReference : 7150	

The handle API called from isClassPathCorrect clears the referenceContext.

The call finishes and rawTypeReference calls 

handle(int, String[], String[], int, int)

which in turn calls
handle(int, String[], String[], int, int, ReferenceContext, CompilationResult unitResult)
	
The parameter unitResult is set to null as referenceContext is null.

This results in NPE.


Solution:

The patch saves and restores referenceContext in isClassPathCorrect.

---

Please review.
Comment 9 shankha banerjee CLA 2014-09-03 00:58:23 EDT
Comment on attachment 246614 [details]
Patch

Further investigation needs to be done with respect to error messages and verify if we throw all the correct error messages. We seem to be missing out on one error message.
Comment 10 shankha banerjee CLA 2014-09-03 03:00:38 EDT
Created attachment 246645 [details]
Patch

Test results are good.

---
Please have a look at Comment 8 which explains the issue in detail.
---

Relevant error messages have been added. We do not miss any errors.

Thanks
Comment 11 Srikanth Sankaran CLA 2014-09-03 03:51:44 EDT
Patch looks good. Released here: http://git.eclipse.org/c/jdt/eclipse.jdt.core.git/commit/?id=df84bc0b0e74080458b4e3f35c6e77ec6fed2587

Thanks Shankha.
Comment 12 Srikanth Sankaran CLA 2014-09-03 03:53:20 EDT
*** Bug 442426 has been marked as a duplicate of this bug. ***
Comment 13 Srikanth Sankaran CLA 2014-09-03 03:55:14 EDT
*** Bug 407376 has been marked as a duplicate of this bug. ***
Comment 14 Jay Arthanareeswaran CLA 2014-09-17 03:00:09 EDT
Verified for 4.5 M2 using build I20140916-2000
Comment 15 Marcel Bruch CLA 2014-09-17 03:52:15 EDT
Great! Thank you!
Comment 16 Jay Arthanareeswaran CLA 2014-11-07 03:16:00 EST
Reopening for back port
Comment 18 Manoj N Palat CLA 2015-01-19 04:27:01 EST
Verified for Eclipse Luna SR2 Build id: M20150114-1500