Community
Participate
Working Groups
Build Identifier: Eclipse SDK Version: 3.6.1 Build id: M20100909-0800 NPE occurs when I contribute to the 'org.eclipse.cdt.managedbuilder.core.buildDefinitions' extension point with 'hasNature' enablement. eclipse.buildId=unknown java.version=1.6.0_14 java.vendor=Sun Microsystems Inc. BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=fr_FR Framework arguments: -application org.eclipse.ui.ide.workbench Command-line arguments: -application org.eclipse.ui.ide.workbench -data C:\product\clojure\workspace2/../runtime-New_configuration -dev file:C:/product/clojure/workspace2/.metadata/.plugins/org.eclipse.pde.core/Product/dev.properties -os win32 -ws win32 -arch x86 This is a continuation of log file C:\product\clojure\runtime-New_configuration\.metadata\.bak_0.log Created Time: 2010-11-18 18:49:00.515 Error Thu Nov 18 19:08:20 CET 2010 Resource '/ddss' does not exist. org.eclipse.core.internal.resources.ResourceException: Resource '/ddss' does not exist. at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:326) at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:200) at org.eclipse.core.internal.resources.Project.checkAccessible(Project.java:134) at org.eclipse.core.internal.resources.Project.getDescription(Project.java:379) at org.eclipse.cdt.managedbuilder.internal.enablement.HasNatureExpression.evaluate(HasNatureExpression.java:58) at org.eclipse.cdt.managedbuilder.internal.enablement.AndExpression.evaluate(AndExpression.java:30) at org.eclipse.cdt.managedbuilder.internal.enablement.OptionEnablementExpression.evaluate(OptionEnablementExpression.java:193) at org.eclipse.cdt.managedbuilder.internal.enablement.OptionEnablementExpression.evaluate(OptionEnablementExpression.java:185) at org.eclipse.cdt.managedbuilder.internal.core.BooleanExpressionApplicabilityCalculator.evaluate(BooleanExpressionApplicabilityCalculator.java:103) at org.eclipse.cdt.managedbuilder.internal.core.BooleanExpressionApplicabilityCalculator.isToolUsedInCommandLine(BooleanExpressionApplicabilityCalculator.java:79) at org.eclipse.cdt.managedbuilder.internal.core.Tool.isEnabled(Tool.java:3591) at org.eclipse.cdt.managedbuilder.internal.core.FolderInfo.filterTools(FolderInfo.java:285) at org.eclipse.cdt.managedbuilder.internal.core.FolderInfo.getFilteredTools(FolderInfo.java:325) at org.eclipse.cdt.managedbuilder.internal.core.Configuration.getFilteredTools(Configuration.java:1061) at org.eclipse.cdt.managedbuilder.core.ManagedBuildManager.performValueHandlerEvent(ManagedBuildManager.java:3267) at org.eclipse.cdt.managedbuilder.core.ResourceChangeHandler2.sendClose(ResourceChangeHandler2.java:101) at org.eclipse.cdt.managedbuilder.core.ResourceChangeHandler2.sendClose(ResourceChangeHandler2.java:91) at org.eclipse.cdt.managedbuilder.core.ResourceChangeHandler2$RcMoveHandler.handleResourceRemove(ResourceChangeHandler2.java:75) at org.eclipse.cdt.core.settings.model.util.ResourceChangeHandlerBase$DeltaVisitor.visit(ResourceChangeHandlerBase.java:122) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:68) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:48) at org.eclipse.cdt.core.settings.model.util.ResourceChangeHandlerBase.doHandleResourceMove(ResourceChangeHandlerBase.java:189) at org.eclipse.cdt.core.settings.model.util.ResourceChangeHandlerBase.resourceChanged(ResourceChangeHandlerBase.java:148) at org.eclipse.cdt.managedbuilder.core.ResourceChangeHandler2.resourceChanged(ResourceChangeHandler2.java:170) at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:291) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:285) at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:149) at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:327) at org.eclipse.core.internal.resources.Workspace.checkpoint(Workspace.java:381) at org.eclipse.ltk.core.refactoring.PerformChangeOperation$1.run(PerformChangeOperation.java:263) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) at org.eclipse.ltk.core.refactoring.PerformChangeOperation.executeChange(PerformChangeOperation.java:306) at org.eclipse.ltk.internal.ui.refactoring.UIPerformChangeOperation.executeChange(UIPerformChangeOperation.java:92) at org.eclipse.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:218) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) Reproducible: Always Steps to Reproduce: 1. Contribute to the 'org.eclipse.cdt.managedbuilder.core.buildDefinitions' extension point with 'hasNature' enablement. 2. Create a project which is based on the new build definition 3. Delete this project 4. NPE occurs in HasNatureExpression class
Created attachment 183408 [details] the attachment is a patch The ResourceException is raised because the project just has been removed. Before testing if the project has the wanted nature, a test is done to check if the project still exists.
Thanks for the patch. Wouldn't a better fix be to simply remove the logging of the exception at line 67? The only method that can throw a core exception is getDescription() which happens precisely for non-existence and non-accessibility.
Also you say NPE in the description, and I see you've added a null check in the patch -- are you getting a NPE or just a CoreException logged? The backtrace you've provided just shows CoreException.
You're right :I wanted to modify the description but maybe it's not possible. No NPE in fact: it's a mistake in my description. There's just a ResourceException which is a kind of CoreException. So the null check is surely useless since IResource.getProject() return null only when this resource is the workspace root (according to the IResource#getProject javadoc). (In reply to comment #3) > Also you say NPE in the description, and I see you've added a null check in the > patch -- are you getting a NPE or just a CoreException logged? The backtrace > you've provided just shows CoreException.
Created attachment 183425 [details] fix Fix to be committed.
Fixed in HEAD and 7.0.2. Samuel, please verify that it fixes your issue.
*** cdt cvs genie on behalf of jblackburn *** Bug 330594 - ResourceException checking HasNatureExpression when project closed [*] HasNatureExpression.java 1.3 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/HasNatureExpression.java?root=Tools_Project&r1=1.2&r2=1.3 [*] HasNatureExpression.java 1.2.18.1 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/HasNatureExpression.java?root=Tools_Project&r1=1.2&r2=1.2.18.1