Buggy code:
public synchronized IClasspathContainer containerGet ( IJavaProject project , IPath containerPath ) { } public synchronized IClasspathContainer containerGetDefaultToPreviousSession ( IJavaProject project , IPath containerPath ) { } private synchronized Map containerClone ( IJavaProject project ) { } private boolean containerIsInitializationInProgress ( IJavaProject project , IPath containerPath ) { } private void containerAddInitializationInProgress ( IJavaProject project , IPath containerPath ) { } public synchronized void containerPut ( IJavaProject project , IPath containerPath , IClasspathContainer container ) { } public synchronized void containerRemove ( IJavaProject project ) { } public boolean containerPutIfInitializingWithSameEntries ( IPath containerPath , IJavaProject [ ] projects , IClasspathContainer [ ] respectiveContainers ) { } private void verbose_missbehaving_container ( IPath containerPath , IJavaProject [ ] projects , IClasspathContainer [ ] respectiveContainers , final IClasspathContainer container , final IClasspathEntry [ ] newEntries , final IClasspathEntry [ ] oldEntries ) { } void verbose_missbehaving_container ( IJavaProject project , IPath containerPath , IClasspathEntry [ ] classpathEntries ) { } void verbose_missbehaving_container_null_entries ( IJavaProject project , IPath containerPath ) { } private void containerRemoveInitializationInProgress ( IJavaProject project , IPath containerPath ) { } private synchronized void containersReset ( String [ ] containerIDs ) { } public static IJavaElement create ( IResource resource , IJavaProject project ) { } public static IJavaElement create ( IFile file , IJavaProject project ) { } public static IJavaElement create ( IFolder folder , IJavaProject project ) { } public static IClassFile createClassFileFrom ( IFile file , IJavaProject project ) { } public static ICompilationUnit createCompilationUnitFrom ( IFile file , IJavaProject project ) { } public static IPackageFragmentRoot createJarPackageFragmentRootFrom ( IFile file , IJavaProject project ) { } public static IJavaElement determineIfOnClasspath ( IResource resource , IJavaProject project ) { } private static JavaModelManager MANAGER = new JavaModelManager ( ) ; private JavaModelCache cache ; private ThreadLocal temporaryCache = new ThreadLocal ( ) ; protected HashSet elementsOutOfSynchWithBuffers = new HashSet ( 11 ) ; public DeltaProcessingState deltaState = new DeltaProcessingState ( ) ; public IndexManager indexManager = null ; protected Map perProjectInfos = new HashMap ( 5 ) ; protected Map perWorkingCopyInfos = new HashMap ( 5 ) ; protected WeakHashMap searchScopes = new WeakHashMap ( ) ; public static class PerProjectInfo { private static final int JAVADOC_CACHE_INITIAL_SIZE = 10 ; static final IJavaModelStatus NEED_RESOLUTION = new JavaModelStatus ( ) ; public IProject project ; public Object savedState ; public boolean triedRead ; public IClasspathEntry [ ] rawClasspath ; public IJavaModelStatus rawClasspathStatus ; public int rawTimeStamp = 0 ; public boolean writtingRawClasspath = false ; public IClasspathEntry [ ] resolvedClasspath ; public IJavaModelStatus unresolvedEntryStatus ; public Map rootPathToRawEntries ; public Map rootPathToResolvedEntries ; public IPath outputLocation ; public IEclipsePreferences preferences ; public Hashtable options ; public Hashtable secondaryTypes ; public LRUCache javadocCache ; public PerProjectInfo ( IProject project ) { } public synchronized IClasspathEntry [ ] getResolvedClasspath ( ) { } public void forgetExternalTimestamps ( ) { } public void rememberExternalLibTimestamps ( ) { } public synchronized ClasspathChange resetResolvedClasspath ( ) { } private ClasspathChange setClasspath ( IClasspathEntry [ ] newRawClasspath , IPath newOutputLocation , IJavaModelStatus newRawClasspathStatus , IClasspathEntry [ ] newResolvedClasspath , Map newRootPathToRawEntries , Map newRootPathToResolvedEntries , IJavaModelStatus newUnresolvedEntryStatus ) { } public synchronized ClasspathChange setRawClasspath ( IClasspathEntry [ ] newRawClasspath , IPath newOutputLocation , IJavaModelStatus newRawClasspathStatus ) { } public synchronized ClasspathChange setResolvedClasspath ( IClasspathEntry [ ] newResolvedClasspath , Map newRootPathToRawEntries , Map newRootPathToResolvedEntries , IJavaModelStatus newUnresolvedEntryStatus , int timeStamp ) { } public synchronized IClasspathEntry [ ] readAndCacheClasspath ( JavaProject javaProject ) { } public String toString ( ) { } public boolean writeAndCacheClasspath ( final JavaProject javaProject , final IClasspathEntry [ ] newRawClasspath , final IPath newOutputLocation ) throws JavaModelException { final boolean [ ] result = new boolean [ 1 ] ; try { IWorkspace workspace = ResourcesPlugin . getWorkspace ( ) ; workspace . run ( new IWorkspaceRunnable ( ) { public void run ( IProgressMonitor monitor ) throws CoreException { try { JavaModelManager . PerProjectInfo . this . writtingRawClasspath = true ; synchronized ( JavaModelManager . PerProjectInfo . this ) { if ( ! ( javaProject . writeFileEntries ( newRawClasspath , newOutputLocation ) ) ) { result [ 0 ] = false ; return ; } setRawClasspath ( newRawClasspath , newOutputLocation , JavaModelStatus . VERIFIED_OK ) ; result [ 0 ] = true ; } } finally { JavaModelManager . PerProjectInfo . this . writtingRawClasspath = false ; } } <START_BUG> } , this . project , IWorkspace . AVOID_UPDATE , null ) ; <END_BUG> } catch ( JavaModelException e ) { throw e ; } catch ( CoreException e ) { throw new JavaModelException ( e ) ; } return result [ 0 ] ; } } public static class PerWorkingCopyInfo implements IProblemRequestor { int useCount = 0 ; IProblemRequestor problemRequestor ; CompilationUnit workingCopy ; public PerWorkingCopyInfo ( CompilationUnit workingCopy , IProblemRequestor problemRequestor ) { } public void acceptProblem ( IProblem problem ) { } public void beginReporting ( ) { } public void endReporting ( ) { } public IProblemRequestor getProblemRequestor ( ) { } public ICompilationUnit getWorkingCopy ( ) { } public boolean isActive ( ) { } public String toString ( ) { } } public static boolean VERBOSE = false ; public static boolean CP_RESOLVE_VERBOSE = false ; public static boolean CP_RESOLVE_VERBOSE_ADVANCED = false ; public static boolean CP_RESOLVE_VERBOSE_FAILURE = false ; public static boolean ZIP_ACCESS_VERBOSE = false ; private ThreadLocal zipFiles = new ThreadLocal ( ) ; private UserLibraryManager userLibraryManager ; public static class EclipsePreferencesListener implements IEclipsePreferences . IPreferenceChangeListener { public void preferenceChange ( IEclipsePreferences . PreferenceChangeEvent event ) { } } JavaModelManager . EclipsePreferencesListener instancePreferencesListener = new JavaModelManager . EclipsePreferencesListener ( ) ; IEclipsePreferences . INodeChangeListener instanceNodeListener = new IEclipsePreferences . INodeChangeListener ( ) { public void added ( IEclipsePreferences . NodeChangeEvent event ) { } public void removed ( IEclipsePreferences . NodeChangeEvent event ) { } } ; IEclipsePreferences . INodeChangeListener defaultNodeListener = new IEclipsePreferences . INodeChangeListener ( ) { public void added ( IEclipsePreferences . NodeChangeEvent event ) { }

Fix:
} , workspace . getRuleFactory ( ) . modifyRule ( this . project ) , IWorkspace . AVOID_UPDATE , null ) ;