You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2018/09/17 09:03:20 UTC

lucene-solr:master: LUCENE-8502: Allow access to delegate in FilterCodecReader

Repository: lucene-solr
Updated Branches:
  refs/heads/master b2b597b03 -> 6fac57d9a


LUCENE-8502: Allow access to delegate in FilterCodecReader

FilterCodecReader doesn't allow access to it's delegate like other
filter readers. This adds a new getDelegate method to access the
wrapped reader.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/6fac57d9
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6fac57d9
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6fac57d9

Branch: refs/heads/master
Commit: 6fac57d9ad4e2251118b400215b08901781c9696
Parents: b2b597b
Author: Simon Willnauer <si...@apache.org>
Authored: Mon Sep 17 10:19:44 2018 +0200
Committer: Simon Willnauer <si...@apache.org>
Committed: Mon Sep 17 11:02:22 2018 +0200

----------------------------------------------------------------------
 .../apache/lucene/index/FilterCodecReader.java    | 14 ++++++++++++++
 .../lucene/index/TestFilterCodecReader.java       | 18 ++++++++++++++++++
 2 files changed, 32 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6fac57d9/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java b/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java
index 4187051..0f8dcfc 100644
--- a/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java
@@ -39,6 +39,15 @@ import org.apache.lucene.util.Bits;
  * {@link #getCoreCacheHelper()} and {@link #getReaderCacheHelper()}.
  */
 public abstract class FilterCodecReader extends CodecReader {
+
+  /** Get the wrapped instance by <code>reader</code> as long as this reader is
+   *  an instance of {@link FilterCodecReader}.  */
+  public static CodecReader unwrap(CodecReader reader) {
+    while (reader instanceof FilterCodecReader) {
+      reader = ((FilterCodecReader) reader).getDelegate();
+    }
+    return reader;
+  }
   /** 
    * The underlying CodecReader instance. 
    */
@@ -127,6 +136,11 @@ public abstract class FilterCodecReader extends CodecReader {
     in.checkIntegrity();
   }
 
+  /** Returns the wrapped {@link CodecReader}. */
+  public CodecReader getDelegate() {
+    return in;
+  }
+
   /**
    * Returns a filtered codec reader with the given live docs and numDocs.
    */

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6fac57d9/lucene/core/src/test/org/apache/lucene/index/TestFilterCodecReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestFilterCodecReader.java b/lucene/core/src/test/org/apache/lucene/index/TestFilterCodecReader.java
index feb803f..53ca774 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestFilterCodecReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestFilterCodecReader.java
@@ -16,8 +16,12 @@
  */
 package org.apache.lucene.index;
 
+import java.io.IOException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.LuceneTestCase;
 
 public class TestFilterCodecReader extends LuceneTestCase {
@@ -27,6 +31,20 @@ public class TestFilterCodecReader extends LuceneTestCase {
     implTestDeclaredMethodsOverridden(subClass.getSuperclass(), subClass);
   }
 
+  public void testGetDelegate() throws IOException {
+    try (Directory dir = newDirectory();
+         IndexWriter w = new IndexWriter(dir,newIndexWriterConfig())) {
+      w.addDocument(new Document());
+      try (DirectoryReader reader = w.getReader()) {
+        FilterCodecReader r = FilterCodecReader.wrapLiveDocs((CodecReader) reader.getSequentialSubReaders().get(0),
+            null, 1);
+
+        assertSame(FilterCodecReader.unwrap(r), reader.getSequentialSubReaders().get(0));
+        assertSame(r.getDelegate(), reader.getSequentialSubReaders().get(0));
+      }
+    }
+  }
+
   private void implTestDeclaredMethodsOverridden(Class<?> superClass, Class<?> subClass) throws Exception {
     for (final Method superClassMethod : superClass.getDeclaredMethods()) {
       final int modifiers = superClassMethod.getModifiers();