Bug 180112 - NPE in while restoring an old workspace
Summary: NPE in while restoring an old workspace
Status: RESOLVED FIXED
Alias: None
Product: PDE
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 3.3   Edit
Hardware: PC Windows XP
: P3 major (vote)
Target Milestone: 3.3 M7   Edit
Assignee: PDE-UI-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-03-29 22:23 EDT by Pascal Rapicault CLA
Modified: 2007-04-13 16:04 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Pascal Rapicault CLA 2007-03-29 22:23:29 EDT
I20070327-0800
While opening an old workspcae with the build mentioned I got the following NPE.


java.lang.NullPointerException
at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2587)
at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1878)
at org.eclipse.jdt.internal.core.DeltaProcessingState.initializeRoots(DeltaProcessingState.java:202)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:717)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1797)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:784)
at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:4474)
at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:33)
at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2168)
at org.eclipse.jdt.internal.core.JavaModelManager$9.run(JavaModelManager.java:2101)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1797)
at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2117)
at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1496)
at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1563)
at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2574)
at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1878)
at org.eclipse.jdt.internal.core.JavaProject.buildStructure(JavaProject.java:394)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:229)
at org.eclipse.jdt.internal.core.Openable.openParent(Openable.java:420)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:218)
at org.eclipse.jdt.internal.core.Openable.openParent(Openable.java:420)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:218)
at org.eclipse.jdt.internal.core.Openable.openParent(Openable.java:420)
at org.eclipse.jdt.internal.core.CompilationUnit.openParent(CompilationUnit.java:1102)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:218)
at org.eclipse.jdt.internal.core.SourceRefElement.generateInfos(SourceRefElement.java:107)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:505)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:249)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:235)
at org.eclipse.jdt.internal.core.JavaElement.exists(JavaElement.java:153)
at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.restoreState(TypeHierarchyViewPart.java:1474)
at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.createPartControl(TypeHierarchyViewPart.java:865)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:363)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:219)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:592)
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:299)
at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:531)
at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:179)
at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:268)
at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:394)
at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1208)
at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1161)
at org.eclipse.ui.internal.PartStack.updateContainerVisibleTab(PartStack.java:1608)
at org.eclipse.ui.internal.PartStack.remove(PartStack.java:848)
at org.eclipse.ui.internal.PartStack.replace(PartStack.java:893)
at org.eclipse.ui.internal.PerspectiveHelper.removePart(PerspectiveHelper.java:1208)
at org.eclipse.ui.internal.Perspective.hideView(Perspective.java:539)
at org.eclipse.ui.internal.WorkbenchPage.hideView(WorkbenchPage.java:2225)
at org.eclipse.ui.internal.ViewPane.doHide(ViewPane.java:212)
at org.eclipse.ui.internal.PartStack.close(PartStack.java:518)
at org.eclipse.ui.internal.PartStack.close(PartStack.java:501)
at org.eclipse.ui.internal.PartStack$1.close(PartStack.java:119)
at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation$1.handleEvent(TabbedStackPresentation.java:81)
at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:267)
at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:276)
at org.eclipse.ui.internal.presentations.r33.DefaultTabFolder.access$1(DefaultTabFolder.java:1)
at org.eclipse.ui.internal.presentations.r33.DefaultTabFolder$1.closeButtonPressed(DefaultTabFolder.java:66)
at org.eclipse.ui.internal.presentations.r33.PaneFolder.notifyCloseListeners(PaneFolder.java:602)
at org.eclipse.ui.internal.presentations.r33.PaneFolder$3.close(PaneFolder.java:190)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:2142)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:312)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3673)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3284)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2361)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2325)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:101)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:152)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:359)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:174)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:476)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:416)
at org.eclipse.equinox.launcher.Main.run(Main.java:1141)
Comment 1 Olivier Thomann CLA 2007-03-29 22:35:54 EDT
Is it possible to get a copy of this workspace?
Comment 2 Jerome Lanneluc CLA 2007-03-30 04:50:53 EDT
Looking at the code, the NPE occurs because one of the entries returned by IClasspathContainer#getClasspathEntries() is null. Unfortunately, without the workspace it is impossible to know which container is guilty.
Comment 3 Jerome Lanneluc CLA 2007-03-30 05:11:12 EDT
We should however add a null check in our code, and log the fact that the initializer is misbehaving.
Comment 4 Jerome Lanneluc CLA 2007-03-30 07:13:23 EDT
(In reply to comment #3)
> We should however add a null check in our code, and log the fact that the
> initializer is misbehaving.
Entered bug 180169 for adding the protection.

Comment 5 Jerome Lanneluc CLA 2007-04-02 07:53:42 EDT
Protection has been added. Such case should now be logged only.
Please reopen if you can provide the workspace.
Comment 6 Tod Creasey CLA 2007-04-05 14:14:59 EDT
I have a workspace that does this when you add all of the plug-ins in the SDK to the java search - unfortuneately it is 33M zipped.

This is on build 20070327-0800

This is the trace from adding all java elements

!ENTRY org.eclipse.core.resources 2 75 2007-04-05 18:14:33.335
!MESSAGE Errors during build.
!SUBENTRY 1 org.eclipse.jdt.core 2 75 2007-04-05 18:14:33.335
!MESSAGE Errors running builder 'Java Builder' on project 'External Plug-in Libraries'.
!SUBENTRY 1 org.eclipse.jdt.core 2 75 2007-04-05 18:14:33.335
!MESSAGE java.lang.NullPointerException encountered while running Java Builder.
!STACK 0
java.lang.NullPointerException
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2587)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1878)
	at org.eclipse.jdt.internal.core.JavaProject.computeExpandedClasspath(JavaProject.java:462)
	at org.eclipse.jdt.internal.core.JavaProject.getExpandedClasspath(JavaProject.java:1467)
	at org.eclipse.jdt.internal.core.builder.NameEnvironment.computeClasspathLocations(NameEnvironment.java:91)
	at org.eclipse.jdt.internal.core.builder.NameEnvironment.<init>(NameEnvironment.java:39)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.initializeBuilder(JavaBuilder.java:570)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:166)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:163)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:248)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:251)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:307)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:339)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:137)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

