Buggy code:
public abstract class AbstractImageBuilder implements ICompilerRequestor { protected JavaBuilder javaBuilder ; protected State newState ; protected NameEnvironment nameEnvironment ; protected ClasspathMultiDirectory [ ] sourceLocations ; protected BuildNotifier notifier ; protected Compiler compiler ; protected WorkQueue workQueue ; protected ArrayList problemSourceFiles ; protected boolean compiledAllAtOnce ; private boolean inCompiler ; protected SimpleSet filesDeclaringAnnotation = null ; public static int MAX_AT_ONCE = 1000 ; public static final String [ ] JAVA_PROBLEM_MARKER_ATTRIBUTE_NAMES = new String [ ] { IMarker . MESSAGE , IMarker . SEVERITY , IJavaModelMarker . ID , IMarker . CHAR_START , IMarker . CHAR_END , IMarker . LINE_NUMBER , IJavaModelMarker . ARGUMENTS } ; public static final String [ ] JAVA_TASK_MARKER_ATTRIBUTE_NAMES = new String [ ] { IMarker . MESSAGE , IMarker . PRIORITY , IJavaModelMarker . ID , IMarker . CHAR_START , IMarker . CHAR_END , IMarker . LINE_NUMBER , IJavaModelMarker . ARGUMENTS } ; public static final Integer S_ERROR = new Integer ( IMarker . SEVERITY_ERROR ) ; public static final Integer S_WARNING = new Integer ( IMarker . SEVERITY_WARNING ) ; public static final Integer P_HIGH = new Integer ( IMarker . PRIORITY_HIGH ) ; public static final Integer P_NORMAL = new Integer ( IMarker . PRIORITY_NORMAL ) ; public static final Integer P_LOW = new Integer ( IMarker . PRIORITY_LOW ) ; protected AbstractImageBuilder ( JavaBuilder javaBuilder , boolean buildStarting , State newState ) { } public void acceptResult ( CompilationResult result ) { } protected void cleanUp ( ) { } protected void compile ( SourceFile [ ] units ) { } void compile ( SourceFile [ ] units , SourceFile [ ] additionalUnits ) { } protected void createProblemFor ( IResource resource , IMember javaElement , String message , String problemSeverity ) { } protected void deleteGeneratedFiles ( IFile [ ] deletedGeneratedFiles ) { } protected SourceFile findSourceFile ( IFile file ) { } protected void finishedWith ( String sourceLocator , CompilationResult result , char [ ] mainTypeName , ArrayList definedTypeNames , ArrayList duplicateTypeNames ) { } protected IContainer createFolder ( IPath packagePath , IContainer outputFolder ) throws CoreException { } protected RuntimeException internalException ( CoreException t ) { } protected boolean isExcludedFromProject ( IPath childPath ) throws JavaModelException { } protected Compiler newCompiler ( ) { } protected CompilationParticipantResult [ ] notifyParticipants ( SourceFile [ ] unitsAboutToCompile ) { CompilationParticipantResult [ ] results = null ; for ( int i = 0 , l = ( ( this . javaBuilder . participants ) == null ) ? 0 : this . javaBuilder . participants . length ; i < l ; i ++ ) { if ( ! ( this . javaBuilder . participants [ i ] . isAnnotationProcessor ( ) ) ) { if ( results == null ) { results = new CompilationParticipantResult [ unitsAboutToCompile . length ] ; for ( int j = unitsAboutToCompile . length ; ( -- j ) >= 0 ; ) results [ j ] = new CompilationParticipantResult ( unitsAboutToCompile [ j ] ) ; } <START_BUG> this . javaBuilder . participants [ i ] . compileStarting ( results ) ; <END_BUG> } } return results ; } protected abstract void processAnnotationResults ( CompilationParticipantResult [ ] results ) { } protected void processAnnotations ( ) { } protected SourceFile [ ] processParticipantResults ( CompilationParticipantResult [ ] results , SourceFile [ ] unitsAboutToCompile ) { } protected void recordParticipantResult ( CompilationParticipantResult result ) { } protected void storeProblemsFor ( SourceFile sourceFile , IProblem [ ] problems ) throws CoreException { } protected void storeTasksFor ( SourceFile sourceFile , IProblem [ ] tasks ) throws CoreException { } protected void updateProblemsFor ( SourceFile sourceFile , CompilationResult result ) throws CoreException { } protected void updateTasksFor ( SourceFile sourceFile , CompilationResult result ) throws CoreException { } protected char [ ] writeClassFile ( ClassFile classFile , SourceFile compilationUnit , boolean isSecondaryType ) throws CoreException { } protected void writeClassFileBytes ( byte [ ] bytes , IFile file , String qualifiedFileName , boolean isSecondaryType , boolean updateClassFile ) throws CoreException { } }

Fix:
this . javaBuilder . participants [ i ] . buildStarting ( results ) ;