You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2012/09/02 13:21:05 UTC

svn commit: r1379940 [1/13] - in /lucene/dev/branches/lucene3312: ./ dev-tools/ dev-tools/maven/solr/core/ dev-tools/maven/solr/solrj/ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ luc...

Author: uschindler
Date: Sun Sep  2 11:21:01 2012
New Revision: 1379940

URL: http://svn.apache.org/viewvc?rev=1379940&view=rev
Log:
LUCENE-3312: Final merge before reintegrate

Added:
    lucene/dev/branches/lucene3312/solr/contrib/extraction/src/test-files/extraction/word2003.doc
      - copied unchanged from r1379939, lucene/dev/trunk/solr/contrib/extraction/src/test-files/extraction/word2003.doc
    lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/search/TestElisionMultitermQuery.java
      - copied unchanged from r1379939, lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestElisionMultitermQuery.java
Removed:
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock1.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock10.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock12.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock16.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock2.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock21.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock3.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock4.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock5.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock6.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock7.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock8.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock9.java
Modified:
    lucene/dev/branches/lucene3312/   (props changed)
    lucene/dev/branches/lucene3312/dev-tools/   (props changed)
    lucene/dev/branches/lucene3312/dev-tools/maven/solr/core/pom.xml.template
    lucene/dev/branches/lucene3312/dev-tools/maven/solr/solrj/pom.xml.template
    lucene/dev/branches/lucene3312/lucene/   (props changed)
    lucene/dev/branches/lucene3312/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene3312/lucene/analysis/   (props changed)
    lucene/dev/branches/lucene3312/lucene/analysis/common/   (props changed)
    lucene/dev/branches/lucene3312/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ElisionFilterFactory.java
    lucene/dev/branches/lucene3312/lucene/benchmark/   (props changed)
    lucene/dev/branches/lucene3312/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/DocMaker.java
    lucene/dev/branches/lucene3312/lucene/core/   (props changed)
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTermsReader.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsReader.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/FixedGapTermsIndexReader.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/VariableGapTermsIndexReader.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingTermsReader.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/block/BlockPostingsFormat.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/pulsing/PulsingPostingsFormat.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/document/Field.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterDeleteQueue.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/search/CollectionStatistics.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperation.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked1.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked10.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked11.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked12.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked13.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked14.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked15.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked16.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked17.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked18.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked19.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked2.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked20.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked21.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked22.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked23.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked24.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked3.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked4.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked5.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked6.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked7.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked8.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked9.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock.java
    lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/gen_BulkOperation.py
    lucene/dev/branches/lucene3312/lucene/queryparser/   (props changed)
    lucene/dev/branches/lucene3312/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/standard/TestNumericQueryParser.java
    lucene/dev/branches/lucene3312/lucene/spatial/   (props changed)
    lucene/dev/branches/lucene3312/lucene/spatial/src/java/org/apache/lucene/spatial/prefix/tree/GeohashPrefixTree.java
    lucene/dev/branches/lucene3312/lucene/spatial/src/java/org/apache/lucene/spatial/prefix/tree/QuadPrefixTree.java
    lucene/dev/branches/lucene3312/lucene/spatial/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTree.java
    lucene/dev/branches/lucene3312/lucene/spatial/src/java/org/apache/lucene/spatial/query/SpatialArgs.java
    lucene/dev/branches/lucene3312/lucene/spatial/src/test/org/apache/lucene/spatial/prefix/TestRecursivePrefixTreeStrategy.java
    lucene/dev/branches/lucene3312/lucene/test-framework/   (props changed)
    lucene/dev/branches/lucene3312/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40ords/Lucene40WithOrds.java
    lucene/dev/branches/lucene3312/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockFixedIntBlockPostingsFormat.java
    lucene/dev/branches/lucene3312/lucene/test-framework/src/java/org/apache/lucene/codecs/mockintblock/MockVariableIntBlockPostingsFormat.java
    lucene/dev/branches/lucene3312/lucene/test-framework/src/java/org/apache/lucene/codecs/mockrandom/MockRandomPostingsFormat.java
    lucene/dev/branches/lucene3312/lucene/test-framework/src/java/org/apache/lucene/codecs/mocksep/MockSepPostingsFormat.java
    lucene/dev/branches/lucene3312/lucene/test-framework/src/java/org/apache/lucene/codecs/nestedpulsing/NestedPulsingPostingsFormat.java
    lucene/dev/branches/lucene3312/solr/   (props changed)
    lucene/dev/branches/lucene3312/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene3312/solr/contrib/   (props changed)
    lucene/dev/branches/lucene3312/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java
    lucene/dev/branches/lucene3312/solr/core/   (props changed)
    lucene/dev/branches/lucene3312/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
    lucene/dev/branches/lucene3312/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
    lucene/dev/branches/lucene3312/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java
    lucene/dev/branches/lucene3312/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
    lucene/dev/branches/lucene3312/solr/core/src/test-files/solr/collection1/conf/schema-folding.xml
    lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java
    lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java
    lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java

Modified: lucene/dev/branches/lucene3312/dev-tools/maven/solr/core/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/dev-tools/maven/solr/core/pom.xml.template?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/dev-tools/maven/solr/core/pom.xml.template (original)
+++ lucene/dev/branches/lucene3312/dev-tools/maven/solr/core/pom.xml.template Sun Sep  2 11:21:01 2012
@@ -234,9 +234,6 @@
         </excludes>
       </testResource>
       <testResource>
-        <directory>${top-level}/solr/solrj/src/test-files</directory>
-      </testResource>
-      <testResource>
         <directory>${top-level}/dev-tools/maven/solr</directory>
         <includes>
           <include>maven.testlogging.properties</include>
@@ -249,7 +246,7 @@
         <artifactId>build-helper-maven-plugin</artifactId>
         <executions>
           <execution>
-            <id>add-sorlj-and-test-framework</id>
+            <id>add-test-framework</id>
             <phase>generate-test-sources</phase>
             <goals>
               <goal>add-test-source</goal>
@@ -257,7 +254,6 @@
             <configuration>
               <sources>
                 <source>${top-level}/solr/test-framework/src/java</source>
