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; @@ -108,19 +109,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 @@ -214,7 +206,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 +360,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 +444,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 +479,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 +560,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