Index: lucene/src/test/org/apache/lucene/index/TestFilterIndexReader.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestFilterIndexReader.java (revision 1210990) +++ lucene/src/test/org/apache/lucene/index/TestFilterIndexReader.java (working copy) @@ -18,17 +18,20 @@ */ -import org.apache.lucene.util.LuceneTestCase; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.HashSet; + import junit.framework.TestSuite; import junit.textui.TestRunner; import org.apache.lucene.analysis.MockAnalyzer; -import org.apache.lucene.store.Directory; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; +import org.apache.lucene.store.Directory; +import org.apache.lucene.util.LuceneTestCase; -import java.io.IOException; - public class TestFilterIndexReader extends LuceneTestCase { private static class TestReader extends FilterIndexReader { @@ -136,4 +139,28 @@ reader.close(); directory.close(); } + + public void testOverrideMethods() throws Exception { + HashSet methodsThatShouldNotBeOverridden = new HashSet(); + methodsThatShouldNotBeOverridden.add("reopen"); + methodsThatShouldNotBeOverridden.add("doOpenIfChanged"); + methodsThatShouldNotBeOverridden.add("clone"); + boolean fail = false; + for (Method m : FilterIndexReader.class.getMethods()) { + int mods = m.getModifiers(); + if (Modifier.isStatic(mods) || Modifier.isFinal(mods)) { + continue; + } + Class< ? > declaringClass = m.getDeclaringClass(); + String name = m.getName(); + if (declaringClass != FilterIndexReader.class && declaringClass != Object.class && !methodsThatShouldNotBeOverridden.contains(name)) { + System.err.println("method " + name + " is not overridden by FilterIndexReader, but it should !"); + fail = true; + } else if (declaringClass == FilterIndexReader.class && methodsThatShouldNotBeOverridden.contains(name)) { + System.err.println("method " + name + " should not be overridden by FilterIndexReader"); + } + } + assertFalse("FilterIndexReader overrides (or not) some problematic methods; see log above", fail); + } + } Index: lucene/src/java/org/apache/lucene/index/FilterIndexReader.java =================================================================== --- lucene/src/java/org/apache/lucene/index/FilterIndexReader.java (revision 1210990) +++ lucene/src/java/org/apache/lucene/index/FilterIndexReader.java (working copy) @@ -124,6 +124,18 @@ } @Override + public IndexCommit getIndexCommit() throws IOException { + ensureOpen(); + return in.getIndexCommit(); + } + + @Override + public int getTermInfosIndexDivisor() { + ensureOpen(); + return in.getTermInfosIndexDivisor(); + } + + @Override public TermFreqVector[] getTermFreqVectors(int docNumber) throws IOException { ensureOpen(); @@ -137,7 +149,6 @@ return in.getTermFreqVector(docNumber, field); } - @Override public void getTermFreqVector(int docNumber, String field, TermVectorMapper mapper) throws IOException { ensureOpen(); @@ -151,6 +162,12 @@ } @Override + public long getUniqueTermCount() throws IOException { + ensureOpen(); + return in.getUniqueTermCount(); + } + + @Override public int numDocs() { // Don't call ensureOpen() here (it could affect performance) return in.numDocs();