-                <source>${top-level}/solr/solrj/src/test</source>  <!-- solrj tests are run from solr-core -->
               </sources>
             </configuration>
           </execution>

Modified: lucene/dev/branches/lucene3312/dev-tools/maven/solr/solrj/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/dev-tools/maven/solr/solrj/pom.xml.template?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/dev-tools/maven/solr/solrj/pom.xml.template (original)
+++ lucene/dev/branches/lucene3312/dev-tools/maven/solr/solrj/pom.xml.template Sun Sep  2 11:21:01 2012
@@ -115,25 +115,184 @@
         </exclusion>
       </exclusions>
     </dependency>
+
+    <dependency>
+      <!-- lucene-test-framework dependency must be declared before lucene-core -->
+      <!-- This dependency cannot be put into solr-parent, because local        -->
+      <!-- dependencies are always ordered before inherited dependencies.       -->
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-test-framework</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-core</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-analyzers-common</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-analyzers-kuromoji</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-analyzers-morfologik</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-analyzers-phonetic</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-highlighter</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-memory</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-misc</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-queryparser</artifactId>
+      <version>${project.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.lucene</groupId>
+          <artifactId>lucene-sandbox</artifactId>
+        </exclusion>
+      </exclusions>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-spatial</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-suggest</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-grouping</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-queries</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-fileupload</groupId>
+      <artifactId>commons-fileupload</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-jdk14</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-server</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-util</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-webapp</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <sourceDirectory>${module-path}/src/java</sourceDirectory>
     <testSourceDirectory>${module-path}/src/test</testSourceDirectory>
-    <testResources/>
+    <testResources>
+      <testResource>
+        <directory>${module-path}/src/test-files</directory>
+      </testResource>
+      <testResource>
+        <directory>${top-level}/dev-tools/maven/solr</directory>
+        <includes>
+          <include>maven.testlogging.properties</include>
+        </includes>
+      </testResource>
+    </testResources>
     <plugins>
       <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skip>true</skip> <!-- Tests are run from solr-core module -->
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <configuration>
-          <skip>true</skip> <!-- This skips test compilation - tests are run from solr-core module -->
-        </configuration>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>add-solr-core-and-test-framework</id>
+            <phase>generate-test-sources</phase>
+            <goals>
+              <goal>add-test-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${top-level}/solr/core/src/java</source>
+                <source>${top-level}/solr/test-framework/src/java</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
       </plugin>
     </plugins>
   </build>

Modified: lucene/dev/branches/lucene3312/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/CHANGES.txt?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene3312/lucene/CHANGES.txt Sun Sep  2 11:21:01 2012
@@ -29,6 +29,9 @@ New Features
   as the default Codec on IndexWriter, because it cannot write new segments.
   (Mike McCandless, Robert Muir)
 
+* SOLR-3441: ElisionFilterFactory is now MultiTermAware
+  (Jack Krupansky via hossman)
+
 API Changes
 
 * LUCENE-4299: Added Terms.hasPositions() and Terms.hasOffsets().

Modified: lucene/dev/branches/lucene3312/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ElisionFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ElisionFilterFactory.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ElisionFilterFactory.java (original)
+++ lucene/dev/branches/lucene3312/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ElisionFilterFactory.java Sun Sep  2 11:21:01 2012
@@ -34,7 +34,7 @@ import org.apache.lucene.analysis.fr.Fre
  * &lt;/fieldType&gt;</pre>
  *
  */
-public class ElisionFilterFactory extends TokenFilterFactory implements ResourceLoaderAware {
+public class ElisionFilterFactory extends TokenFilterFactory implements ResourceLoaderAware, MultiTermAwareComponent {
 
   private CharArraySet articles;
 
@@ -53,5 +53,10 @@ public class ElisionFilterFactory extend
   public ElisionFilter create(TokenStream input) {
     return new ElisionFilter(input, articles);
   }
+
+  @Override
+  public AbstractAnalysisFactory getMultiTermComponent() {
+    return this;
+  }
 }
 

Modified: lucene/dev/branches/lucene3312/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/DocMaker.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/DocMaker.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/DocMaker.java (original)
+++ lucene/dev/branches/lucene3312/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/DocMaker.java Sun Sep  2 11:21:01 2012
@@ -170,7 +170,7 @@ public class DocMaker implements Closeab
           f = new DoubleField(name, 0.0, Field.Store.NO);
           break;
         default:
-          assert false;
+          throw new AssertionError("Cannot get here");
         }
         if (reuseFields) {
           numericFields.put(name, f);

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTermsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTermsReader.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTermsReader.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTermsReader.java Sun Sep  2 11:21:01 2012
@@ -23,12 +23,14 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.TreeMap;
 
+import org.apache.lucene.index.CorruptIndexException;
 import org.apache.lucene.index.DocsAndPositionsEnum;
 import org.apache.lucene.index.DocsEnum;
 import org.apache.lucene.index.FieldInfo.IndexOptions;
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.index.TermState;
 import org.apache.lucene.index.Terms;
 import org.apache.lucene.index.TermsEnum;
@@ -104,7 +106,7 @@ public class BlockTermsReader extends Fi
   
   // private String segment;
   
-  public BlockTermsReader(TermsIndexReaderBase indexReader, Directory dir, FieldInfos fieldInfos, String segment, PostingsReaderBase postingsReader, IOContext context,
+  public BlockTermsReader(TermsIndexReaderBase indexReader, Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext context,
                           int termsCacheSize, String segmentSuffix)
     throws IOException {
     
@@ -112,7 +114,7 @@ public class BlockTermsReader extends Fi
     termsCache = new DoubleBarrelLRUCache<FieldAndTerm,BlockTermState>(termsCacheSize);
 
     // this.segment = segment;
-    in = dir.openInput(IndexFileNames.segmentFileName(segment, segmentSuffix, BlockTermsWriter.TERMS_EXTENSION),
+    in = dir.openInput(IndexFileNames.segmentFileName(info.name, segmentSuffix, BlockTermsWriter.TERMS_EXTENSION),
                        context);
 
     boolean success = false;
@@ -126,6 +128,9 @@ public class BlockTermsReader extends Fi
       seekDir(in, dirOffset);
 
       final int numFields = in.readVInt();
+      if (numFields < 0) {
+        throw new CorruptIndexException("invalid number of fields: " + numFields + " (resource=" + in + ")");
+      }
       for(int i=0;i<numFields;i++) {
         final int field = in.readVInt();
         final long numTerms = in.readVLong();
@@ -135,8 +140,19 @@ public class BlockTermsReader extends Fi
         final long sumTotalTermFreq = fieldInfo.getIndexOptions() == IndexOptions.DOCS_ONLY ? -1 : in.readVLong();
         final long sumDocFreq = in.readVLong();
         final int docCount = in.readVInt();
-        assert !fields.containsKey(fieldInfo.name);
-        fields.put(fieldInfo.name, new FieldReader(fieldInfo, numTerms, termsStartPointer, sumTotalTermFreq, sumDocFreq, docCount));
+        if (docCount < 0 || docCount > info.getDocCount()) { // #docs with field must be <= #docs
+          throw new CorruptIndexException("invalid docCount: " + docCount + " maxDoc: " + info.getDocCount() + " (resource=" + in + ")");
+        }
+        if (sumDocFreq < docCount) {  // #postings must be >= #docs with field
+          throw new CorruptIndexException("invalid sumDocFreq: " + sumDocFreq + " docCount: " + docCount + " (resource=" + in + ")");
+        }
+        if (sumTotalTermFreq != -1 && sumTotalTermFreq < sumDocFreq) { // #positions must be >= #postings
+          throw new CorruptIndexException("invalid sumTotalTermFreq: " + sumTotalTermFreq + " sumDocFreq: " + sumDocFreq + " (resource=" + in + ")");
+        }
+        FieldReader previous = fields.put(fieldInfo.name, new FieldReader(fieldInfo, numTerms, termsStartPointer, sumTotalTermFreq, sumDocFreq, docCount));
+        if (previous != null) {
+          throw new CorruptIndexException("duplicate fields: " + fieldInfo.name + " (resource=" + in + ")");
+        }
       }
       success = true;
     } finally {

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsReader.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsReader.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsReader.java Sun Sep  2 11:21:01 2012
@@ -27,12 +27,14 @@ import java.util.Iterator;
 import java.util.Locale;
 import java.util.TreeMap;
 
+import org.apache.lucene.index.CorruptIndexException;
 import org.apache.lucene.index.DocsAndPositionsEnum;
 import org.apache.lucene.index.DocsEnum;
 import org.apache.lucene.index.FieldInfo.IndexOptions;
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.index.TermState;
 import org.apache.lucene.index.Terms;
 import org.apache.lucene.index.TermsEnum;
@@ -103,14 +105,14 @@ public class BlockTreeTermsReader extend
 
   private String segment;
   
-  public BlockTreeTermsReader(Directory dir, FieldInfos fieldInfos, String segment,
+  public BlockTreeTermsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo info,
                               PostingsReaderBase postingsReader, IOContext ioContext,
                               String segmentSuffix, int indexDivisor)
     throws IOException {
     
     this.postingsReader = postingsReader;
 
-    this.segment = segment;
+    this.segment = info.name;
     in = dir.openInput(IndexFileNames.segmentFileName(segment, segmentSuffix, BlockTreeTermsWriter.TERMS_EXTENSION),
                        ioContext);
 
@@ -135,6 +137,9 @@ public class BlockTreeTermsReader extend
       }
 
       final int numFields = in.readVInt();
+      if (numFields < 0) {
+        throw new CorruptIndexException("invalid numFields: " + numFields + " (resource=" + in + ")");
+      }
 
       for(int i=0;i<numFields;i++) {
         final int field = in.readVInt();
@@ -149,9 +154,20 @@ public class BlockTreeTermsReader extend
         final long sumTotalTermFreq = fieldInfo.getIndexOptions() == IndexOptions.DOCS_ONLY ? -1 : in.readVLong();
         final long sumDocFreq = in.readVLong();
         final int docCount = in.readVInt();
+        if (docCount < 0 || docCount > info.getDocCount()) { // #docs with field must be <= #docs
+          throw new CorruptIndexException("invalid docCount: " + docCount + " maxDoc: " + info.getDocCount() + " (resource=" + in + ")");
+        }
+        if (sumDocFreq < docCount) {  // #postings must be >= #docs with field
+          throw new CorruptIndexException("invalid sumDocFreq: " + sumDocFreq + " docCount: " + docCount + " (resource=" + in + ")");
+        }
+        if (sumTotalTermFreq != -1 && sumTotalTermFreq < sumDocFreq) { // #positions must be >= #postings
+          throw new CorruptIndexException("invalid sumTotalTermFreq: " + sumTotalTermFreq + " sumDocFreq: " + sumDocFreq + " (resource=" + in + ")");
+        }
         final long indexStartFP = indexDivisor != -1 ? indexIn.readVLong() : 0;
-        assert !fields.containsKey(fieldInfo.name);
-        fields.put(fieldInfo.name, new FieldReader(fieldInfo, numTerms, rootCode, sumTotalTermFreq, sumDocFreq, docCount, indexStartFP, indexIn));
+        FieldReader previous = fields.put(fieldInfo.name, new FieldReader(fieldInfo, numTerms, rootCode, sumTotalTermFreq, sumDocFreq, docCount, indexStartFP, indexIn));
+        if (previous != null) {
+          throw new CorruptIndexException("duplicate field: " + fieldInfo.name + " (resource=" + in + ")");
+        }
       }
       success = true;
     } finally {

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/FixedGapTermsIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/FixedGapTermsIndexReader.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/FixedGapTermsIndexReader.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/FixedGapTermsIndexReader.java Sun Sep  2 11:21:01 2012
@@ -20,6 +20,7 @@ package org.apache.lucene.codecs;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.index.CorruptIndexException;
 import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.util.BytesRef;
@@ -85,6 +86,9 @@ public class FixedGapTermsIndexReader ex
       
       readHeader(in);
       indexInterval = in.readInt();
+      if (indexInterval < 1) {
+        throw new CorruptIndexException("invalid indexInterval: " + indexInterval + " (resource=" + in + ")");
+      }
       this.indexDivisor = indexDivisor;
 
       if (indexDivisor < 0) {
@@ -98,18 +102,29 @@ public class FixedGapTermsIndexReader ex
       seekDir(in, dirOffset);
 
       // Read directory
-      final int numFields = in.readVInt();      
+      final int numFields = in.readVInt();     
+      if (numFields < 0) {
+        throw new CorruptIndexException("invalid numFields: " + numFields + " (resource=" + in + ")");
+      }
       //System.out.println("FGR: init seg=" + segment + " div=" + indexDivisor + " nF=" + numFields);
       for(int i=0;i<numFields;i++) {
         final int field = in.readVInt();
         final int numIndexTerms = in.readVInt();
+        if (numIndexTerms < 0) {
+          throw new CorruptIndexException("invalid numIndexTerms: " + numIndexTerms + " (resource=" + in + ")");
+        }
         final long termsStart = in.readVLong();
         final long indexStart = in.readVLong();
         final long packedIndexStart = in.readVLong();
         final long packedOffsetsStart = in.readVLong();
-        assert packedIndexStart >= indexStart: "packedStart=" + packedIndexStart + " indexStart=" + indexStart + " numIndexTerms=" + numIndexTerms + " seg=" + segment;
+        if (packedIndexStart < indexStart) {
+          throw new CorruptIndexException("invalid packedIndexStart: " + packedIndexStart + " indexStart: " + indexStart + "numIndexTerms: " + numIndexTerms + " (resource=" + in + ")");
+        }
         final FieldInfo fieldInfo = fieldInfos.fieldInfo(field);
-        fields.put(fieldInfo, new FieldIndexData(fieldInfo, numIndexTerms, indexStart, termsStart, packedIndexStart, packedOffsetsStart));
+        FieldIndexData previous = fields.put(fieldInfo, new FieldIndexData(fieldInfo, numIndexTerms, indexStart, termsStart, packedIndexStart, packedOffsetsStart));
+        if (previous != null) {
+          throw new CorruptIndexException("duplicate field: " + fieldInfo.name + " (resource=" + in + ")");
+        }
       }
       success = true;
     } finally {

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/VariableGapTermsIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/VariableGapTermsIndexReader.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/VariableGapTermsIndexReader.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/VariableGapTermsIndexReader.java Sun Sep  2 11:21:01 2012
@@ -23,6 +23,7 @@ import java.io.OutputStreamWriter; // fo
 import java.io.Writer;             // for toDot
 import java.util.HashMap;
 
+import org.apache.lucene.index.CorruptIndexException;
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.IndexFileNames;
@@ -71,12 +72,18 @@ public class VariableGapTermsIndexReader
 
       // Read directory
       final int numFields = in.readVInt();
+      if (numFields < 0) {
+        throw new CorruptIndexException("invalid numFields: " + numFields + " (resource=" + in + ")");
+      }
 
       for(int i=0;i<numFields;i++) {
         final int field = in.readVInt();
         final long indexStart = in.readVLong();
         final FieldInfo fieldInfo = fieldInfos.fieldInfo(field);
-        fields.put(fieldInfo, new FieldIndexData(fieldInfo, indexStart));
+        FieldIndexData previous = fields.put(fieldInfo, new FieldIndexData(fieldInfo, indexStart));
+        if (previous != null) {
+          throw new CorruptIndexException("duplicate field: " + fieldInfo.name + " (resource=" + in + ")");
+        }
       }
       success = true;
     } finally {

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingPostingsFormat.java Sun Sep  2 11:21:01 2012
@@ -64,7 +64,7 @@ class AppendingPostingsFormat extends Po
       FieldsProducer ret = new AppendingTermsReader(
                                                     state.dir,
                                                     state.fieldInfos,
-                                                    state.segmentInfo.name,
+                                                    state.segmentInfo,
                                                     postings,
                                                     state.context,
                                                     state.segmentSuffix,

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingTermsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingTermsReader.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingTermsReader.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/appending/AppendingTermsReader.java Sun Sep  2 11:21:01 2012
@@ -23,6 +23,7 @@ import org.apache.lucene.codecs.BlockTre
 import org.apache.lucene.codecs.CodecUtil;
 import org.apache.lucene.codecs.PostingsReaderBase;
 import org.apache.lucene.index.FieldInfos;
+import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
@@ -33,9 +34,9 @@ import org.apache.lucene.store.IndexInpu
  */
 public class AppendingTermsReader extends BlockTreeTermsReader {
 
-  public AppendingTermsReader(Directory dir, FieldInfos fieldInfos, String segment, PostingsReaderBase postingsReader, 
+  public AppendingTermsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, 
       IOContext ioContext, String segmentSuffix, int indexDivisor) throws IOException {
-    super(dir, fieldInfos, segment, postingsReader, ioContext, segmentSuffix, indexDivisor);
+    super(dir, fieldInfos, info, postingsReader, ioContext, segmentSuffix, indexDivisor);
   }
 
   @Override

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/block/BlockPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/block/BlockPostingsFormat.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/block/BlockPostingsFormat.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/block/BlockPostingsFormat.java Sun Sep  2 11:21:01 2012
@@ -406,7 +406,7 @@ public final class BlockPostingsFormat e
     try {
       FieldsProducer ret = new BlockTreeTermsReader(state.dir,
                                                     state.fieldInfos,
-                                                    state.segmentInfo.name,
+                                                    state.segmentInfo,
                                                     postingsReader,
                                                     state.context,
                                                     state.segmentSuffix,

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java Sun Sep  2 11:21:01 2012
@@ -314,7 +314,7 @@ public class Lucene40PostingsFormat exte
       FieldsProducer ret = new BlockTreeTermsReader(
                                                     state.dir,
                                                     state.fieldInfos,
-                                                    state.segmentInfo.name,
+                                                    state.segmentInfo,
                                                     postings,
                                                     state.context,
                                                     state.segmentSuffix,

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java Sun Sep  2 11:21:01 2012
@@ -24,6 +24,7 @@ import java.util.Set;
 
 import org.apache.lucene.codecs.CodecUtil;
 import org.apache.lucene.codecs.SegmentInfoReader;
+import org.apache.lucene.index.CorruptIndexException;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.store.Directory;
@@ -50,10 +51,17 @@ public class Lucene40SegmentInfoReader e
                                    Lucene40SegmentInfoFormat.VERSION_CURRENT);
       final String version = input.readString();
       final int docCount = input.readInt();
+      if (docCount < 0) {
+        throw new CorruptIndexException("invalid docCount: " + docCount + " (resource=" + input + ")");
+      }
       final boolean isCompoundFile = input.readByte() == SegmentInfo.YES;
       final Map<String,String> diagnostics = input.readStringStringMap();
       final Map<String,String> attributes = input.readStringStringMap();
       final Set<String> files = input.readStringSet();
+      
+      if (input.getFilePointer() != input.length()) {
+        throw new CorruptIndexException("did not read all bytes from file \"" + fileName + "\": read " + input.getFilePointer() + " vs size " + input.length() + " (resource: " + input + ")");
+      }
 
       final SegmentInfo si = new SegmentInfo(dir, version, segment, docCount, isCompoundFile,
                                              null, diagnostics, Collections.unmodifiableMap(attributes));

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java Sun Sep  2 11:21:01 2012
@@ -188,7 +188,7 @@ public final class Lucene40StoredFieldsW
       } else if (number instanceof Double) {
         fieldsStream.writeLong(Double.doubleToLongBits(number.doubleValue()));
       } else {
-        assert false;
+        throw new AssertionError("Cannot get here");
       }
     }
   }

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/pulsing/PulsingPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/pulsing/PulsingPostingsFormat.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/pulsing/PulsingPostingsFormat.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/codecs/pulsing/PulsingPostingsFormat.java Sun Sep  2 11:21:01 2012
@@ -100,7 +100,7 @@ public abstract class PulsingPostingsFor
       docsReader = wrappedPostingsBaseFormat.postingsReaderBase(state);
       pulsingReader = new PulsingPostingsReader(docsReader);
       FieldsProducer ret = new BlockTreeTermsReader(
-                                                    state.dir, state.fieldInfos, state.segmentInfo.name,
+                                                    state.dir, state.fieldInfos, state.segmentInfo,
                                                     pulsingReader,
                                                     state.context,
                                                     state.segmentSuffix,

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/document/Field.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/document/Field.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/document/Field.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/document/Field.java Sun Sep  2 11:21:01 2012
@@ -523,7 +523,7 @@ public class Field implements IndexableF
         nts.setDoubleValue(val.doubleValue());
         break;
       default:
-        assert false : "Should never get here";
+        throw new AssertionError("Should never get here");
       }
       return internalTokenStream;
     }

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java Sun Sep  2 11:21:01 2012
@@ -365,7 +365,7 @@ final class DocumentsWriter {
 
       if (!perThread.isActive()) {
         ensureOpen();
-        assert false: "perThread is not active but we are still open";
+        throw new IllegalStateException("perThread is not active but we are still open");
       }
        
       final DocumentsWriterPerThread dwpt = perThread.dwpt;

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterDeleteQueue.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterDeleteQueue.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterDeleteQueue.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterDeleteQueue.java Sun Sep  2 11:21:01 2012
@@ -324,7 +324,7 @@ final class DocumentsWriterDeleteQueue {
         .newUpdater(Node.class, Node.class, "next");
 
     void apply(BufferedDeletes bufferedDeletes, int docIDUpto) {
-      assert false : "sentinel item must never be applied";
+      throw new IllegalStateException("sentinel item must never be applied");
     }
 
     boolean casNext(Node<?> cmp, Node<?> val) {

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java Sun Sep  2 11:21:01 2012
@@ -57,10 +57,14 @@ public class FieldInfos implements Itera
     boolean hasDocValues = false;
     
     for (FieldInfo info : infos) {
-      assert !byNumber.containsKey(info.number);
-      byNumber.put(info.number, info);
-      assert !byName.containsKey(info.name);
-      byName.put(info.name, info);
+      FieldInfo previous = byNumber.put(info.number, info);
+      if (previous != null) {
+        throw new IllegalArgumentException("duplicate field numbers: " + previous.name + " and " + info.name + " have: " + info.number);
+      }
+      previous = byName.put(info.name, info);
+      if (previous != null) {
+        throw new IllegalArgumentException("duplicate field names: " + previous.number + " and " + info.number + " have: " + info.name);
+      }
       
       hasVectors |= info.hasVectors();
       hasProx |= info.isIndexed() && info.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) >= 0;

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/MultiTermsEnum.java Sun Sep  2 11:21:01 2012
@@ -401,8 +401,8 @@ public final class MultiTermsEnum extend
         subDocs[upto].slice = entry.subSlice;
         upto++;
       } else {
-        // One of our subs cannot provide a docsenum:
-        assert false;
+        // should this be an error?
+        assert false : "One of our subs cannot provide a docsenum";
       }
     }
 

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java Sun Sep  2 11:21:01 2012
@@ -282,6 +282,9 @@ public final class SegmentInfos implemen
       version = input.readLong();
       counter = input.readInt();
       int numSegments = input.readInt();
+      if (numSegments < 0) {
+        throw new CorruptIndexException("invalid segment count: " + numSegments + " (resource: " + input + ")");
+      }
       for(int seg=0;seg<numSegments;seg++) {
         String segName = input.readString();
         Codec codec = Codec.forName(input.readString());
@@ -290,7 +293,9 @@ public final class SegmentInfos implemen
         info.setCodec(codec);
         long delGen = input.readLong();
         int delCount = input.readInt();
-        assert delCount <= info.getDocCount();
+        if (delCount < 0 || delCount > info.getDocCount()) {
+          throw new CorruptIndexException("invalid deletion count: " + delCount + " (resource: " + input + ")");
+        }
         add(new SegmentInfoPerCommit(info, delCount, delGen));
       }
       userData = input.readStringStringMap();

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/search/CollectionStatistics.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/search/CollectionStatistics.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/search/CollectionStatistics.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/search/CollectionStatistics.java Sun Sep  2 11:21:01 2012
@@ -34,7 +34,7 @@ public class CollectionStatistics {
   public CollectionStatistics(String field, long maxDoc, long docCount, long sumTotalTermFreq, long sumDocFreq) {
     assert maxDoc >= 0;
     assert docCount >= -1 && docCount <= maxDoc; // #docs with field must be <= #docs
-    assert sumDocFreq >= -1;
+    assert sumDocFreq == -1 || sumDocFreq >= docCount; // #postings must be >= #docs with field
     assert sumTotalTermFreq == -1 || sumTotalTermFreq >= sumDocFreq; // #positions must be >= #postings
     this.field = field;
     this.maxDoc = maxDoc;

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java Sun Sep  2 11:21:01 2012
@@ -355,14 +355,9 @@ public abstract class BufferedIndexInput
    */
   public static int bufferSize(IOContext context) {
     switch (context.context) {
-    case DEFAULT:
-    case FLUSH:
-    case READ:
-      return BUFFER_SIZE;
     case MERGE:
       return MERGE_BUFFER_SIZE;
     default:
-      assert false : "unknown IOContext " + context.context;
       return BUFFER_SIZE;
     }
   }

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperation.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperation.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperation.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperation.java Sun Sep  2 11:21:01 2012
@@ -93,27 +93,27 @@ abstract class BulkOperation implements 
 
   // NOTE: this is sparse (some entries are null):
   private static final BulkOperation[] packedSingleBlockBulkOps = new BulkOperation[] {
-    new BulkOperationPackedSingleBlock1(),
-    new BulkOperationPackedSingleBlock2(),
-    new BulkOperationPackedSingleBlock3(),
-    new BulkOperationPackedSingleBlock4(),
-    new BulkOperationPackedSingleBlock5(),
-    new BulkOperationPackedSingleBlock6(),
-    new BulkOperationPackedSingleBlock7(),
-    new BulkOperationPackedSingleBlock8(),
-    new BulkOperationPackedSingleBlock9(),
-    new BulkOperationPackedSingleBlock10(),
+    new BulkOperationPackedSingleBlock(1),
+    new BulkOperationPackedSingleBlock(2),
+    new BulkOperationPackedSingleBlock(3),
+    new BulkOperationPackedSingleBlock(4),
+    new BulkOperationPackedSingleBlock(5),
+    new BulkOperationPackedSingleBlock(6),
+    new BulkOperationPackedSingleBlock(7),
+    new BulkOperationPackedSingleBlock(8),
+    new BulkOperationPackedSingleBlock(9),
+    new BulkOperationPackedSingleBlock(10),
     null,
-    new BulkOperationPackedSingleBlock12(),
+    new BulkOperationPackedSingleBlock(12),
     null,
     null,
     null,
-    new BulkOperationPackedSingleBlock16(),
+    new BulkOperationPackedSingleBlock(16),
     null,
     null,
     null,
     null,
-    new BulkOperationPackedSingleBlock21(),
+    new BulkOperationPackedSingleBlock(21),
     null,
     null,
     null,

Modified: lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked1.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked1.java?rev=1379940&r1=1379939&r2=1379940&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked1.java (original)
+++ lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked1.java Sun Sep  2 11:21:01 2012
@@ -24,316 +24,60 @@ package org.apache.lucene.util.packed;
  */
 final class BulkOperationPacked1 extends BulkOperationPacked {
 
-    public BulkOperationPacked1() {
-      super(1);
-      assert blockCount() == 1;
-      assert valueCount() == 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block0 >>> 63);
-        values[valuesOffset++] = (int) ((block0 >>> 62) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 61) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 60) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 59) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 58) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 57) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 56) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 55) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 54) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 53) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 52) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 51) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 50) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 49) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 48) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 47) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 46) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 45) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 44) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 43) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 42) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 41) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 40) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 39) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 38) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 37) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 36) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 35) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 34) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 33) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 32) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 31) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 30) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 29) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 28) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 27) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 26) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 25) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 24) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 23) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 22) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 21) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 20) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 19) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 18) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 17) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 16) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 15) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 14) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 13) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 12) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 11) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 10) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 9) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 8) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 7) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 6) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 5) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 4) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 3) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 2) & 1L);
-        values[valuesOffset++] = (int) ((block0 >>> 1) & 1L);
-        values[valuesOffset++] = (int) (block0 & 1L);
+  public BulkOperationPacked1() {
+    super(1);
+    assert blockCount() == 1;
+    assert valueCount() == 64;
+  }
+
+  @Override
+  public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
+    for (int i = 0; i < iterations; ++i) {
+      final long block = blocks[blocksOffset++];
+      for (int shift = 63; shift >= 0; shift -= 1) {
+        values[valuesOffset++] = (int) ((block >>> shift) & 1);
       }
     }
