Bug 246276 - NPE during code completion
Summary: NPE during code completion
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.4   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.5 M3   Edit
Assignee: David Audel CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-09-04 16:03 EDT by Olivier Thomann CLA
Modified: 2008-10-27 08:57 EDT (History)
1 user (show)

See Also:


Attachments
Patch to apply (2.91 KB, patch)
2008-09-04 21:32 EDT, Olivier Thomann CLA
no flags Details | Diff
Proposed fix (3.12 KB, patch)
2008-10-20 11:05 EDT, David Audel CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Olivier Thomann CLA 2008-09-04 16:03:32 EDT
I got this exception using code completion:

java.lang.NullPointerException
	at org.eclipse.jdt.internal.codeassist.complete.CompletionOnQualifiedAllocationExpression.resolveType(CompletionOnQualifiedAllocationExpression.java:45)
	at org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.resolve(LocalDeclaration.java:186)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:444)
	at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:191)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:403)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1096)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1184)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:535)
	at org.eclipse.jdt.internal.codeassist.CompletionEngine.complete(CompletionEngine.java:2538)
	at org.eclipse.jdt.internal.core.Openable.codeComplete(Openable.java:129)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeComplete(CompilationUnit.java:344)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeComplete(CompilationUnit.java:337)
	at org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer.internalComputeCompletionProposals(JavaCompletionProposalComputer.java:190)
	at org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer.addContextInformations(JavaCompletionProposalComputer.java:113)
	at org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer.computeContextInformation(JavaCompletionProposalComputer.java:144)
	at org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor.computeContextInformation(CompletionProposalComputerDescriptor.java:363)
	at org.eclipse.jdt.internal.ui.text.java.CompletionProposalCategory.computeContextInformation(CompletionProposalCategory.java:289)
	at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.collectContextInformation(ContentAssistProcessor.java:337)
	at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.computeContextInformation(ContentAssistProcessor.java:319)
	at org.eclipse.jface.text.contentassist.ContentAssistant.computeContextInformation(ContentAssistant.java:1856)
	at org.eclipse.jface.text.contentassist.ContentAssistSubjectControlAdapter.computeContextInformation(ContentAssistSubjectControlAdapter.java:388)
	at org.eclipse.jface.text.contentassist.ContextInformationPopup.computeContextInformation(ContextInformationPopup.java:390)
	at org.eclipse.jface.text.contentassist.ContextInformationPopup.access$1(ContextInformationPopup.java:389)
	at org.eclipse.jface.text.contentassist.ContextInformationPopup$1.run(ContextInformationPopup.java:187)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.jface.text.contentassist.ContextInformationPopup.showContextProposals(ContextInformationPopup.java:182)
	at org.eclipse.jface.text.contentassist.ContentAssistant.showContextInformation(ContentAssistant.java:1710)
	at org.eclipse.jface.text.source.SourceViewer.doOperation(SourceViewer.java:810)
	at org.eclipse.jface.text.source.projection.ProjectionViewer.doOperation(ProjectionViewer.java:1547)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer.doOperation(JavaSourceViewer.java:186)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor$AdaptedSourceViewer.doOperation(CompilationUnitEditor.java:195)
	at org.eclipse.jface.text.link.LinkedModeUI.triggerContextInfo(LinkedModeUI.java:818)
	at org.eclipse.jface.text.link.LinkedModeUI.switchPosition(LinkedModeUI.java:867)
	at org.eclipse.jface.text.link.LinkedModeUI.next(LinkedModeUI.java:800)

I'll try to get reproducable steps. I am using I20080903-1200.
Comment 1 Olivier Thomann CLA 2008-09-04 21:30:47 EDT
Steps to reproduce:
1) Check out the projects org.eclipse.pde.api.tools and org.eclipse.pde.api.tools.tests from CVS
2) Go to org.eclipse.pde.api.tools.builder.tests.compatibility.ClassCompatibilityHierarchyTests
3) Apply the patch attached to this bug
4) Go to line 174:
			getChangedProblemId(IDelta.SUPERCLASS)

5) Select "ChangedProblemId(" and do code assist.
6) Select RemovedProblemId and the NPE should occur.

Let me know if you have any problem to reproduce.
Comment 2 Olivier Thomann CLA 2008-09-04 21:32:28 EDT
Created attachment 111750 [details]
Patch to apply
Comment 3 David Audel CLA 2008-10-20 11:05:38 EDT
Created attachment 115571 [details]
Proposed fix
Comment 4 Remy Suen CLA 2008-10-21 05:54:01 EDT
Hi, I'm hitting this on I20081007-1600.

Please invoke code completion inside the parentheses of the getTime() invocation in the getRange() method to reproduce the NPE. I saw this problem in a bigger piece of code I was working on, this is a trimmed down version. I see two different NPEs in my logs although they both point to CompletionOnQualifiedAllocationExpression.

public class Test {

	public static long[] getRange() {	
		return new long[] { getTime() };
	}

	private static long getTime() {
		return -1;
	}
}

java.lang.NullPointerException
	at org.eclipse.jdt.internal.codeassist.complete.CompletionOnQualifiedAllocationExpression.resolveType(CompletionOnQualifiedAllocationExpression.java:45)
	at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:913)
	at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:101)
	at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:101)
	at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:101)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:447)
	at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:192)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:406)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1115)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1203)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:540)
	at org.eclipse.jdt.internal.codeassist.CompletionEngine.complete(CompletionEngine.java:2538)
	at org.eclipse.jdt.internal.core.Openable.codeComplete(Openable.java:129)

java.lang.NullPointerException
	at org.eclipse.jdt.internal.codeassist.complete.CompletionOnQualifiedAllocationExpression.resolveType(CompletionOnQualifiedAllocationExpression.java:45)
	at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:913)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:447)
	at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:192)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:406)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1115)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1203)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:540)
	at org.eclipse.jdt.internal.codeassist.CompletionEngine.complete(CompletionEngine.java:2538)
Comment 5 David Audel CLA 2008-10-21 06:45:45 EDT
Released for 3.5M3.

Test added
  CompletionTests#testArrayInitializer1()
Comment 6 Jerome Lanneluc CLA 2008-10-27 08:57:13 EDT
Verified for 3.5M3 using I20081026-2000