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 2014/06/05 17:54:52 UTC

svn commit: r1600688 [2/3] - in /lucene/dev/trunk: lucene/ lucene/codecs/src/java/org/apache/lucene/codecs/memory/ lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/ lucene/core/src/java/org/apache/lucene/codecs/ lucene/core/src/java/org/apach...

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/FieldComparator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/FieldComparator.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/FieldComparator.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/FieldComparator.java Thu Jun  5 15:54:49 2014
@@ -831,7 +831,7 @@ public abstract class FieldComparator<T>
         if (values[slot] == null) {
           values[slot] = new BytesRef();
         }
-        termsIndex.lookupOrd(ord, values[slot]);
+        values[slot].copyBytes(termsIndex.lookupOrd(ord));
       }
       ords[slot] = ord;
       readerGen[slot] = currentReaderGen;
@@ -960,21 +960,25 @@ public abstract class FieldComparator<T>
 
     // sentinels, just used internally in this comparator
     private static final byte[] MISSING_BYTES = new byte[0];
-    private static final byte[] NON_MISSING_BYTES = new byte[0];
-
-    private BytesRef[] values;
+    // TODO: this is seriously not good, we should nuke this comparator, or
+    // instead we should represent missing as null, or use missingValue from the user...
+    // but it was always this way...
+    private final BytesRef MISSING_BYTESREF = new BytesRef(MISSING_BYTES);
+    
+    private final BytesRef[] values;
+    private final BytesRef[] tempBRs;
     private BinaryDocValues docTerms;
     private Bits docsWithField;
     private final String field;
     private BytesRef bottom;
     private BytesRef topValue;
-    private final BytesRef tempBR = new BytesRef();
 
     // TODO: add missing first/last support here?
 
     /** Sole constructor. */
     TermValComparator(int numHits, String field) {
       values = new BytesRef[numHits];
+      tempBRs = new BytesRef[numHits];
       this.field = field;
     }
 
@@ -982,32 +986,27 @@ public abstract class FieldComparator<T>
     public int compare(int slot1, int slot2) {
       final BytesRef val1 = values[slot1];
       final BytesRef val2 = values[slot2];
-      if (val1.bytes == MISSING_BYTES) {
-        if (val2.bytes == MISSING_BYTES) {
-          return 0;
-        }
-        return -1;
-      } else if (val2.bytes == MISSING_BYTES) {
-        return 1;
-      }
-
-      return val1.compareTo(val2);
+      return compareValues(val1, val2);
     }
 
     @Override
     public int compareBottom(int doc) {
-      docTerms.get(doc, tempBR);
-      setMissingBytes(doc, tempBR);
-      return compareValues(bottom, tempBR);
+      final BytesRef comparableBytes = getComparableBytes(doc, docTerms.get(doc));
+      return compareValues(bottom, comparableBytes);
     }
 
     @Override
     public void copy(int slot, int doc) {
-      if (values[slot] == null) {
-        values[slot] = new BytesRef();
+      final BytesRef comparableBytes = getComparableBytes(doc, docTerms.get(doc));
+      if (comparableBytes == MISSING_BYTESREF) {
+        values[slot] = MISSING_BYTESREF;
+      } else {
+        if (tempBRs[slot] == null) {
+          tempBRs[slot] = new BytesRef();
+        }
+        values[slot] = tempBRs[slot];
+        values[slot].copyBytes(comparableBytes);
       }
-      docTerms.get(doc, values[slot]);
-      setMissingBytes(doc, values[slot]);
     }
 
     @Override
@@ -1027,6 +1026,9 @@ public abstract class FieldComparator<T>
       if (value == null) {
         throw new IllegalArgumentException("value cannot be null");
       }
+      if (value.bytes == MISSING_BYTES) {
+        value = MISSING_BYTESREF;
+      }
       topValue = value;
     }
 
