You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2015/04/04 03:56:47 UTC

svn commit: r1671239 [2/5] - in /lucene/dev/branches/lucene_solr_5_1: ./ dev-tools/ lucene/ lucene/analysis/ lucene/backward-codecs/ lucene/backward-codecs/src/java/org/apache/lucene/codecs/blocktree/ lucene/backward-codecs/src/java/org/apache/lucene/c...

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat3.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat3.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat3.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat3.java Sat Apr  4 01:56:45 2015
@@ -172,9 +172,10 @@ public class TestBlockPostingsFormat3 ex
     
     // NOTE: we don't assert hasOffsets/hasPositions/hasPayloads because they are allowed to be different
 
+    boolean bothHavePositions = leftTerms.hasPositions() && rightTerms.hasPositions();
     TermsEnum leftTermsEnum = leftTerms.iterator(null);
     TermsEnum rightTermsEnum = rightTerms.iterator(null);
-    assertTermsEnum(leftTermsEnum, rightTermsEnum, true);
+    assertTermsEnum(leftTermsEnum, rightTermsEnum, true, bothHavePositions);
     
     assertTermsSeeking(leftTerms, rightTerms);
     
@@ -187,7 +188,7 @@ public class TestBlockPostingsFormat3 ex
           // TODO: test start term too
           TermsEnum leftIntersection = leftTerms.intersect(automaton, null);
           TermsEnum rightIntersection = rightTerms.intersect(automaton, null);
-          assertTermsEnum(leftIntersection, rightIntersection, rarely());
+          assertTermsEnum(leftIntersection, rightIntersection, rarely(), bothHavePositions);
         }
       }
     }
@@ -280,7 +281,7 @@ public class TestBlockPostingsFormat3 ex
    * checks the terms enum sequentially
    * if deep is false, it does a 'shallow' test that doesnt go down to the docsenums
    */
