Community
Participate
Working Groups
Build ID: I20071213-1700 Steps To Reproduce: I've installed 3.4M4 and pointed it to my old workspace (which I used for 3.4M3). Upon startup of eclipse a NullPointerException is reported. More information: The log shows these NullPointers: !ENTRY org.eclipse.core.resources 2 75 2007-12-19 09:49:41.171 !MESSAGE Errors during build. !SUBENTRY 1 org.eclipse.jdt.core 2 75 2007-12-19 09:49:41.171 !MESSAGE Errors running builder 'Java Builder' on project 'bc-FrwkDev_stream'. !SUBENTRY 1 org.eclipse.jdt.core 2 75 2007-12-19 09:49:41.171 !MESSAGE java.lang.NullPointerException encountered while running Java Builder. !STACK 0 java.lang.NullPointerException at org.eclipse.core.internal.filesystem.InternalFileSystemCore.getStore(InternalFileSystemCore.java:104) at org.eclipse.core.filesystem.EFS.getStore(EFS.java:350) at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1048) at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1037) at org.eclipse.jdt.internal.core.builder.SourceFile.getContents(SourceFile.java:79) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9393) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9365) at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8027) at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:587) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:357) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:371) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:362) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:175) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:326) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:59) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:253) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:177) 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:166) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:197) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:249) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:252) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:305) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:337) 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:55) !ENTRY org.eclipse.jface 4 2 2007-12-19 09:51:26.000 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface". !STACK 0 java.lang.NullPointerException at org.eclipse.core.internal.filesystem.InternalFileSystemCore.getStore(InternalFileSystemCore.java:104) at org.eclipse.core.filesystem.EFS.getStore(EFS.java:350) at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1048) at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1037) at org.eclipse.jdt.internal.core.CompilationUnit.openBuffer(CompilationUnit.java:1067) at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:84) at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:252) at org.eclipse.jdt.internal.core.SourceRefElement.generateInfos(SourceRefElement.java:107) at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:510) at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:251) at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:237) at org.eclipse.jdt.internal.core.JavaElement.exists(JavaElement.java:155) at org.eclipse.jdt.internal.debug.ui.BreakpointUtils.getMember(BreakpointUtils.java:137) at org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getLineBreakpointText(JDIModelPresentation.java:1549) at org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getBreakpointText(JDIModelPresentation.java:1463) at org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getText(JDIModelPresentation.java:218) at org.eclipse.debug.internal.ui.LazyModelPresentation.getText(LazyModelPresentation.java:180) at org.eclipse.debug.internal.ui.DelegatingModelPresentation.getText(DelegatingModelPresentation.java:162) at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsLabelProvider.getText(BreakpointsLabelProvider.java:86) at org.eclipse.jface.viewers.WrappedViewerLabelProvider.getText(WrappedViewerLabelProvider.java:108) at org.eclipse.jface.viewers.WrappedViewerLabelProvider.update(WrappedViewerLabelProvider.java:164) at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:135) at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:929) at org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(AbstractTreeViewer.java:99) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.runtime.Platform.run(Platform.java:857) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:46) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:199) at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:1009) at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:466) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.runtime.Platform.run(Platform.java:857) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:46) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:199) at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2023) at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2632) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1853) at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:704) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1828) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1784) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1770) at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:1430) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1365) at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:390) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1328) at org.eclipse.jface.viewers.CheckboxTreeViewer.preservingSelection(CheckboxTreeViewer.java:371) at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1428) at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:515) at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1387) at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsViewer.refresh(BreakpointsViewer.java:341) at org.eclipse.jface.viewers.ContentViewer.setLabelProvider(ContentViewer.java:282) at org.eclipse.jface.viewers.StructuredViewer.setLabelProvider(StructuredViewer.java:2071) at org.eclipse.jface.viewers.ColumnViewer.setLabelProvider(ColumnViewer.java:355) at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView.createViewer(BreakpointsView.java:153) at org.eclipse.debug.ui.AbstractDebugView$ViewerPage.createControl(AbstractDebugView.java:270) at org.eclipse.debug.ui.AbstractDebugView.createDefaultPage(AbstractDebugView.java:358) at org.eclipse.ui.part.PageBookView.createPartControl(PageBookView.java:473) at org.eclipse.debug.ui.AbstractDebugView.createPartControl(AbstractDebugView.java:319) at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView.createPartControl(BreakpointsView.java:129) at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:371) at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:230) at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:594) at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:300) at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:531) at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256) at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:668) at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:576) at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:564) at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:270) at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:931) at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3461) at org.eclipse.ui.internal.WorkbenchPage.busySetPerspective(WorkbenchPage.java:988) at org.eclipse.ui.internal.WorkbenchPage.access$17(WorkbenchPage.java:972) at org.eclipse.ui.internal.WorkbenchPage$18.run(WorkbenchPage.java:3560) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67) at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3558) at org.eclipse.ui.internal.PerspectiveBarContributionItem.select(PerspectiveBarContributionItem.java:123) at org.eclipse.ui.internal.PerspectiveBarContributionItem$1.widgetSelected(PerspectiveBarContributionItem.java:92) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:952) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3750) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3361) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2381) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2345) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2211) at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:473) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:468) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) 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:362) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:175) 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:561) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:501) at org.eclipse.equinox.launcher.Main.run(Main.java:1239) at org.eclipse.equinox.launcher.Main.main(Main.java:1215)
This seems to be a JDT issue. In org.eclipse.core.internal.filesystem.InternalFileSystemCore#getStore(URI) line 104, null URI is the only thing that can cause NPE. The real issue seems to be in org.eclipse.jdt.internal.core.util.Util#getResourceContentsAsCharArray(...) line 1048, where EFS#getStore(URI) is called. The uri seems to be null what is not allowed as API states. The file, which is used in the line mentioned right above, probably doesn't exist and getLocationURI() returns null. So if you can pass a non-existing file to Util#getResourceContentsAsCharArray(...) you should add an extra check inside of the method, if not there is an issue above that.
(In reply to comment #1) > This seems to be a JDT issue. > > In org.eclipse.core.internal.filesystem.InternalFileSystemCore#getStore(URI) > line 104, null URI is the only thing that can cause NPE. > > The real issue seems to be in > org.eclipse.jdt.internal.core.util.Util#getResourceContentsAsCharArray(...) > line 1048, where EFS#getStore(URI) is called. The uri seems to be null what is > not allowed as API states. > > The file, which is used in the line mentioned right above, probably doesn't > exist and getLocationURI() returns null. > > So if you can pass a non-existing file to > Util#getResourceContentsAsCharArray(...) you should add an extra check inside > of the method, if not there is an issue above that. > The EFS#getStore(URI) Javadoc comment says: /** * Returns the file store corresponding to the provided URI. * * @param uri The URI of the file store to return * @return The file store * @exception CoreException if this method fails. Reasons include: * <ul> * <li>There is no registered file system for the given URI scheme.</li> * <li>The URI syntax was not in the appropriate form for that scheme.</li> * <li>There was a failure initializing the file system.</li> * </ul> */ As I do not see clearly that the 'uri' parameter is not supposed to be null, I would expect a CoreException if the method does not like this value. So, back to Platform/Resources...
If there is no mention of null in the javadoc, then you can assume that null is not a valid value. See: http://www.eclipse.org/articles/article.php?file=Article-API-Use/index.html "Do not pass null as a parameter to an API method unless the parameter is explicitly documented as allowing null. This is perhaps the most frequently made programming error."
Created attachment 86577 [details] Proposed fix and regression test
Created attachment 86665 [details] Simplified fix and same regression test
Fix and test released for 3.4M5
Verified for 3.4M5 using build I20080204-0010