@@ -1038,12 +1040,12 @@ public abstract class FieldComparator<T>
     @Override
     public int compareValues(BytesRef val1, BytesRef val2) {
       // missing always sorts first:
-      if (val1.bytes == MISSING_BYTES) {
-        if (val2.bytes == MISSING_BYTES) {
+      if (val1 == MISSING_BYTESREF) {
+        if (val2 == MISSING_BYTESREF) {
           return 0;
         }
         return -1;
-      } else if (val2.bytes == MISSING_BYTES) {
+      } else if (val2 == MISSING_BYTESREF) {
         return 1;
       }
       return val1.compareTo(val2);
@@ -1051,20 +1053,19 @@ public abstract class FieldComparator<T>
 
     @Override
     public int compareTop(int doc) {
-      docTerms.get(doc, tempBR);
-      setMissingBytes(doc, tempBR);
-      return compareValues(topValue, tempBR);
+      final BytesRef comparableBytes = getComparableBytes(doc, docTerms.get(doc));
+      return compareValues(topValue, comparableBytes);
     }
 
-    private void setMissingBytes(int doc, BytesRef br) {
-      if (br.length == 0) {
-        br.offset = 0;
-        if (docsWithField.get(doc) == false) {
-          br.bytes = MISSING_BYTES;
-        } else {
-          br.bytes = NON_MISSING_BYTES;
-        }
+    /**
+     * Given a document and a term, return the term itself if it exists or
+     * {@link #MISSING_BYTESREF} otherwise.
+     */
+    private BytesRef getComparableBytes(int doc, BytesRef term) {
+      if (term.length == 0 && docsWithField.get(doc) == false) {
+        return MISSING_BYTESREF;
       }
+      return term;
     }
   }
 }

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/SortedSetSelector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/SortedSetSelector.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/SortedSetSelector.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/SortedSetSelector.java Thu Jun  5 15:54:49 2014
@@ -106,8 +106,8 @@ public class SortedSetSelector {
     }
 
     @Override
-    public void lookupOrd(int ord, BytesRef result) {
-      in.lookupOrd(ord, result);
+    public BytesRef lookupOrd(int ord) {
+      return in.lookupOrd(ord);
     }
 
     @Override
@@ -141,8 +141,8 @@ public class SortedSetSelector {
     }
 
     @Override
-    public void lookupOrd(int ord, BytesRef result) {
-      in.lookupOrd(ord, result);
+    public BytesRef lookupOrd(int ord) {
+      return in.lookupOrd(ord);
     }
 
     @Override
@@ -176,8 +176,8 @@ public class SortedSetSelector {
     }
 
     @Override
-    public void lookupOrd(int ord, BytesRef result) {
-      in.lookupOrd(ord, result);
+    public BytesRef lookupOrd(int ord) {
+      return in.lookupOrd(ord);
     }
 
     @Override
@@ -211,8 +211,8 @@ public class SortedSetSelector {
     }
 
     @Override
-    public void lookupOrd(int ord, BytesRef result) {
-      in.lookupOrd(ord, result);
+    public BytesRef lookupOrd(int ord) {
+      return in.lookupOrd(ord);
     }
 
     @Override

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldDocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldDocValuesFormat.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldDocValuesFormat.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldDocValuesFormat.java Thu Jun  5 15:54:49 2014
@@ -110,7 +110,6 @@ public class TestPerFieldDocValuesFormat
     Query query = new TermQuery(new Term("fieldname", "text"));
     TopDocs hits = isearcher.search(query, null, 1);
     assertEquals(1, hits.totalHits);
-    BytesRef scratch = new BytesRef();
     // Iterate through the results:
     for (int i = 0; i < hits.scoreDocs.length; i++) {
       StoredDocument hitDoc = isearcher.doc(hits.scoreDocs[i].doc);
@@ -119,8 +118,8 @@ public class TestPerFieldDocValuesFormat
       NumericDocValues dv = ireader.leaves().get(0).reader().getNumericDocValues("dv1");
       assertEquals(5, dv.get(hits.scoreDocs[i].doc));
       BinaryDocValues dv2 = ireader.leaves().get(0).reader().getBinaryDocValues("dv2");
-      dv2.get(hits.scoreDocs[i].doc, scratch);
-      assertEquals(new BytesRef("hello world"), scratch);
+      final BytesRef term = dv2.get(hits.scoreDocs[i].doc);
+      assertEquals(new BytesRef("hello world"), term);
     }
 
     ireader.close();

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BBinaryDocValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BBinaryDocValues.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BBinaryDocValues.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BBinaryDocValues.java Thu Jun  5 15:54:49 2014
@@ -80,15 +80,14 @@ public class Test2BBinaryDocValues exten
     int expectedValue = 0;
     for (AtomicReaderContext context : r.leaves()) {
       AtomicReader reader = context.reader();
-      BytesRef scratch = new BytesRef();
       BinaryDocValues dv = reader.getBinaryDocValues("dv");
       for (int i = 0; i < reader.maxDoc(); i++) {
         bytes[0] = (byte)(expectedValue >> 24);
         bytes[1] = (byte)(expectedValue >> 16);
         bytes[2] = (byte)(expectedValue >> 8);
         bytes[3] = (byte) expectedValue;
-        dv.get(i, scratch);
-        assertEquals(data, scratch);
+        final BytesRef term = dv.get(i);
+        assertEquals(data, term);
         expectedValue++;
       }
     }
@@ -141,11 +140,10 @@ public class Test2BBinaryDocValues exten
     ByteArrayDataInput input = new ByteArrayDataInput();
     for (AtomicReaderContext context : r.leaves()) {
       AtomicReader reader = context.reader();
-      BytesRef scratch = new BytesRef(bytes);
       BinaryDocValues dv = reader.getBinaryDocValues("dv");
       for (int i = 0; i < reader.maxDoc(); i++) {
-        dv.get(i, scratch);
-        input.reset(scratch.bytes, scratch.offset, scratch.length);
+        final BytesRef term = dv.get(i);
+        input.reset(term.bytes, term.offset, term.length);
         assertEquals(expectedValue % 65535, input.readVInt());
         assertTrue(input.eof());
         expectedValue++;

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BSortedDocValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BSortedDocValues.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BSortedDocValues.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BSortedDocValues.java Thu Jun  5 15:54:49 2014
@@ -78,13 +78,12 @@ public class Test2BSortedDocValues exten
     int expectedValue = 0;
     for (AtomicReaderContext context : r.leaves()) {
       AtomicReader reader = context.reader();
-      BytesRef scratch = new BytesRef();
       BinaryDocValues dv = reader.getSortedDocValues("dv");
       for (int i = 0; i < reader.maxDoc(); i++) {
         bytes[0] = (byte)(expectedValue >> 8);
         bytes[1] = (byte) expectedValue;
-        dv.get(i, scratch);
-        assertEquals(data, scratch);
+        final BytesRef term = dv.get(i);
+        assertEquals(data, term);
         expectedValue++;
       }
     }
@@ -144,8 +143,8 @@ public class Test2BSortedDocValues exten
         bytes[2] = (byte) (counter >> 8);
         bytes[3] = (byte) counter;
         counter++;
-        dv.get(i, scratch);
-        assertEquals(data, scratch);
+        final BytesRef term = dv.get(i);
+        assertEquals(data, term);
       }
     }
     

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java Thu Jun  5 15:54:49 2014
@@ -524,20 +524,19 @@ public class TestBackwardsCompatibility 
             (byte)(id >>> 24), (byte)(id >>> 16),(byte)(id >>> 8),(byte)id
         };
         BytesRef expectedRef = new BytesRef(bytes);
-        BytesRef scratch = new BytesRef();
         
-        dvBytesDerefFixed.get(i, scratch);
-        assertEquals(expectedRef, scratch);
-        dvBytesDerefVar.get(i, scratch);
-        assertEquals(expectedRef, scratch);
-        dvBytesSortedFixed.get(i, scratch);
-        assertEquals(expectedRef, scratch);
-        dvBytesSortedVar.get(i, scratch);
-        assertEquals(expectedRef, scratch);
-        dvBytesStraightFixed.get(i, scratch);
-        assertEquals(expectedRef, scratch);
-        dvBytesStraightVar.get(i, scratch);
-        assertEquals(expectedRef, scratch);
+        BytesRef term = dvBytesDerefFixed.get(i);
+        assertEquals(expectedRef, term);
+        term = dvBytesDerefVar.get(i);
+        assertEquals(expectedRef, term);
+        term = dvBytesSortedFixed.get(i);
+        assertEquals(expectedRef, term);
+        term = dvBytesSortedVar.get(i);
+        assertEquals(expectedRef, term);
+        term = dvBytesStraightFixed.get(i);
+        assertEquals(expectedRef, term);
+        term = dvBytesStraightVar.get(i);
+        assertEquals(expectedRef, term);
         
         assertEquals((double)id, Double.longBitsToDouble(dvDouble.get(i)), 0D);
         assertEquals((float)id, Float.intBitsToFloat((int)dvFloat.get(i)), 0F);
@@ -549,8 +548,8 @@ public class TestBackwardsCompatibility 
           dvSortedSet.setDocument(i);
           long ord = dvSortedSet.nextOrd();
           assertEquals(SortedSetDocValues.NO_MORE_ORDS, dvSortedSet.nextOrd());
-          dvSortedSet.lookupOrd(ord, scratch);
-          assertEquals(expectedRef, scratch);
+          term = dvSortedSet.lookupOrd(ord);
+          assertEquals(expectedRef, term);
         }
       }
     }
@@ -1055,9 +1054,8 @@ public class TestBackwardsCompatibility 
   private void assertBinaryDocValues(AtomicReader r, String f, String cf) throws IOException {
     BinaryDocValues bdvf = r.getBinaryDocValues(f);
     BinaryDocValues bdvcf = r.getBinaryDocValues(cf);
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < r.maxDoc(); i++) {
-      assertEquals(TestBinaryDocValuesUpdates.getValue(bdvcf, i, scratch ), TestBinaryDocValuesUpdates.getValue(bdvf, i, scratch)*2);
+      assertEquals(TestBinaryDocValuesUpdates.getValue(bdvcf, i), TestBinaryDocValuesUpdates.getValue(bdvf, i)*2);
     }
   }
   

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java Thu Jun  5 15:54:49 2014
@@ -59,13 +59,13 @@ import com.carrotsearch.randomizedtestin
 @SuppressWarnings("resource")
 public class TestBinaryDocValuesUpdates extends LuceneTestCase {
 
-  static long getValue(BinaryDocValues bdv, int idx, BytesRef scratch) {
-    bdv.get(idx, scratch);
-    idx = scratch.offset;
-    byte b = scratch.bytes[idx++];
+  static long getValue(BinaryDocValues bdv, int idx) {
+    BytesRef term = bdv.get(idx);
+    idx = term.offset;
+    byte b = term.bytes[idx++];
     long value = b & 0x7FL;
     for (int shift = 7; (b & 0x80L) != 0; shift += 7) {
-      b = scratch.bytes[idx++];
+      b = term.bytes[idx++];
       value |= (b & 0x7FL) << shift;
     }
     return value;
@@ -139,9 +139,8 @@ public class TestBinaryDocValuesUpdates 
     assertEquals(1, reader.leaves().size());
     AtomicReader r = reader.leaves().get(0).reader();
     BinaryDocValues bdv = r.getBinaryDocValues("val");
-    BytesRef scratch = new BytesRef();
-    assertEquals(2, getValue(bdv, 0, scratch));
-    assertEquals(2, getValue(bdv, 1, scratch));
+    assertEquals(2, getValue(bdv, 0));
+    assertEquals(2, getValue(bdv, 1));
     reader.close();
     
     dir.close();
@@ -179,14 +178,13 @@ public class TestBinaryDocValuesUpdates 
       writer.shutdown();
     }
     
-    BytesRef scratch = new BytesRef();
     for (AtomicReaderContext context : reader.leaves()) {
       AtomicReader r = context.reader();
       BinaryDocValues bdv = r.getBinaryDocValues("val");
       assertNotNull(bdv);
       for (int i = 0; i < r.maxDoc(); i++) {
         long expected = expectedValues[i + context.docBase];
-        long actual = getValue(bdv, i, scratch);
+        long actual = getValue(bdv, i);
         assertEquals(expected, actual);
       }
     }
@@ -222,11 +220,10 @@ public class TestBinaryDocValuesUpdates 
     assertNotNull(reader2);
     assertTrue(reader1 != reader2);
 
-    BytesRef scratch = new BytesRef();
     BinaryDocValues bdv1 = reader1.leaves().get(0).reader().getBinaryDocValues("val");
     BinaryDocValues bdv2 = reader2.leaves().get(0).reader().getBinaryDocValues("val");
-    assertEquals(1, getValue(bdv1, 0, scratch));
-    assertEquals(10, getValue(bdv2, 0, scratch));
+    assertEquals(1, getValue(bdv1, 0));
+    assertEquals(10, getValue(bdv2, 0));
 
     writer.shutdown();
     IOUtils.close(reader1, reader2, dir);
@@ -274,9 +271,8 @@ public class TestBinaryDocValuesUpdates 
     
     long[] expectedValues = new long[] { 1, 2, 3, 17, 5, 17};
     BinaryDocValues bdv = slow.getBinaryDocValues("val");
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < expectedValues.length; i++) {
-      assertEquals(expectedValues[i], getValue(bdv, i, scratch));
+      assertEquals(expectedValues[i], getValue(bdv, i));
     }
     
     reader.close();
@@ -311,7 +307,7 @@ public class TestBinaryDocValuesUpdates 
     
     AtomicReader r = reader.leaves().get(0).reader();
     assertFalse(r.getLiveDocs().get(0));
-    assertEquals(17, getValue(r.getBinaryDocValues("val"), 1, new BytesRef()));
+    assertEquals(17, getValue(r.getBinaryDocValues("val"), 1));
     
     reader.close();
     dir.close();
@@ -345,7 +341,7 @@ public class TestBinaryDocValuesUpdates 
     
     AtomicReader r = reader.leaves().get(0).reader();
     assertFalse(r.getLiveDocs().get(0));
-    assertEquals(1, getValue(r.getBinaryDocValues("val"), 0, new BytesRef())); // deletes are currently applied first
+    assertEquals(1, getValue(r.getBinaryDocValues("val"), 0)); // deletes are currently applied first
     
     reader.close();
     dir.close();
@@ -379,20 +375,19 @@ public class TestBinaryDocValuesUpdates 
     BinaryDocValues bdv = r.getBinaryDocValues("bdv");
     SortedDocValues sdv = r.getSortedDocValues("sdv");
     SortedSetDocValues ssdv = r.getSortedSetDocValues("ssdv");
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < r.maxDoc(); i++) {
       assertEquals(i, ndv.get(i));
-      assertEquals(17, getValue(bdv, i, scratch));
-      sdv.get(i, scratch);
-      assertEquals(new BytesRef(Integer.toString(i)), scratch);
+      assertEquals(17, getValue(bdv, i));
+      BytesRef term = sdv.get(i);
+      assertEquals(new BytesRef(Integer.toString(i)), term);
       ssdv.setDocument(i);
       long ord = ssdv.nextOrd();
-      ssdv.lookupOrd(ord, scratch);
-      assertEquals(i, Integer.parseInt(scratch.utf8ToString()));
+      term = ssdv.lookupOrd(ord);
+      assertEquals(i, Integer.parseInt(term.utf8ToString()));
       if (i != 0) {
         ord = ssdv.nextOrd();
-        ssdv.lookupOrd(ord, scratch);
-        assertEquals(i * 2, Integer.parseInt(scratch.utf8ToString()));
+        term = ssdv.lookupOrd(ord);
+        assertEquals(i * 2, Integer.parseInt(term.utf8ToString()));
       }
       assertEquals(SortedSetDocValues.NO_MORE_ORDS, ssdv.nextOrd());
     }
@@ -425,10 +420,9 @@ public class TestBinaryDocValuesUpdates 
     
     BinaryDocValues bdv1 = r.getBinaryDocValues("bdv1");
     BinaryDocValues bdv2 = r.getBinaryDocValues("bdv2");
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < r.maxDoc(); i++) {
-      assertEquals(17, getValue(bdv1, i, scratch));
-      assertEquals(i, getValue(bdv2, i, scratch));
+      assertEquals(17, getValue(bdv1, i));
+      assertEquals(i, getValue(bdv2, i));
     }
     
     reader.close();
@@ -457,9 +451,8 @@ public class TestBinaryDocValuesUpdates 
     final DirectoryReader reader = DirectoryReader.open(dir);
     AtomicReader r = reader.leaves().get(0).reader();
     BinaryDocValues bdv = r.getBinaryDocValues("bdv");
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < r.maxDoc(); i++) {
-      assertEquals(17, getValue(bdv, i, scratch));
+      assertEquals(17, getValue(bdv, i));
     }
     
     reader.close();
