Community
Participate
Working Groups
Build: I20050509-2010 IResourceRuleFactory#modifyRule returns the argument by default when modifying a project. This is not correct for project close. Since closing a project calls arbitrary resource change listeners, it rule must be the workspace root. Either we need to add a new rule for closing resources, or change the default modify rule for projects to be the parent. Here is an error that occurs in this build as a result of this invalid rule: java.lang.IllegalArgumentException: Attempted to beginRule: R/, does not match outer scope rule: MultiRule[P/org.eclipse.core.boot,P/org.eclipse.core.commands,P/org.eclipse.core.filebuffers,P/org.eclipse.core.resources,P/org.eclipse.core.resources.compatibility,P/org.eclipse.core.resources.hpux,P/org.eclipse.core.resources.linux,P/org.eclipse.core.resources.macosx,P/org.eclipse.core.resources.qnx,P/org.eclipse.core.resources.spysupport,P/org.eclipse.core.resources.win32,P/org.eclipse.core.runtime,P/org.eclipse.core.runtime.compatibility,P/org.eclipse.core.tests.harness,P/org.eclipse.core.tests.resources,P/org.eclipse.core.tests.runtime,P/org.eclipse.core.tools,P/org.eclipse.core.tools.benchmark,P/org.eclipse.core.tools.resources,P/org.eclipse.jface,P/org.eclipse.jface.text,P/org.eclipse.osgi,P/org.eclipse.osgi.services,P/org.eclipse.osgi.tests,P/org.eclipse.osgi.tests.framework,P/org.eclipse.osgi.util,P/org.eclipse.pde.build,P/org.eclipse.pde.core,P/org.eclipse.pde.ui,P/org.eclipse.platform,P/org.eclipse.platform.doc.isv,P/org.eclipse.platform.doc.user,P/org.eclipse.platform-feature,P/org.eclipse.releng,P/org.eclipse.sdk,P/org.eclipse.sdk.win32,P/org.eclipse.swt,P/org.eclipse.swt.win32.win32.x86,P/org.eclipse.test,P/org.eclipse.test.performance,P/org.eclipse.test.performance.win32,P/org.eclipse.text,P/org.eclipse.ui,P/org.eclipse.ui.browser,P/org.eclipse.ui.console,P/org.eclipse.ui.editors,P/org.eclipse.ui.examples.job,P/org.eclipse.ui.ide,P/org.eclipse.ui.tests,P/org.eclipse.ui.tests.rcp,P/org.eclipse.ui.views,P/org.eclipse.ui.workbench,P/org.eclipse.ui.workbench.texteditor,P/org.eclipse.update.configurator,P/org.junit,P/perf.eclipse.org,P/platform-core-home,P/test,P/zzJohn] at org.eclipse.core.internal.runtime.Assert.isLegal(Assert.java:58) at org.eclipse.core.internal.jobs.ThreadJob.illegalPush(ThreadJob.java:117) at org.eclipse.core.internal.jobs.ThreadJob.push(ThreadJob.java:211) at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:81) at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:190) at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:96) at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1671) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1711) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:782) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:2836) at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:3871) at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:39) at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:718) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1716) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3680) at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:3854) at org.eclipse.pde.internal.core.SearchablePluginsManager.updateClasspathContainer(SearchablePluginsManager.java:175) at org.eclipse.pde.internal.core.SearchablePluginsManager.updateClasspathContainer(SearchablePluginsManager.java:160) at org.eclipse.pde.internal.core.PluginModelManager.handleModelsChanged(PluginModelManager.java:271) at org.eclipse.pde.internal.core.PluginModelManager.access$0(PluginModelManager.java:188) at org.eclipse.pde.internal.core.PluginModelManager$1.modelsChanged(PluginModelManager.java:37) at org.eclipse.pde.internal.core.WorkspaceModelManager.fireModelProviderEvent(WorkspaceModelManager.java:717) at org.eclipse.pde.internal.core.WorkspaceModelManager.processModelChanges(WorkspaceModelManager.java:711) at org.eclipse.pde.internal.core.WorkspaceModelManager.resourceChanged(WorkspaceModelManager.java:428) at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:276) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1029) at org.eclipse.core.runtime.Platform.run(Platform.java:775) at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:270) at org.eclipse.core.internal.events.NotificationManager.handleEvent(NotificationManager.java:242) at org.eclipse.core.internal.resources.Workspace.broadcastEvent(Workspace.java:195) at org.eclipse.core.internal.resources.Project.close(Project.java:171) at org.eclipse.ui.actions.CloseResourceAction.invokeOperation(CloseResourceAction.java:169) at org.eclipse.ui.actions.WorkspaceAction.execute(WorkspaceAction.java:133) at org.eclipse.ui.actions.WorkspaceAction$2.runInWorkspace(WorkspaceAction.java:414) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:67)
Should consider for M7.
After further inspection, this is actually a bug in PDE or JDT. It is trying to perform an IWorkspace.run from within a PRE_CLOSE resource change listener. The workspace is closed for modification during change events so this is not allowed. I have entered bug 94764 against platform resources to fix the error reporting in this case to accurately describe the problem.
*** This bug has been marked as a duplicate of 85846 ***