+  }
 
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte0 >>> 7;
-        values[valuesOffset++] = (byte0 >>> 6) & 1;
-        values[valuesOffset++] = (byte0 >>> 5) & 1;
-        values[valuesOffset++] = (byte0 >>> 4) & 1;
-        values[valuesOffset++] = (byte0 >>> 3) & 1;
-        values[valuesOffset++] = (byte0 >>> 2) & 1;
-        values[valuesOffset++] = (byte0 >>> 1) & 1;
-        values[valuesOffset++] = byte0 & 1;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte1 >>> 7;
-        values[valuesOffset++] = (byte1 >>> 6) & 1;
-        values[valuesOffset++] = (byte1 >>> 5) & 1;
-        values[valuesOffset++] = (byte1 >>> 4) & 1;
-        values[valuesOffset++] = (byte1 >>> 3) & 1;
-        values[valuesOffset++] = (byte1 >>> 2) & 1;
-        values[valuesOffset++] = (byte1 >>> 1) & 1;
-        values[valuesOffset++] = byte1 & 1;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte2 >>> 7;
-        values[valuesOffset++] = (byte2 >>> 6) & 1;
-        values[valuesOffset++] = (byte2 >>> 5) & 1;
-        values[valuesOffset++] = (byte2 >>> 4) & 1;
-        values[valuesOffset++] = (byte2 >>> 3) & 1;
-        values[valuesOffset++] = (byte2 >>> 2) & 1;
-        values[valuesOffset++] = (byte2 >>> 1) & 1;
-        values[valuesOffset++] = byte2 & 1;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte3 >>> 7;
-        values[valuesOffset++] = (byte3 >>> 6) & 1;
-        values[valuesOffset++] = (byte3 >>> 5) & 1;
-        values[valuesOffset++] = (byte3 >>> 4) & 1;
-        values[valuesOffset++] = (byte3 >>> 3) & 1;
-        values[valuesOffset++] = (byte3 >>> 2) & 1;
-        values[valuesOffset++] = (byte3 >>> 1) & 1;
-        values[valuesOffset++] = byte3 & 1;
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte4 >>> 7;
-        values[valuesOffset++] = (byte4 >>> 6) & 1;
-        values[valuesOffset++] = (byte4 >>> 5) & 1;
-        values[valuesOffset++] = (byte4 >>> 4) & 1;
-        values[valuesOffset++] = (byte4 >>> 3) & 1;
-        values[valuesOffset++] = (byte4 >>> 2) & 1;
-        values[valuesOffset++] = (byte4 >>> 1) & 1;
-        values[valuesOffset++] = byte4 & 1;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte5 >>> 7;
-        values[valuesOffset++] = (byte5 >>> 6) & 1;
-        values[valuesOffset++] = (byte5 >>> 5) & 1;
-        values[valuesOffset++] = (byte5 >>> 4) & 1;
-        values[valuesOffset++] = (byte5 >>> 3) & 1;
-        values[valuesOffset++] = (byte5 >>> 2) & 1;
-        values[valuesOffset++] = (byte5 >>> 1) & 1;
-        values[valuesOffset++] = byte5 & 1;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte6 >>> 7;
-        values[valuesOffset++] = (byte6 >>> 6) & 1;
-        values[valuesOffset++] = (byte6 >>> 5) & 1;
-        values[valuesOffset++] = (byte6 >>> 4) & 1;
-        values[valuesOffset++] = (byte6 >>> 3) & 1;
-        values[valuesOffset++] = (byte6 >>> 2) & 1;
-        values[valuesOffset++] = (byte6 >>> 1) & 1;
-        values[valuesOffset++] = byte6 & 1;
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte7 >>> 7;
-        values[valuesOffset++] = (byte7 >>> 6) & 1;
-        values[valuesOffset++] = (byte7 >>> 5) & 1;
-        values[valuesOffset++] = (byte7 >>> 4) & 1;
-        values[valuesOffset++] = (byte7 >>> 3) & 1;
-        values[valuesOffset++] = (byte7 >>> 2) & 1;
-        values[valuesOffset++] = (byte7 >>> 1) & 1;
-        values[valuesOffset++] = byte7 & 1;
-      }
+  @Override
+  public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
+    for (int j = 0; j < 8 * iterations; ++j) {
+      final byte block = blocks[blocksOffset++];
+      values[valuesOffset++] = (block >>> 7) & 1;
+      values[valuesOffset++] = (block >>> 6) & 1;
+      values[valuesOffset++] = (block >>> 5) & 1;
+      values[valuesOffset++] = (block >>> 4) & 1;
+      values[valuesOffset++] = (block >>> 3) & 1;
+      values[valuesOffset++] = (block >>> 2) & 1;
+      values[valuesOffset++] = (block >>> 1) & 1;
+      values[valuesOffset++] = block & 1;
     }
