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

svn commit: r1387222 - in /lucene/dev/trunk/lucene: ./ codecs/src/java/org/apache/lucene/codecs/appending/ codecs/src/java/org/apache/lucene/codecs/bloom/ codecs/src/java/org/apache/lucene/codecs/memory/ codecs/src/java/org/apache/lucene/codecs/simplet...

Author: jpountz
Date: Tue Sep 18 15:57:02 2012
New Revision: 1387222

URL: http://svn.apache.org/viewvc?rev=1387222&view=rev
Log:
LUCENE-4391: Make Lucene40Codec's methods final.

Added:
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/FilterCodec.java   (with props)
Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingCodec.java
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPostingsFormat.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40Codec.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingCodec.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPostingsFormat.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/bloom/TestBloomFilteredLucene40Postings.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40ords/Lucene40WithOrds.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockFixedIntBlockPostingsFormat.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockVariableIntBlockPostingsFormat.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockrandom/MockRandomPostingsFormat.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mocksep/MockSepPostingsFormat.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/nestedpulsing/NestedPulsingPostingsFormat.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Tue Sep 18 15:57:02 2012
@@ -52,6 +52,10 @@ New Features
 
 API Changes
 
+* LUCENE-4391: All methods of Lucene40Codec but getPostingsFormatForField are
+  now final. To reuse functionality of Lucene40, you should extend FilterCodec
+  and delegate to Lucene40 instead of extending Lucene40Codec. (Adrien Grand)
+
 * LUCENE-4299: Added Terms.hasPositions() and Terms.hasOffsets().
   Previously you had no real way to know that a term vector field
   had positions or offsets, since this can be configured on a 

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingCodec.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingCodec.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingCodec.java Tue Sep 18 15:57:02 2012
@@ -18,22 +18,9 @@ package org.apache.lucene.codecs.appendi
  */
 
 import org.apache.lucene.codecs.Codec;
-import org.apache.lucene.codecs.DocValuesFormat;
-import org.apache.lucene.codecs.FieldInfosFormat;
-import org.apache.lucene.codecs.LiveDocsFormat;
-import org.apache.lucene.codecs.NormsFormat;
+import org.apache.lucene.codecs.FilterCodec;
 import org.apache.lucene.codecs.PostingsFormat;
-import org.apache.lucene.codecs.SegmentInfoFormat;
-import org.apache.lucene.codecs.StoredFieldsFormat;
-import org.apache.lucene.codecs.TermVectorsFormat;
 import org.apache.lucene.codecs.lucene40.Lucene40Codec;
-import org.apache.lucene.codecs.lucene40.Lucene40DocValuesFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40LiveDocsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40NormsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40SegmentInfoFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40StoredFieldsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40TermVectorsFormat;
 
 /**
  * This codec uses an index format that is very similar to
@@ -42,57 +29,22 @@ import org.apache.lucene.codecs.lucene40
  *
  * @lucene.experimental
  */
