You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2012/01/30 01:35:09 UTC

svn commit: r1237512 - in /lucene/dev/branches/lucene2858: lucene/src/java/org/apache/lucene/index/ lucene/src/java/org/apache/lucene/util/ modules/queries/src/test/org/apache/lucene/queries/

Author: uschindler
Date: Mon Jan 30 00:35:08 2012
New Revision: 1237512

URL: http://svn.apache.org/viewvc?rev=1237512&view=rev
Log:
LUCENE-2858: Hide ReaderContext ctors for users. You should only get top contexts from the reader.

Modified:
    lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/AtomicReader.java
    lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/CompositeReader.java
    lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/util/ReaderUtil.java
    lucene/dev/branches/lucene2858/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java

Modified: lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/AtomicReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/AtomicReader.java?rev=1237512&r1=1237511&r2=1237512&view=diff
==============================================================================
--- lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/AtomicReader.java (original)
+++ lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/AtomicReader.java Mon Jan 30 00:35:08 2012
@@ -293,7 +293,7 @@ public abstract class AtomicReader exten
     /**
      * Creates a new {@link AtomicReaderContext} 
      */    
-    public AtomicReaderContext(CompositeReaderContext parent, AtomicReader reader,
+    AtomicReaderContext(CompositeReaderContext parent, AtomicReader reader,
         int ord, int docBase, int leafOrd, int leafDocBase) {
       super(parent, ord, docBase);
       this.ord = leafOrd;
@@ -301,7 +301,7 @@ public abstract class AtomicReader exten
       this.reader = reader;
     }
     
-    public AtomicReaderContext(AtomicReader atomicReader) {
+    AtomicReaderContext(AtomicReader atomicReader) {
       this(null, atomicReader, 0, 0, 0, 0);
     }
     

Modified: lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/CompositeReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/CompositeReader.java?rev=1237512&r1=1237511&r2=1237512&view=diff
==============================================================================
--- lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/CompositeReader.java (original)
+++ lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/index/CompositeReader.java Mon Jan 30 00:35:08 2012
@@ -17,6 +17,8 @@ package org.apache.lucene.index;
  * limitations under the License.
  */
 
+import java.io.IOException;
+
 import org.apache.lucene.index.AtomicReader.AtomicReaderContext;
 import org.apache.lucene.search.SearcherManager; // javadocs
 import org.apache.lucene.store.*;
@@ -84,7 +86,7 @@ public abstract class CompositeReader ex
     // lazy init without thread safety for perf resaons: Building the readerContext twice does not hurt!
     if (readerContext == null) {
       assert getSequentialSubReaders() != null;
-      readerContext = (CompositeReaderContext) ReaderUtil.buildReaderContext(this);
+      readerContext = (CompositeReaderContext) new ReaderContextBuilder(this).build();
     }
     return readerContext;
   }
@@ -111,7 +113,7 @@ public abstract class CompositeReader ex
      * Creates a {@link CompositeReaderContext} for intermediate readers that aren't
      * not top-level readers in the current context
      */
-    public CompositeReaderContext(CompositeReaderContext parent, CompositeReader reader,
+    CompositeReaderContext(CompositeReaderContext parent, CompositeReader reader,
         int ordInParent, int docbaseInParent, ReaderContext[] children) {
       this(parent, reader, ordInParent, docbaseInParent, children, null);
     }
@@ -119,7 +121,7 @@ public abstract class CompositeReader ex
     /**
      * Creates a {@link CompositeReaderContext} for top-level readers with parent set to <code>null</code>
      */
-    public CompositeReaderContext(CompositeReader reader, ReaderContext[] children, AtomicReaderContext[] leaves) {
+    CompositeReaderContext(CompositeReader reader, ReaderContext[] children, AtomicReaderContext[] leaves) {
       this(null, reader, 0, 0, children, leaves);
     }
     
@@ -148,4 +150,62 @@ public abstract class CompositeReader ex
       return reader;
     }
   }
+
+  private static class ReaderContextBuilder {
+    private final IndexReader reader;
+    private final AtomicReaderContext[] leaves;
+    private int leafOrd = 0;
+    private int leafDocBase = 0;
+    public ReaderContextBuilder(IndexReader reader) {
+      this.reader = reader;
+      leaves = new AtomicReaderContext[numLeaves(reader)];
+    }
+    
+    public ReaderContext build() {
+      return build(null, reader, 0, 0);
+    }
+    
+    private ReaderContext build(CompositeReaderContext parent, IndexReader reader, int ord, int docBase) {
+      if (reader instanceof AtomicReader) {
+        AtomicReaderContext atomic = new AtomicReaderContext(parent, (AtomicReader) reader, ord, docBase, leafOrd, leafDocBase);
+        leaves[leafOrd++] = atomic;
+        leafDocBase += reader.maxDoc();
+        return atomic;
+      } else {
+        CompositeReader cr = (CompositeReader) reader;
+        IndexReader[] sequentialSubReaders = cr.getSequentialSubReaders();
+        ReaderContext[] children = new ReaderContext[sequentialSubReaders.length];
+        final CompositeReaderContext newParent;
+        if (parent == null) {
+          newParent = new CompositeReaderContext(cr, children, leaves);
+        } else {
+          newParent = new CompositeReaderContext(parent, cr, ord, docBase, children);
+        }
+        
+        int newDocBase = 0;
+        for (int i = 0; i < sequentialSubReaders.length; i++) {
+          children[i] = build(newParent, sequentialSubReaders[i], i, newDocBase);
+          newDocBase += sequentialSubReaders[i].maxDoc();
+        }
+        return newParent;
+      }
+    }
+    
+    private int numLeaves(IndexReader reader) {
+      final int[] numLeaves = new int[1];
+      try {
+        new ReaderUtil.Gather(reader) {
+          @Override
+          protected void add(int base, AtomicReader r) {
+            numLeaves[0]++;
+          }
+        }.run();
+      } catch (IOException ioe) {
+        // won't happen
+        throw new RuntimeException(ioe);
+      }
+      return numLeaves[0];
+    }
+    
+  }
 }

