Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 330594

Summary: ResourceException in org.eclipse.cdt.managedbuilder.internal.enablement.HasNatureExpression
Product: [Tools] CDT Reporter: Samuel JUDITH <samuel>
Component: cdt-build-managedAssignee: James Blackburn <jamesblackburn+eclipse>
Status: RESOLVED FIXED QA Contact: Chris Recoskie <recoskie>
Severity: normal    
Priority: P3 CC: cdtdoug, dpochet, jamesblackburn+eclipse
Version: 4.0   
Target Milestone: 7.0.2   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
the attachment is a patch
none
fix jamesblackburn+eclipse: iplog-

Description Samuel JUDITH CLA 2010-11-18 13:12:55 EST
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
Comment 1 Samuel JUDITH CLA 2010-11-18 13:49:31 EST
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.
Comment 2 James Blackburn CLA 2010-11-18 14:05:56 EST
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.
Comment 3 James Blackburn CLA 2010-11-18 14:08:19 EST
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.
Comment 4 Samuel JUDITH CLA 2010-11-18 14:41:19 EST
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.
Comment 5 James Blackburn CLA 2010-11-18 16:09:37 EST
Created attachment 183425 [details]
fix

Fix to be committed.
Comment 6 James Blackburn CLA 2010-11-18 16:13:09 EST
Fixed in HEAD and 7.0.2. 
Samuel, please verify that it fixes your issue.