private void doInitializeCache() throws CoreException { if (!isInitialized) { IWorkspaceRunnable runnable = new IWorkspaceRunnable() { @Override public void run(IProgressMonitor monitor) throws CoreException { if (!isInitialized) { for (IProject project : workspace.getRoot().getProjects()) { if (project.isAccessible() && JavaProject.hasJavaNature(project)) { IJavaProject javaProject = JavaCore.create(project); updateCache(javaProject); } } isInitialized = true; } } }; // while the tree is locked, workspace.run may not be used but we are sure that we do already // hold the workspace lock - save to just run the action code if (workspace.isTreeLocked()) { runnable.run(null); } else { workspace.run(runnable, null, IWorkspace.AVOID_UPDATE, null); } } }