Index: lucene/backwards/src/test/org/apache/lucene/index/TestDoc.java =================================================================== --- lucene/backwards/src/test/org/apache/lucene/index/TestDoc.java (revision 1036920) +++ lucene/backwards/src/test/org/apache/lucene/index/TestDoc.java (working copy) @@ -185,7 +185,8 @@ merger.add(r1); merger.add(r2); merger.merge(); - merger.closeReaders(); + r1.close(); + r2.close(); if (useCompoundFile) { List filesToDelete = merger.createCompoundFile(merged + ".cfs"); Index: lucene/backwards/src/test/org/apache/lucene/index/TestSegmentMerger.java =================================================================== --- lucene/backwards/src/test/org/apache/lucene/index/TestSegmentMerger.java (revision 1036920) +++ lucene/backwards/src/test/org/apache/lucene/index/TestSegmentMerger.java (working copy) @@ -67,7 +67,6 @@ merger.add(reader1); merger.add(reader2); int docsMerged = merger.merge(); - merger.closeReaders(); assertTrue(docsMerged == 2); //Should be able to open a new SegmentReader against the new directory SegmentReader mergedReader = SegmentReader.get(true, new SegmentInfo(mergedSegment, docsMerged, mergedDir, false, true), IndexReader.DEFAULT_TERMS_INDEX_DIVISOR); Index: lucene/contrib/misc/src/java/org/apache/lucene/index/IndexSorter.java =================================================================== --- lucene/contrib/misc/src/java/org/apache/lucene/index/IndexSorter.java (revision 1036920) +++ lucene/contrib/misc/src/java/org/apache/lucene/index/IndexSorter.java (working copy) @@ -183,6 +183,11 @@ } } + @Override + public IndexReader[] getSequentialSubReaders() { + return null; + } + public Document document(int n) throws IOException { return document(n, null); } Index: lucene/contrib/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java =================================================================== --- lucene/contrib/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java (revision 1036920) +++ lucene/contrib/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java (working copy) @@ -221,6 +221,11 @@ } @Override + public IndexReader[] getSequentialSubReaders() { + return null; + } + + @Override public TermPositions termPositions() throws IOException { return new FilterTermPositions(in.termPositions()) { Index: lucene/src/java/org/apache/lucene/index/SegmentMerger.java =================================================================== --- lucene/src/java/org/apache/lucene/index/SegmentMerger.java (revision 1036920) +++ lucene/src/java/org/apache/lucene/index/SegmentMerger.java (working copy) @@ -30,14 +30,12 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.store.IndexInput; import org.apache.lucene.store.IndexOutput; +import org.apache.lucene.util.ReaderUtil; /** * 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 @@ -113,19 +111,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 @@ -166,17 +155,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) throws IOException { CompoundFileWriter cfsWriter = @@ -223,7 +201,7 @@ return files; } - 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) @@ -456,7 +434,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()) { @@ -731,7 +709,7 @@ output = directory.createOutput(IndexFileNames.segmentFileName(segment, IndexFileNames.NORMS_EXTENSION)); output.writeBytes(NORMS_HEADER,NORMS_HEADER.length); } - for ( IndexReader reader : readers) { + for (IndexReader reader : readers) { int maxDoc = reader.maxDoc(); if (normBuffer == null || normBuffer.length < maxDoc) { // the buffer is too small for the current segment Index: lucene/src/test/org/apache/lucene/index/TestDoc.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestDoc.java (revision 1036920) +++ lucene/src/test/org/apache/lucene/index/TestDoc.java (working copy) @@ -193,7 +193,8 @@ merger.add(r1); merger.add(r2); merger.merge(); - merger.closeReaders(); + r1.close(); + r2.close(); if (useCompoundFile) { List filesToDelete = merger.createCompoundFile(merged + ".cfs"); Index: lucene/src/test/org/apache/lucene/index/TestSegmentMerger.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestSegmentMerger.java (revision 1036920) +++ lucene/src/test/org/apache/lucene/index/TestSegmentMerger.java (working copy) @@ -74,7 +74,6 @@ merger.add(reader1); merger.add(reader2); int docsMerged = merger.merge(); - merger.closeReaders(); assertTrue(docsMerged == 2); //Should be able to open a new SegmentReader against the new directory SegmentReader mergedReader = SegmentReader.get(true, new SegmentInfo(mergedSegment, docsMerged, mergedDir, false, true), IndexReader.DEFAULT_TERMS_INDEX_DIVISOR);