You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ds...@apache.org on 2014/12/19 18:03:22 UTC

svn commit: r1646796 - in /lucene/dev/branches/branch_5x: ./ lucene/ lucene/core/ lucene/core/src/java/org/apache/lucene/util/ lucene/core/src/test/org/apache/lucene/analysis/ lucene/core/src/test/org/apache/lucene/util/

Author: dsmiley
Date: Fri Dec 19 17:03:21 2014
New Revision: 1646796

URL: http://svn.apache.org/r1646796
Log:
LUCENE-6121: QueryBuilder put 2nd reset() to where it was, and add test to ensure no double-reset if there is no term attribute.

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/lucene/   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java
    lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java
    lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/util/TestQueryBuilder.java

Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java?rev=1646796&r1=1646795&r2=1646796&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java Fri Dec 19 17:03:21 2014
@@ -200,8 +200,8 @@ public class QueryBuilder {
     int numTokens = 0;
     int positionCount = 0;
     boolean severalTokensAtSamePosition = false;
-    boolean hasMoreTokens = false;    
-    
+    boolean hasMoreTokens = false;
+
     try (TokenStream source = analyzer.tokenStream(field, queryText)) {
       buffer = new CachingTokenFilter(source);
       buffer.reset();
@@ -225,19 +225,25 @@ public class QueryBuilder {
         } catch (IOException e) {
           // ignore
         }
-
-        // rewind the buffer stream
-        buffer.reset();//will never through on subsequent reset calls
       }
     } catch (IOException e) {
       throw new RuntimeException("Error analyzing query text", e);
     }
 
+    // rewind the buffer stream
+    try {
+      if (numTokens > 0) {
+        buffer.reset();//will never throw; the buffer is cached
+      }
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+
     BytesRef bytes = termAtt == null ? null : termAtt.getBytesRef();
 
-    if (numTokens == 0)
+    if (numTokens == 0) {
       return null;
-    else if (numTokens == 1) {
+    } else if (numTokens == 1) {
       try {
         boolean hasNext = buffer.incrementToken();
         assert hasNext == true;

Modified: lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java?rev=1646796&r1=1646795&r2=1646796&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java Fri Dec 19 17:03:21 2014
@@ -120,6 +120,7 @@ public class TestCachingTokenFilter exte
   }
 
   public void testDoubleResetFails() throws IOException {
+    assumeTrue("We want MockAnalyzer to detect double-reset", TEST_ASSERTS_ENABLED);
     Analyzer analyzer = new MockAnalyzer(random());
     final TokenStream input = analyzer.tokenStream("field", "abc");
     CachingTokenFilter buffer = new CachingTokenFilter(input);

Modified: lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/util/TestQueryBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/util/TestQueryBuilder.java?rev=1646796&r1=1646795&r2=1646796&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/util/TestQueryBuilder.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/util/TestQueryBuilder.java Fri Dec 19 17:03:21 2014
@@ -19,6 +19,7 @@ package org.apache.lucene.util;
 
 import java.io.IOException;
 import java.io.Reader;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.MockAnalyzer;
@@ -355,4 +356,32 @@ public class TestQueryBuilder extends Lu
     expected.setSlop(3);
     assertEquals(expected, builder.createPhraseQuery("field", "中国", 3));
   }
+
+  public void testNoTermAttribute() {
+    //Can't use MockTokenizer because it adds TermAttribute and we don't want that
+    Analyzer analyzer = new Analyzer() {
+      @Override
+      protected TokenStreamComponents createComponents(String fieldName) {
+        return new TokenStreamComponents(
+            new Tokenizer() {
+              boolean wasReset = false;
+              @Override
+              public void reset() throws IOException {
+                super.reset();
+                assertFalse(wasReset);
+                wasReset = true;
+              }
+
+              @Override
+              public boolean incrementToken() throws IOException {
+                assertTrue(wasReset);
+                return false;
+              }
+            }
+        );
+      }
+    };
+    QueryBuilder builder = new QueryBuilder(analyzer);
+    assertNull(builder.createBooleanQuery("field", "whatever"));
+  }
 }