Index: lucene/contrib/misc/src/java/org/apache/lucene/index/PKIndexSplitter.java
===================================================================
--- lucene/contrib/misc/src/java/org/apache/lucene/index/PKIndexSplitter.java (revision 1241677)
+++ lucene/contrib/misc/src/java/org/apache/lucene/index/PKIndexSplitter.java (working copy)
@@ -28,7 +28,6 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.IOUtils;
-import org.apache.lucene.util.ReaderUtil;
import org.apache.lucene.util.Version;
/**
@@ -102,7 +101,7 @@
boolean success = false;
final IndexWriter w = new IndexWriter(target, config);
try {
- final AtomicReaderContext[] leaves = ReaderUtil.leaves(reader.getTopReaderContext());
+ final AtomicReaderContext[] leaves = reader.getTopReaderContext().leaves();
final IndexReader[] subReaders = new IndexReader[leaves.length];
for (int i = 0; i < leaves.length; i++) {
subReaders[i] = new DocumentFilteredAtomicIndexReader(leaves[i], preserveFilter, negateFilter);
Index: lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java
===================================================================
--- lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java (revision 1241677)
+++ lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java (working copy)
@@ -32,7 +32,6 @@
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.ReaderUtil;
public class TestDistance extends LuceneTestCase {
@@ -117,7 +116,7 @@
LatLongDistanceFilter f = new LatLongDistanceFilter(new QueryWrapperFilter(new MatchAllDocsQuery()),
lat, lng, 1.0, latField, lngField);
- AtomicReaderContext[] leaves = ReaderUtil.leaves(r.getTopReaderContext());
+ AtomicReaderContext[] leaves = r.getTopReaderContext().leaves();
for (int i = 0; i < leaves.length; i++) {
f.getDocIdSet(leaves[i], leaves[i].reader().getLiveDocs());
}
Index: lucene/core/src/java/org/apache/lucene/index/AtomicReaderContext.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/index/AtomicReaderContext.java (revision 1241677)
+++ lucene/core/src/java/org/apache/lucene/index/AtomicReaderContext.java (working copy)
@@ -28,7 +28,8 @@
public final int docBase;
private final AtomicReader reader;
-
+ private final AtomicReaderContext[] leaves;
+
/**
* Creates a new {@link AtomicReaderContext}
*/
@@ -38,6 +39,7 @@
this.ord = leafOrd;
this.docBase = leafDocBase;
this.reader = reader;
+ this.leaves = isTopLevel ? new AtomicReaderContext[] { this } : null;
}
AtomicReaderContext(AtomicReader atomicReader) {
@@ -46,7 +48,7 @@
@Override
public AtomicReaderContext[] leaves() {
- return null;
+ return leaves;
}
@Override
Index: lucene/core/src/java/org/apache/lucene/index/IndexReaderContext.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/index/IndexReaderContext.java (revision 1241677)
+++ lucene/core/src/java/org/apache/lucene/index/IndexReaderContext.java (working copy)
@@ -45,7 +45,8 @@
/**
* Returns the context's leaves if this context is a top-level context
- * otherwise null.
+ * otherwise null. For convenience, if this is an
+ * {@link AtomicReaderContext} this returns itsself as the only leaf.
*
* Note: this is convenience method since leaves can always be obtained by
* walking the context tree.
Index: lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java (revision 1241677)
+++ lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java (working copy)
@@ -144,7 +144,7 @@
reader = context.reader();
this.executor = executor;
this.readerContext = context;
- leafContexts = ReaderUtil.leaves(context);
+ leafContexts = context.leaves();
this.leafSlices = executor == null ? null : slices(leafContexts);
}
Index: lucene/core/src/java/org/apache/lucene/search/payloads/PayloadSpanUtil.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/search/payloads/PayloadSpanUtil.java (revision 1241677)
+++ lucene/core/src/java/org/apache/lucene/search/payloads/PayloadSpanUtil.java (working copy)
@@ -43,7 +43,6 @@
import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.search.spans.SpanTermQuery;
import org.apache.lucene.search.spans.Spans;
-import org.apache.lucene.util.ReaderUtil;
import org.apache.lucene.util.TermContext;
/**
@@ -184,7 +183,7 @@
for (Term term : terms) {
termContexts.put(term, TermContext.build(context, term, true));
}
- final AtomicReaderContext[] leaves = ReaderUtil.leaves(context);
+ final AtomicReaderContext[] leaves = context.leaves();
for (AtomicReaderContext atomicReaderContext : leaves) {
final Spans spans = query.getSpans(atomicReaderContext, atomicReaderContext.reader().getLiveDocs(), termContexts);
while (spans.next() == true) {
Index: lucene/core/src/java/org/apache/lucene/search/TermCollectingRewrite.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/search/TermCollectingRewrite.java (revision 1241677)
+++ lucene/core/src/java/org/apache/lucene/search/TermCollectingRewrite.java (working copy)
@@ -30,7 +30,6 @@
import org.apache.lucene.util.AttributeSource;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.TermContext;
-import org.apache.lucene.util.ReaderUtil;
abstract class TermCollectingRewrite extends MultiTermQuery.RewriteMethod {
@@ -49,7 +48,7 @@
protected final void collectTerms(IndexReader reader, MultiTermQuery query, TermCollector collector) throws IOException {
IndexReaderContext topReaderContext = reader.getTopReaderContext();
Comparator
null the given context must be an instance of
- * {@link AtomicReaderContext}
- */
- public static AtomicReaderContext[] leaves(IndexReaderContext context) {
- assert context != null && context.isTopLevel : "context must be non-null & top-level";
- final AtomicReaderContext[] leaves = context.leaves();
- if (leaves == null) {
- return new AtomicReaderContext[] { (AtomicReaderContext) context };
- }
- return leaves;
- }
-
- /**
* Walks up the reader tree and return the given context's top level reader
* context, or in other words the reader tree's root context.
*/
Index: lucene/core/src/java/org/apache/lucene/util/TermContext.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/TermContext.java (revision 1241677)
+++ lucene/core/src/java/org/apache/lucene/util/TermContext.java (working copy)
@@ -85,7 +85,7 @@
final String field = term.field();
final BytesRef bytes = term.bytes();
final TermContext perReaderTermState = new TermContext(context);
- final AtomicReaderContext[] leaves = ReaderUtil.leaves(context);
+ final AtomicReaderContext[] leaves = context.leaves();
//if (DEBUG) System.out.println("prts.build term=" + term);
for (int i = 0; i < leaves.length; i++) {
//if (DEBUG) System.out.println(" r=" + leaves[i].reader);
Index: lucene/core/src/test/org/apache/lucene/index/TestDocsAndPositions.java
===================================================================
--- lucene/core/src/test/org/apache/lucene/index/TestDocsAndPositions.java (revision 1241677)
+++ lucene/core/src/test/org/apache/lucene/index/TestDocsAndPositions.java (working copy)
@@ -30,7 +30,6 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.ReaderUtil;
import org.apache.lucene.util._TestUtil;
public class TestDocsAndPositions extends LuceneTestCase {
@@ -65,7 +64,7 @@
for (int i = 0; i < num; i++) {
BytesRef bytes = new BytesRef("1");
IndexReaderContext topReaderContext = reader.getTopReaderContext();
- AtomicReaderContext[] leaves = ReaderUtil.leaves(topReaderContext);
+ AtomicReaderContext[] leaves = topReaderContext.leaves();
for (AtomicReaderContext atomicReaderContext : leaves) {
DocsAndPositionsEnum docsAndPosEnum = getDocsAndPositions(
atomicReaderContext.reader(), bytes, null);
@@ -141,7 +140,7 @@
for (int i = 0; i < num; i++) {
BytesRef bytes = new BytesRef("" + term);
IndexReaderContext topReaderContext = reader.getTopReaderContext();
- AtomicReaderContext[] leaves = ReaderUtil.leaves(topReaderContext);
+ AtomicReaderContext[] leaves = topReaderContext.leaves();
for (AtomicReaderContext atomicReaderContext : leaves) {
DocsAndPositionsEnum docsAndPosEnum = getDocsAndPositions(
atomicReaderContext.reader(), bytes, null);
@@ -217,7 +216,7 @@
for (int i = 0; i < num; i++) {
BytesRef bytes = new BytesRef("" + term);
IndexReaderContext topReaderContext = reader.getTopReaderContext();
- AtomicReaderContext[] leaves = ReaderUtil.leaves(topReaderContext);
+ AtomicReaderContext[] leaves = topReaderContext.leaves();
for (AtomicReaderContext context : leaves) {
int maxDoc = context.reader().maxDoc();
DocsEnum docsEnum = _TestUtil.docs(random, context.reader(), fieldName, bytes, null, null, true);
@@ -296,7 +295,7 @@
BytesRef bytes = new BytesRef("even");
IndexReaderContext topReaderContext = reader.getTopReaderContext();
- AtomicReaderContext[] leaves = ReaderUtil.leaves(topReaderContext);
+ AtomicReaderContext[] leaves = topReaderContext.leaves();
for (AtomicReaderContext atomicReaderContext : leaves) {
DocsAndPositionsEnum docsAndPosEnum = getDocsAndPositions(
atomicReaderContext.reader(), bytes, null);
Index: lucene/core/src/test/org/apache/lucene/search/spans/MultiSpansWrapper.java
===================================================================
--- lucene/core/src/test/org/apache/lucene/search/spans/MultiSpansWrapper.java (revision 1241677)
+++ lucene/core/src/test/org/apache/lucene/search/spans/MultiSpansWrapper.java (working copy)
@@ -60,7 +60,7 @@
for (Term term : terms) {
termContexts.put(term, TermContext.build(topLevelReaderContext, term, true));
}
- AtomicReaderContext[] leaves = ReaderUtil.leaves(topLevelReaderContext);
+ AtomicReaderContext[] leaves = topLevelReaderContext.leaves();
if(leaves.length == 1) {
return query.getSpans(leaves[0], leaves[0].reader().getLiveDocs(), termContexts);
}
Index: lucene/core/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java
===================================================================
--- lucene/core/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java (revision 1241677)
+++ lucene/core/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java (working copy)
@@ -32,7 +32,6 @@
import org.apache.lucene.search.Scorer;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.ReaderUtil;
public class TestNearSpansOrdered extends LuceneTestCase {
protected IndexSearcher searcher;
@@ -167,7 +166,7 @@
SpanNearQuery q = makeQuery();
Weight w = searcher.createNormalizedWeight(q);
IndexReaderContext topReaderContext = searcher.getTopReaderContext();
- AtomicReaderContext[] leaves = ReaderUtil.leaves(topReaderContext);
+ AtomicReaderContext[] leaves = topReaderContext.leaves();
Scorer s = w.scorer(leaves[0], true, false, leaves[0].reader().getLiveDocs());
assertEquals(1, s.advance(1));
}
Index: lucene/core/src/test/org/apache/lucene/search/spans/TestSpans.java
===================================================================
--- lucene/core/src/test/org/apache/lucene/search/spans/TestSpans.java (revision 1241677)
+++ lucene/core/src/test/org/apache/lucene/search/spans/TestSpans.java (working copy)
@@ -404,7 +404,7 @@
boolean ordered = true;
int slop = 1;
IndexReaderContext topReaderContext = searcher.getTopReaderContext();
- AtomicReaderContext[] leaves = ReaderUtil.leaves(topReaderContext);
+ AtomicReaderContext[] leaves = topReaderContext.leaves();
int subIndex = ReaderUtil.subIndex(11, leaves);
for (int i = 0; i < leaves.length; i++) {
Index: lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java
===================================================================
--- lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java (revision 1241677)
+++ lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java (working copy)
@@ -37,7 +37,6 @@
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.ReaderUtil;
import org.apache.lucene.util._TestUtil;
import static org.apache.lucene.util.LuceneTestCase.TEST_VERSION_CURRENT;
@@ -216,7 +215,7 @@
*/
public static void checkSkipTo(final Query q, final IndexSearcher s) throws IOException {
//System.out.println("Checking "+q);
- final AtomicReaderContext[] readerContextArray = ReaderUtil.leaves(s.getTopReaderContext());
+ final AtomicReaderContext[] readerContextArray = s.getTopReaderContext().leaves();
if (s.createNormalizedWeight(q).scoresDocsOutOfOrder()) return; // in this case order of skipTo() might differ from that of next().
final int skip_op = 0;
@@ -349,7 +348,7 @@
final float maxDiff = 1e-3f;
final int lastDoc[] = {-1};
final AtomicReader lastReader[] = {null};
- final AtomicReaderContext[] context = ReaderUtil.leaves(s.getTopReaderContext());
+ final AtomicReaderContext[] context = s.getTopReaderContext().leaves();
s.search(q,new Collector() {
private Scorer scorer;
private int leafPtr;
Index: modules/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java
===================================================================
--- modules/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java (revision 1241677)
+++ modules/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java (working copy)
@@ -156,7 +156,7 @@
}
private Document getParentDoc(IndexReader reader, Filter parents, int childDocID) throws IOException {
- final AtomicReaderContext[] leaves = ReaderUtil.leaves(reader.getTopReaderContext());
+ final AtomicReaderContext[] leaves = reader.getTopReaderContext().leaves();
final int subIndex = ReaderUtil.subIndex(childDocID, leaves);
final AtomicReaderContext leaf = leaves[subIndex];
final FixedBitSet bits = (FixedBitSet) parents.getDocIdSet(leaf, null);
@@ -818,7 +818,7 @@
ToParentBlockJoinQuery q = new ToParentBlockJoinQuery(tq, parentFilter, ToParentBlockJoinQuery.ScoreMode.Avg);
Weight weight = s.createNormalizedWeight(q);
- DocIdSetIterator disi = weight.scorer(ReaderUtil.leaves(s.getIndexReader().getTopReaderContext())[0], true, true, null);
+ DocIdSetIterator disi = weight.scorer(s.getIndexReader().getTopReaderContext().leaves()[0], true, true, null);
assertEquals(1, disi.advance(1));
r.close();
dir.close();
@@ -852,7 +852,7 @@
ToParentBlockJoinQuery q = new ToParentBlockJoinQuery(tq, parentFilter, ToParentBlockJoinQuery.ScoreMode.Avg);
Weight weight = s.createNormalizedWeight(q);
- DocIdSetIterator disi = weight.scorer(ReaderUtil.leaves(s.getIndexReader().getTopReaderContext())[0], true, true, null);
+ DocIdSetIterator disi = weight.scorer(s.getIndexReader().getTopReaderContext().leaves()[0], true, true, null);
assertEquals(2, disi.advance(0));
r.close();
dir.close();
Index: modules/queries/src/java/org/apache/lucene/queries/function/valuesource/ScaleFloatFunction.java
===================================================================
--- modules/queries/src/java/org/apache/lucene/queries/function/valuesource/ScaleFloatFunction.java (revision 1241677)
+++ modules/queries/src/java/org/apache/lucene/queries/function/valuesource/ScaleFloatFunction.java (working copy)
@@ -60,7 +60,7 @@
}
private ScaleInfo createScaleInfo(Map context, AtomicReaderContext readerContext) throws IOException {
- final AtomicReaderContext[] leaves = ReaderUtil.leaves(ReaderUtil.getTopLevelContext(readerContext));
+ final AtomicReaderContext[] leaves = ReaderUtil.getTopLevelContext(readerContext).leaves();
float minVal = Float.POSITIVE_INFINITY;
float maxVal = Float.NEGATIVE_INFINITY;
Index: modules/queries/src/test/org/apache/lucene/queries/TermsFilterTest.java
===================================================================
--- modules/queries/src/test/org/apache/lucene/queries/TermsFilterTest.java (revision 1241677)
+++ modules/queries/src/test/org/apache/lucene/queries/TermsFilterTest.java (working copy)
@@ -31,7 +31,6 @@
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.ReaderUtil;
public class TermsFilterTest extends LuceneTestCase {
@@ -111,7 +110,7 @@
tf.addTerm(new Term(fieldName, "content1"));
MultiReader multi = new MultiReader(reader1, reader2);
- for (AtomicReaderContext context : ReaderUtil.leaves(multi.getTopReaderContext())) {
+ for (AtomicReaderContext context : multi.getTopReaderContext().leaves()) {
FixedBitSet bits = (FixedBitSet) tf.getDocIdSet(context, context.reader().getLiveDocs());
assertTrue("Must be >= 0", bits.cardinality() >= 0);
}
Index: solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
===================================================================
--- solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java (revision 1241677)
+++ solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java (working copy)
@@ -584,7 +584,7 @@
NamedList