diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 6f7837e29ec..260ac2d4614 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -112,6 +112,9 @@ Bug Fixes * LUCENE-7630: Fix (Edge)NGramTokenFilter to no longer drop payloads and preserve all attributes. (Nathan Gass via Uwe Schindler) +* LUCENE-7676: Fixed FilterCodecReader to override more super-class methods. + Also added TestFilterCodecReader class. (Christine Poerschke) + Improvements * LUCENE-7055: Added Weight#scorerSupplier, which allows to estimate the cost 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 48cbda723fe..c0ea8fc0c09 100644 --- a/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java +++ b/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java @@ -17,6 +17,8 @@ package org.apache.lucene.index; +import java.io.IOException; +import java.util.Collection; import java.util.Objects; import org.apache.lucene.codecs.DocValuesProducer; @@ -26,6 +28,7 @@ import org.apache.lucene.codecs.PointsReader; import org.apache.lucene.codecs.StoredFieldsReader; import org.apache.lucene.codecs.TermVectorsReader; import org.apache.lucene.search.Sort; +import org.apache.lucene.util.Accountable; import org.apache.lucene.util.Bits; /** @@ -111,4 +114,25 @@ public abstract class FilterCodecReader extends CodecReader { public void removeCoreClosedListener(CoreClosedListener listener) { in.removeCoreClosedListener(listener); } + + @Override + protected void doClose() throws IOException { + in.doClose(); + } + + @Override + public long ramBytesUsed() { + return in.ramBytesUsed(); + } + + @Override + public Collection getChildResources() { + return in.getChildResources(); + } + + @Override + public void checkIntegrity() throws IOException { + in.checkIntegrity(); + } + } diff --git a/lucene/core/src/test/org/apache/lucene/index/TestFilterCodecReader.java b/lucene/core/src/test/org/apache/lucene/index/TestFilterCodecReader.java new file mode 100644 index 00000000000..feb803fffbd --- /dev/null +++ b/lucene/core/src/test/org/apache/lucene/index/TestFilterCodecReader.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.lucene.index; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import org.apache.lucene.util.LuceneTestCase; + +public class TestFilterCodecReader extends LuceneTestCase { + + public void testDeclaredMethodsOverridden() throws Exception { + final Class subClass = FilterCodecReader.class; + implTestDeclaredMethodsOverridden(subClass.getSuperclass(), subClass); + } + + private void implTestDeclaredMethodsOverridden(Class superClass, Class subClass) throws Exception { + for (final Method superClassMethod : superClass.getDeclaredMethods()) { + final int modifiers = superClassMethod.getModifiers(); + if (Modifier.isPrivate(modifiers)) continue; + if (Modifier.isFinal(modifiers)) continue; + if (Modifier.isStatic(modifiers)) continue; + try { + final Method subClassMethod = subClass.getDeclaredMethod( + superClassMethod.getName(), + superClassMethod.getParameterTypes()); + assertEquals("getReturnType() difference", + superClassMethod.getReturnType(), + subClassMethod.getReturnType()); + } catch (NoSuchMethodException e) { + fail(subClass + " needs to override '" + superClassMethod + "'"); + } + } + } + +}