Bug 247666 - [1.5][compiler] AIOOBE inside missing type reporting
Summary: [1.5][compiler] AIOOBE inside missing type reporting
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.4.2   Edit
Assignee: Philipe Mulet CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 252288 258248 285845 (view as bug list)
Depends on:
Blocks:
 
Reported: 2008-09-17 11:14 EDT by Anirudh Vyas CLA
Modified: 2009-08-08 19:14 EDT (History)
7 users (show)

See Also:


Attachments
Proposed fix (984 bytes, patch)
2008-09-18 09:04 EDT, Olivier Thomann CLA
no flags Details | Diff
Patch with tests (2.47 KB, patch)
2008-10-02 06:45 EDT, Philipe Mulet CLA
no flags Details | Diff
Save action on a javascript file gives the same error that I got some time back on Java code (Eclipse Ganymede) (196.71 KB, image/jpeg)
2009-03-24 17:01 EDT, Anirudh Vyas CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Anirudh Vyas CLA 2008-09-17 11:14:03 EDT
Build ID: I20080617-2000

Steps To Reproduce:
1.Go to Windows > Preferences > Java > Editor > Save Actions > (Check all the options like auto import on save, format all source on save, Additional actions > Configure > Using all tabs check finalization of fields etc options).
2.Create a file with some content on it. (In my case it was a project specific file.)
3.Save.

Shows AST must be null. Please see the log information pop up.


More information:
Gives this exception in Log.
!ENTRY org.eclipse.jdt.ui 4 2 2008-09-17 10:47:25.888
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jdt.ui".
!STACK 1
Java Model Exception: java.lang.ArrayIndexOutOfBoundsException: 1
	at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:222)
	at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:243)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:190)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:709)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:770)
	at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1224)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:124)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:108)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:89)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:149)
	at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86)
	at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:102)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
	at org.eclipse.jdt.internal.compiler.lookup.MethodBinding.collectMissingTypes(MethodBinding.java:314)
	at org.eclipse.jdt.internal.compiler.ClassFile.generateMethodInfoAttribute(ClassFile.java:6299)
	at org.eclipse.jdt.internal.compiler.ClassFile.addProblemMethod(ClassFile.java:949)
	at org.eclipse.jdt.internal.compiler.ClassFile.createProblemType(ClassFile.java:195)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:500)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:581)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode(CompilationUnitDeclaration.java:356)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:865)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:904)
	at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:182)
	... 16 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
	at org.eclipse.jdt.internal.compiler.lookup.MethodBinding.collectMissingTypes(MethodBinding.java:314)
	at org.eclipse.jdt.internal.compiler.ClassFile.generateMethodInfoAttribute(ClassFile.java:6299)
	at org.eclipse.jdt.internal.compiler.ClassFile.addProblemMethod(ClassFile.java:949)
	at org.eclipse.jdt.internal.compiler.ClassFile.createProblemType(ClassFile.java:195)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:500)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:581)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode(CompilationUnitDeclaration.java:356)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:865)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:904)
	at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:182)
	at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:243)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:190)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:709)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:770)
	at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1224)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:124)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:108)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:89)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:149)
	at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86)
	at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:102)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206)
!SUBENTRY 1 org.eclipse.jdt.core 4 1005 2008-09-17 10:47:25.888
!MESSAGE 1
!STACK 0
Comment 1 Dani Megert CLA 2008-09-18 08:48:44 EDT
Can you provide the file?
I assume the file was still saved but just Clean Up not done, right.

Moving to JDT Core as the exception happens there, though the stack trace only shows reconciler stuff and not save related issues.
Comment 2 Olivier Thomann CLA 2008-09-18 09:03:49 EDT
A test case would be nice to create a regression test.
The problem is obvious:
for (int j = 0, length = interfaces.length; j < length; j++) {
missingTypes = interfaces[i].collectMissingTypes(missingTypes);
}
it should be:
interfaces[j]

Philippe, I think the change is safe enough to go into 3.4.2 and 3.5M2.

Comment 3 Olivier Thomann CLA 2008-09-18 09:04:49 EDT
Created attachment 112892 [details]
Proposed fix

Philippe, please review.
Comment 4 Philipe Mulet CLA 2008-10-02 06:24:42 EDT
Fix is good, here is an example:

