Buggy code:
public class DeltaProcessor { static final IClasspathEntry [ ] UNKNOWN_CLASSPATH = new IClasspathEntry [ ] { } ; protected JavaElementDelta fCurrentDelta ; protected Hashtable fJavaProjectsToUpdate = null ; protected IndexManager indexManager = ( ENABLE_INDEXING ) ? new IndexManager ( ) : null ; public static boolean VERBOSE = false ; protected void addToParentInfo ( Openable child ) { } protected void basicElementAdded ( Openable element , IResourceDelta delta ) { } public static void checkProjectPropertyFileUpdate ( IResourceDelta delta , IJavaElement parent ) { IResource resource = delta . getResource ( ) ; IJavaElement element = JavaCore . create ( resource ) ; boolean processChildren = false ; switch ( resource . getType ( ) ) { case IResource . ROOT : processChildren = true ; break ; case IResource . PROJECT : try { if ( ( ( IProject ) ( resource ) ) . hasNature ( JavaCore . NATURE_ID ) ) { processChildren = true ; } } catch ( CoreException e ) { } break ; case IResource . FILE : if ( ( parent . getElementType ( ) ) == ( IJavaElement . JAVA_PROJECT ) ) { IFile file = ( ( IFile ) ( resource ) ) ; JavaProject project = ( ( JavaProject ) ( parent ) ) ; QualifiedName classpathProp ; if ( file . getName ( ) . equals ( project . computeSharedPropertyFileName ( ( classpathProp = project . getClasspathPropertyName ( ) ) ) ) ) { switch ( delta . getKind ( ) ) { case IResourceDelta . REMOVED : try { project . saveClasspath ( false ) ; } catch ( JavaModelException e ) { } break ; case IResourceDelta . CHANGED : if ( ( ( delta . getFlags ( ) ) & ( IResourceDelta . CONTENT ) ) == 0 ) break ; case IResourceDelta . ADDED : IPath oldOutputLocation = null ; try { oldOutputLocation = project . getOutputLocation ( ) ; String fileClasspathString = project . getSharedProperty ( classpathProp ) ; if ( fileClasspathString == null ) break ; IClasspathEntry [ ] fileEntries = project . readPaths ( fileClasspathString ) ; if ( fileEntries == null ) break ; if ( project . isClasspathEqualsTo ( fileEntries ) ) break ; IPath outputLocation = null ; if ( ( fileEntries != null ) && ( ( fileEntries . length ) > 0 ) ) { IClasspathEntry entry = fileEntries [ ( ( fileEntries . length ) - 1 ) ] ; if ( ( entry . getContentKind ( ) ) == ( ClasspathEntry . K_OUTPUT ) ) { outputLocation = entry . getPath ( ) ; IClasspathEntry [ ] copy = new IClasspathEntry [ ( fileEntries . length ) - 1 ] ; System . arraycopy ( fileEntries , 0 , copy , 0 , copy . length ) ; fileEntries = copy ; } } if ( outputLocation != null ) { project . setOutputLocation0 ( outputLocation ) ; } try { <START_BUG> project . setRawClasspath ( fileEntries , null , false ) ; <END_BUG> } catch ( JavaModelException e ) { project . setOutputLocation0 ( oldOutputLocation ) ; } } catch ( IOException e ) { break ; } catch ( RuntimeException e ) { break ; } catch ( CoreException e ) { break ; } } } } break ; } if ( processChildren ) { IResourceDelta [ ] children = delta . getAffectedChildren ( ) ; for ( int i = 0 ; i < ( children . length ) ; i ++ ) { DeltaProcessor . checkProjectPropertyFileUpdate ( children [ i ] , element ) ; } } } protected void clearState ( ) { } protected static void close ( Openable element ) { } protected void closeAffectedElements ( IResourceDelta delta ) { } protected void contentChanged ( Openable element , IResourceDelta delta ) { } protected Openable [ ] createElements ( IResource resource ) { } protected void elementAdded ( Openable element , IResourceDelta delta ) { } protected void elementClosed ( Openable element , IResourceDelta delta ) { } protected void elementOpened ( Openable element , IResourceDelta delta ) { } protected void elementRemoved ( Openable element , IResourceDelta delta ) { } protected IJavaElementDelta [ ] filterRealDeltas ( IJavaElementDelta [ ] deltas ) { } protected boolean hasJavaNature ( IResource resource ) { } protected boolean isOpen ( IResource resource ) { } protected void nonJavaResourcesChanged ( Openable element , IResourceDelta delta ) throws JavaModelException { } public IJavaElementDelta [ ] processResourceDelta ( IResourceDelta changes ) { } private boolean updateCurrentDeltaAndIndex ( Openable element , IResourceDelta delta ) { } protected void removeFromParentInfo ( Openable child ) { } protected void resetNonJavaResourcesForPackageFragmentRoots ( JavaProject project ) throws JavaModelException { } protected boolean traverseDelta ( IResourceDelta delta , IClasspathEntry [ ] classpath ) { } private boolean isOnClasspath ( IClasspathEntry [ ] classpath , IResource res ) { } protected void updateClasspaths ( boolean canChangeResource ) { } protected void updateIndex ( Openable element , IResourceDelta delta ) { } protected void updateProject ( IJavaProject project ) { } }

Fix:
project . setRawClasspath ( fileEntries , null , true , false , project . getExpandedClasspath ( true ) ) ;