Index: lucene/contrib/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java =================================================================== --- lucene/contrib/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java (revision 1036970) +++ lucene/contrib/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java (working copy) @@ -177,8 +177,8 @@ OpenBitSet dels; OpenBitSet oldDels = null; - public FakeDeleteIndexReader(IndexReader in) throws IOException { - super(SlowMultiReaderWrapper.wrap(in)); + public FakeDeleteIndexReader(IndexReader in) { + super(new SlowMultiReaderWrapper(in)); dels = new OpenBitSet(in.maxDoc()); if (in.hasDeletions()) { oldDels = new OpenBitSet(in.maxDoc()); Index: lucene/contrib/queries/src/test/org/apache/lucene/search/BooleanFilterTest.java =================================================================== --- lucene/contrib/queries/src/test/org/apache/lucene/search/BooleanFilterTest.java (revision 1036970) +++ lucene/contrib/queries/src/test/org/apache/lucene/search/BooleanFilterTest.java (working copy) @@ -32,7 +32,6 @@ public class BooleanFilterTest extends LuceneTestCase { private Directory directory; - private IndexReader mainReader; private IndexReader reader; @Override @@ -47,14 +46,13 @@ addDoc(writer, "guest", "020", "20050101","Y"); addDoc(writer, "admin", "020", "20050101","Maybe"); addDoc(writer, "admin guest", "030", "20050101","N"); - mainReader = writer.getReader(); - reader = SlowMultiReaderWrapper.wrap(mainReader); + reader = new SlowMultiReaderWrapper(writer.getReader()); writer.close(); } @Override public void tearDown() throws Exception { - mainReader.close(); + reader.close(); directory.close(); super.tearDown(); } Index: lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java =================================================================== --- lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java (revision 1036970) +++ lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java (working copy) @@ -60,10 +60,8 @@ doc.add(newField(fieldName,""+term,Field.Store.YES,Field.Index.NOT_ANALYZED)); w.addDocument(doc); } - IndexReader mainReader = w.getReader(); + IndexReader reader = new SlowMultiReaderWrapper(w.getReader()); w.close(); - - IndexReader reader = SlowMultiReaderWrapper.wrap(mainReader); TermsFilter tf=new TermsFilter(); tf.addTerm(new Term(fieldName,"19")); @@ -82,7 +80,7 @@ bits = (OpenBitSet)tf.getDocIdSet(reader); assertEquals("Must match 2", 2, bits.cardinality()); - mainReader.close(); + reader.close(); rd.close(); } } Index: lucene/src/java/org/apache/lucene/index/SlowMultiReaderWrapper.java =================================================================== --- lucene/src/java/org/apache/lucene/index/SlowMultiReaderWrapper.java (revision 1036977) +++ lucene/src/java/org/apache/lucene/index/SlowMultiReaderWrapper.java (working copy) @@ -18,10 +18,8 @@ */ import java.io.IOException; -import java.util.List; -import java.util.ArrayList; import org.apache.lucene.util.Bits; -import org.apache.lucene.util.ReaderUtil; +import org.apache.lucene.util.ReaderUtil; // javadoc import org.apache.lucene.index.DirectoryReader; // javadoc import org.apache.lucene.index.MultiReader; // javadoc @@ -49,22 +47,8 @@ */ public final class SlowMultiReaderWrapper extends FilterIndexReader { - /** This method may return the reader back, if the - * incoming reader is already atomic. */ - public static IndexReader wrap(IndexReader reader) throws IOException { - final List subs = new ArrayList(); - ReaderUtil.gatherSubReaders(subs, reader); - if (subs == null) { - // already an atomic reader - return reader; - } else if (subs.size() == 1) { - return subs.get(0); - } else { - return new SlowMultiReaderWrapper(reader); - } - } - private SlowMultiReaderWrapper(IndexReader other) throws IOException { + public SlowMultiReaderWrapper(IndexReader other) { super(other); } @@ -79,12 +63,8 @@ } @Override - public void doClose() throws IOException { - throw new UnsupportedOperationException("please call close on the original reader instead"); - } - - @Override public IndexReader[] getSequentialSubReaders() { return null; - } + } + } Index: lucene/src/test/org/apache/lucene/index/TestFilterIndexReader.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestFilterIndexReader.java (revision 1036977) +++ lucene/src/test/org/apache/lucene/index/TestFilterIndexReader.java (working copy) @@ -19,8 +19,6 @@ import org.apache.lucene.util.LuceneTestCase; -import junit.framework.TestSuite; -import junit.textui.TestRunner; import org.apache.lucene.store.Directory; import org.apache.lucene.analysis.MockAnalyzer; @@ -109,7 +107,7 @@ } public TestReader(IndexReader reader) { - super(reader); + super(new SlowMultiReaderWrapper(reader)); } @Override @@ -117,12 +115,6 @@ return new TestFields(super.fields()); } } - - - /** Main for running test case by itself. */ - public static void main(String args[]) { - TestRunner.run (new TestSuite(TestIndexReader.class)); - } /** * Tests the IndexReader.getFieldNames implementation @@ -146,10 +138,9 @@ writer.close(); - //IndexReader reader = new TestReader(IndexReader.open(directory, true)); Directory target = newDirectory(); writer = new IndexWriter(target, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer())); - IndexReader reader = new TestReader(SlowMultiReaderWrapper.wrap(IndexReader.open(directory, true))); + IndexReader reader = new TestReader(IndexReader.open(directory, true)); writer.addIndexes(reader); writer.close(); reader.close(); Index: lucene/src/test/org/apache/lucene/index/TestIndexReader.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestIndexReader.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/index/TestIndexReader.java (working copy) @@ -1151,22 +1151,20 @@ w.commit(); doc.add(newField("f", "who", Field.Store.NO, Field.Index.NOT_ANALYZED)); w.addDocument(doc); - IndexReader r = w.getReader(); - IndexReader wr = SlowMultiReaderWrapper.wrap(r); + IndexReader r = new SlowMultiReaderWrapper(w.getReader()); w.close(); - assertNull(wr.getDeletedDocs()); + assertNull(r.getDeletedDocs()); r.close(); - r = IndexReader.open(dir, false); - wr = SlowMultiReaderWrapper.wrap(r); + r = new SlowMultiReaderWrapper(IndexReader.open(dir, false)); - assertNull(wr.getDeletedDocs()); + assertNull(r.getDeletedDocs()); assertEquals(1, r.deleteDocuments(new Term("f", "doctor"))); - assertNotNull(wr.getDeletedDocs()); - assertTrue(wr.getDeletedDocs().get(0)); + assertNotNull(r.getDeletedDocs()); + assertTrue(r.getDeletedDocs().get(0)); assertEquals(1, r.deleteDocuments(new Term("f", "who"))); - assertTrue(wr.getDeletedDocs().get(1)); + assertTrue(r.getDeletedDocs().get(1)); r.close(); dir.close(); } Index: lucene/src/test/org/apache/lucene/search/payloads/PayloadHelper.java =================================================================== --- lucene/src/test/org/apache/lucene/search/payloads/PayloadHelper.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/payloads/PayloadHelper.java (working copy) @@ -127,10 +127,10 @@ doc.add(new Field(NO_PAYLOAD_FIELD, English.intToEnglish(i), Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); } - reader = IndexReader.open(writer); + reader = new SlowMultiReaderWrapper(IndexReader.open(writer)); writer.close(); - IndexSearcher searcher = new IndexSearcher(SlowMultiReaderWrapper.wrap(reader)); + IndexSearcher searcher = new IndexSearcher(reader); searcher.setSimilarity(similarity); return searcher; } Index: lucene/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java (working copy) @@ -121,10 +121,10 @@ doc.add(newField("multiField", English.intToEnglish(i) + " " + English.intToEnglish(i), Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); } - reader = writer.getReader(); + reader = new SlowMultiReaderWrapper(writer.getReader()); writer.close(); - searcher = new IndexSearcher(SlowMultiReaderWrapper.wrap(reader)); + searcher = new IndexSearcher(reader); searcher.setSimilarity(similarity); } Index: lucene/src/test/org/apache/lucene/search/spans/TestBasics.java =================================================================== --- lucene/src/test/org/apache/lucene/search/spans/TestBasics.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/spans/TestBasics.java (working copy) @@ -79,8 +79,8 @@ doc.add(newField("field", English.intToEnglish(i), Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); } - reader = writer.getReader(); - searcher = new IndexSearcher(SlowMultiReaderWrapper.wrap(reader)); + reader = new SlowMultiReaderWrapper(writer.getReader()); + searcher = new IndexSearcher(reader); writer.close(); } Index: lucene/src/test/org/apache/lucene/search/spans/TestFieldMaskingSpanQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/spans/TestFieldMaskingSpanQuery.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/spans/TestFieldMaskingSpanQuery.java (working copy) @@ -110,9 +110,9 @@ field("gender", "male"), field("first", "bubba"), field("last", "jones") })); - reader = writer.getReader(); + reader = new SlowMultiReaderWrapper(writer.getReader()); writer.close(); - searcher = new IndexSearcher(SlowMultiReaderWrapper.wrap(reader)); + searcher = new IndexSearcher(reader); } @Override Index: lucene/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java =================================================================== --- lucene/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java (working copy) @@ -60,9 +60,9 @@ doc.add(newField(FIELD, docFields[i], Field.Store.NO, Field.Index.ANALYZED)); writer.addDocument(doc); } - reader = writer.getReader(); + reader = new SlowMultiReaderWrapper(writer.getReader()); writer.close(); - searcher = new IndexSearcher(SlowMultiReaderWrapper.wrap(reader)); + searcher = new IndexSearcher(reader); } protected String[] docFields = { Index: lucene/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java =================================================================== --- lucene/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java (working copy) @@ -120,7 +120,7 @@ IndexReader reader = writer.getReader(); writer.close(); - checkSpans(snq.getSpans(SlowMultiReaderWrapper.wrap(reader)), 1,new int[]{2}); + checkSpans(snq.getSpans(new SlowMultiReaderWrapper(reader)), 1,new int[]{2}); reader.close(); directory.close(); } @@ -261,8 +261,8 @@ doc.add(new Field("content", new StringReader("a b c d e f g h i j a k"))); writer.addDocument(doc); - IndexReader reader = writer.getReader(); - IndexSearcher is = new IndexSearcher(SlowMultiReaderWrapper.wrap(reader)); + IndexReader reader = new SlowMultiReaderWrapper(writer.getReader()); + IndexSearcher is = new IndexSearcher(reader); writer.close(); SpanTermQuery stq1 = new SpanTermQuery(new Term("content", "a")); @@ -298,8 +298,8 @@ Document doc = new Document(); doc.add(new Field("content", new StringReader("a b a d k f a h i k a k"))); writer.addDocument(doc); - IndexReader reader = writer.getReader(); - IndexSearcher is = new IndexSearcher(SlowMultiReaderWrapper.wrap(reader)); + IndexReader reader = new SlowMultiReaderWrapper(writer.getReader()); + IndexSearcher is = new IndexSearcher(reader); writer.close(); SpanTermQuery stq1 = new SpanTermQuery(new Term("content", "a")); @@ -334,8 +334,8 @@ Document doc = new Document(); doc.add(new Field("content", new StringReader("j k a l f k k p a t a k l k t a"))); writer.addDocument(doc); - IndexReader reader = writer.getReader(); - IndexSearcher is = new IndexSearcher(SlowMultiReaderWrapper.wrap(reader)); + IndexReader reader = new SlowMultiReaderWrapper(writer.getReader()); + IndexSearcher is = new IndexSearcher(reader); writer.close(); SpanTermQuery stq1 = new SpanTermQuery(new Term("content", "a")); @@ -376,9 +376,9 @@ doc.add(newField(PayloadHelper.FIELD,"xx rr yy mm pp", Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); - IndexReader reader = writer.getReader(); + IndexReader reader = new SlowMultiReaderWrapper(writer.getReader()); writer.close(); - IndexSearcher searcher = new IndexSearcher(SlowMultiReaderWrapper.wrap(reader)); + IndexSearcher searcher = new IndexSearcher(reader); PayloadSpanUtil psu = new PayloadSpanUtil(searcher.getIndexReader()); @@ -440,10 +440,10 @@ writer.addDocument(doc); } - closeIndexReader = writer.getReader(); + closeIndexReader = new SlowMultiReaderWrapper(writer.getReader()); writer.close(); - IndexSearcher searcher = new IndexSearcher(SlowMultiReaderWrapper.wrap(closeIndexReader)); + IndexSearcher searcher = new IndexSearcher(closeIndexReader); return searcher; } Index: lucene/src/test/org/apache/lucene/search/spans/TestSpans.java =================================================================== --- lucene/src/test/org/apache/lucene/search/spans/TestSpans.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/spans/TestSpans.java (working copy) @@ -196,7 +196,7 @@ makeSpanTermQuery("t3") }, slop, ordered); - Spans spans = snq.getSpans(SlowMultiReaderWrapper.wrap(searcher.getIndexReader())); + Spans spans = snq.getSpans(new SlowMultiReaderWrapper(searcher.getIndexReader())); assertTrue("first range", spans.next()); assertEquals("first doc", 11, spans.doc()); @@ -222,7 +222,7 @@ makeSpanTermQuery("u2") }, 0, false); - Spans spans = snq.getSpans(SlowMultiReaderWrapper.wrap(searcher.getIndexReader())); + Spans spans = snq.getSpans(new SlowMultiReaderWrapper(searcher.getIndexReader())); assertTrue("Does not have next and it should", spans.next()); assertEquals("doc", 4, spans.doc()); assertEquals("start", 1, spans.start()); @@ -258,7 +258,7 @@ }, 1, false); - spans = snq.getSpans(SlowMultiReaderWrapper.wrap(searcher.getIndexReader())); + spans = snq.getSpans(new SlowMultiReaderWrapper(searcher.getIndexReader())); assertTrue("Does not have next and it should", spans.next()); assertEquals("doc", 4, spans.doc()); assertEquals("start", 0, spans.start()); @@ -316,7 +316,7 @@ for (int i = 0; i < terms.length; i++) { sqa[i] = makeSpanTermQuery(terms[i]); } - return (new SpanOrQuery(sqa)).getSpans(SlowMultiReaderWrapper.wrap(searcher.getIndexReader())); + return (new SpanOrQuery(sqa)).getSpans(new SlowMultiReaderWrapper(searcher.getIndexReader())); } private void tstNextSpans(Spans spans, int doc, int start, int end) @@ -421,7 +421,7 @@ } }; - Scorer spanScorer = snq.weight(searcher).scorer(SlowMultiReaderWrapper.wrap(searcher.getIndexReader()), true, false); + Scorer spanScorer = snq.weight(searcher).scorer(new SlowMultiReaderWrapper(searcher.getIndexReader()), true, false); assertTrue("first doc", spanScorer.nextDoc() != DocIdSetIterator.NO_MORE_DOCS); assertEquals("first doc number", spanScorer.docID(), 11); Index: lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java (working copy) @@ -130,17 +130,16 @@ writer.addDocument(new Document()); writer.close(); - IndexReader reader = IndexReader.open(dir, true); - IndexReader slowReader = SlowMultiReaderWrapper.wrap(reader); + IndexReader reader = new SlowMultiReaderWrapper(IndexReader.open(dir, true)); // not cacheable: - assertDocIdSetCacheable(slowReader, new QueryWrapperFilter(new TermQuery(new Term("test","value"))), false); + assertDocIdSetCacheable(reader, new QueryWrapperFilter(new TermQuery(new Term("test","value"))), false); // returns default empty docidset, always cacheable: - assertDocIdSetCacheable(slowReader, NumericRangeFilter.newIntRange("test", Integer.valueOf(10000), Integer.valueOf(-10000), true, true), true); + assertDocIdSetCacheable(reader, NumericRangeFilter.newIntRange("test", Integer.valueOf(10000), Integer.valueOf(-10000), true, true), true); // is cacheable: - assertDocIdSetCacheable(slowReader, FieldCacheRangeFilter.newIntRange("test", Integer.valueOf(10), Integer.valueOf(20), true, true), true); + assertDocIdSetCacheable(reader, FieldCacheRangeFilter.newIntRange("test", Integer.valueOf(10), Integer.valueOf(20), true, true), true); // a openbitset filter is always cacheable - assertDocIdSetCacheable(slowReader, new Filter() { + assertDocIdSetCacheable(reader, new Filter() { @Override public DocIdSet getDocIdSet(IndexReader reader) { return new OpenBitSet(); Index: lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (working copy) @@ -143,9 +143,9 @@ writer.addDocument(d4); } - r = writer.getReader(); + r = new SlowMultiReaderWrapper(writer.getReader()); writer.close(); - s = new IndexSearcher(SlowMultiReaderWrapper.wrap(r)); + s = new IndexSearcher(r); s.setSimilarity(sim); } Index: lucene/src/test/org/apache/lucene/search/TestPositionIncrement.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestPositionIncrement.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/TestPositionIncrement.java (working copy) @@ -243,12 +243,11 @@ "a a b c d e a f g h i j a b k k"))); writer.addDocument(doc); - IndexReader r = writer.getReader(); + IndexReader r = new SlowMultiReaderWrapper(writer.getReader()); - DocsAndPositionsEnum tp = MultiFields.getTermPositionsEnum(r, - MultiFields.getDeletedDocs(r), - "content", - new BytesRef("a")); + DocsAndPositionsEnum tp = r.termPositionsEnum(r.getDeletedDocs(), + "content", + new BytesRef("a")); int count = 0; assertTrue(tp.nextDoc() != tp.NO_MORE_DOCS); @@ -263,7 +262,7 @@ // only one doc has "a" assertEquals(tp.NO_MORE_DOCS, tp.nextDoc()); - IndexSearcher is = new IndexSearcher(SlowMultiReaderWrapper.wrap(r)); + IndexSearcher is = new IndexSearcher(r); SpanTermQuery stq1 = new SpanTermQuery(new Term("content", "a")); SpanTermQuery stq2 = new SpanTermQuery(new Term("content", "k")); Index: lucene/src/test/org/apache/lucene/search/TestSpanQueryFilter.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestSpanQueryFilter.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/TestSpanQueryFilter.java (working copy) @@ -45,7 +45,7 @@ SpanTermQuery query = new SpanTermQuery(new Term("field", English.intToEnglish(10).trim())); SpanQueryFilter filter = new SpanQueryFilter(query); - SpanFilterResult result = filter.bitSpans(SlowMultiReaderWrapper.wrap(reader)); + SpanFilterResult result = filter.bitSpans(new SlowMultiReaderWrapper(reader)); DocIdSet docIdSet = result.getDocIdSet(); assertTrue("docIdSet is null and it shouldn't be", docIdSet != null); assertContainsDocId("docIdSet doesn't contain docId 10", docIdSet, 10); Index: lucene/src/test/org/apache/lucene/search/TestTermScorer.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestTermScorer.java (revision 1036970) +++ lucene/src/test/org/apache/lucene/search/TestTermScorer.java (working copy) @@ -52,9 +52,9 @@ Field.Index.ANALYZED)); writer.addDocument(doc); } - indexReader = writer.getReader(); + indexReader = new SlowMultiReaderWrapper(writer.getReader()); writer.close(); - indexSearcher = new IndexSearcher(SlowMultiReaderWrapper.wrap(indexReader)); + indexSearcher = new IndexSearcher(indexReader); } @Override