Buggy code:
public class IndexAllProject extends IndexRequest { IProject project ; public IndexAllProject ( IProject project , IndexManager manager ) { } public boolean equals ( Object o ) { } public boolean execute ( IProgressMonitor progressMonitor ) { <START_BUG> if ( ( progressMonitor != null ) && ( progressMonitor . isCanceled ( ) ) ) <END_BUG> return true ; if ( ! ( project . isAccessible ( ) ) ) return true ; IIndex index = this . manager . getIndex ( this . indexPath , true , true ) ; if ( index == null ) return true ; ReadWriteMonitor monitor = this . manager . getMonitorFor ( index ) ; if ( monitor == null ) return true ; try { monitor . enterRead ( ) ; saveIfNecessary ( index , monitor ) ; IQueryResult [ ] results = index . queryInDocumentNames ( "" ) ; int max = ( results == null ) ? 0 : results . length ; final SimpleLookupTable indexedFileNames = new SimpleLookupTable ( ( max == 0 ? 33 : max + 11 ) ) ; final String OK = "OK" ; final String DELETED = "DELETED" ; for ( int i = 0 ; i < max ; i ++ ) indexedFileNames . put ( results [ i ] . getPath ( ) , DELETED ) ; final long indexLastModified = ( max == 0 ) ? 0L : index . getIndexFile ( ) . lastModified ( ) ; IJavaProject javaProject = JavaCore . create ( this . project ) ; IClasspathEntry [ ] entries = javaProject . getRawClasspath ( ) ; IWorkspaceRoot root = this . project . getWorkspace ( ) . getRoot ( ) ; for ( int i = 0 , length = entries . length ; i < length ; i ++ ) { if ( this . isCancelled ) return false ; IClasspathEntry entry = entries [ i ] ; if ( ( entry . getEntryKind ( ) ) == ( IClasspathEntry . CPE_SOURCE ) ) { IResource sourceFolder = root . findMember ( entry . getPath ( ) ) ; if ( sourceFolder != null ) { final HashSet outputs = new HashSet ( ) ; if ( ( sourceFolder . getType ( ) ) == ( IResource . PROJECT ) ) { outputs . add ( javaProject . getOutputLocation ( ) ) ; for ( int j = 0 ; j < length ; j ++ ) { IPath output = entries [ j ] . getOutputLocation ( ) ; if ( output != null ) { outputs . add ( output ) ; } } } final boolean hasOutputs = ! ( outputs . isEmpty ( ) ) ; final char [ ] [ ] patterns = ( ( ClasspathEntry ) ( entry ) ) . fullExclusionPatternChars ( ) ; if ( max == 0 ) { sourceFolder . accept ( new IResourceProxyVisitor ( ) { public boolean visit ( IResourceProxy proxy ) { if ( isCancelled ) return false ; switch ( proxy . getType ( ) ) { case IResource . FILE : if ( Util . isJavaFileName ( proxy . getName ( ) ) ) { IResource resource = proxy . requestResource ( ) ; if ( ( ( resource . getLocation ( ) ) != null ) && ( ( patterns == null ) || ( ! ( Util . isExcluded ( resource , patterns ) ) ) ) ) { String name = new IFileDocument ( ( ( IFile ) ( resource ) ) ) . getName ( ) ; indexedFileNames . put ( name , resource ) ; } } return false ; case IResource . FOLDER : if ( ( patterns != null ) && ( Util . isExcluded ( proxy . requestResource ( ) , patterns ) ) ) return false ; if ( hasOutputs && ( outputs . contains ( proxy . requestFullPath ( ) ) ) ) { return false ; } } return true ; } } , IResource . NONE ) ; } else { sourceFolder . accept ( new IResourceProxyVisitor ( ) { public boolean visit ( IResourceProxy proxy ) { if ( isCancelled ) return false ; switch ( proxy . getType ( ) ) { case IResource . FILE : if ( Util . isJavaFileName ( proxy . getName ( ) ) ) { IResource resource = proxy . requestResource ( ) ; IPath path = resource . getLocation ( ) ; if ( ( path != null ) && ( ( patterns == null ) || ( ! ( Util . isExcluded ( resource , patterns ) ) ) ) ) { String name = new IFileDocument ( ( ( IFile ) ( resource ) ) ) . getName ( ) ; indexedFileNames . put ( name , ( ( ( indexedFileNames . get ( name ) ) == null ) || ( indexLastModified < ( path . toFile ( ) . lastModified ( ) ) ) ? ( ( Object ) ( resource ) ) : ( ( Object ) ( OK ) ) ) ) ; } } return false ; case IResource . FOLDER : if ( ( patterns != null ) && ( Util . isExcluded ( proxy . requestResource ( ) , patterns ) ) ) return false ; if ( hasOutputs && ( outputs . contains ( proxy . requestFullPath ( ) ) ) ) { return false ; } } return true ; } } , IResource . NONE ) ; } } } } Object [ ] names = indexedFileNames . keyTable ; Object [ ] values = indexedFileNames . valueTable ; boolean shouldSave = false ; for ( int i = 0 , length = names . length ; i < length ; i ++ ) { String name = ( ( String ) ( names [ i ] ) ) ;

Fix:
if ( ( this . isCancelled ) || ( ( progressMonitor != null ) && ( progressMonitor . isCanceled ( ) ) ) )