@@ -525,11 +518,10 @@ public class TestBinaryDocValuesUpdates 
     AtomicReader r = SlowCompositeReaderWrapper.wrap(reader);
     BinaryDocValues bdv = r.getBinaryDocValues("bdv");
     SortedDocValues sdv = r.getSortedDocValues("sorted");
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < r.maxDoc(); i++) {
-      assertEquals(17, getValue(bdv, i, scratch));
-      sdv.get(i, scratch);
-      assertEquals(new BytesRef("value"), scratch);
+      assertEquals(17, getValue(bdv, i));
+      BytesRef term = sdv.get(i);
+      assertEquals(new BytesRef("value"), term);
     }
     
     reader.close();
@@ -555,9 +547,8 @@ public class TestBinaryDocValuesUpdates 
     final DirectoryReader reader = DirectoryReader.open(dir);
     final AtomicReader r = SlowCompositeReaderWrapper.wrap(reader);
     BinaryDocValues bdv = r.getBinaryDocValues("bdv");
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < r.maxDoc(); i++) {
-      assertEquals(3, getValue(bdv, i, scratch));
+      assertEquals(3, getValue(bdv, i));
     }
     reader.close();
     dir.close();
@@ -624,9 +615,8 @@ public class TestBinaryDocValuesUpdates 
       assertNull("index should have no deletes after forceMerge", r.getLiveDocs());
       BinaryDocValues bdv = r.getBinaryDocValues("bdv");
       assertNotNull(bdv);
-      BytesRef scratch = new BytesRef();
       for (int i = 0; i < r.maxDoc(); i++) {
-        assertEquals(value, getValue(bdv, i, scratch));
+        assertEquals(value, getValue(bdv, i));
       }
       reader.close();
     }
@@ -656,9 +646,8 @@ public class TestBinaryDocValuesUpdates 
     final DirectoryReader reader = DirectoryReader.open(dir);
     final AtomicReader r = SlowCompositeReaderWrapper.wrap(reader);
     BinaryDocValues bdv = r.getBinaryDocValues("bdv");
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < r.maxDoc(); i++) {
-      assertEquals(3, getValue(bdv, i, scratch));
+      assertEquals(3, getValue(bdv, i));
     }
     reader.close();
     dir.close();
@@ -728,7 +717,6 @@ public class TestBinaryDocValuesUpdates 
       reader = newReader;
 //      System.out.println("[" + Thread.currentThread().getName() + "]: reopened reader: " + reader);
       assertTrue(reader.numDocs() > 0); // we delete at most one document per round
-      BytesRef scratch = new BytesRef();
       for (AtomicReaderContext context : reader.leaves()) {
         AtomicReader r = context.reader();
 //        System.out.println(((SegmentReader) r).getSegmentName());
@@ -743,7 +731,7 @@ public class TestBinaryDocValuesUpdates 
             if (liveDocs == null || liveDocs.get(doc)) {
 //              System.out.println("doc=" + (doc + context.docBase) + " f='" + f + "' vslue=" + getValue(bdv, doc, scratch));
               assertTrue(docsWithField.get(doc));
-              assertEquals("invalid value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], getValue(bdv, doc, scratch));
+              assertEquals("invalid value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], getValue(bdv, doc));
             }
           }
         }
@@ -793,17 +781,16 @@ public class TestBinaryDocValuesUpdates 
     writer.shutdown();
 
     DirectoryReader reader = DirectoryReader.open(dir);
-    BytesRef scratch = new BytesRef();
     for (AtomicReaderContext context : reader.leaves()) {
       AtomicReader r = context.reader();
       BinaryDocValues bdv = r.getBinaryDocValues("bdv");
       Bits docsWithField = r.getDocsWithField("bdv");
       assertNotNull(docsWithField);
       assertTrue(docsWithField.get(0));
-      assertEquals(5L, getValue(bdv, 0, scratch));
+      assertEquals(5L, getValue(bdv, 0));
       assertFalse(docsWithField.get(1));
-      bdv.get(1, scratch);
-      assertEquals(0, scratch.length);
+      BytesRef term = bdv.get(1);
+      assertEquals(0, term.length);
     }
     reader.close();
 
@@ -839,12 +826,11 @@ public class TestBinaryDocValuesUpdates 
     writer.shutdown();
 
     DirectoryReader reader = DirectoryReader.open(dir);
-    BytesRef scratch = new BytesRef();
     for (AtomicReaderContext context : reader.leaves()) {
       AtomicReader r = context.reader();
       BinaryDocValues bdv = r.getBinaryDocValues("bdv");
       for (int i = 0; i < r.maxDoc(); i++) {
-        assertEquals(5L, getValue(bdv, i, scratch));
+        assertEquals(5L, getValue(bdv, i));
       }
     }
     reader.close();
@@ -869,7 +855,7 @@ public class TestBinaryDocValuesUpdates 
     
     DirectoryReader r = DirectoryReader.open(dir);
     BinaryDocValues bdv = r.leaves().get(0).reader().getBinaryDocValues("f");
-    assertEquals(17, getValue(bdv, 0, new BytesRef()));
+    assertEquals(17, getValue(bdv, 0));
     r.close();
     
     dir.close();
@@ -1013,7 +999,6 @@ public class TestBinaryDocValuesUpdates 
     writer.shutdown();
     
     DirectoryReader reader = DirectoryReader.open(dir);
-    BytesRef scratch = new BytesRef();
     for (AtomicReaderContext context : reader.leaves()) {
       AtomicReader r = context.reader();
       for (int i = 0; i < numFields; i++) {
@@ -1026,7 +1011,7 @@ public class TestBinaryDocValuesUpdates 
           if (liveDocs == null || liveDocs.get(j)) {
             assertTrue(docsWithBdv.get(j));
             assertTrue(docsWithControl.get(j));
-            assertEquals(getValue(control, j, scratch), getValue(bdv, j, scratch) * 2);
+            assertEquals(getValue(control, j), getValue(bdv, j) * 2);
           }
         }
       }
@@ -1053,7 +1038,6 @@ public class TestBinaryDocValuesUpdates 
     }
     
     int numGens = atLeast(5);
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < numGens; i++) {
       int doc = random().nextInt(numDocs);
       Term t = new Term("id", "doc" + doc);
@@ -1065,7 +1049,7 @@ public class TestBinaryDocValuesUpdates 
         BinaryDocValues fbdv = r.getBinaryDocValues("f");
         BinaryDocValues cfbdv = r.getBinaryDocValues("cf");
         for (int j = 0; j < r.maxDoc(); j++) {
-          assertEquals(getValue(cfbdv, j, scratch), getValue(fbdv, j, scratch) * 2);
+          assertEquals(getValue(cfbdv, j), getValue(fbdv, j) * 2);
         }
       }
       reader.close();
@@ -1114,11 +1098,10 @@ public class TestBinaryDocValuesUpdates 
     AtomicReader r = SlowCompositeReaderWrapper.wrap(reader);
     BinaryDocValues f1 = r.getBinaryDocValues("f1");
     BinaryDocValues f2 = r.getBinaryDocValues("f2");
-    BytesRef scratch = new BytesRef();
-    assertEquals(12L, getValue(f1, 0, scratch));
-    assertEquals(13L, getValue(f2, 0, scratch));
-    assertEquals(17L, getValue(f1, 1, scratch));
-    assertEquals(2L, getValue(f2, 1, scratch));
+    assertEquals(12L, getValue(f1, 0));
+    assertEquals(13L, getValue(f2, 0));
+    assertEquals(17L, getValue(f1, 1));
+    assertEquals(2L, getValue(f2, 1));
     reader.close();
     dir.close();
   }
@@ -1167,13 +1150,12 @@ public class TestBinaryDocValuesUpdates 
     writer.shutdown();
     
     DirectoryReader reader = DirectoryReader.open(dir2);
-    BytesRef scratch = new BytesRef();
     for (AtomicReaderContext context : reader.leaves()) {
       AtomicReader r = context.reader();
       BinaryDocValues bdv = r.getBinaryDocValues("bdv");
       BinaryDocValues control = r.getBinaryDocValues("control");
       for (int i = 0; i < r.maxDoc(); i++) {
-        assertEquals(getValue(bdv, i, scratch)*2, getValue(control, i, scratch));
+        assertEquals(getValue(bdv, i)*2, getValue(control, i));
       }
     }
     reader.close();
@@ -1263,14 +1245,13 @@ public class TestBinaryDocValuesUpdates 
     writer.shutdown();
     
     DirectoryReader reader = DirectoryReader.open(dir);
-    BytesRef scratch = new BytesRef();
     for (AtomicReaderContext context : reader.leaves()) {
       for (int i = 0; i < numBinaryFields; i++) {
         AtomicReader r = context.reader();
         BinaryDocValues f = r.getBinaryDocValues("f" + i);
         BinaryDocValues cf = r.getBinaryDocValues("cf" + i);
         for (int j = 0; j < r.maxDoc(); j++) {
-          assertEquals("reader=" + r + ", field=f" + i + ", doc=" + j, getValue(cf, j, scratch), getValue(f, j, scratch) * 2);
+          assertEquals("reader=" + r + ", field=f" + i + ", doc=" + j, getValue(cf, j), getValue(f, j) * 2);
         }
       }
     }
@@ -1298,9 +1279,8 @@ public class TestBinaryDocValuesUpdates 
     writer.shutdown();
     
     DirectoryReader reader = DirectoryReader.open(dir);
-    BytesRef scratch = new BytesRef();
-    assertEquals(4, getValue(reader.leaves().get(0).reader().getBinaryDocValues("f1"), 0, scratch));
-    assertEquals(3, getValue(reader.leaves().get(0).reader().getBinaryDocValues("f2"), 0, scratch));
+    assertEquals(4, getValue(reader.leaves().get(0).reader().getBinaryDocValues("f1"), 0));
+    assertEquals(3, getValue(reader.leaves().get(0).reader().getBinaryDocValues("f2"), 0));
     reader.close();
     
     dir.close();