+  }
 
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 63;
-        values[valuesOffset++] = (block0 >>> 62) & 1L;
-        values[valuesOffset++] = (block0 >>> 61) & 1L;
-        values[valuesOffset++] = (block0 >>> 60) & 1L;
-        values[valuesOffset++] = (block0 >>> 59) & 1L;
-        values[valuesOffset++] = (block0 >>> 58) & 1L;
-        values[valuesOffset++] = (block0 >>> 57) & 1L;
-        values[valuesOffset++] = (block0 >>> 56) & 1L;
-        values[valuesOffset++] = (block0 >>> 55) & 1L;
-        values[valuesOffset++] = (block0 >>> 54) & 1L;
-        values[valuesOffset++] = (block0 >>> 53) & 1L;
-        values[valuesOffset++] = (block0 >>> 52) & 1L;
-        values[valuesOffset++] = (block0 >>> 51) & 1L;
-        values[valuesOffset++] = (block0 >>> 50) & 1L;
-        values[valuesOffset++] = (block0 >>> 49) & 1L;
-        values[valuesOffset++] = (block0 >>> 48) & 1L;
-        values[valuesOffset++] = (block0 >>> 47) & 1L;
-        values[valuesOffset++] = (block0 >>> 46) & 1L;
-        values[valuesOffset++] = (block0 >>> 45) & 1L;
-        values[valuesOffset++] = (block0 >>> 44) & 1L;
-        values[valuesOffset++] = (block0 >>> 43) & 1L;
-        values[valuesOffset++] = (block0 >>> 42) & 1L;
-        values[valuesOffset++] = (block0 >>> 41) & 1L;
-        values[valuesOffset++] = (block0 >>> 40) & 1L;
-        values[valuesOffset++] = (block0 >>> 39) & 1L;
-        values[valuesOffset++] = (block0 >>> 38) & 1L;
-        values[valuesOffset++] = (block0 >>> 37) & 1L;
-        values[valuesOffset++] = (block0 >>> 36) & 1L;
-        values[valuesOffset++] = (block0 >>> 35) & 1L;
-        values[valuesOffset++] = (block0 >>> 34) & 1L;
-        values[valuesOffset++] = (block0 >>> 33) & 1L;
-        values[valuesOffset++] = (block0 >>> 32) & 1L;
-        values[valuesOffset++] = (block0 >>> 31) & 1L;
-        values[valuesOffset++] = (block0 >>> 30) & 1L;
-        values[valuesOffset++] = (block0 >>> 29) & 1L;
-        values[valuesOffset++] = (block0 >>> 28) & 1L;
-        values[valuesOffset++] = (block0 >>> 27) & 1L;
-        values[valuesOffset++] = (block0 >>> 26) & 1L;
-        values[valuesOffset++] = (block0 >>> 25) & 1L;
-        values[valuesOffset++] = (block0 >>> 24) & 1L;
-        values[valuesOffset++] = (block0 >>> 23) & 1L;
-        values[valuesOffset++] = (block0 >>> 22) & 1L;
-        values[valuesOffset++] = (block0 >>> 21) & 1L;
-        values[valuesOffset++] = (block0 >>> 20) & 1L;
-        values[valuesOffset++] = (block0 >>> 19) & 1L;
-        values[valuesOffset++] = (block0 >>> 18) & 1L;
-        values[valuesOffset++] = (block0 >>> 17) & 1L;
-        values[valuesOffset++] = (block0 >>> 16) & 1L;
-        values[valuesOffset++] = (block0 >>> 15) & 1L;
-        values[valuesOffset++] = (block0 >>> 14) & 1L;
-        values[valuesOffset++] = (block0 >>> 13) & 1L;
-        values[valuesOffset++] = (block0 >>> 12) & 1L;
-        values[valuesOffset++] = (block0 >>> 11) & 1L;
-        values[valuesOffset++] = (block0 >>> 10) & 1L;
-        values[valuesOffset++] = (block0 >>> 9) & 1L;
-        values[valuesOffset++] = (block0 >>> 8) & 1L;
-        values[valuesOffset++] = (block0 >>> 7) & 1L;
-        values[valuesOffset++] = (block0 >>> 6) & 1L;
-        values[valuesOffset++] = (block0 >>> 5) & 1L;
-        values[valuesOffset++] = (block0 >>> 4) & 1L;
-        values[valuesOffset++] = (block0 >>> 3) & 1L;
-        values[valuesOffset++] = (block0 >>> 2) & 1L;
-        values[valuesOffset++] = (block0 >>> 1) & 1L;
-        values[valuesOffset++] = block0 & 1L;
+  @Override
+  public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
+    for (int i = 0; i < iterations; ++i) {
+      final long block = blocks[blocksOffset++];
+      for (int shift = 63; shift >= 0; shift -= 1) {
+        values[valuesOffset++] = (block >>> shift) & 1;
       }
     }
