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:12:38 UTC
lucene-solr:branch_7_5: LUCENE-8502: Allow access to delegate in
FilterCodecReader
Repository: lucene-solr
Updated Branches:
refs/heads/branch_7_5 eec0ac651 -> 140c7e193
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/140c7e19
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/140c7e19
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/140c7e19
Branch: refs/heads/branch_7_5
Commit: 140c7e19366814e5397e1fdf7e74694f94d177b7
Parents: eec0ac6
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:12: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/140c7e19/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/140c7e19/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();