-  public void assertTermsEnum(TermsEnum leftTermsEnum, TermsEnum rightTermsEnum, boolean deep) throws Exception {
+  public void assertTermsEnum(TermsEnum leftTermsEnum, TermsEnum rightTermsEnum, boolean deep, boolean hasPositions) throws Exception {
     BytesRef term;
     Bits randomBits = new RandomBits(MAXDOC, random().nextDouble(), random());
     PostingsEnum leftPositions = null;
@@ -292,56 +293,58 @@ public class TestBlockPostingsFormat3 ex
       assertEquals(term, rightTermsEnum.next());
       assertTermStats(leftTermsEnum, rightTermsEnum);
       if (deep) {
-        // with payloads + off
-        assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.ALL),
-                                   rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.ALL));
-        assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.ALL),
-                                   rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.ALL));
-
-        assertPositionsSkipping(leftTermsEnum.docFreq(), 
-                                leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.ALL),
-                                rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.ALL));
-        assertPositionsSkipping(leftTermsEnum.docFreq(), 
-                                leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.ALL),
-                                rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.ALL));
-        // with payloads only
-        assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.PAYLOADS),
-                                   rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.PAYLOADS));
-        assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.PAYLOADS),
-                                   rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.PAYLOADS));
-
-        assertPositionsSkipping(leftTermsEnum.docFreq(), 
-                                leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.PAYLOADS),
-                                rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.PAYLOADS));
-        assertPositionsSkipping(leftTermsEnum.docFreq(), 
-                                leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.PAYLOADS),
-                                rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.PAYLOADS));
-
-        // with offsets only
-        assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.OFFSETS),
-                                   rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.OFFSETS));
-        assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.OFFSETS),
-                                   rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.OFFSETS));
-
-        assertPositionsSkipping(leftTermsEnum.docFreq(), 
-                                leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.OFFSETS),
-                                rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.OFFSETS));
-        assertPositionsSkipping(leftTermsEnum.docFreq(), 
-                                leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.OFFSETS),
-                                rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.OFFSETS));
-        
-        // with positions only
-        assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.POSITIONS),
-                                   rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.POSITIONS));
-        assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.POSITIONS),
-                                   rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.POSITIONS));
-
-        assertPositionsSkipping(leftTermsEnum.docFreq(), 
-                                leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.POSITIONS),
-                                rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.POSITIONS));
-        assertPositionsSkipping(leftTermsEnum.docFreq(), 
-                                leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.POSITIONS),
-                                rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.POSITIONS));
+        if (hasPositions) {
+          // with payloads + off
+          assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.ALL),
+                                     rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.ALL));
+          assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.ALL),
+                                     rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.ALL));
+
+          assertPositionsSkipping(leftTermsEnum.docFreq(),
+                                  leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.ALL),
+                                  rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.ALL));
+          assertPositionsSkipping(leftTermsEnum.docFreq(),
+                                  leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.ALL),
+                                  rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.ALL));
+          // with payloads only
+          assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.PAYLOADS),
+                                     rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.PAYLOADS));
+          assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.PAYLOADS),
+                                     rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.PAYLOADS));
+
+          assertPositionsSkipping(leftTermsEnum.docFreq(),
+                                  leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.PAYLOADS),
+                                  rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.PAYLOADS));
+          assertPositionsSkipping(leftTermsEnum.docFreq(),
+                                  leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.PAYLOADS),
+                                  rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.PAYLOADS));
+
+          // with offsets only
+          assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.OFFSETS),
+                                     rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.OFFSETS));
+          assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.OFFSETS),
+                                     rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.OFFSETS));
+
+          assertPositionsSkipping(leftTermsEnum.docFreq(),
+                                  leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.OFFSETS),
+                                  rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.OFFSETS));
+          assertPositionsSkipping(leftTermsEnum.docFreq(),
+                                  leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.OFFSETS),
+                                  rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.OFFSETS));
+
+          // with positions only
+          assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.POSITIONS),
+                                     rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.POSITIONS));
+          assertDocsAndPositionsEnum(leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.POSITIONS),
+                                     rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.POSITIONS));
+
+          assertPositionsSkipping(leftTermsEnum.docFreq(),
+                                  leftPositions = leftTermsEnum.postings(null, leftPositions, PostingsEnum.POSITIONS),
+                                  rightPositions = rightTermsEnum.postings(null, rightPositions, PostingsEnum.POSITIONS));
+          assertPositionsSkipping(leftTermsEnum.docFreq(),
+                                  leftPositions = leftTermsEnum.postings(randomBits, leftPositions, PostingsEnum.POSITIONS),
+                                  rightPositions = rightTermsEnum.postings(randomBits, rightPositions, PostingsEnum.POSITIONS));
+        }
         
         // with freqs:
         assertDocsEnum(leftDocs = leftTermsEnum.postings(null, leftDocs),
@@ -389,11 +392,8 @@ public class TestBlockPostingsFormat3 ex
    * checks docs + freqs + positions + payloads, sequentially
    */
   public void assertDocsAndPositionsEnum(PostingsEnum leftDocs, PostingsEnum rightDocs) throws Exception {
-    if (leftDocs == null || rightDocs == null) {
-      assertNull(leftDocs);
-      assertNull(rightDocs);
-      return;
-    }
+    assertNotNull(leftDocs);
+    assertNotNull(rightDocs);
     assertEquals(-1, leftDocs.docID());
     assertEquals(-1, rightDocs.docID());
     int docid;

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/document/TestDocument.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/document/TestDocument.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/document/TestDocument.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/document/TestDocument.java Sat Apr  4 01:56:45 2015
@@ -384,11 +384,7 @@ public class TestDocument extends Lucene
       TermsEnum tvsEnum = tvs.iterator(null);
       assertEquals(new BytesRef("abc"), tvsEnum.next());
       final PostingsEnum dpEnum = tvsEnum.postings(null, null, PostingsEnum.ALL);
-      if (field.equals("tv")) {
-        assertNull(dpEnum);
-      } else {
-        assertNotNull(dpEnum);
-      }
+      assertNotNull(dpEnum);
       assertEquals(new BytesRef("xyz"), tvsEnum.next());
       assertNull(tvsEnum.next());
     }

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java Sat Apr  4 01:56:45 2015
@@ -452,20 +452,15 @@ public class TestCodecs extends LuceneTe
         do {
           term = field.terms[upto];
           if (random().nextInt(3) == 1) {
-            final PostingsEnum docs;
             final PostingsEnum postings;
             if (!field.omitTF) {
+              // TODO: we should randomize which postings features are available, but
+              // need to coordinate this with the checks below that rely on such features
               postings = termsEnum.postings(null, null, PostingsEnum.ALL);
-              if (postings != null) {
-                docs = postings;
-              } else {
-                docs = TestUtil.docs(random(), termsEnum, null, null, PostingsEnum.FREQS);
-              }
             } else {
-              postings = null;
-              docs = TestUtil.docs(random(), termsEnum, null, null, PostingsEnum.NONE);
+              postings = TestUtil.docs(random(), termsEnum, null, null, PostingsEnum.FREQS);
             }
-            assertNotNull(docs);
+            assertNotNull(postings);
             int upto2 = -1;
             boolean ended = false;
             while(upto2 < term.docs.length-1) {
@@ -476,10 +471,10 @@ public class TestCodecs extends LuceneTe
                 final int inc = 1+random().nextInt(left-1);
                 upto2 += inc;
                 if (random().nextInt(2) == 1) {
-                  doc = docs.advance(term.docs[upto2]);
+                  doc = postings.advance(term.docs[upto2]);
                   assertEquals(term.docs[upto2], doc);
                 } else {
-                  doc = docs.advance(1+term.docs[upto2]);
+                  doc = postings.advance(1+term.docs[upto2]);
                   if (doc == DocIdSetIterator.NO_MORE_DOCS) {
                     // skipped past last doc
                     assert upto2 == term.docs.length-1;
@@ -494,7 +489,7 @@ public class TestCodecs extends LuceneTe
                   }
                 }
               } else {
-                doc = docs.nextDoc();
+                doc = postings.nextDoc();
                 assertTrue(doc != -1);
                 upto2++;
               }
@@ -508,7 +503,7 @@ public class TestCodecs extends LuceneTe
             }
 
             if (!ended) {
-              assertEquals(DocIdSetIterator.NO_MORE_DOCS, docs.nextDoc());
+              assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
             }
           }
           upto++;

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestFilterLeafReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestFilterLeafReader.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestFilterLeafReader.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestFilterLeafReader.java Sat Apr  4 01:56:45 2015
@@ -77,12 +77,12 @@ public class TestFilterLeafReader extend
 
       @Override
       public PostingsEnum postings(Bits liveDocs, PostingsEnum reuse, int flags) throws IOException {
-        return new TestPositions(super.postings(liveDocs, reuse == null ? null : ((FilterDocsEnum) reuse).in, flags));
+        return new TestPositions(super.postings(liveDocs, reuse == null ? null : ((FilterPostingsEnum) reuse).in, flags));
       }
     }
 
     /** Filter that only returns odd numbered documents. */
