Bug 236520 - [search] AIOOBE in PatternLocator.updateMatch
Summary: [search] AIOOBE in PatternLocator.updateMatch
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 M6   Edit
Assignee: Frederic Fusier CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-06-10 17:40 EDT by Philipe Mulet CLA
Modified: 2009-03-10 10:54 EDT (History)
1 user (show)

See Also:


Attachments
Proposed patch (2.94 KB, patch)
2009-03-04 12:52 EST, Frederic Fusier CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Philipe Mulet CLA 2008-06-10 17:40:04 EDT
3.4rc4

Trying to investigate bug 174282, I did hit an exception in search, see trace below.

Steps:
1. Fetch attachment from bug 174282:
      https://bugs.eclipse.org/bugs/attachment.cgi?id=98619
2. Expand it into D:\174282\
3. Create new Java project named '174282', at remote location: 'D:\174282'.
4. Once created, expand it, select 'SourceCode02' folder, 
   add it to build path as source folder
5. Notice that all units are located in invalid package (default)
6. Create a package named 'eclipseproblems01'
7. Drag and drop all units into it. Kaboom !


!ENTRY org.eclipse.jdt.ui 4 10001 2008-06-10 23:32:37.873
!MESSAGE Internal Error
!STACK 0
java.lang.reflect.InvocationTargetException
        at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:459)
        at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:354)
        at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:758)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
        at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:755)
        at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2483)
        at org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper.perform(RefactoringExecutionHelper.java:194)
        at org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper.perform(RefactoringExecutionHelper.java:146)
        at org.eclipse.jdt.internal.ui.refactoring.reorg.ReorgMoveStarter.run(ReorgMoveStarter.java:70)
        at org.eclipse.jdt.internal.ui.packageview.SelectionTransferDropAdapter.handleDropMove(SelectionTransferDropAdapter.java:273)
        at org.eclipse.jdt.internal.ui.packageview.SelectionTransferDropAdapter.performDrop(SelectionTransferDropAdapter.java:212)
        at org.eclipse.jdt.internal.ui.dnd.JdtViewerDropAdapter.drop(JdtViewerDropAdapter.java:242)
        at org.eclipse.jface.util.DelegatingDropAdapter$3.run(DelegatingDropAdapter.java:211)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:880)
        at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:48)
        at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
        at org.eclipse.jface.util.DelegatingDropAdapter.drop(DelegatingDropAdapter.java:209)
        at org.eclipse.swt.dnd.DNDListener.handleEvent(DNDListener.java:90)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1027)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1012)
        at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:770)
        at org.eclipse.swt.dnd.DropTarget.Drop(DropTarget.java:455)
        at org.eclipse.swt.dnd.DropTarget$3.method6(DropTarget.java:257)
        at org.eclipse.swt.internal.ole.win32.COMObject.callback6(COMObject.java:119)
        at org.eclipse.swt.internal.ole.win32.COM.DoDragDrop(Native Method)
        at org.eclipse.swt.dnd.DragSource.drag(DragSource.java:362)
        at org.eclipse.swt.dnd.DragSource.access$0(DragSource.java:288)
        at org.eclipse.swt.dnd.DragSource$1.handleEvent(DragSource.java:171)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
        at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
        at org.eclipse.jdt.internal.core.search.matching.PatternLocator.updateMatch(PatternLocator.java:468)
        at org.eclipse.jdt.internal.core.search.matching.TypeReferenceLocator.matchReportReference(TypeReferenceLocator.java:452)
        at org.eclipse.jdt.internal.core.search.matching.TypeReferenceLocator.matchReportReference(TypeReferenceLocator.java:292)
        at org.eclipse.jdt.internal.core.search.matching.TypeReferenceLocator.matchReportReference(TypeReferenceLocator.java:325)
        at org.eclipse.jdt.internal.core.search.matching.MatchLocator.reportMatching(MatchLocator.java:2147)
        at org.eclipse.jdt.internal.core.search.matching.MatchLocator.reportMatching(MatchLocator.java:2593)
        at org.eclipse.jdt.internal.core.search.matching.MatchLocator.reportMatching(MatchLocator.java:2322)
        at org.eclipse.jdt.internal.core.search.matching.MatchLocator.process(MatchLocator.java:1614)
        at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1040)
        at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1081)
        at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1213)
        at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.locateMatches(JavaSearchParticipant.java:94)
        at org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:223)
        at org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:506)
        at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:551)
        at org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.internalSearch(RefactoringSearchEngine.java:142)
        at org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.search(RefactoringSearchEngine.java:129)
        at org.eclipse.jdt.internal.corext.refactoring.reorg.MoveCuUpdateCreator.getReferences(MoveCuUpdateCreator.java:311)
        at org.eclipse.jdt.internal.corext.refactoring.reorg.MoveCuUpdateCreator.addReferenceUpdates(MoveCuUpdateCreator.java:149)
        at org.eclipse.jdt.internal.corext.refactoring.reorg.MoveCuUpdateCreator.addUpdates(MoveCuUpdateCreator.java:141)
        at org.eclipse.jdt.internal.corext.refactoring.reorg.MoveCuUpdateCreator.addUpdates(MoveCuUpdateCreator.java:125)
        at org.eclipse.jdt.internal.corext.refactoring.reorg.MoveCuUpdateCreator.createChangeManager(MoveCuUpdateCreator.java:96)
        at org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgPolicyFactory$MoveFilesFoldersAndCusPolicy.createChangeManager(ReorgPolicyFactory.java:1292)
        at org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgPolicyFactory$MoveFilesFoldersAndCusPolicy.checkFinalConditions(ReorgPolicyFactory.java:1202)
        at org.eclipse.jdt.internal.corext.refactoring.reorg.JavaMoveProcessor.checkFinalConditions(JavaMoveProcessor.java:93)
        at org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.checkFinalConditions(ProcessorBasedRefactoring.java:225)
        at org.eclipse.ltk.core.refactoring.Refactoring.checkAllConditions(Refactoring.java:160)
        at org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper$Operation.run(RefactoringExecutionHelper.java:77)
        at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:39)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:709)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800)
        at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:4650)
        at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:92)
        at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:446)
        ... 55 more
Comment 1 Frederic Fusier CLA 2009-03-04 12:10:15 EST
A simple test case to reproduce:
I.java:
    package pack1;
    public interface I<V> {
    }
X.java:
    package pack2;
    public class X {
        public I<A> foo() {}
    }

Search references of I in the project and you'll get the AIOOBE...
Comment 2 Frederic Fusier CLA 2009-03-04 12:52:21 EST
Created attachment 127512 [details]
Proposed patch
Comment 3 Frederic Fusier CLA 2009-03-04 12:52:51 EST
Released for 3.5M6 in HEAD stream.
Comment 4 David Audel CLA 2009-03-10 10:54:53 EDT
Verified for 3.5M6 using I20090310-0100