@@ -1324,7 +1304,7 @@ public class TestBinaryDocValuesUpdates 
     
     DirectoryReader reader = DirectoryReader.open(dir);
     assertEquals(1, reader.leaves().size());
-    assertEquals(2L, getValue(reader.leaves().get(0).reader().getBinaryDocValues("f1"), 0, new BytesRef()));
+    assertEquals(2L, getValue(reader.leaves().get(0).reader().getBinaryDocValues("f1"), 0));
     reader.close();
     
     dir.close();
@@ -1346,7 +1326,7 @@ public class TestBinaryDocValuesUpdates 
     
     DirectoryReader reader = DirectoryReader.open(dir);
     assertEquals(1, reader.leaves().size());
-    assertEquals(1L, getValue(reader.leaves().get(0).reader().getBinaryDocValues("f1"), 0, new BytesRef()));
+    assertEquals(1L, getValue(reader.leaves().get(0).reader().getBinaryDocValues("f1"), 0));
     reader.close();
     
     dir.close();

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesFormat.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesFormat.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesFormat.java Thu Jun  5 15:54:49 2014
@@ -19,7 +19,6 @@ package org.apache.lucene.index;
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.util.TestUtil;
-import org.apache.lucene.util.TestUtil;
 
 /** Tests the codec configuration defined by LuceneTestCase randomly
  *  (typically a mix across different fields).

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java Thu Jun  5 15:54:49 2014
@@ -177,13 +177,12 @@ public class TestDocValuesIndexing exten
     DirectoryReader r = w.getReader();
     BinaryDocValues s = DocValues.getSorted(getOnlySegmentReader(r), "field");
 
-    BytesRef bytes1 = new BytesRef();
-    s.get(0, bytes1);
+    BytesRef bytes1 = s.get(0);
     assertEquals(bytes.length, bytes1.length);
     bytes[0] = 0;
     assertEquals(b, bytes1);
     
-    s.get(1, bytes1);
+    bytes1 = s.get(1);
     assertEquals(bytes.length, bytes1.length);
     bytes[0] = 1;
     assertEquals(b, bytes1);

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java Thu Jun  5 15:54:49 2014
@@ -2091,7 +2091,7 @@ public class TestIndexWriterExceptions e
         for (int i = 0; i < reader.maxDoc(); i++) {
           if (liveDocs == null || liveDocs.get(i)) {
             assertEquals("doc=" + (docBase + i), cf.get(i), f.get(i) * 2);
-            assertEquals("doc=" + (docBase + i), TestBinaryDocValuesUpdates.getValue(bcf, i, scratch), TestBinaryDocValuesUpdates.getValue(bf, i, scratch) * 2);
+            assertEquals("doc=" + (docBase + i), TestBinaryDocValuesUpdates.getValue(bcf, i), TestBinaryDocValuesUpdates.getValue(bf, i) * 2);
           }
         }
       }

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java Thu Jun  5 15:54:49 2014
@@ -116,7 +116,6 @@ public class TestMixedDocValuesUpdates e
       reader = newReader;
 //      System.out.println("[" + Thread.currentThread().getName() + "]: reopened reader: " + reader);
       assertTrue(reader.numDocs() > 0); // we delete at most one document per round
-      BytesRef scratch = new BytesRef();
       for (AtomicReaderContext context : reader.leaves()) {
         AtomicReader r = context.reader();
 //        System.out.println(((SegmentReader) r).getSegmentName());
@@ -141,7 +140,7 @@ public class TestMixedDocValuesUpdates e
               if (field < numNDVFields) {
                 assertEquals("invalid value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], ndv.get(doc));
               } else {
-                assertEquals("invalid value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], TestBinaryDocValuesUpdates.getValue(bdv, doc, scratch));
+                assertEquals("invalid value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], TestBinaryDocValuesUpdates.getValue(bdv, doc));
               }
             }
           }
@@ -275,7 +274,7 @@ public class TestMixedDocValuesUpdates e
             assertTrue(docsWithBdv.get(j));
             assertTrue(docsWithControl.get(j));
             long ctrlValue = control.get(j);
-            long bdvValue = TestBinaryDocValuesUpdates.getValue(bdv, j, scratch) * 2;
+            long bdvValue = TestBinaryDocValuesUpdates.getValue(bdv, j) * 2;
 //              if (ctrlValue != bdvValue) {
 //                System.out.println("seg=" + r + ", f=f" + i + ", doc=" + j + ", group=" + r.document(j).get("updKey") + ", ctrlValue=" + ctrlValue + ", bdvBytes=" + scratch);
 //              }
@@ -306,7 +305,6 @@ public class TestMixedDocValuesUpdates e
     }
     
     int numGens = atLeast(5);
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < numGens; i++) {
       int doc = random().nextInt(numDocs);
       Term t = new Term("id", "doc" + doc);
@@ -319,7 +317,7 @@ public class TestMixedDocValuesUpdates e
         BinaryDocValues fbdv = r.getBinaryDocValues("f");
         NumericDocValues cfndv = r.getNumericDocValues("cf");
         for (int j = 0; j < r.maxDoc(); j++) {
-          assertEquals(cfndv.get(j), TestBinaryDocValuesUpdates.getValue(fbdv, j, scratch) * 2);
+          assertEquals(cfndv.get(j), TestBinaryDocValuesUpdates.getValue(fbdv, j) * 2);
         }
       }
       reader.close();
@@ -381,14 +379,13 @@ public class TestMixedDocValuesUpdates e
     writer.shutdown();
     
     DirectoryReader reader = DirectoryReader.open(dir);
-    BytesRef scratch = new BytesRef();
     for (AtomicReaderContext context : reader.leaves()) {
       for (int i = 0; i < numBinaryFields; i++) {
         AtomicReader r = context.reader();
         BinaryDocValues f = r.getBinaryDocValues("f" + i);
         NumericDocValues cf = r.getNumericDocValues("cf" + i);
         for (int j = 0; j < r.maxDoc(); j++) {
-          assertEquals("reader=" + r + ", field=f" + i + ", doc=" + j, cf.get(j), TestBinaryDocValuesUpdates.getValue(f, j, scratch) * 2);
+          assertEquals("reader=" + r + ", field=f" + i + ", doc=" + j, cf.get(j), TestBinaryDocValuesUpdates.getValue(f, j) * 2);
         }
       }
     }

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java Thu Jun  5 15:54:49 2014
@@ -96,11 +96,9 @@ public class TestMultiDocValues extends 
     
     BinaryDocValues multi = MultiDocValues.getBinaryValues(ir, "bytes");
     BinaryDocValues single = merged.getBinaryDocValues("bytes");
-    BytesRef actual = new BytesRef();
-    BytesRef expected = new BytesRef();
     for (int i = 0; i < numDocs; i++) {
-      single.get(i, expected);
-      multi.get(i, actual);
+      final BytesRef expected = BytesRef.deepCopyOf(single.get(i));
+      final BytesRef actual = multi.get(i);
       assertEquals(expected, actual);
     }
     ir.close();
@@ -139,14 +137,12 @@ public class TestMultiDocValues extends 
     SortedDocValues multi = MultiDocValues.getSortedValues(ir, "bytes");
     SortedDocValues single = merged.getSortedDocValues("bytes");
     assertEquals(single.getValueCount(), multi.getValueCount());
-    BytesRef actual = new BytesRef();
-    BytesRef expected = new BytesRef();
     for (int i = 0; i < numDocs; i++) {
       // check ord
       assertEquals(single.getOrd(i), multi.getOrd(i));
       // check value
-      single.get(i, expected);
-      multi.get(i, actual);
+      final BytesRef expected = BytesRef.deepCopyOf(single.get(i));
+      final BytesRef actual = multi.get(i);
       assertEquals(expected, actual);
     }
     ir.close();
@@ -183,14 +179,12 @@ public class TestMultiDocValues extends 
     SortedDocValues multi = MultiDocValues.getSortedValues(ir, "bytes");
     SortedDocValues single = merged.getSortedDocValues("bytes");
     assertEquals(single.getValueCount(), multi.getValueCount());
-    BytesRef actual = new BytesRef();
-    BytesRef expected = new BytesRef();
     for (int i = 0; i < numDocs; i++) {
       // check ord
       assertEquals(single.getOrd(i), multi.getOrd(i));
       // check ord value
-      single.get(i, expected);
-      multi.get(i, actual);
+      final BytesRef expected = BytesRef.deepCopyOf(single.get(i));
+      final BytesRef actual = multi.get(i);
       assertEquals(expected, actual);
     }
     ir.close();
@@ -230,12 +224,10 @@ public class TestMultiDocValues extends 
       assertNull(single);
     } else {
       assertEquals(single.getValueCount(), multi.getValueCount());
-      BytesRef actual = new BytesRef();
-      BytesRef expected = new BytesRef();
       // check values
       for (long i = 0; i < single.getValueCount(); i++) {
-        single.lookupOrd(i, expected);
-        multi.lookupOrd(i, actual);
+        final BytesRef expected = BytesRef.deepCopyOf(single.lookupOrd(i));
+        final BytesRef actual = multi.lookupOrd(i);
         assertEquals(expected, actual);
       }
       // check ord list
@@ -295,12 +287,10 @@ public class TestMultiDocValues extends 
       assertNull(single);
     } else {
       assertEquals(single.getValueCount(), multi.getValueCount());
-      BytesRef actual = new BytesRef();
-      BytesRef expected = new BytesRef();
       // check values
       for (long i = 0; i < single.getValueCount(); i++) {
-        single.lookupOrd(i, expected);
-        multi.lookupOrd(i, actual);
+        final BytesRef expected = BytesRef.deepCopyOf(single.lookupOrd(i));
+        final BytesRef actual = multi.lookupOrd(i);
         assertEquals(expected, actual);
       }
       // check ord list

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java Thu Jun  5 15:54:49 2014
@@ -356,21 +356,20 @@ public class TestNumericDocValuesUpdates
     BinaryDocValues bdv = r.getBinaryDocValues("bdv");
     SortedDocValues sdv = r.getSortedDocValues("sdv");
     SortedSetDocValues ssdv = r.getSortedSetDocValues("ssdv");
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < r.maxDoc(); i++) {
       assertEquals(17, ndv.get(i));
-      bdv.get(i, scratch);
-      assertEquals(new BytesRef(Integer.toString(i)), scratch);
-      sdv.get(i, scratch);
-      assertEquals(new BytesRef(Integer.toString(i)), scratch);
+      BytesRef term = bdv.get(i);
+      assertEquals(new BytesRef(Integer.toString(i)), term);
+      term = sdv.get(i);
+      assertEquals(new BytesRef(Integer.toString(i)), term);
       ssdv.setDocument(i);
       long ord = ssdv.nextOrd();
-      ssdv.lookupOrd(ord, scratch);
-      assertEquals(i, Integer.parseInt(scratch.utf8ToString()));
+      term = ssdv.lookupOrd(ord);
+      assertEquals(i, Integer.parseInt(term.utf8ToString()));
       if (i != 0) {
         ord = ssdv.nextOrd();
-        ssdv.lookupOrd(ord, scratch);
-        assertEquals(i * 2, Integer.parseInt(scratch.utf8ToString()));
+        term = ssdv.lookupOrd(ord);
+        assertEquals(i * 2, Integer.parseInt(term.utf8ToString()));
       }
       assertEquals(SortedSetDocValues.NO_MORE_ORDS, ssdv.nextOrd());
     }
@@ -504,11 +503,10 @@ public class TestNumericDocValuesUpdates
     AtomicReader r = SlowCompositeReaderWrapper.wrap(reader);
     NumericDocValues ndv = r.getNumericDocValues("ndv");
     SortedDocValues sdv = r.getSortedDocValues("sorted");
-    BytesRef scratch = new BytesRef();
     for (int i = 0; i < r.maxDoc(); i++) {
       assertEquals(17, ndv.get(i));
-      sdv.get(i, scratch);
-      assertEquals(new BytesRef("value"), scratch);
+      final BytesRef term = sdv.get(i);
+      assertEquals(new BytesRef("value"), term);
     }
     
     reader.close();

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java Thu Jun  5 15:54:49 2014
@@ -148,7 +148,6 @@ class ElevationComparatorSource extends 
 
      SortedDocValues idIndex;
      private final int[] values = new int[numHits];
-     private final BytesRef tempBR = new BytesRef();
      int bottomVal;
 
      @Override
@@ -171,8 +170,8 @@ class ElevationComparatorSource extends 
        if (ord == -1) {
          return 0;
        } else {
-         idIndex.lookupOrd(ord, tempBR);
-         Integer prio = priority.get(tempBR);
+         final BytesRef term = idIndex.lookupOrd(ord);
+         Integer prio = priority.get(term);
          return prio == null ? 0 : prio.intValue();
        }
      }

Modified: lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/sortedset/DefaultSortedSetDocValuesReaderState.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/sortedset/DefaultSortedSetDocValuesReaderState.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/sortedset/DefaultSortedSetDocValuesReaderState.java (original)
+++ lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/sortedset/DefaultSortedSetDocValuesReaderState.java Thu Jun  5 15:54:49 2014
@@ -73,17 +73,16 @@ public class DefaultSortedSetDocValuesRe
     // each term/ord it's assigning as it goes...
     String lastDim = null;
     int startOrd = -1;
-    BytesRef spare = new BytesRef();
 
     // TODO: this approach can work for full hierarchy?;
     // TaxoReader can't do this since ords are not in
     // "sorted order" ... but we should generalize this to
     // support arbitrary hierarchy:
     for(int ord=0;ord<valueCount;ord++) {
-      dv.lookupOrd(ord, spare);
-      String[] components = FacetsConfig.stringToPath(spare.utf8ToString());
+      final BytesRef term = dv.lookupOrd(ord);
+      String[] components = FacetsConfig.stringToPath(term.utf8ToString());
       if (components.length != 2) {
-        throw new IllegalArgumentException("this class can only handle 2 level hierarchy (dim/value); got: " + Arrays.toString(components) + " " + spare.utf8ToString());
+        throw new IllegalArgumentException("this class can only handle 2 level hierarchy (dim/value); got: " + Arrays.toString(components) + " " + term.utf8ToString());
       }
       if (!components[0].equals(lastDim)) {
         if (lastDim != null) {

Modified: lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/sortedset/SortedSetDocValuesFacetCounts.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/sortedset/SortedSetDocValuesFacetCounts.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/sortedset/SortedSetDocValuesFacetCounts.java (original)
+++ lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/sortedset/SortedSetDocValuesFacetCounts.java Thu Jun  5 15:54:49 2014
@@ -131,13 +131,11 @@ public class SortedSetDocValuesFacetCoun
       return null;
     }
 
-    BytesRef scratch = new BytesRef();
-
     LabelAndValue[] labelValues = new LabelAndValue[q.size()];
     for(int i=labelValues.length-1;i>=0;i--) {
       TopOrdAndIntQueue.OrdAndValue ordAndValue = q.pop();
-      dv.lookupOrd(ordAndValue.ord, scratch);
-      String[] parts = FacetsConfig.stringToPath(scratch.utf8ToString());
+      final BytesRef term = dv.lookupOrd(ordAndValue.ord);
+      String[] parts = FacetsConfig.stringToPath(term.utf8ToString());
       labelValues[i] = new LabelAndValue(parts[1], ordAndValue.value);
     }
 

Modified: lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/DocValuesOrdinalsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/DocValuesOrdinalsReader.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/DocValuesOrdinalsReader.java (original)
+++ lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/DocValuesOrdinalsReader.java Thu Jun  5 15:54:49 2014
@@ -46,17 +46,15 @@ public class DocValuesOrdinalsReader ext
   public OrdinalsSegmentReader getReader(AtomicReaderContext context) throws IOException {
     BinaryDocValues values0 = context.reader().getBinaryDocValues(field);
     if (values0 == null) {
-      values0 = DocValues.EMPTY_BINARY;
+      values0 = DocValues.emptyBinary();
     }
 
     final BinaryDocValues values = values0;
 
     return new OrdinalsSegmentReader() {
-      private final BytesRef bytes = new BytesRef(32);
-
       @Override
       public void get(int docID, IntsRef ordinals) throws IOException {
-        values.get(docID, bytes);
+        final BytesRef bytes = values.get(docID);
         decode(bytes, ordinals);
       }
     };

Modified: lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/FastTaxonomyFacetCounts.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/FastTaxonomyFacetCounts.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/FastTaxonomyFacetCounts.java (original)
+++ lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/FastTaxonomyFacetCounts.java Thu Jun  5 15:54:49 2014
@@ -55,17 +55,16 @@ public class FastTaxonomyFacetCounts ext
       if (dv == null) { // this reader does not have DocValues for the requested category list
         continue;
       }
-      
-      BytesRef scratch = new BytesRef();
+
       DocIdSetIterator docs = hits.bits.iterator();
       
       int doc;
       while ((doc = docs.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
-        dv.get(doc, scratch);
-        byte[] bytes = scratch.bytes;
-        int end = scratch.offset + scratch.length;
+        final BytesRef bytesRef = dv.get(doc);
+        byte[] bytes = bytesRef.bytes;
+        int end = bytesRef.offset + bytesRef.length;
         int ord = 0;
-        int offset = scratch.offset;
+        int offset = bytesRef.offset;
         int prev = 0;
         while (offset < end) {
           byte b = bytes[offset++];

Modified: lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyFacetSumFloatAssociations.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyFacetSumFloatAssociations.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyFacetSumFloatAssociations.java (original)
+++ lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyFacetSumFloatAssociations.java Thu Jun  5 15:54:49 2014
@@ -54,8 +54,7 @@ public class TaxonomyFacetSumFloatAssoci
       if (dv == null) { // this reader does not have DocValues for the requested category list
         continue;
       }
-    
-      BytesRef scratch = new BytesRef();
+
       DocIdSetIterator docs = hits.bits.iterator();
       
       int doc;
@@ -63,10 +62,10 @@ public class TaxonomyFacetSumFloatAssoci
         //System.out.println("  doc=" + doc);
         // TODO: use OrdinalsReader?  we'd need to add a
         // BytesRef getAssociation()?
-        dv.get(doc, scratch);
-        byte[] bytes = scratch.bytes;
-        int end = scratch.offset + scratch.length;
-        int offset = scratch.offset;
+        final BytesRef bytesRef = dv.get(doc);
+        byte[] bytes = bytesRef.bytes;
+        int end = bytesRef.offset + bytesRef.length;
+        int offset = bytesRef.offset;
         while (offset < end) {
           int ord = ((bytes[offset]&0xFF) << 24) |
             ((bytes[offset+1]&0xFF) << 16) |

Modified: lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyFacetSumIntAssociations.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyFacetSumIntAssociations.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyFacetSumIntAssociations.java (original)
+++ lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/TaxonomyFacetSumIntAssociations.java Thu Jun  5 15:54:49 2014
@@ -54,8 +54,7 @@ public class TaxonomyFacetSumIntAssociat
       if (dv == null) { // this reader does not have DocValues for the requested category list
         continue;
       }
-      
-      BytesRef scratch = new BytesRef();
+
       DocIdSetIterator docs = hits.bits.iterator();
       
       int doc;
@@ -63,10 +62,10 @@ public class TaxonomyFacetSumIntAssociat
         //System.out.println("  doc=" + doc);
         // TODO: use OrdinalsReader?  we'd need to add a
         // BytesRef getAssociation()?
-        dv.get(doc, scratch);
-        byte[] bytes = scratch.bytes;
-        int end = scratch.offset + scratch.length;
-        int offset = scratch.offset;
+        final BytesRef bytesRef = dv.get(doc);
+        byte[] bytes = bytesRef.bytes;
+        int end = bytesRef.offset + bytesRef.length;
+        int offset = bytesRef.offset;
         while (offset < end) {
           int ord = ((bytes[offset]&0xFF) << 24) |
             ((bytes[offset+1]&0xFF) << 16) |

Modified: lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupHeadsCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupHeadsCollector.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupHeadsCollector.java (original)
+++ lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupHeadsCollector.java Thu Jun  5 15:54:49 2014
@@ -47,7 +47,6 @@ public abstract class TermAllGroupHeadsC
   private static final int DEFAULT_INITIAL_SIZE = 128;
 
   final String groupField;
-  final BytesRef scratchBytesRef = new BytesRef();
 
   SortedDocValues groupIndex;
   AtomicReaderContext readerContext;
@@ -134,17 +133,17 @@ public abstract class TermAllGroupHeadsC
     @Override
     protected void retrieveGroupHeadAndAddIfNotExist(int doc) throws IOException {
       final int ord = groupIndex.getOrd(doc);
-      final BytesRef groupValue;
+      BytesRef groupValue;
       if (ord == -1) {
         groupValue = null;
       } else {
-        groupIndex.lookupOrd(ord, scratchBytesRef);
-        groupValue = scratchBytesRef;
+        groupValue = groupIndex.lookupOrd(ord);
       }
       GroupHead groupHead = groups.get(groupValue);
       if (groupHead == null) {
+        groupValue = groupValue == null ? null : BytesRef.deepCopyOf(groupValue);
         groupHead = new GroupHead(groupValue, sortWithinGroup, doc);
-        groups.put(groupValue == null ? null : BytesRef.deepCopyOf(groupValue), groupHead);
+        groups.put(groupValue, groupHead);
         temporalResult.stop = true;
       } else {
         temporalResult.stop = false;
@@ -183,7 +182,6 @@ public abstract class TermAllGroupHeadsC
 
       final FieldComparator<?>[] comparators;
 
-      @SuppressWarnings({"unchecked","rawtypes"})
       private GroupHead(BytesRef groupValue, Sort sort, int doc) throws IOException {
         super(groupValue, doc + readerContext.docBase);
         final SortField[] sortFields = sort.getSort();
@@ -254,12 +252,11 @@ public abstract class TermAllGroupHeadsC
       GroupHead groupHead;
       if (!ordSet.exists(key)) {
         ordSet.put(key);
-        BytesRef term;
+        final BytesRef term;
         if (key == -1) {
           term = null;
         } else {
-          term = new BytesRef();
-          groupIndex.lookupOrd(key, term);
+          term = BytesRef.deepCopyOf(groupIndex.lookupOrd(key));
         }
         groupHead = new GroupHead(doc, term);
         collectedGroups.add(groupHead);
@@ -332,7 +329,7 @@ public abstract class TermAllGroupHeadsC
             sortOrds[i] = sortsIndex[i].getOrd(doc);
             sortValues[i] = new BytesRef();
             if (sortOrds[i] != -1) {
-              sortsIndex[i].get(doc, sortValues[i]);
+              sortValues[i].copyBytes(sortsIndex[i].get(doc));
             }
           }
         }
@@ -351,12 +348,8 @@ public abstract class TermAllGroupHeadsC
         } else {
           if (sortOrds[compIDX] < 0) {
             // The current segment doesn't contain the sort value we encountered before. Therefore the ord is negative.
-            if (sortsIndex[compIDX].getOrd(doc) == -1) {
-              scratchBytesRef.length = 0;
-            } else {
-              sortsIndex[compIDX].get(doc, scratchBytesRef);
-            }
-            return sortValues[compIDX].compareTo(scratchBytesRef);
+            final BytesRef term = sortsIndex[compIDX].get(doc);
+            return sortValues[compIDX].compareTo(term);
           } else {
             return sortOrds[compIDX] - sortsIndex[compIDX].getOrd(doc);
           }
@@ -370,11 +363,7 @@ public abstract class TermAllGroupHeadsC
             scores[i] = scorer.score();
           } else {
             sortOrds[i] = sortsIndex[i].getOrd(doc);
-            if (sortOrds[i] == -1) {
-              sortValues[i].length = 0;
-            } else {
-              sortsIndex[i].get(doc, sortValues[i]);
-            }
+            sortValues[i].copyBytes(sortsIndex[i].get(doc));
           }
         }
         this.doc = doc + readerContext.docBase;
@@ -422,12 +411,11 @@ public abstract class TermAllGroupHeadsC
       GroupHead groupHead;
       if (!ordSet.exists(key)) {
         ordSet.put(key);
-        BytesRef term;
+        final BytesRef term;
         if (key == -1) {
           term = null;
         } else {
-          term = new BytesRef();
-          groupIndex.lookupOrd(key, term);
+          term = BytesRef.deepCopyOf(groupIndex.lookupOrd(key));
         }
         groupHead = new GroupHead(doc, term);
         collectedGroups.add(groupHead);
@@ -487,9 +475,7 @@ public abstract class TermAllGroupHeadsC
         for (int i = 0; i < sortsIndex.length; i++) {
           sortOrds[i] = sortsIndex[i].getOrd(doc);
           sortValues[i] = new BytesRef();
-          if (sortOrds[i] != -1) {
-            sortsIndex[i].get(doc, sortValues[i]);
-          }
+          sortValues[i].copyBytes(sortsIndex[i].get(doc));
         }
       }
 
@@ -497,12 +483,8 @@ public abstract class TermAllGroupHeadsC
       public int compare(int compIDX, int doc) throws IOException {
         if (sortOrds[compIDX] < 0) {
           // The current segment doesn't contain the sort value we encountered before. Therefore the ord is negative.
-          if (sortsIndex[compIDX].getOrd(doc) == -1) {
-            scratchBytesRef.length = 0;
-          } else {
-            sortsIndex[compIDX].get(doc, scratchBytesRef);
-          }
-          return sortValues[compIDX].compareTo(scratchBytesRef);
+          final BytesRef term = sortsIndex[compIDX].get(doc);
+          return sortValues[compIDX].compareTo(term);
         } else {
           return sortOrds[compIDX] - sortsIndex[compIDX].getOrd(doc);
         }
@@ -512,11 +494,7 @@ public abstract class TermAllGroupHeadsC
       public void updateDocHead(int doc) throws IOException {
         for (int i = 0; i < sortsIndex.length; i++) {
           sortOrds[i] = sortsIndex[i].getOrd(doc);
-          if (sortOrds[i] == -1) {
-            sortValues[i].length = 0;
-          } else {
-            sortsIndex[i].lookupOrd(sortOrds[i], sortValues[i]);
-          }
+          sortValues[i].copyBytes(sortsIndex[i].get(doc));
         }
         this.doc = doc + readerContext.docBase;
       }
@@ -565,12 +543,11 @@ public abstract class TermAllGroupHeadsC
       GroupHead groupHead;
       if (!ordSet.exists(key)) {
         ordSet.put(key);
-        BytesRef term;
+        final BytesRef term;
         if (key == -1) {
           term = null;
         } else {
-          term = new BytesRef();
-          groupIndex.lookupOrd(key, term);
+          term = BytesRef.deepCopyOf(groupIndex.lookupOrd(key));
         }
         groupHead = new GroupHead(doc, term);
         collectedGroups.add(groupHead);

Modified: lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupsCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupsCollector.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupsCollector.java (original)
+++ lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupsCollector.java Thu Jun  5 15:54:49 2014
@@ -20,7 +20,6 @@ package org.apache.lucene.search.groupin
 import org.apache.lucene.index.AtomicReaderContext;
 import org.apache.lucene.index.DocValues;
 import org.apache.lucene.index.SortedDocValues;
-import org.apache.lucene.search.LeafCollector;
 import org.apache.lucene.search.grouping.AbstractAllGroupsCollector;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.SentinelIntSet;
@@ -87,12 +86,11 @@ public class TermAllGroupsCollector exte
     int key = index.getOrd(doc);
     if (!ordSet.exists(key)) {
       ordSet.put(key);
-      BytesRef term;
+      final BytesRef term;
       if (key == -1) {
         term = null;
       } else {
-        term =  new BytesRef();
-        index.lookupOrd(key, term);
+        term = BytesRef.deepCopyOf(index.lookupOrd(key));
       }
       groups.add(term);
     }

Modified: lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermDistinctValuesCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermDistinctValuesCollector.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermDistinctValuesCollector.java (original)
+++ lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermDistinctValuesCollector.java Thu Jun  5 15:54:49 2014
@@ -20,7 +20,6 @@ package org.apache.lucene.search.groupin
 import org.apache.lucene.index.AtomicReaderContext;
 import org.apache.lucene.index.DocValues;
 import org.apache.lucene.index.SortedDocValues;
-import org.apache.lucene.search.LeafCollector;
 import org.apache.lucene.search.grouping.AbstractDistinctValuesCollector;
 import org.apache.lucene.search.grouping.SearchGroup;
 import org.apache.lucene.util.BytesRef;
@@ -80,9 +79,8 @@ public class TermDistinctValuesCollector
       if (countOrd == -1) {
         gc.uniqueValues.add(null);
       } else {
-        BytesRef br = new BytesRef();
-        countFieldTermIndex.lookupOrd(countOrd, br);
-        gc.uniqueValues.add(br);
+        BytesRef term = BytesRef.deepCopyOf(countFieldTermIndex.lookupOrd(countOrd));
+        gc.uniqueValues.add(term);
       }
 
       gc.ords = Arrays.copyOf(gc.ords, gc.ords.length + 1);

Modified: lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermFirstPassGroupingCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermFirstPassGroupingCollector.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermFirstPassGroupingCollector.java (original)
+++ lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermFirstPassGroupingCollector.java Thu Jun  5 15:54:49 2014
@@ -22,7 +22,6 @@ import java.io.IOException;
 import org.apache.lucene.index.AtomicReaderContext;
 import org.apache.lucene.index.DocValues;
 import org.apache.lucene.index.SortedDocValues;
-import org.apache.lucene.search.LeafCollector;
 import org.apache.lucene.search.Sort;
 import org.apache.lucene.search.grouping.AbstractFirstPassGroupingCollector;
 import org.apache.lucene.util.BytesRef;
@@ -36,7 +35,6 @@ import org.apache.lucene.util.BytesRef;
  */
 public class TermFirstPassGroupingCollector extends AbstractFirstPassGroupingCollector<BytesRef> {
 
-  private final BytesRef scratchBytesRef = new BytesRef();
   private SortedDocValues index;
 
   private String groupField;
@@ -68,8 +66,7 @@ public class TermFirstPassGroupingCollec
     if (ord == -1) {
       return null;
     } else {
-      index.lookupOrd(ord, scratchBytesRef);
-      return scratchBytesRef;
+      return index.lookupOrd(ord);
     }
   }
 