public class X {
	<U,V extends Runnable> void foo(Zork z) {}	
	void bar() {
		foo(null);
	}
}
Comment 5 Philipe Mulet CLA 2008-10-02 06:45:44 EDT
Created attachment 114081 [details]
Patch with tests

Thanks for the fix Olivier, added a test for it.
Comment 6 Philipe Mulet CLA 2008-10-02 06:46:14 EDT
Added ProblemTypeAndMethodTest#test090.
Released for 3.5M3.
Fixed
Comment 7 Philipe Mulet CLA 2008-10-02 06:51:38 EDT
Candidating for 3.4.2. This is a trivial fix, and a regression over 3.3.2 introduced in 3.4.0 with support for missing types.

In 3.3.2:
Eclipse Java Compiler 0.791_R33x, 3.3.2, Copyright IBM Corp 2000, 2008. All rights reserved.
[compiled 230 lines in 438 ms: 525.1 lines/s]
----------
1. ERROR in X.java (at line 2)
        <U,V extends Runnable> void foo(Zork z) {}
                                        ^^^^
Zork cannot be resolved to a type
----------
2. ERROR in X.java (at line 4)
        foo(null);
        ^^^
The method foo(null) is undefined for the type X
----------
2 problems (2 errors)


In 3.4.1:
Eclipse Java Compiler 0.883_R34x, 3.4.1 release, Copyright IBM Corp 2000, 2008. All rights reserved.
[total compilation time: 454]
----------
1. ERROR in X.java (at line 0)
        public class X {
        ^
Internal compiler error
java.lang.ArrayIndexOutOfBoundsException: 1
        at org.eclipse.jdt.internal.compiler.lookup.MethodBinding.collectMissingTypes(MethodBinding.java:314)
        at org.eclipse.jdt.internal.compiler.ClassFile.generateMethodInfoAttribute(ClassFile.java:6299)
        at org.eclipse.jdt.internal.compiler.ClassFile.addProblemMethod(ClassFile.java:949)
        at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:173)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:530)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:581)
        at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode(CompilationUnitDeclaration.java:356)
        at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:755)
        at org.eclipse.jdt.internal.compiler.ProcessTaskManager.run(ProcessTaskManager.java:137)
        at java.lang.Thread.run(Thread.java:619)

----------
2. ERROR in X.java (at line 2)
        <U,V extends Runnable> void foo(Zork z) {}
                                        ^^^^
Zork cannot be resolved to a type
----------
3. ERROR in X.java (at line 4)
        foo(null);
        ^^^
The method foo(Zork) from the type X refers to the missing type Zork
----------
3 problems (3 errors)
Comment 8 Philipe Mulet CLA 2008-10-02 06:52:07 EDT
Jerome - ok for 3.4.2 ?
Comment 9 Jerome Lanneluc CLA 2008-10-02 06:58:36 EDT
+1 for 3.4.2 since this is a regression and the fix is trivial
Comment 10 Philipe Mulet CLA 2008-10-02 09:38:48 EDT
Released for 3.4.2.
Comment 11 Philipe Mulet CLA 2008-10-28 08:39:09 EDT
*** Bug 252288 has been marked as a duplicate of this bug. ***
Comment 12 Kent Johnson CLA 2008-10-28 13:12:50 EDT
Verified for 3.5M3 using I20081026-2000 build.
Comment 13 Frederic Fusier CLA 2008-12-08 03:35:31 EST
*** Bug 252288 has been marked as a duplicate of this bug. ***
Comment 14 Philipe Mulet CLA 2008-12-10 08:24:03 EST
*** Bug 258248 has been marked as a duplicate of this bug. ***
Comment 15 Kent Johnson CLA 2009-02-03 12:21:23 EST
Verified for 3.4.2 using M20090127-1710
Comment 16 Anirudh Vyas CLA 2009-03-24 17:01:46 EDT
Created attachment 129762 [details]
Save action on a javascript file gives the same error that I got some time back on Java code (Eclipse Ganymede)

I am getting the same error on JS file (with JS auto-save actions enabled and all options checked , like remove local variables etc.)

Thought you guys should know about this.
Regards
Vyas, Anirudh
Comment 17 Olivier Thomann CLA 2009-08-08 19:14:08 EDT
*** Bug 285845 has been marked as a duplicate of this bug. ***