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 filesWithAnnotations = null ; public static int MAX_AT_ONCE = 2000 ; 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 , IJavaModelMarker . CATEGORY_ID } ; 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 , IMarker . USER_EDITABLE } ; 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 acceptSecondaryType ( ClassFile classFile ) { } protected void cleanUp ( ) { } protected void compile ( SourceFile [ ] units ) { } protected void compile ( SourceFile [ ] units , SourceFile [ ] additionalUnits , boolean compilingFirstGroup ) { } 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 BuildContext [ ] notifyParticipants ( SourceFile [ ] unitsAboutToCompile ) { } protected abstract void processAnnotationResults ( CompilationParticipantResult [ ] results ) { } protected void processAnnotations ( BuildContext [ ] results ) { } protected void recordParticipantResult ( CompilationParticipantResult result ) { } protected void storeProblemsFor ( SourceFile sourceFile , CategorizedProblem [ ] problems ) throws CoreException { if ( ( ( sourceFile == null ) || ( problems == null ) ) || ( ( problems . length ) == 0 ) ) return ; String missingClassFile = null ; IResource resource = sourceFile . resource ; HashSet managedMarkerTypes = JavaModelManager . getJavaModelManager ( ) . compilationParticipants . managedMarkerTypes ( ) ; for ( int i = 0 , l = problems . length ; i < l ; i ++ ) { CategorizedProblem problem = problems [ i ] ; int id = problem . getID ( ) ; if ( id == ( IProblem . IsClassPathCorrect ) ) { JavaBuilder . removeProblemsAndTasksFor ( javaBuilder . currentProject ) ; String [ ] args = problem . getArguments ( ) ; missingClassFile = args [ 0 ] ; } String markerType = problem . getMarkerType ( ) ; if ( ( IJavaModelMarker . JAVA_MODEL_PROBLEM_MARKER . equals ( markerType ) ) || ( managedMarkerTypes . contains ( markerType ) ) ) { IMarker marker = resource . createMarker ( markerType ) ; marker . setAttributes ( AbstractImageBuilder . JAVA_PROBLEM_MARKER_ATTRIBUTE_NAMES , new Object [ ] { problem . getMessage ( ) , problem . isError ( ) ? AbstractImageBuilder . S_ERROR : AbstractImageBuilder . S_WARNING , new Integer ( id ) , new Integer ( problem . getSourceStart ( ) ) , new Integer ( ( ( problem . getSourceEnd ( ) ) + 1 ) ) , new Integer ( problem . getSourceLineNumber ( ) ) , Util . getProblemArgumentsForMarker ( problem . getArguments ( ) ) , new Integer ( problem . getCategoryID ( ) ) } ) ; String [ ] extraAttributeNames = problem . getExtraMarkerAttributeNames ( ) ; int extraLength = ( extraAttributeNames == null ) ? 0 : extraAttributeNames . length ; if ( extraLength > 0 ) { marker . setAttributes ( extraAttributeNames , problem . getExtraMarkerAttributeValues ( ) ) ; } } if ( missingClassFile != null ) <START_BUG> throw new MissingClassFileException ( missingClassFile ) ; <END_BUG> } } protected void storeTasksFor ( SourceFile sourceFile , CategorizedProblem [ ] 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 isTopLevelType ) throws CoreException { } protected void writeClassFileBytes ( byte [ ] bytes , IFile file , String qualifiedFileName , boolean isTopLevelType , boolean updateClassFile ) throws CoreException { } }

Fix:
throw new AbortCompilation ( true , new MissingClassFileException ( missingClassFile ) ) ;