Modified: lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java (original)
+++ lucene/dev/trunk/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java Thu Jun  5 15:54:49 2014
@@ -107,16 +107,14 @@ public abstract class TermGroupFacetColl
       if (groupOrd == -1) {
         groupKey = null;
       } else {
-        groupKey = new BytesRef();
-        groupFieldTermsIndex.lookupOrd(groupOrd, groupKey);
+        groupKey = BytesRef.deepCopyOf(groupFieldTermsIndex.lookupOrd(groupOrd));
       }
 
       BytesRef facetKey;
       if (facetOrd == -1) {
         facetKey = null;
       } else {
-        facetKey = new BytesRef();
-        facetFieldTermsIndex.lookupOrd(facetOrd, facetKey);
+        facetKey = BytesRef.deepCopyOf(facetFieldTermsIndex.lookupOrd(facetOrd));
       }
 
       groupedFacetHits.add(new GroupedFacetHit(groupKey, facetKey));
@@ -224,8 +222,7 @@ public abstract class TermGroupFacetColl
         if (groupOrd == -1) {
           groupKey = null;
         } else {
-          groupKey = new BytesRef();
-          groupFieldTermsIndex.lookupOrd(groupOrd, groupKey);
+          groupKey = BytesRef.deepCopyOf(groupFieldTermsIndex.lookupOrd(groupOrd));
         }
         groupedFacetHits.add(new GroupedFacetHit(groupKey, null));
         return;