-    private static class TestPositions extends FilterDocsEnum {
+    private static class TestPositions extends FilterPostingsEnum {
       public TestPositions(PostingsEnum in) {
         super(in);
       }
@@ -188,7 +188,7 @@ public class TestFilterLeafReader extend
     checkOverrideMethods(FilterLeafReader.FilterFields.class);
     checkOverrideMethods(FilterLeafReader.FilterTerms.class);
     checkOverrideMethods(FilterLeafReader.FilterTermsEnum.class);
-    checkOverrideMethods(FilterLeafReader.FilterDocsEnum.class);
+    checkOverrideMethods(FilterLeafReader.FilterPostingsEnum.class);
   }
 
   public void testUnwrap() throws IOException {

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestOmitPositions.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestOmitPositions.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestOmitPositions.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestOmitPositions.java Sat Apr  4 01:56:45 2015
@@ -51,7 +51,7 @@ public class TestOmitPositions extends L
     IndexReader reader = w.getReader();
     w.close();
     
-    assertNull(MultiFields.getTermPositionsEnum(reader, null, "foo", new BytesRef("test")));
+    assertNotNull(MultiFields.getTermPositionsEnum(reader, null, "foo", new BytesRef("test")));
     
     PostingsEnum de = TestUtil.docs(random(), reader, "foo", new BytesRef("test"), null, null, PostingsEnum.FREQS);
     while (de.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java Sat Apr  4 01:56:45 2015
@@ -26,7 +26,6 @@ import java.util.Map;
 import java.util.Random;
 
 import org.apache.lucene.analysis.MockAnalyzer;
-import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.FieldType;
@@ -397,7 +396,7 @@ public class TestStressIndexing2 extends
             while((term2 = termsEnum3.next()) != null) {
               System.out.println("      " + term2.utf8ToString() + ": freq=" + termsEnum3.totalTermFreq());
               dpEnum = termsEnum3.postings(null, dpEnum, PostingsEnum.ALL);
-              if (dpEnum != null) {
+              if (terms3.hasPositions()) {
                 assertTrue(dpEnum.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
                 final int freq = dpEnum.freq();
                 System.out.println("        doc=" + dpEnum.docID() + " freq=" + freq);
@@ -620,8 +619,9 @@ public class TestStressIndexing2 extends
         
         dpEnum1 = termsEnum1.postings(null, dpEnum1, PostingsEnum.ALL);
         dpEnum2 = termsEnum2.postings(null, dpEnum2, PostingsEnum.ALL);
-        if (dpEnum1 != null) {
-          assertNotNull(dpEnum2);
+
+        if (terms1.hasPositions()) {
+          assertTrue(terms2.hasPositions());
           int docID1 = dpEnum1.nextDoc();
           dpEnum2.nextDoc();
           // docIDs are not supposed to be equal
@@ -632,24 +632,17 @@ public class TestStressIndexing2 extends
           int freq1 = dpEnum1.freq();
           int freq2 = dpEnum2.freq();
           assertEquals(freq1, freq2);
-          OffsetAttribute offsetAtt1 = dpEnum1.attributes().getAttribute(OffsetAttribute.class);
-          OffsetAttribute offsetAtt2 = dpEnum2.attributes().getAttribute(OffsetAttribute.class);
-
-          if (offsetAtt1 != null) {
-            assertNotNull(offsetAtt2);
-          } else {
-            assertNull(offsetAtt2);
-          }
 
           for(int posUpto=0;posUpto<freq1;posUpto++) {
             int pos1 = dpEnum1.nextPosition();
             int pos2 = dpEnum2.nextPosition();
             assertEquals(pos1, pos2);
-            if (offsetAtt1 != null) {
-              assertEquals(offsetAtt1.startOffset(),
-                           offsetAtt2.startOffset());
-              assertEquals(offsetAtt1.endOffset(),
-                           offsetAtt2.endOffset());
+            if (terms1.hasOffsets()) {
+              assertTrue(terms2.hasOffsets());
+              assertEquals(dpEnum1.startOffset(),
+                           dpEnum2.startOffset());
+              assertEquals(dpEnum1.endOffset(),
+                           dpEnum2.endOffset());
             }
           }
           assertEquals(DocIdSetIterator.NO_MORE_DOCS, dpEnum1.nextDoc());

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java Sat Apr  4 01:56:45 2015
@@ -292,7 +292,7 @@ public class TestTermVectorsReader exten
       //System.out.println("Term: " + term);
       assertEquals(testTerms[i], term);
       assertNotNull(termsEnum.postings(null, null));
-      assertNull(termsEnum.postings(null, null, PostingsEnum.ALL)); // no pos
+      assertNotNull(termsEnum.postings(null, null, PostingsEnum.ALL));
     }
     reader.close();
   }

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java Sat Apr  4 01:56:45 2015
@@ -504,6 +504,10 @@ public class PostingsHighlighter {
       // if the segment has changed, we must initialize new enums.
       if (leaf != lastLeaf) {
         Terms t = r.terms(field);
+        if (!t.hasOffsets()) {
+          // no offsets available
+          throw new IllegalArgumentException("field '" + field + "' was indexed without offsets, cannot highlight");
+        }
         if (t != null) {
           termsEnum = t.iterator(null);
           postings = new PostingsEnum[terms.length];
@@ -560,10 +564,7 @@ public class PostingsHighlighter {
           continue; // term not found
         }
         de = postings[i] = termsEnum.postings(null, null, PostingsEnum.OFFSETS);
-        if (de == null) {
-          // no positions available
-          throw new IllegalArgumentException("field '" + field + "' was indexed without offsets, cannot highlight");
-        }
+        assert de != null;
         pDoc = de.advance(doc);
       } else {
         pDoc = de.docID();
@@ -599,9 +600,7 @@ public class PostingsHighlighter {
     while ((off = pq.poll()) != null) {
       final PostingsEnum dp = off.dp;
       int start = dp.startOffset();
-      if (start == -1) {
-        throw new IllegalArgumentException("field '" + field + "' was indexed without offsets, cannot highlight");
-      }
+      assert start >= 0;
       int end = dp.endOffset();
       // LUCENE-5166: this hit would span the content limit... however more valid 
       // hits may exist (they are sorted by start). so we pretend like we never 

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java Sat Apr  4 01:56:45 2015
@@ -86,7 +86,7 @@ public class FieldTermStack {
     }
 
     final Terms vector = vectors.terms(fieldName);
-    if (vector == null) {
+    if (vector == null || vector.hasPositions() == false) {
       // null snippet
       return;
     }
@@ -105,11 +105,6 @@ public class FieldTermStack {
         continue;
       }
       dpEnum = termsEnum.postings(null, dpEnum, PostingsEnum.POSITIONS);
-      if (dpEnum == null) {
-        // null snippet
-        return;
-      }
-
       dpEnum.nextDoc();
       
       // For weight look here: http://lucene.apache.org/core/3_6_0/api/core/org/apache/lucene/search/DefaultSimilarity.html

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java Sat Apr  4 01:56:45 2015
@@ -88,13 +88,13 @@ public class SortingLeafReader extends F
 
     @Override
     public TermsEnum iterator(final TermsEnum reuse) throws IOException {
-      return new SortingTermsEnum(in.iterator(reuse), docMap, indexOptions);
+      return new SortingTermsEnum(in.iterator(reuse), docMap, indexOptions, hasPositions());
     }
 
     @Override
     public TermsEnum intersect(CompiledAutomaton compiled, BytesRef startTerm)
         throws IOException {
-      return new SortingTermsEnum(in.intersect(compiled, startTerm), docMap, indexOptions);
+      return new SortingTermsEnum(in.intersect(compiled, startTerm), docMap, indexOptions, hasPositions());
     }
 
   }
@@ -103,11 +103,13 @@ public class SortingLeafReader extends F
 
     final Sorter.DocMap docMap; // pkg-protected to avoid synthetic accessor methods
     private final IndexOptions indexOptions;
+    private final boolean hasPositions;
 
-    public SortingTermsEnum(final TermsEnum in, Sorter.DocMap docMap, IndexOptions indexOptions) {
+    public SortingTermsEnum(final TermsEnum in, Sorter.DocMap docMap, IndexOptions indexOptions, boolean hasPositions) {
       super(in);
       this.docMap = docMap;
       this.indexOptions = indexOptions;
+      this.hasPositions = hasPositions;
     }
 
     Bits newToOld(final Bits liveDocs) {
@@ -132,7 +134,7 @@ public class SortingLeafReader extends F
     @Override
     public PostingsEnum postings(Bits liveDocs, PostingsEnum reuse, final int flags) throws IOException {
 
-      if (PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
+      if (hasPositions && PostingsEnum.featureRequested(flags, PostingsEnum.POSITIONS)) {
         final PostingsEnum inReuse;
         final SortingPostingsEnum wrapReuse;
         if (reuse != null && reuse instanceof SortingPostingsEnum) {
@@ -146,10 +148,6 @@ public class SortingLeafReader extends F
         }
 
         final PostingsEnum inDocsAndPositions = in.postings(newToOld(liveDocs), inReuse, flags);
-        if (inDocsAndPositions == null) {
-          return null;
-        }
-
         // we ignore the fact that offsets may be stored but not asked for,
         // since this code is expected to be used during addIndexes which will
         // ask for everything. if that assumption changes in the future, we can
@@ -328,7 +326,7 @@ public class SortingLeafReader extends F
     }
   }
 
-  static class SortingDocsEnum extends FilterDocsEnum {
+  static class SortingDocsEnum extends FilterPostingsEnum {
 
     private static final class DocFreqSorter extends TimSorter {
 
@@ -489,9 +487,31 @@ public class SortingLeafReader extends F
     PostingsEnum getWrapped() {
       return in;
     }
+    
+    // we buffer up docs/freqs only, don't forward any positions requests to underlying enum
+
+    @Override
+    public int nextPosition() throws IOException {
+      return -1;
+    }
+
+    @Override
+    public int startOffset() throws IOException {
+      return -1;
+    }
+
+    @Override
+    public int endOffset() throws IOException {
+      return -1;
+    }
+
+    @Override
+    public BytesRef getPayload() throws IOException {
+      return null;
+    }
   }
 
-  static class SortingPostingsEnum extends FilterDocsEnum {
+  static class SortingPostingsEnum extends FilterPostingsEnum {
 
     /**
      * A {@link TimSorter} which sorts two parallel arrays of doc IDs and

Modified: lucene/dev/branches/lucene_solr_5_1/lucene/test-framework/src/java/org/apache/lucene/index/AssertingLeafReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_5_1/lucene/test-framework/src/java/org/apache/lucene/index/AssertingLeafReader.java?rev=1671239&r1=1671238&r2=1671239&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_5_1/lucene/test-framework/src/java/org/apache/lucene/index/AssertingLeafReader.java (original)
+++ lucene/dev/branches/lucene_solr_5_1/lucene/test-framework/src/java/org/apache/lucene/index/AssertingLeafReader.java Sat Apr  4 01:56:45 2015
@@ -160,8 +160,10 @@ public class AssertingLeafReader extends
       }
       PostingsEnum docs = super.postings(liveDocs, actualReuse, flags);
       if (docs == null) {
+        assert PostingsEnum.featureRequested(flags, DocsAndPositionsEnum.OLD_NULL_SEMANTICS);
         return null;
-      } else if (docs == actualReuse) {
+      }
+      if (docs == actualReuse) {
         // codec reused, reset asserting state
         ((AssertingPostingsEnum)reuse).reset();
         return reuse;
@@ -282,7 +284,7 @@ public class AssertingLeafReader extends
   static enum DocsEnumState { START, ITERATING, FINISHED };
 
   /** Wraps a docsenum with additional checks */
-  public static class AssertingPostingsEnum extends FilterDocsEnum {
+  public static class AssertingPostingsEnum extends FilterPostingsEnum {
     private final Thread creationThread = Thread.currentThread();
     private DocsEnumState state = DocsEnumState.START;
     int positionCount = 0;