Buggy code:
public class WorkingCopy extends CompilationUnit { protected IBufferFactory bufferFactory ; protected IProblemRequestor problemRequestor ; protected int useCount = 1 ; protected WorkingCopy ( IPackageFragment parent , String name , IBufferFactory bufferFactory ) { } protected WorkingCopy ( IPackageFragment parent , String name , IBufferFactory bufferFactory , IProblemRequestor problemRequestor ) { } public void commit ( boolean force , IProgressMonitor monitor ) throws JavaModelException { } protected OpenableElementInfo createElementInfo ( ) { } public void destroy ( ) { } public boolean exists ( ) { } public IBufferFactory getBufferFactory ( ) { } public boolean equals ( Object o ) { } public IJavaElement getOriginal ( IJavaElement workingCopyElement ) { } public IJavaElement getOriginalElement ( ) { } protected IType getOriginalType ( ArrayList hierarchy ) { } public IProblemRequestor getProblemRequestor ( ) { } public IResource getResource ( ) { } public IJavaElement getSharedWorkingCopy ( IProgressMonitor monitor , IBufferFactory factory , IProblemRequestor problemRequestor ) throws JavaModelException { } public IResource getUnderlyingResource ( ) throws JavaModelException { } public IJavaElement getWorkingCopy ( ) throws JavaModelException { } public IJavaElement getWorkingCopy ( IProgressMonitor monitor , IBufferFactory factory , IProblemRequestor problemRequestor ) throws JavaModelException { } public boolean isBasedOn ( IResource resource ) { } public boolean isWorkingCopy ( ) { } public void open ( IProgressMonitor pm ) throws JavaModelException { } protected IBuffer openBuffer ( IProgressMonitor pm ) throws JavaModelException { } public IMarker [ ] reconcile ( ) throws JavaModelException { } public void reconcile ( boolean forceProblemDetection , IProgressMonitor monitor ) throws JavaModelException { if ( ( this . useCount ) == 0 ) throw newNotPresentException ( ) ; if ( monitor != null ) { if ( monitor . isCanceled ( ) ) return ; monitor . beginTask ( Util . bind ( "element.reconciling" ) , 10 ) ; } boolean wasConsistent = isConsistent ( ) ; JavaElementDeltaBuilder deltaBuilder = null ; try { if ( ! wasConsistent ) { deltaBuilder = new JavaElementDeltaBuilder ( this ) ; this . makeConsistent ( monitor ) ; deltaBuilder . buildDeltas ( ) ; } if ( monitor != null ) monitor . worked ( 2 ) ; if ( forceProblemDetection && wasConsistent ) { if ( ( monitor != null ) && ( monitor . isCanceled ( ) ) ) return ; IProblemRequestor problemRequestor = this . getProblemRequestor ( ) ; if ( ( problemRequestor != null ) && ( problemRequestor . isActive ( ) ) ) { problemRequestor . beginReporting ( ) ; <START_BUG> CompilationUnitProblemFinder . resolve ( this , problemRequestor , monitor ) ; <END_BUG> problemRequestor . endReporting ( ) ; } } if ( deltaBuilder != null ) { if ( ( ( deltaBuilder . delta ) != null ) && ( ( deltaBuilder . delta . getAffectedChildren ( ) . length ) > 0 ) ) { JavaModelManager . getJavaModelManager ( ) . fire ( deltaBuilder . delta , ElementChangedEvent . POST_RECONCILE ) ; } } } finally { if ( monitor != null ) monitor . done ( ) ; } } public void restore ( ) throws JavaModelException { } public IJavaElement rootedAt ( IJavaProject project ) { } public void save ( IProgressMonitor pm , boolean force ) throws JavaModelException { } protected void toStringInfo ( int tab , StringBuffer buffer , Object info ) { } protected void updateTimeStamp ( CompilationUnit original ) throws JavaModelException { } }

Fix:
CompilationUnitProblemFinder . process ( this , problemRequestor , monitor ) ;