@@ -263,16 +260,14 @@ public abstract class TermGroupFacetColl
       if (groupOrd == -1) {
         groupKey = null;
       } else {
-        groupKey = new BytesRef();
-        groupFieldTermsIndex.lookupOrd(groupOrd, groupKey);
+        groupKey = BytesRef.deepCopyOf(groupFieldTermsIndex.lookupOrd(groupOrd));
       }
 
       final BytesRef facetValue;
       if (facetOrd == facetFieldNumTerms) {
         facetValue = null;
       } else {
-        facetFieldDocTermOrds.lookupOrd(facetOrd, scratch);
-        facetValue = BytesRef.deepCopyOf(scratch); // must we?
+        facetValue = BytesRef.deepCopyOf(facetFieldDocTermOrds.lookupOrd(facetOrd));
       }
       groupedFacetHits.add(new GroupedFacetHit(groupKey, facetValue));
     }

Modified: lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java (original)
+++ lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java Thu Jun  5 15:54:49 2014
@@ -23,9 +23,6 @@ import org.apache.lucene.index.AtomicRea
 import org.apache.lucene.index.BinaryDocValues;
 import org.apache.lucene.index.DocValues;
 import org.apache.lucene.index.SortedSetDocValues;
-import org.apache.lucene.search.LeafCollector;
-import org.apache.lucene.search.Collector;
-import org.apache.lucene.search.Scorer;
 import org.apache.lucene.search.SimpleCollector;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.BytesRefHash;