-public class AppendingCodec extends Codec {
+public final class AppendingCodec extends FilterCodec {
+
   public AppendingCodec() {
     super("Appending");
   }
 
   private final PostingsFormat postings = new AppendingPostingsFormat();
-  private final SegmentInfoFormat infos = new Lucene40SegmentInfoFormat();
-  private final StoredFieldsFormat fields = new Lucene40StoredFieldsFormat();
-  private final FieldInfosFormat fieldInfos = new Lucene40FieldInfosFormat();
-  private final TermVectorsFormat vectors = new Lucene40TermVectorsFormat();
-  private final DocValuesFormat docValues = new Lucene40DocValuesFormat();
-  private final NormsFormat norms = new Lucene40NormsFormat();
-  private final LiveDocsFormat liveDocs = new Lucene40LiveDocsFormat();
-  
-  @Override
-  public PostingsFormat postingsFormat() {
-    return postings;
-  }
 
   @Override
-  public StoredFieldsFormat storedFieldsFormat() {
-    return fields;
-  }
-  
-  @Override
-  public TermVectorsFormat termVectorsFormat() {
-    return vectors;
+  protected Codec delegate() {
+    return Codec.forName("Lucene40");
   }
 
   @Override
-  public DocValuesFormat docValuesFormat() {
-    return docValues;
+  public PostingsFormat postingsFormat() {
+    return postings;
   }
 
-  @Override
-  public SegmentInfoFormat segmentInfoFormat() {
-    return infos;
-  }
-  
-  @Override
-  public FieldInfosFormat fieldInfosFormat() {
-    return fieldInfos;
-  }
-  
-  @Override
-  public NormsFormat normsFormat() {
-    return norms;
-  }
-  
-  @Override
-  public LiveDocsFormat liveDocsFormat() {
-    return liveDocs;
-  }
 }

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -33,7 +33,7 @@ import org.apache.lucene.index.SegmentWr
 /**
  * Appending postings impl.
  */
-class AppendingPostingsFormat extends PostingsFormat {
+final class AppendingPostingsFormat extends PostingsFormat {
   public static String CODEC_NAME = "Appending";
   
   public AppendingPostingsFormat() {

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -80,7 +80,7 @@ import org.apache.lucene.util.automaton.
  * </ul>
  * @lucene.experimental
  */
-public class BloomFilteringPostingsFormat extends PostingsFormat {
+public final class BloomFilteringPostingsFormat extends PostingsFormat {
   
   public static final String BLOOM_CODEC_NAME = "BloomFilter";
   public static final int BLOOM_CODEC_VERSION = 1;

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -71,7 +71,7 @@ import org.apache.lucene.util.automaton.
  *
  * @lucene.experimental */
 
-public class DirectPostingsFormat extends PostingsFormat {
+public final class DirectPostingsFormat extends PostingsFormat {
 
   private final int minSkipCount;
   private final int lowFreqCutoff;

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -79,7 +79,7 @@ import org.apache.lucene.util.packed.Pac
 // TODO: Maybe name this 'Cached' or something to reflect
 // the reality that it is actually written to disk, but
 // loads itself in ram?
-public class MemoryPostingsFormat extends PostingsFormat {
+public final class MemoryPostingsFormat extends PostingsFormat {
 
   private final boolean doPackFST;
   private final float acceptableOverheadRatio;

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -34,7 +34,7 @@ import org.apache.lucene.index.IndexFile
  *  any text editor, and even edit it to alter your index.
  *
  *  @lucene.experimental */
-public class SimpleTextPostingsFormat extends PostingsFormat {
+public final class SimpleTextPostingsFormat extends PostingsFormat {
   
   public SimpleTextPostingsFormat() {
     super("SimpleText");

Added: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/FilterCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/FilterCodec.java?rev=1387222&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/FilterCodec.java (added)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/FilterCodec.java Tue Sep 18 15:57:02 2012
@@ -0,0 +1,96 @@
+package org.apache.lucene.codecs;
+
+/*
+ * 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.
+ */
+
+/**
+ * A codec that forwards all its method calls to another codec.
+ * <p>
+ * Extend this class when you need to reuse the functionality of an existing
+ * codec. For example, if you want to build a codec that redefines Lucene40's
+ * {@link LiveDocsFormat}:
+ * <pre class="prettyprint">
+ *   public final class CustomCodec extends FilterCodec {
+ *
+ *     public CustomCodec() {
+ *       super("CustomCodec");
+ *     }
+ *
+ *     public Codec delegate() {
+ *       return Codec.forName("Lucene40");
+ *     }
+ *
+ *     public LiveDocsFormat liveDocsFormat() {
+ *       return new CustomLiveDocsFormat();
+ *     }
+ *
+ *   }
+ * </pre>
+ */
+public abstract class FilterCodec extends Codec {
+
+  public FilterCodec(String name) {
+    super(name);
+  }
+
+  /**
+   * Return the codec that is responsible for providing default format
+   * implementations.
+   */
+  protected abstract Codec delegate();
+
+  @Override
+  public DocValuesFormat docValuesFormat() {
+    return delegate().docValuesFormat();
+  }
+
+  @Override
+  public FieldInfosFormat fieldInfosFormat() {
+    return delegate().fieldInfosFormat();
+  }
+
+  @Override
+  public LiveDocsFormat liveDocsFormat() {
+    return delegate().liveDocsFormat();
+  }
+
+  @Override
+  public NormsFormat normsFormat() {
+    return delegate().normsFormat();
+  }
+
+  @Override
+  public PostingsFormat postingsFormat() {
+    return delegate().postingsFormat();
+  }
+
+  @Override
+  public SegmentInfoFormat segmentInfoFormat() {
+    return delegate().segmentInfoFormat();
+  }
+
+  @Override
+  public StoredFieldsFormat storedFieldsFormat() {
+    return delegate().storedFieldsFormat();
+  }
+
+  @Override
+  public TermVectorsFormat termVectorsFormat() {
+    return delegate().termVectorsFormat();
+  }
+
+}

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40Codec.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40Codec.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40Codec.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40Codec.java Tue Sep 18 15:57:02 2012
@@ -20,6 +20,7 @@ package org.apache.lucene.codecs.lucene4
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.codecs.DocValuesFormat;
 import org.apache.lucene.codecs.FieldInfosFormat;
+import org.apache.lucene.codecs.FilterCodec;
 import org.apache.lucene.codecs.LiveDocsFormat;
 import org.apache.lucene.codecs.NormsFormat;
 import org.apache.lucene.codecs.PostingsFormat;
@@ -30,7 +31,10 @@ import org.apache.lucene.codecs.perfield
 
 /**
  * Implements the Lucene 4.0 index format, with configurable per-field postings formats.
- * 
+ * <p>
+ * If you want to reuse functionality of this codec in another codec, extend
+ * {@link FilterCodec}.
+ *
  * @see org.apache.lucene.codecs.lucene40 package documentation for file format details.
  * @lucene.experimental
  */
@@ -58,42 +62,42 @@ public class Lucene40Codec extends Codec
   }
   
   @Override
-  public StoredFieldsFormat storedFieldsFormat() {
+  public final StoredFieldsFormat storedFieldsFormat() {
     return fieldsFormat;
   }
   
   @Override
-  public TermVectorsFormat termVectorsFormat() {
+  public final TermVectorsFormat termVectorsFormat() {
     return vectorsFormat;
   }
 
   @Override
-  public DocValuesFormat docValuesFormat() {
+  public final DocValuesFormat docValuesFormat() {
     return docValuesFormat;
   }
 
   @Override
-  public PostingsFormat postingsFormat() {
+  public final PostingsFormat postingsFormat() {
     return postingsFormat;
   }
   
   @Override
-  public FieldInfosFormat fieldInfosFormat() {
+  public final FieldInfosFormat fieldInfosFormat() {
     return fieldInfosFormat;
   }
   
   @Override
-  public SegmentInfoFormat segmentInfoFormat() {
+  public final SegmentInfoFormat segmentInfoFormat() {
     return infosFormat;
   }
 
   @Override
-  public NormsFormat normsFormat() {
+  public final NormsFormat normsFormat() {
     return normsFormat;
   }
   
   @Override
-  public LiveDocsFormat liveDocsFormat() {
+  public final LiveDocsFormat liveDocsFormat() {
     return liveDocsFormat;
   }
 

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -269,7 +269,7 @@ import org.apache.lucene.util.fst.FST; /
 // TODO: this class could be created by wrapping
 // BlockTreeTermsDict around Lucene40PostingsBaseFormat; ie
 // we should not duplicate the code from that class here:
-public class Lucene40PostingsFormat extends PostingsFormat {
+public final class Lucene40PostingsFormat extends PostingsFormat {
 
   private final int minBlockSize;
   private final int maxBlockSize;

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -63,7 +63,7 @@ public abstract class PerFieldPostingsFo
   }
 
   @Override
-  public FieldsConsumer fieldsConsumer(SegmentWriteState state)
+  public final FieldsConsumer fieldsConsumer(SegmentWriteState state)
       throws IOException {
     return new FieldsWriter(state);
   }
@@ -220,7 +220,7 @@ public abstract class PerFieldPostingsFo
   }
 
   @Override
-  public FieldsProducer fieldsProducer(SegmentReadState state)
+  public final FieldsProducer fieldsProducer(SegmentReadState state)
       throws IOException {
     return new FieldsReader(state);
   }

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java Tue Sep 18 15:57:02 2012
@@ -25,22 +25,9 @@ import java.util.List;
 
 import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.codecs.Codec;
-import org.apache.lucene.codecs.DocValuesFormat;
-import org.apache.lucene.codecs.FieldInfosFormat;
-import org.apache.lucene.codecs.LiveDocsFormat;
-import org.apache.lucene.codecs.NormsFormat;
+import org.apache.lucene.codecs.FilterCodec;
 import org.apache.lucene.codecs.PostingsFormat;
-import org.apache.lucene.codecs.SegmentInfoFormat;
-import org.apache.lucene.codecs.StoredFieldsFormat;
-import org.apache.lucene.codecs.TermVectorsFormat;
 import org.apache.lucene.codecs.lucene40.Lucene40Codec;
-import org.apache.lucene.codecs.lucene40.Lucene40DocValuesFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40LiveDocsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40NormsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40SegmentInfoFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40StoredFieldsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40TermVectorsFormat;
 import org.apache.lucene.codecs.pulsing.Pulsing40PostingsFormat;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
@@ -1120,49 +1107,14 @@ public class TestAddIndexes extends Luce
     dir.close();
   }
   
-  private static class UnRegisteredCodec extends Codec {
+  private static final class UnRegisteredCodec extends FilterCodec {
     public UnRegisteredCodec() {
       super("NotRegistered");
     }
 
     @Override
-    public PostingsFormat postingsFormat() {
-      return PostingsFormat.forName("Lucene40");
-    }
-
-    @Override
-    public DocValuesFormat docValuesFormat() {
-      return new Lucene40DocValuesFormat();
-    }
-
-    @Override
-    public StoredFieldsFormat storedFieldsFormat() {
-      return new Lucene40StoredFieldsFormat();
-    }
-    
-    @Override
-    public TermVectorsFormat termVectorsFormat() {
-      return new Lucene40TermVectorsFormat();
-    }
-    
-    @Override
-    public FieldInfosFormat fieldInfosFormat() {
-      return new Lucene40FieldInfosFormat();
-    }
-
-    @Override
-    public SegmentInfoFormat segmentInfoFormat() {
-      return new Lucene40SegmentInfoFormat();
-    }
-
-    @Override
-    public NormsFormat normsFormat() {
-      return new Lucene40NormsFormat();
-    }
-    
-    @Override
-    public LiveDocsFormat liveDocsFormat() {
-      return new Lucene40LiveDocsFormat();
+    protected Codec delegate() {
+      return Codec.forName("Lucene40");
     }
   }
   

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingCodec.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingCodec.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingCodec.java Tue Sep 18 15:57:02 2012
@@ -18,53 +18,31 @@ package org.apache.lucene.codecs.asserti
  */
 
 import org.apache.lucene.codecs.Codec;
-import org.apache.lucene.codecs.DocValuesFormat;
-import org.apache.lucene.codecs.FieldInfosFormat;
-import org.apache.lucene.codecs.LiveDocsFormat;
-import org.apache.lucene.codecs.NormsFormat;
+import org.apache.lucene.codecs.FilterCodec;
 import org.apache.lucene.codecs.PostingsFormat;
-import org.apache.lucene.codecs.SegmentInfoFormat;
-import org.apache.lucene.codecs.StoredFieldsFormat;
 import org.apache.lucene.codecs.TermVectorsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40Codec; // javadocs @link
-import org.apache.lucene.codecs.lucene40.Lucene40DocValuesFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40LiveDocsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40NormsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40SegmentInfoFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40StoredFieldsFormat;
+import org.apache.lucene.codecs.lucene40.Lucene40Codec;
 
 /**
  * Acts like {@link Lucene40Codec} but with additional asserts.
  */
-public class AssertingCodec extends Codec {
+public final class AssertingCodec extends FilterCodec {
 
   private final PostingsFormat postings = new AssertingPostingsFormat();
-  private final SegmentInfoFormat infos = new Lucene40SegmentInfoFormat();
-  private final StoredFieldsFormat fields = new Lucene40StoredFieldsFormat();
-  private final FieldInfosFormat fieldInfos = new Lucene40FieldInfosFormat();
   private final TermVectorsFormat vectors = new AssertingTermVectorsFormat();
-  private final DocValuesFormat docValues = new Lucene40DocValuesFormat();
-  private final NormsFormat norms = new Lucene40NormsFormat();
-  private final LiveDocsFormat liveDocs = new Lucene40LiveDocsFormat();
-  
+
   public AssertingCodec() {
     super("Asserting");
   }
 
   @Override
-  public PostingsFormat postingsFormat() {
-    return postings;
-  }
-
-  @Override
-  public DocValuesFormat docValuesFormat() {
-    return docValues;
+  protected Codec delegate() {
+    return Codec.forName("Lucene40");
   }
 
   @Override
-  public StoredFieldsFormat storedFieldsFormat() {
-    return fields;
+  public PostingsFormat postingsFormat() {
+    return postings;
   }
 
   @Override
@@ -72,23 +50,4 @@ public class AssertingCodec extends Code
     return vectors;
   }
 
-  @Override
-  public FieldInfosFormat fieldInfosFormat() {
-    return fieldInfos;
-  }
-
-  @Override
-  public SegmentInfoFormat segmentInfoFormat() {
-    return infos;
-  }
-
-  @Override
-  public NormsFormat normsFormat() {
-    return norms;
-  }
-
-  @Override
-  public LiveDocsFormat liveDocsFormat() {
-    return liveDocs;
-  }
 }

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -40,7 +40,7 @@ import org.apache.lucene.util.OpenBitSet
 /**
  * Just like {@link Lucene40PostingsFormat} but with additional asserts.
  */
-public class AssertingPostingsFormat extends PostingsFormat {
+public final class AssertingPostingsFormat extends PostingsFormat {
   private final PostingsFormat in = new Lucene40PostingsFormat();
   
   public AssertingPostingsFormat() {

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/bloom/TestBloomFilteredLucene40Postings.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/bloom/TestBloomFilteredLucene40Postings.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/bloom/TestBloomFilteredLucene40Postings.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/bloom/TestBloomFilteredLucene40Postings.java Tue Sep 18 15:57:02 2012
@@ -34,7 +34,7 @@ import org.apache.lucene.index.SegmentWr
  * APPLICATION This is not a realistic application of Bloom Filters as they
  * ordinarily are larger and operate on only primary key type fields.
  */
-public class TestBloomFilteredLucene40Postings extends PostingsFormat {
+public final class TestBloomFilteredLucene40Postings extends PostingsFormat {
   
   private BloomFilteringPostingsFormat delegate;
   

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40ords/Lucene40WithOrds.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40ords/Lucene40WithOrds.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40ords/Lucene40WithOrds.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40ords/Lucene40WithOrds.java Tue Sep 18 15:57:02 2012
@@ -44,7 +44,7 @@ import org.apache.lucene.util.BytesRef;
  * Customized version of {@link Lucene40Codec} that uses
  * {@link FixedGapTermsIndexWriter}.
  */
-public class Lucene40WithOrds extends PostingsFormat {
+public final class Lucene40WithOrds extends PostingsFormat {
     
   public Lucene40WithOrds() {
     super("Lucene40WithOrds");

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockFixedIntBlockPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockFixedIntBlockPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockFixedIntBlockPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockFixedIntBlockPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -49,7 +49,7 @@ import org.apache.lucene.util.IOUtils;
  * used here just writes each block as a series of vInt.
  */
 
-public class MockFixedIntBlockPostingsFormat extends PostingsFormat {
+public final class MockFixedIntBlockPostingsFormat extends PostingsFormat {
 
   private final int blockSize;
 

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockVariableIntBlockPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockVariableIntBlockPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockVariableIntBlockPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockVariableIntBlockPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -53,7 +53,7 @@ import org.apache.lucene.util.IOUtils;
  * int is <= 3, else 2*baseBlockSize.
  */
 
-public class MockVariableIntBlockPostingsFormat extends PostingsFormat {
+public final class MockVariableIntBlockPostingsFormat extends PostingsFormat {
   private final int baseBlockSize;
   
   public MockVariableIntBlockPostingsFormat() {

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockrandom/MockRandomPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockrandom/MockRandomPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockrandom/MockRandomPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mockrandom/MockRandomPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -66,7 +66,7 @@ import org.apache.lucene.util._TestUtil;
  * Randomly combines terms index impl w/ postings impls.
  */
 
-public class MockRandomPostingsFormat extends PostingsFormat {
+public final class MockRandomPostingsFormat extends PostingsFormat {
   private final Random seedRandom;
   private final String SEED_EXT = "sd";
   

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mocksep/MockSepPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mocksep/MockSepPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mocksep/MockSepPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mocksep/MockSepPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -42,7 +42,7 @@ import org.apache.lucene.util.BytesRef;
  * This is here just to test the core sep codec
  * classes.
  */
-public class MockSepPostingsFormat extends PostingsFormat {
+public final class MockSepPostingsFormat extends PostingsFormat {
 
   public MockSepPostingsFormat() {
     super("MockSep");

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/nestedpulsing/NestedPulsingPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/nestedpulsing/NestedPulsingPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/nestedpulsing/NestedPulsingPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/nestedpulsing/NestedPulsingPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -41,7 +41,7 @@ import org.apache.lucene.util.IOUtils;
 // TODO: if we create PulsingPostingsBaseFormat then we
 // can simplify this? note: I don't like the *BaseFormat
 // hierarchy, maybe we can clean that up...
-public class NestedPulsingPostingsFormat extends PostingsFormat {
+public final class NestedPulsingPostingsFormat extends PostingsFormat {
   public NestedPulsingPostingsFormat() {
     super("NestedPulsing");
   }

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java?rev=1387222&r1=1387221&r2=1387222&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java Tue Sep 18 15:57:02 2012
@@ -57,7 +57,7 @@ import org.apache.lucene.util.IOUtils;
  *
  *  NOTE: this codec sorts terms by reverse-unicode-order! */
 
-public class RAMOnlyPostingsFormat extends PostingsFormat {
+public final class RAMOnlyPostingsFormat extends PostingsFormat {
 
   // For fun, test that we can override how terms are
   // sorted, and basic things still work -- this comparator