And this is the one from shutting down

!ENTRY org.eclipse.ui.ide 2 1 2007-04-05 18:14:36.085
!MESSAGE Problems occurred while trying to save the state of the workbench.
!SUBENTRY 1 org.eclipse.core.resources 2 566 2007-04-05 18:14:36.085
!MESSAGE Problems occurred during save.
!STACK 0
java.lang.NullPointerException
	at org.eclipse.jdt.internal.compiler.util.HashtableOfObjectToInt.get(HashtableOfObjectToInt.java:71)
	at org.eclipse.jdt.internal.core.JavaModelManager$VariablesAndContainersSaveHelper.saveNewId(JavaModelManager.java:3368)
	at org.eclipse.jdt.internal.core.JavaModelManager$VariablesAndContainersSaveHelper.saveClasspathEntry(JavaModelManager.java:3322)
	at org.eclipse.jdt.internal.core.JavaModelManager$VariablesAndContainersSaveHelper.saveClasspathEntries(JavaModelManager.java:3317)
	at org.eclipse.jdt.internal.core.JavaModelManager$VariablesAndContainersSaveHelper.saveContainers(JavaModelManager.java:3359)
	at org.eclipse.jdt.internal.core.JavaModelManager$VariablesAndContainersSaveHelper.saveProjects(JavaModelManager.java:3423)
	at org.eclipse.jdt.internal.core.JavaModelManager$VariablesAndContainersSaveHelper.save(JavaModelManager.java:3251)
	at org.eclipse.jdt.internal.core.JavaModelManager.saveVariablesAndContainers(JavaModelManager.java:3154)
	at org.eclipse.jdt.internal.core.JavaModelManager.saving(JavaModelManager.java:3466)
	at org.eclipse.core.internal.resources.SaveManager.executeLifecycle(SaveManager.java:335)
	at org.eclipse.core.internal.resources.SaveManager$1.run(SaveManager.java:160)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.resources.SaveManager.broadcastLifecycle(SaveManager.java:163)
	at org.eclipse.core.internal.resources.SaveManager.save(SaveManager.java:969)
	at org.eclipse.core.internal.resources.Workspace.save(Workspace.java:1824)
	at org.eclipse.ui.internal.ide.application.IDEWorkbenchAdvisor$3.run(IDEWorkbenchAdvisor.java:397)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
Comment 7 Tod Creasey CLA 2007-04-05 14:35:23 EDT
Increasing to major as I had to throw away the workspace after this happened a couple of times.
Comment 8 Jerome Lanneluc CLA 2007-04-10 05:23:04 EDT
Asked Tod for his workspace.
Comment 9 Jerome Lanneluc CLA 2007-04-11 06:38:45 EDT
Got Tod's workspace.

Enabling the classpath resolution trace (debug/cpresolution=true) I see that the org.eclipse.pde.core.externalJavaSearch is misbehaving and returning a null classpath entry.

Moving to PDE/UI.
Comment 10 Wassim Melhem CLA 2007-04-13 16:03:40 EDT
Fixed.  As we were sorting the classpath entries, the resulting array would have one less entry (null) if two jars had the same name.
Comment 11 Wassim Melhem CLA 2007-04-13 16:04:36 EDT
Just to be clear, this occurs only in the 'External Libraries' project that keeps track of additional Java search scope libraries.