@@ -78,8 +75,8 @@ abstract class TermsCollector extends Si
       docTermOrds.setDocument(doc);
       long ord;
       while ((ord = docTermOrds.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-        docTermOrds.lookupOrd(ord, scratch);
-        collectorTerms.add(scratch);
+        final BytesRef term = docTermOrds.lookupOrd(ord);
+        collectorTerms.add(term);
       }
     }
 
@@ -101,8 +98,8 @@ abstract class TermsCollector extends Si
 
     @Override
     public void collect(int doc) throws IOException {
-      fromDocTerms.get(doc, spare);
-      collectorTerms.add(spare);
+      final BytesRef term = fromDocTerms.get(doc);
+      collectorTerms.add(term);
     }
 
     @Override

Modified: lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java (original)
+++ lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java Thu Jun  5 15:54:49 2014
@@ -93,7 +93,6 @@ abstract class TermsWithScoreCollector e
   // impl that works with single value per document
   static class SV extends TermsWithScoreCollector {
 
-    final BytesRef spare = new BytesRef();
     BinaryDocValues fromDocTerms;
 
     SV(String field, ScoreMode scoreMode) {
@@ -102,8 +101,7 @@ abstract class TermsWithScoreCollector e
 
     @Override
     public void collect(int doc) throws IOException {
-      fromDocTerms.get(doc, spare);
-      int ord = collectedTerms.add(spare);
+      int ord = collectedTerms.add(fromDocTerms.get(doc));
       if (ord < 0) {
         ord = -ord - 1;
       } else {
@@ -144,8 +142,7 @@ abstract class TermsWithScoreCollector e
 
       @Override
       public void collect(int doc) throws IOException {
-        fromDocTerms.get(doc, spare);
-        int ord = collectedTerms.add(spare);
+        int ord = collectedTerms.add(fromDocTerms.get(doc));
         if (ord < 0) {
           ord = -ord - 1;
         } else {
@@ -183,7 +180,6 @@ abstract class TermsWithScoreCollector e
   static class MV extends TermsWithScoreCollector {
 
     SortedSetDocValues fromDocTermOrds;
-    final BytesRef scratch = new BytesRef();
 
     MV(String field, ScoreMode scoreMode) {
       super(field, scoreMode);
@@ -194,9 +190,7 @@ abstract class TermsWithScoreCollector e
       fromDocTermOrds.setDocument(doc);
       long ord;
       while ((ord = fromDocTermOrds.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-        fromDocTermOrds.lookupOrd(ord, scratch);
-        
-        int termID = collectedTerms.add(scratch);
+        int termID = collectedTerms.add(fromDocTermOrds.lookupOrd(ord));
         if (termID < 0) {
           termID = -termID - 1;
         } else {
@@ -233,9 +227,7 @@ abstract class TermsWithScoreCollector e
         fromDocTermOrds.setDocument(doc);
         long ord;
         while ((ord = fromDocTermOrds.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-          fromDocTermOrds.lookupOrd(ord, scratch);
-          
-          int termID = collectedTerms.add(scratch);
+          int termID = collectedTerms.add(fromDocTermOrds.lookupOrd(ord));
           if (termID < 0) {
             termID = -termID - 1;
           } else {

Modified: lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java (original)
+++ lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java Thu Jun  5 15:54:49 2014
@@ -662,14 +662,13 @@ public class TestJoinUtil extends Lucene
 
           private Scorer scorer;
           private SortedSetDocValues docTermOrds;
-          final BytesRef joinValue = new BytesRef();
 
           @Override
           public void collect(int doc) throws IOException {
             docTermOrds.setDocument(doc);
             long ord;
             while ((ord = docTermOrds.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-              docTermOrds.lookupOrd(ord, joinValue);
+              final BytesRef joinValue = docTermOrds.lookupOrd(ord);
               JoinScore joinScore = joinValueToJoinScores.get(joinValue);
               if (joinScore == null) {
                 joinValueToJoinScores.put(BytesRef.deepCopyOf(joinValue), joinScore = new JoinScore());
@@ -699,12 +698,10 @@ public class TestJoinUtil extends Lucene
           private Scorer scorer;
           private BinaryDocValues terms;
           private Bits docsWithField;
-          private final BytesRef spare = new BytesRef();
 
           @Override
           public void collect(int doc) throws IOException {
-            terms.get(doc, spare);
-            BytesRef joinValue = spare;
+            final BytesRef joinValue = terms.get(doc);
             if (joinValue.length == 0 && !docsWithField.get(doc)) {
               return;
             }
@@ -764,7 +761,6 @@ public class TestJoinUtil extends Lucene
           toSearcher.search(new MatchAllDocsQuery(), new SimpleCollector() {
 
             private SortedSetDocValues docTermOrds;
-            private final BytesRef scratch = new BytesRef();
             private int docBase;
 
             @Override
@@ -772,8 +768,8 @@ public class TestJoinUtil extends Lucene
               docTermOrds.setDocument(doc);
               long ord;
               while ((ord = docTermOrds.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-                docTermOrds.lookupOrd(ord, scratch);
-                JoinScore joinScore = joinValueToJoinScores.get(scratch);
+                final BytesRef joinValue = docTermOrds.lookupOrd(ord);
+                JoinScore joinScore = joinValueToJoinScores.get(joinValue);
                 if (joinScore == null) {
                   continue;
                 }
@@ -803,12 +799,11 @@ public class TestJoinUtil extends Lucene
 
           private BinaryDocValues terms;
           private int docBase;
-          private final BytesRef spare = new BytesRef();
 
           @Override
           public void collect(int doc) {
-            terms.get(doc, spare);
-            JoinScore joinScore = joinValueToJoinScores.get(spare);
+            final BytesRef joinValue = terms.get(doc);
+            JoinScore joinScore = joinValueToJoinScores.get(joinValue);
             if (joinScore == null) {
               return;
             }

Modified: lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/sorter/SortingAtomicReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/sorter/SortingAtomicReader.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/sorter/SortingAtomicReader.java (original)
+++ lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/sorter/SortingAtomicReader.java Thu Jun  5 15:54:49 2014
@@ -201,8 +201,8 @@ public class SortingAtomicReader extends
     }
 
     @Override
-    public void get(int docID, BytesRef result) {
-      in.get(docMap.newToOld(docID), result);
+    public BytesRef get(int docID) {
+      return in.get(docMap.newToOld(docID));
     }
   }
   
@@ -259,8 +259,8 @@ public class SortingAtomicReader extends
     }
 
     @Override
-    public void lookupOrd(int ord, BytesRef result) {
-      in.lookupOrd(ord, result);
+    public BytesRef lookupOrd(int ord) {
+      return in.lookupOrd(ord);
     }
 
     @Override
@@ -269,8 +269,8 @@ public class SortingAtomicReader extends
     }
 
     @Override
-    public void get(int docID, BytesRef result) {
-      in.get(docMap.newToOld(docID), result);
+    public BytesRef get(int docID) {
+      return in.get(docMap.newToOld(docID));
     }
 
     @Override
@@ -300,8 +300,8 @@ public class SortingAtomicReader extends
     }
 
     @Override
-    public void lookupOrd(long ord, BytesRef result) {
-      in.lookupOrd(ord, result);
+    public BytesRef lookupOrd(long ord) {
+      return in.lookupOrd(ord);
     }
 
     @Override

Modified: lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/uninverting/DocTermOrds.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/uninverting/DocTermOrds.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/uninverting/DocTermOrds.java (original)
+++ lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/uninverting/DocTermOrds.java Thu Jun  5 15:54:49 2014
@@ -32,7 +32,6 @@ import org.apache.lucene.index.Fields;
 import org.apache.lucene.index.SortedSetDocValues;
 import org.apache.lucene.index.Terms;
 import org.apache.lucene.index.TermsEnum;
-import org.apache.lucene.index.TermsEnum.SeekStatus;
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
@@ -773,7 +772,7 @@ public class DocTermOrds {
   /** Returns a SortedSetDocValues view of this instance */
   public SortedSetDocValues iterator(AtomicReader reader) throws IOException {
     if (isEmpty()) {
-      return DocValues.EMPTY_SORTED_SET;
+      return DocValues.emptySortedSet();
     } else {
       return new Iterator(reader);
     }
@@ -874,16 +873,12 @@ public class DocTermOrds {
     }
 
     @Override
-    public void lookupOrd(long ord, BytesRef result) {
-      BytesRef ref = null;
+    public BytesRef lookupOrd(long ord) {
       try {
-        ref = DocTermOrds.this.lookupTerm(te, (int) ord);
+        return DocTermOrds.this.lookupTerm(te, (int) ord);
       } catch (IOException e) {
         throw new RuntimeException(e);
       }
-      result.bytes = ref.bytes;
-      result.offset = ref.offset;
-      result.length = ref.length;
     }
 
     @Override

Modified: lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/uninverting/FieldCacheImpl.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/uninverting/FieldCacheImpl.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/uninverting/FieldCacheImpl.java (original)
+++ lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/uninverting/FieldCacheImpl.java Thu Jun  5 15:54:49 2014
@@ -431,11 +431,11 @@ class FieldCacheImpl implements FieldCac
     } else {
       final FieldInfo info = reader.getFieldInfos().fieldInfo(field);
       if (info == null) {
-        return DocValues.EMPTY_NUMERIC;
+        return DocValues.emptyNumeric();
       } else if (info.hasDocValues()) {
         throw new IllegalStateException("Type mismatch: " + field + " was indexed as " + info.getDocValuesType());
       } else if (!info.isIndexed()) {
-        return DocValues.EMPTY_NUMERIC;
+        return DocValues.emptyNumeric();
       }
       return (NumericDocValues) caches.get(Long.TYPE).get(reader, new CacheKey(field, parser), setDocsWithField);
     }
@@ -523,7 +523,7 @@ class FieldCacheImpl implements FieldCac
     }
   }
 
-  public static class SortedDocValuesImpl extends SortedDocValues {
+  public static class SortedDocValuesImpl {
     private final PagedBytes.Reader bytes;
     private final MonotonicAppendingLongBuffer termOrdToBytesOffset;
     private final PackedInts.Reader docToTermOrd;
@@ -535,26 +535,33 @@ class FieldCacheImpl implements FieldCac
       this.termOrdToBytesOffset = termOrdToBytesOffset;
       this.numOrd = numOrd;
     }
+    
+    public SortedDocValues iterator() {
+      final BytesRef term = new BytesRef();
+      return new SortedDocValues() {
+
+        @Override
+        public int getValueCount() {
+          return numOrd;
+        }
 
-    @Override
-    public int getValueCount() {
-      return numOrd;
-    }
-
-    @Override
-    public int getOrd(int docID) {
-      // Subtract 1, matching the 1+ord we did when
-      // storing, so that missing values, which are 0 in the
-      // packed ints, are returned as -1 ord:
-      return (int) docToTermOrd.get(docID)-1;
-    }
+        @Override
+        public int getOrd(int docID) {
+          // Subtract 1, matching the 1+ord we did when
+          // storing, so that missing values, which are 0 in the
+          // packed ints, are returned as -1 ord:
+          return (int) docToTermOrd.get(docID)-1;
+        }
 
-    @Override
-    public void lookupOrd(int ord, BytesRef ret) {
-      if (ord < 0) {
-        throw new IllegalArgumentException("ord must be >=0 (got ord=" + ord + ")");
-      }
-      bytes.fill(ret, termOrdToBytesOffset.get(ord));
+        @Override
+        public BytesRef lookupOrd(int ord) {
+          if (ord < 0) {
+            throw new IllegalArgumentException("ord must be >=0 (got ord=" + ord + ")");
+          }
+          bytes.fill(term, termOrdToBytesOffset.get(ord));
+          return term;
+        }
+      };
     }
   }
 
@@ -571,15 +578,16 @@ class FieldCacheImpl implements FieldCac
     } else {
       final FieldInfo info = reader.getFieldInfos().fieldInfo(field);
       if (info == null) {
-        return DocValues.EMPTY_SORTED;
+        return DocValues.emptySorted();
       } else if (info.hasDocValues()) {
         // we don't try to build a sorted instance from numeric/binary doc
         // values because dedup can be very costly
         throw new IllegalStateException("Type mismatch: " + field + " was indexed as " + info.getDocValuesType());
       } else if (!info.isIndexed()) {
-        return DocValues.EMPTY_SORTED;
+        return DocValues.emptySorted();
       }
-      return (SortedDocValues) caches.get(SortedDocValues.class).get(reader, new CacheKey(field, acceptableOverheadRatio), false);
+      SortedDocValuesImpl impl = (SortedDocValuesImpl) caches.get(SortedDocValues.class).get(reader, new CacheKey(field, acceptableOverheadRatio), false);
+      return impl.iterator();
     }
   }
 
@@ -674,22 +682,23 @@ class FieldCacheImpl implements FieldCac
   private static class BinaryDocValuesImpl extends BinaryDocValues {
     private final PagedBytes.Reader bytes;
     private final PackedInts.Reader docToOffset;
+    private final BytesRef term;
 
     public BinaryDocValuesImpl(PagedBytes.Reader bytes, PackedInts.Reader docToOffset) {
       this.bytes = bytes;
       this.docToOffset = docToOffset;
+      term = new BytesRef();
     }
 
     @Override
-    public void get(int docID, BytesRef ret) {
+    public BytesRef get(int docID) {
       final int pointer = (int) docToOffset.get(docID);
       if (pointer == 0) {
-        ret.bytes = BytesRef.EMPTY_BYTES;
-        ret.offset = 0;
-        ret.length = 0;
+        term.length = 0;
       } else {
-        bytes.fill(ret, pointer);
+        bytes.fill(term, pointer);
       }
+      return term;
     }
   }
 
@@ -713,11 +722,11 @@ class FieldCacheImpl implements FieldCac
 
     final FieldInfo info = reader.getFieldInfos().fieldInfo(field);
     if (info == null) {
-      return DocValues.EMPTY_BINARY;
+      return DocValues.emptyBinary();
     } else if (info.hasDocValues()) {
       throw new IllegalStateException("Type mismatch: " + field + " was indexed as " + info.getDocValuesType());
     } else if (!info.isIndexed()) {
-      return DocValues.EMPTY_BINARY;
+      return DocValues.emptyBinary();
     }
 
     return (BinaryDocValues) caches.get(BinaryDocValues.class).get(reader, new CacheKey(field, acceptableOverheadRatio), setDocsWithField);
@@ -835,18 +844,18 @@ class FieldCacheImpl implements FieldCac
     
     final FieldInfo info = reader.getFieldInfos().fieldInfo(field);
     if (info == null) {
-      return DocValues.EMPTY_SORTED_SET;
+      return DocValues.emptySortedSet();
     } else if (info.hasDocValues()) {
       throw new IllegalStateException("Type mismatch: " + field + " was indexed as " + info.getDocValuesType());
     } else if (!info.isIndexed()) {
-      return DocValues.EMPTY_SORTED_SET;
+      return DocValues.emptySortedSet();
     }
     
     // ok we need to uninvert. check if we can optimize a bit.
     
     Terms terms = reader.terms(field);
     if (terms == null) {
-      return DocValues.EMPTY_SORTED_SET;
+      return DocValues.emptySortedSet();
     } else {
       // if #postings = #docswithfield we know that the field is "single valued enough".
       // its possible the same term might appear twice in the same document, but SORTED_SET discards frequency.

Modified: lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/SorterTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/SorterTestBase.java?rev=1600688&r1=1600687&r2=1600688&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/SorterTestBase.java (original)
+++ lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/SorterTestBase.java Thu Jun  5 15:54:49 2014
@@ -239,9 +239,8 @@ public abstract class SorterTestBase ext
   @Test
   public void testBinaryDocValuesField() throws Exception {
     BinaryDocValues dv = reader.getBinaryDocValues(BINARY_DV_FIELD);
-    BytesRef bytes = new BytesRef();
     for (int i = 0; i < reader.maxDoc(); i++) {
-      dv.get(i, bytes);
+      final BytesRef bytes = dv.get(i);
       assertEquals("incorrect binary DocValues for doc " + i, sortedValues[i].toString(), bytes.utf8ToString());
     }
   }
@@ -367,9 +366,8 @@ public abstract class SorterTestBase ext
   public void testSortedDocValuesField() throws Exception {
     SortedDocValues dv = reader.getSortedDocValues(SORTED_DV_FIELD);
     int maxDoc = reader.maxDoc();
-    BytesRef bytes = new BytesRef();
     for (int i = 0; i < maxDoc; i++) {
-      dv.get(i, bytes);
+      final BytesRef bytes = dv.get(i);
       assertEquals("incorrect sorted DocValues for doc " + i, sortedValues[i].toString(), bytes.utf8ToString());
     }
   }
@@ -379,13 +377,12 @@ public abstract class SorterTestBase ext
     assumeTrue("default codec does not support SORTED_SET", defaultCodecSupportsSortedSet());
     SortedSetDocValues dv = reader.getSortedSetDocValues(SORTED_SET_DV_FIELD);
     int maxDoc = reader.maxDoc();
-    BytesRef bytes = new BytesRef();
     for (int i = 0; i < maxDoc; i++) {
       dv.setDocument(i);
-      dv.lookupOrd(dv.nextOrd(), bytes);
+      BytesRef bytes = dv.lookupOrd(dv.nextOrd());
       int value = sortedValues[i].intValue();
       assertEquals("incorrect sorted-set DocValues for doc " + i, Integer.valueOf(value).toString(), bytes.utf8ToString());
-      dv.lookupOrd(dv.nextOrd(), bytes);
+      bytes = dv.lookupOrd(dv.nextOrd());
       assertEquals("incorrect sorted-set DocValues for doc " + i, Integer.valueOf(value + 1).toString(), bytes.utf8ToString());
       assertEquals(SortedSetDocValues.NO_MORE_ORDS, dv.nextOrd());
     }