Buggy code:
public abstract class IndexReader { public static final class FieldOption { private String option ; private FieldOption ( ) { } private FieldOption ( String option ) { } public String toString ( ) { } public static final IndexReader . FieldOption ALL = new IndexReader . FieldOption ( "ALL" ) ; public static final IndexReader . FieldOption INDEXED = new IndexReader . FieldOption ( "INDEXED" ) ; public static final IndexReader . FieldOption UNINDEXED = new IndexReader . FieldOption ( "UNINDEXED" ) ; public static final IndexReader . FieldOption INDEXED_WITH_TERMVECTOR = new IndexReader . FieldOption ( "INDEXED_WITH_TERMVECTOR" ) ; public static final IndexReader . FieldOption INDEXED_NO_TERMVECTOR = new IndexReader . FieldOption ( "INDEXED_NO_TERMVECTOR" ) ; public static final IndexReader . FieldOption TERMVECTOR = new IndexReader . FieldOption ( "TERMVECTOR" ) ; public static final IndexReader . FieldOption TERMVECTOR_WITH_POSITION = new IndexReader . FieldOption ( "TERMVECTOR_WITH_POSITION" ) ; public static final IndexReader . FieldOption TERMVECTOR_WITH_OFFSET = new IndexReader . FieldOption ( "TERMVECTOR_WITH_OFFSET" ) ; public static final IndexReader . FieldOption TERMVECTOR_WITH_POSITION_OFFSET = new IndexReader . FieldOption ( "TERMVECTOR_WITH_POSITION_OFFSET" ) ; } protected IndexReader ( Directory directory ) { } IndexReader ( Directory directory , SegmentInfos segmentInfos , boolean closeDirectory ) { } void init ( Directory directory , SegmentInfos segmentInfos , boolean closeDirectory , boolean directoryOwner ) { } private Directory directory ; private boolean directoryOwner ; private boolean closeDirectory ; protected IndexFileDeleter deleter ; private boolean isClosed ; private SegmentInfos segmentInfos ; private Lock writeLock ; private boolean stale ; private boolean hasChanges ; private boolean rollbackHasChanges ; private SegmentInfos rollbackSegmentInfos ; public static IndexReader open ( String path ) throws IOException , CorruptIndexException { } public static IndexReader open ( File path ) throws IOException , CorruptIndexException { } public static IndexReader open ( final Directory directory ) throws IOException , CorruptIndexException { } private static IndexReader open ( final Directory directory , final boolean closeDirectory ) throws IOException , CorruptIndexException { return ( ( IndexReader ) ( new SegmentInfos . FindSegmentsFile ( directory ) { <START_BUG> public Object doBody ( String segmentFileName ) throws IOException , CorruptIndexException { <END_BUG> SegmentInfos infos = new SegmentInfos ( ) ; infos . read ( directory , segmentFileName ) ; if ( ( infos . size ( ) ) == 1 ) { return SegmentReader . get ( infos , infos . info ( 0 ) , closeDirectory ) ; } else { IndexReader [ ] readers = new IndexReader [ infos . size ( ) ] ; for ( int i = ( infos . size ( ) ) - 1 ; i >= 0 ; i -- ) { try { readers [ i ] = SegmentReader . get ( infos . info ( i ) ) ; } catch ( IOException e ) { for ( i ++ ; i < ( infos . size ( ) ) ; i ++ ) { readers [ i ] . close ( ) ; } throw e ; } } return new MultiReader ( directory , infos , closeDirectory , readers ) ; } } } . run ( ) ) ) ; } public Directory directory ( ) { } public static long lastModified ( String directory ) throws IOException , CorruptIndexException { } public static long lastModified ( File fileDirectory ) throws IOException , CorruptIndexException { } public static long lastModified ( final Directory directory2 ) throws IOException , CorruptIndexException { } public static long getCurrentVersion ( String directory ) throws IOException , CorruptIndexException { } public static long getCurrentVersion ( File directory ) throws IOException , CorruptIndexException { } public static long getCurrentVersion ( Directory directory ) throws IOException , CorruptIndexException { } public long getVersion ( ) { } public boolean isCurrent ( ) throws IOException , CorruptIndexException { } public boolean isOptimized ( ) { } public abstract TermFreqVector [ ] getTermFreqVectors ( int docNumber ) throws IOException { } public abstract TermFreqVector getTermFreqVector ( int docNumber , String field ) throws IOException { } public static boolean indexExists ( String directory ) { } public static boolean indexExists ( File directory ) { } public static boolean indexExists ( Directory directory ) throws IOException { } public abstract int numDocs ( ) { } public abstract int maxDoc ( ) { } public Document document ( int n ) throws IOException , CorruptIndexException { } public abstract Document document ( int n , FieldSelector fieldSelector ) throws IOException , CorruptIndexException { } public abstract boolean isDeleted ( int n ) { } public abstract boolean hasDeletions ( ) { } public boolean hasNorms ( String field ) throws IOException { } public abstract byte [ ] norms ( String field ) throws IOException { } public abstract void norms ( String field , byte [ ] bytes , int offset ) throws IOException { } public final synchronized void setNorm ( int doc , String field , byte value ) throws IOException , CorruptIndexException , StaleReaderException , LockObtainFailedException { } protected abstract void doSetNorm ( int doc , String field , byte value ) throws IOException , CorruptIndexException { } public void setNorm ( int doc , String field , float value ) throws IOException , CorruptIndexException , StaleReaderException , LockObtainFailedException { } public abstract TermEnum terms ( ) throws IOException { } public abstract TermEnum terms ( Term t ) throws IOException { } public abstract int docFreq ( Term t ) throws IOException { } public TermDocs termDocs ( Term term ) throws IOException { } public abstract TermDocs termDocs ( ) throws IOException { } public TermPositions termPositions ( Term term ) throws IOException { } public abstract TermPositions termPositions ( ) throws IOException { } private void acquireWriteLock ( ) throws IOException , CorruptIndexException , StaleReaderException , LockObtainFailedException { } public final synchronized void deleteDocument ( int docNum ) throws IOException , CorruptIndexException , StaleReaderException , LockObtainFailedException { }

Fix:
protected Object doBody ( String segmentFileName ) throws IOException , CorruptIndexException {