Index: lucene/contrib/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java =================================================================== --- lucene/contrib/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java (revision 1036886) +++ lucene/contrib/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java (working copy) @@ -174,13 +174,11 @@ * list of deletions. */ public static class FakeDeleteIndexReader extends FilterIndexReader { - // TODO: switch to flex api, here - OpenBitSet dels; OpenBitSet oldDels = null; - public FakeDeleteIndexReader(IndexReader in) { - super(in); + public FakeDeleteIndexReader(IndexReader in) throws IOException { + super(SlowMultiReaderWrapper.wrap(in)); dels = new OpenBitSet(in.maxDoc()); if (in.hasDeletions()) { oldDels = new OpenBitSet(in.maxDoc()); @@ -221,11 +219,6 @@ } @Override - public IndexReader[] getSequentialSubReaders() { - return null; - } - - @Override public Bits getDeletedDocs() { return dels; } Index: lucene/src/java/org/apache/lucene/index/SegmentMerger.java =================================================================== --- lucene/src/java/org/apache/lucene/index/SegmentMerger.java (revision 1036886) +++ lucene/src/java/org/apache/lucene/index/SegmentMerger.java (working copy) @@ -35,6 +35,7 @@ import org.apache.lucene.store.IndexInput; import org.apache.lucene.store.IndexOutput; import org.apache.lucene.util.Bits; +import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.ReaderUtil; import org.apache.lucene.util.MultiBits; @@ -42,9 +43,6 @@ * The SegmentMerger class combines two or more Segments, represented by an IndexReader ({@link #add}, * into a single Segment. After adding the appropriate readers, call the merge method to combine the * segments. - *

- * If the compoundFile flag is set, then the segments will be merged into a compound file. - * * * @see #merge * @see #add @@ -108,19 +106,10 @@ * @param reader */ final void add(IndexReader reader) { - readers.add(reader); + ReaderUtil.gatherSubReaders(readers, reader); } /** - * - * @param i The index of the reader to return - * @return The ith reader to be merged - */ - final IndexReader segmentReader(int i) { - return readers.get(i); - } - - /** * Merges the readers specified by the {@link #add} method into the directory passed to the constructor * @return The number of documents that were merged * @throws CorruptIndexException if the index is corrupt @@ -160,17 +149,6 @@ return mergedDocs; } - /** - * close all IndexReaders that have been added. - * Should not be called before merge(). - * @throws IOException - */ - final void closeReaders() throws IOException { - for (final IndexReader reader : readers) { - reader.close(); - } - } - final List createCompoundFile(String fileName, final SegmentInfo info) throws IOException { CompoundFileWriter cfsWriter = new CompoundFileWriter(directory, fileName, checkAbort); @@ -214,7 +192,7 @@ return new ArrayList(fileSet); } - private void addIndexed(IndexReader reader, FieldInfos fInfos, + private static void addIndexed(IndexReader reader, FieldInfos fInfos, Collection names, boolean storeTermVectors, boolean storePositionWithTermVector, boolean storeOffsetWithTermVector, boolean storePayloads, boolean omitTFAndPositions) @@ -368,7 +346,7 @@ throws IOException, MergeAbortedException, CorruptIndexException { int docCount = 0; final int maxDoc = reader.maxDoc(); - final Bits delDocs = MultiFields.getDeletedDocs(reader); + final Bits delDocs = reader.getDeletedDocs(); if (matchingFieldsReader != null) { // We can bulk-copy because the fieldInfos are "congruent" for (int j = 0; j < maxDoc;) { @@ -452,7 +430,7 @@ final SegmentReader matchingSegmentReader = matchingSegmentReaders[idx++]; TermVectorsReader matchingVectorsReader = null; if (matchingSegmentReader != null) { - TermVectorsReader vectorsReader = matchingSegmentReader.getTermVectorsReaderOrig(); + TermVectorsReader vectorsReader = matchingSegmentReader.getTermVectorsReader(); // If the TV* files are an older format then they cannot read raw docs: if (vectorsReader != null && vectorsReader.canReadRawDocs()) { @@ -487,7 +465,7 @@ final IndexReader reader) throws IOException, MergeAbortedException { final int maxDoc = reader.maxDoc(); - final Bits delDocs = MultiFields.getDeletedDocs(reader); + final Bits delDocs = reader.getDeletedDocs(); if (matchingVectorsReader != null) { // We can bulk-copy because the fieldInfos are "congruent" for (int docNum = 0; docNum < maxDoc;) { @@ -568,34 +546,28 @@ int docBase = 0; final List fields = new ArrayList(); - final List subReaders = new ArrayList(); final List slices = new ArrayList(); final List bits = new ArrayList(); final List bitsStarts = new ArrayList(); - final int numReaders = readers.size(); - for(int i=0;i