Eclipse プラグイン - リソースの変更に失敗する場合
プラグインによってリソースが変更されている最中は、そのリソースはロックされているため他のプラグインが変更することは出来ません。
ロックされているリソースに対して変更を行なおうとした場合、「リソース・ツリーは修正中のため、ロックされています。」といったメッセージをもった CoreException が送出されることになります。
特にリソース変更リスナにおいて POST_CHANGED イベントの処理中はワークスペース全体がロックされているため、いかなるリソースの変更も失敗することになります。
これを回避するには WorkspaceJob クラスを利用してリソース変更処理を非同期処理として実行する必要があります。WorkspaceJob クラスを利用することで、リソースのロックが解除されたあとにリソース変更処理を行なうことが可能になります。
WorkspaceJob job = new WorkspaceJob("ジョブ名") { public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { // リソースに対する変更処理等を記述 return Status.OK_STATUS; } }; job.schedule(); // ジョブの登録