Buggy code:
public class JavaBuilder extends IncrementalProjectBuilder { IProject currentProject ; JavaProject javaProject ; IWorkspaceRoot workspaceRoot ; CompilationParticipant [ ] participants ; NameEnvironment nameEnvironment ; SimpleLookupTable binaryLocationsPerProject ; State lastState ; BuildNotifier notifier ; char [ ] [ ] extraResourceFileFilters ; String [ ] extraResourceFolderFilters ; public static boolean DEBUG = false ; static ArrayList builtProjects = null ; public static IMarker [ ] getProblemsFor ( IResource resource ) { } public static IMarker [ ] getTasksFor ( IResource resource ) { } public static void buildStarting ( ) { } public static void buildFinished ( ) { } public static void removeProblemsFor ( IResource resource ) { } public static void removeTasksFor ( IResource resource ) { } public static void removeProblemsAndTasksFor ( IResource resource ) { } public static State readState ( IProject project , DataInputStream in ) throws IOException { } public static void writeState ( Object state , DataOutputStream out ) throws IOException { } protected IProject [ ] build ( int kind , Map ignored , IProgressMonitor monitor ) throws CoreException { } private void buildAll ( ) { } private void buildDeltas ( SimpleLookupTable deltas ) { } protected void clean ( IProgressMonitor monitor ) throws CoreException { } private void cleanup ( ) { } private void clearLastState ( ) { } boolean filterExtraResource ( IResource resource ) { } private SimpleLookupTable findDeltas ( ) { } public State getLastState ( IProject project ) { } private IProject [ ] getRequiredProjects ( boolean includeBinaryPrerequisites ) { } private boolean hasClasspathChanged ( ) { } private boolean hasStructuralDelta ( ) { } private int initializeBuilder ( int kind , boolean forBuild ) throws CoreException { this . javaProject = ( ( JavaProject ) ( JavaCore . create ( currentProject ) ) ) ; this . workspaceRoot = currentProject . getWorkspace ( ) . getRoot ( ) ; if ( forBuild ) { this . participants = JavaModelManager . getJavaModelManager ( ) . compilationParticipants . getCompilationParticipants ( this . javaProject ) ; if ( ( this . participants ) != null ) for ( int i = 0 , l = this . participants . length ; i < l ; i ++ ) <START_BUG> if ( ( this . participants [ i ] . buildStarting ( this . javaProject ) ) == ( CompilationParticipant . NEEDS_FULL_BUILD ) ) <END_BUG> kind = IncrementalProjectBuilder . FULL_BUILD ; String projectName = currentProject . getName ( ) ; if ( ( ( JavaBuilder . builtProjects ) == null ) || ( JavaBuilder . builtProjects . contains ( projectName ) ) ) { org . eclipse . jdt . internal . core . JavaModel . flushExternalFileCache ( ) ; JavaBuilder . builtProjects = new ArrayList ( ) ; } JavaBuilder . builtProjects . add ( projectName ) ; } this . binaryLocationsPerProject = new SimpleLookupTable ( 3 ) ; this . nameEnvironment = new NameEnvironment ( workspaceRoot , javaProject , binaryLocationsPerProject ) ; if ( forBuild ) { String filterSequence = javaProject . getOption ( JavaCore . CORE_JAVA_BUILD_RESOURCE_COPY_FILTER , true ) ; char [ ] [ ] filters = ( ( filterSequence != null ) && ( ( filterSequence . length ( ) ) > 0 ) ) ? CharOperation . splitAndTrimOn ( ',' , filterSequence . toCharArray ( ) ) : null ; if ( filters == null ) { this . extraResourceFileFilters = null ; this . extraResourceFolderFilters = null ; } else { int fileCount = 0 ; int folderCount = 0 ; for ( int i = 0 , l = filters . length ; i < l ; i ++ ) { char [ ] f = filters [ i ] ; if ( ( f . length ) == 0 ) continue ; if ( ( f [ ( ( f . length ) - 1 ) ] ) == '//' ) folderCount ++ ; else fileCount ++ ; } this . extraResourceFileFilters = new char [ fileCount ] [ ] ; this . extraResourceFolderFilters = new String [ folderCount ] ; for ( int i = 0 , l = filters . length ; i < l ; i ++ ) { char [ ] f = filters [ i ] ; if ( ( f . length ) == 0 ) continue ; if ( ( f [ ( ( f . length ) - 1 ) ] ) == '//' ) extraResourceFolderFilters [ ( -- folderCount ) ] = new String ( f , 0 , ( ( f . length ) - 1 ) ) ; else extraResourceFileFilters [ ( -- fileCount ) ] = f ; } } } return kind ; } private boolean isClasspathBroken ( IClasspathEntry [ ] classpath , IProject p ) throws CoreException { } private boolean isWorthBuilding ( ) throws CoreException { } void mustPropagateStructuralChanges ( ) { } private void printLocations ( ClasspathLocation [ ] newLocations , ClasspathLocation [ ] oldLocations ) { } private void recordNewState ( State state ) { } public String toString ( ) { } }

Fix:
if ( ( this . participants [ i ] . aboutToBuild ( this . javaProject ) ) == ( CompilationParticipant . NEEDS_FULL_BUILD ) )