+  }
 
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte0 >>> 7;
-        values[valuesOffset++] = (byte0 >>> 6) & 1;
-        values[valuesOffset++] = (byte0 >>> 5) & 1;
-        values[valuesOffset++] = (byte0 >>> 4) & 1;
-        values[valuesOffset++] = (byte0 >>> 3) & 1;
-        values[valuesOffset++] = (byte0 >>> 2) & 1;
-        values[valuesOffset++] = (byte0 >>> 1) & 1;
-        values[valuesOffset++] = byte0 & 1;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte1 >>> 7;
-        values[valuesOffset++] = (byte1 >>> 6) & 1;
-        values[valuesOffset++] = (byte1 >>> 5) & 1;
-        values[valuesOffset++] = (byte1 >>> 4) & 1;
-        values[valuesOffset++] = (byte1 >>> 3) & 1;
-        values[valuesOffset++] = (byte1 >>> 2) & 1;
-        values[valuesOffset++] = (byte1 >>> 1) & 1;
-        values[valuesOffset++] = byte1 & 1;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte2 >>> 7;
-        values[valuesOffset++] = (byte2 >>> 6) & 1;
-        values[valuesOffset++] = (byte2 >>> 5) & 1;
-        values[valuesOffset++] = (byte2 >>> 4) & 1;
-        values[valuesOffset++] = (byte2 >>> 3) & 1;
-        values[valuesOffset++] = (byte2 >>> 2) & 1;
-        values[valuesOffset++] = (byte2 >>> 1) & 1;
-        values[valuesOffset++] = byte2 & 1;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte3 >>> 7;
-        values[valuesOffset++] = (byte3 >>> 6) & 1;
-        values[valuesOffset++] = (byte3 >>> 5) & 1;
-        values[valuesOffset++] = (byte3 >>> 4) & 1;
-        values[valuesOffset++] = (byte3 >>> 3) & 1;
-        values[valuesOffset++] = (byte3 >>> 2) & 1;
-        values[valuesOffset++] = (byte3 >>> 1) & 1;
-        values[valuesOffset++] = byte3 & 1;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte4 >>> 7;
-        values[valuesOffset++] = (byte4 >>> 6) & 1;
-        values[valuesOffset++] = (byte4 >>> 5) & 1;
-        values[valuesOffset++] = (byte4 >>> 4) & 1;
-        values[valuesOffset++] = (byte4 >>> 3) & 1;
-        values[valuesOffset++] = (byte4 >>> 2) & 1;
-        values[valuesOffset++] = (byte4 >>> 1) & 1;
-        values[valuesOffset++] = byte4 & 1;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte5 >>> 7;
-        values[valuesOffset++] = (byte5 >>> 6) & 1;
-        values[valuesOffset++] = (byte5 >>> 5) & 1;
-        values[valuesOffset++] = (byte5 >>> 4) & 1;
-        values[valuesOffset++] = (byte5 >>> 3) & 1;
-        values[valuesOffset++] = (byte5 >>> 2) & 1;
-        values[valuesOffset++] = (byte5 >>> 1) & 1;
-        values[valuesOffset++] = byte5 & 1;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte6 >>> 7;
-        values[valuesOffset++] = (byte6 >>> 6) & 1;
-        values[valuesOffset++] = (byte6 >>> 5) & 1;
-        values[valuesOffset++] = (byte6 >>> 4) & 1;
-        values[valuesOffset++] = (byte6 >>> 3) & 1;
-        values[valuesOffset++] = (byte6 >>> 2) & 1;
-        values[valuesOffset++] = (byte6 >>> 1) & 1;
-        values[valuesOffset++] = byte6 & 1;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte7 >>> 7;
-        values[valuesOffset++] = (byte7 >>> 6) & 1;
-        values[valuesOffset++] = (byte7 >>> 5) & 1;
-        values[valuesOffset++] = (byte7 >>> 4) & 1;
-        values[valuesOffset++] = (byte7 >>> 3) & 1;
-        values[valuesOffset++] = (byte7 >>> 2) & 1;
-        values[valuesOffset++] = (byte7 >>> 1) & 1;
-        values[valuesOffset++] = byte7 & 1;
-      }
+  @Override
+  public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
+    for (int j = 0; j < 8 * iterations; ++j) {
+      final byte block = blocks[blocksOffset++];
+      values[valuesOffset++] = (block >>> 7) & 1;
+      values[valuesOffset++] = (block >>> 6) & 1;
+      values[valuesOffset++] = (block >>> 5) & 1;
+      values[valuesOffset++] = (block >>> 4) & 1;
+      values[valuesOffset++] = (block >>> 3) & 1;
+      values[valuesOffset++] = (block >>> 2) & 1;
+      values[valuesOffset++] = (block >>> 1) & 1;
+      values[valuesOffset++] = block & 1;
     }
+  }
 
 }