Bug 69799 - [1.5] NPE when saving File with forEach loop
Summary: [1.5] NPE when saving File with forEach loop
Status: RESOLVED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.1 M1   Edit
Assignee: Philipe Mulet CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-07-11 14:03 EDT by Karsten Becker CLA
Modified: 2005-01-11 11:03 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Karsten Becker CLA 2004-07-11 14:03:13 EDT
Hi,
I tried to generate Code that reproduces this Failure, but could not find one.
The simplification of what my Code Structure is:
interface test2I extends testI<test2I>{
	test2I hello2();
}
interface testI<T> {
}
abstract class test2<T extends testI> implements testI<T>{
	protected Set <T> in=new LinkedHashSet<T>();
}
public class test extends test2<test2I> implements test2I{
	/**
	 * @see test2I#hello2()
	 */
	public test2I hello2() {
		for (test2I test:in){
			System.out.println(test);
		}
		return null;
	}
}
Note: This code doesn't cause the Error. It just represents the Structure.
If I take out the forEach loop, the Error no longer exists.
The Stacktrace is:
java.lang.NullPointerException
	at
org.eclipse.jdt.internal.compiler.codegen.CodeStream.generateConstant(CodeStream.java:1385)
	at
org.eclipse.jdt.internal.compiler.ast.SingleNameReference.generateCode(SingleNameReference.java:304)
	at
org.eclipse.jdt.internal.compiler.ast.MessageSend.generateCode(MessageSend.java:75)
	at
org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.generateCode(LocalDeclaration.java:103)
	at
org.eclipse.jdt.internal.compiler.ast.ForStatement.generateCode(ForStatement.java:180)
	at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:214)
	at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:161)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:555)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:609)
	at
org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode(CompilationUnitDeclaration.java:180)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:570)
	at
org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:176)
	at
org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:146)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:183)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:572)
	at
org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:971)
	at
org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:58)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:739)
	at
org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1097)
	at
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:88)
	at
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:129)
	at
org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86)
	at
org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:96)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:75)
	at org.eclipse.jdt.internal.ui.text.JavaReconciler.process(JavaReconciler.java:315)
	at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:204)
Comment 1 Karsten Becker CLA 2004-07-11 14:14:03 EDT
This code does Cause the error if you put them into the according Compilation Units.
Comment 2 Karsten Becker CLA 2004-07-12 06:47:35 EDT
Seems to be fixed with latest nightly. 200407110010
Comment 3 Karsten Becker CLA 2004-07-12 20:44:13 EDT
I think this is very closly related:
And caused by 
Set<FrameWithEvents> channel = channels.get(0);
        for (Iterator<FrameWithEvents> iter = channel.iterator(); iter.hasNext();) {
            Set<FrameWithEvents> element;
            element = (Set<FrameWithEvents>) iter.next();
           
        }

!ENTRY org.eclipse.jdt.core 4 4 Jul 13, 2004 02:29:50.12
!MESSAGE Exception occurred during problem detection: 
!STACK 0
java.lang.NullPointerException
	at
org.eclipse.jdt.internal.compiler.ast.CastExpression.checkCastTypesCompatibility(CastExpression.java:188)
	at
org.eclipse.jdt.internal.compiler.ast.CastExpression.resolveType(CastExpression.java:522)
	at
org.eclipse.jdt.internal.compiler.ast.Assignment.resolveType(Assignment.java:157)
	at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:449)
	at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:101)
	at
org.eclipse.jdt.internal.compiler.ast.ForStatement.resolve(ForStatement.java:297)
	at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:395)
	at
org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:134)
	at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:373)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:920)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:969)
	at
org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:280)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:564)
	at
org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:175)
	at
org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:148)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:183)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:543)
	at
org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:974)
	at
org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:58)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:739)
	at
org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1100)
	at
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:88)
	at
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:129)
	at
org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86)
	at
org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:96)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:75)
	at org.eclipse.jdt.internal.ui.text.JavaReconciler.process(JavaReconciler.java:315)
	at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:204)
Comment 4 Philipe Mulet CLA 2004-07-19 18:47:48 EDT
Reproduced with latest scenario. Was missing a null check when cast from class 
to interface. Added regression test GenericTypeTest#test252.

Fixed.