Modified: lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/util/ReaderUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/util/ReaderUtil.java?rev=1237512&r1=1237511&r2=1237512&view=diff
==============================================================================
--- lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/util/ReaderUtil.java (original)
+++ lucene/dev/branches/lucene2858/lucene/src/java/org/apache/lucene/util/ReaderUtil.java Mon Jan 30 00:35:08 2012
@@ -24,7 +24,6 @@ import java.io.IOException;
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.CompositeReader;
-import org.apache.lucene.index.CompositeReader.CompositeReaderContext;
 import org.apache.lucene.index.AtomicReader;
 import org.apache.lucene.index.AtomicReader.AtomicReaderContext;
 import org.apache.lucene.index.IndexReader;
@@ -121,68 +120,6 @@ public final class ReaderUtil {
     protected abstract void add(int base, AtomicReader r) throws IOException;
   }
   
-  public static ReaderContext buildReaderContext(IndexReader reader) {
-    return new ReaderContextBuilder(reader).build();
-  }
-  
-  public static class ReaderContextBuilder {
-    private final IndexReader reader;
-    private final AtomicReaderContext[] leaves;
-    private int leafOrd = 0;
-    private int leafDocBase = 0;
-    public ReaderContextBuilder(IndexReader reader) {
-      this.reader = reader;
-      leaves = new AtomicReaderContext[numLeaves(reader)];
-    }
-    
-    public ReaderContext build() {
-      return build(null, reader, 0, 0);
-    }
-    
-    private ReaderContext build(CompositeReaderContext parent, IndexReader reader, int ord, int docBase) {
-      if (reader instanceof AtomicReader) {
-        AtomicReaderContext atomic = new AtomicReaderContext(parent, (AtomicReader) reader, ord, docBase, leafOrd, leafDocBase);
-        leaves[leafOrd++] = atomic;
-        leafDocBase += reader.maxDoc();
-        return atomic;
-      } else {
-        CompositeReader cr = (CompositeReader) reader;
-        IndexReader[] sequentialSubReaders = cr.getSequentialSubReaders();
-        ReaderContext[] children = new ReaderContext[sequentialSubReaders.length];
-        final CompositeReaderContext newParent;
-        if (parent == null) {
-          newParent = new CompositeReaderContext(cr, children, leaves);
-        } else {
-          newParent = new CompositeReaderContext(parent, cr, ord, docBase, children);
-        }
-        
-        int newDocBase = 0;
-        for (int i = 0; i < sequentialSubReaders.length; i++) {
-          children[i] = build(newParent, sequentialSubReaders[i], i, newDocBase);
-          newDocBase += sequentialSubReaders[i].maxDoc();
-        }
-        return newParent;
-      }
-    }
-    
-    private int numLeaves(IndexReader reader) {
-      final int[] numLeaves = new int[1];
-      try {
-        new Gather(reader) {
-          @Override
-          protected void add(int base, AtomicReader r) {
-            numLeaves[0]++;
-          }
-        }.run();
-      } catch (IOException ioe) {
-        // won't happen
-        throw new RuntimeException(ioe);
-      }
-      return numLeaves[0];
-    }
-    
-  }
-
   /**
    * Returns the context's leaves or the context itself as the only element of
    * the returned array. If the context's #leaves() method returns

Modified: lucene/dev/branches/lucene2858/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2858/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java?rev=1237512&r1=1237511&r2=1237512&view=diff
==============================================================================
--- lucene/dev/branches/lucene2858/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java (original)
+++ lucene/dev/branches/lucene2858/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java Mon Jan 30 00:35:08 2012
@@ -132,7 +132,7 @@ public class BooleanFilterTest extends L
   private void tstFilterCard(String mes, int expected, Filter filt)
       throws Exception {
     // BooleanFilter never returns null DIS or null DISI!
-    DocIdSetIterator disi = filt.getDocIdSet(new AtomicReaderContext(reader), reader.getLiveDocs()).iterator();
+    DocIdSetIterator disi = filt.getDocIdSet(reader.getTopReaderContext(), reader.getLiveDocs()).iterator();
     int actual = 0;
     while (disi.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
       actual++;