You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rj...@apache.org on 2014/08/15 21:15:19 UTC

svn commit: r1618263 [1/2] - in /lucene/dev/trunk: ./ dev-tools/idea/.idea/ dev-tools/maven/ lucene/ lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/ lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/ lucene/a...

Author: rjernst
Date: Fri Aug 15 19:15:17 2014
New Revision: 1618263

URL: http://svn.apache.org/r1618263
Log:
LUCENE-5850: Made Version handling more robust and extensible

Removed:
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/TestConstants.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/TestVersionComparator.java
Modified:
    lucene/dev/trunk/build.xml
    lucene/dev/trunk/dev-tools/idea/.idea/workspace.xml
    lucene/dev/trunk/dev-tools/maven/pom.xml.template
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/DictionaryCompoundWordTokenFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/HyphenationCompoundWordTokenFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/WordDelimiterFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenizerFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramTokenizerFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/th/ThaiAnalyzer.java
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/tr/TurkishAnalyzer.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/de/TestGermanAnalyzer.java
    lucene/dev/trunk/lucene/analysis/smartcn/src/java/org/apache/lucene/analysis/cn/smart/SmartChineseAnalyzer.java
    lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/AnalyzerFactoryTask.java
    lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NewAnalyzerTask.java
    lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoReader.java
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java
    lucene/dev/trunk/lucene/common-build.xml
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoReader.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfo.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/NRTCachingDirectory.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Constants.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/StringHelper.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Version.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDoc.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSegmentMerger.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/TestVersion.java
    lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/facet/FacetExamples.java
    lucene/dev/trunk/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldTermStack.java
    lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java
    lucene/dev/trunk/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BasePostingsFormatTestCase.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
    lucene/dev/trunk/solr/common-build.xml
    lucene/dev/trunk/solr/contrib/analysis-extras/src/java/org/apache/solr/schema/ICUCollationField.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/Config.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrConfig.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/analysis/TestLuceneMatchVersion.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/schema/TestSerializedLuceneMatchVersion.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/similarities/TestNonDefinedSimilarityFactory.java
    lucene/dev/trunk/solr/example/example-DIH/solr/db/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-DIH/solr/rss/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-DIH/solr/tika/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-schemaless/solr/collection1/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/multicore/core0/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/multicore/core1/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/solr/collection1/conf/solrconfig.xml

Modified: lucene/dev/trunk/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/build.xml?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/build.xml (original)
+++ lucene/dev/trunk/build.xml Fri Aug 15 19:15:17 2014
@@ -143,7 +143,7 @@
     </subant>
   </target>
 
-  <property name="version" value="5.0-SNAPSHOT"/>
+  <property name="version" value="5.0.0-SNAPSHOT"/>
   <property name="maven-build-dir" value="maven-build"/>
   <property name="maven-version" value="2.2.1"/>
 

Modified: lucene/dev/trunk/dev-tools/idea/.idea/workspace.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/dev-tools/idea/.idea/workspace.xml?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/dev-tools/idea/.idea/workspace.xml (original)
+++ lucene/dev/trunk/dev-tools/idea/.idea/workspace.xml Fri Aug 15 19:15:17 2014
@@ -8,7 +8,7 @@
       <module name="lucene-core-tests" />
       <option name="TEST_OBJECT" value="package" />
       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/idea-build/lucene/core" />
-      <option name="VM_PARAMETERS" value="-Xmx256m -ea -Dlucene.version=5.0-SNAPSHOT -DtempDir=temp" />
+      <option name="VM_PARAMETERS" value="-Xmx256m -ea -Dversion.base=5.0.0 -DtempDir=temp" />
       <option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
     </configuration>
     <configuration default="false" name="Module analyzers-common" type="JUnit" factoryName="JUnit">
@@ -183,28 +183,28 @@
       <module name="solr-core-tests" />
       <option name="TEST_OBJECT" value="package" />
       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/idea-build/solr/solr-core" />
-      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
+      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
       <option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
     </configuration>
     <configuration default="false" name="Solrj" type="JUnit" factoryName="JUnit">
       <module name="solrj-tests" />
       <option name="TEST_OBJECT" value="package" />
       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/idea-build/solr/solr-solrj" />
-      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
+      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
       <option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
     </configuration>
     <configuration default="false" name="Solr analysis-extras contrib" type="JUnit" factoryName="JUnit">
       <module name="analysis-extras" />
       <option name="TEST_OBJECT" value="package" />
       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/idea-build/solr/contrib/solr-analysis-extras" />
-      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
+      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
       <option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
     </configuration>
     <configuration default="false" name="Solr clustering contrib" type="JUnit" factoryName="JUnit">
       <module name="clustering" />
       <option name="TEST_OBJECT" value="package" />
       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/idea-build/solr/contrib/solr-clustering" />
-      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
+      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
       <option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
     </configuration>
     <configuration default="false" name="Solr dataimporthandler contrib" type="JUnit" factoryName="JUnit">
@@ -260,7 +260,7 @@
       <module name="uima" />
       <option name="TEST_OBJECT" value="package" />
       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/idea-build/solr/contrib/solr-uima" />
-      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
+      <option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=5.0.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
       <option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
     </configuration>
     <configuration default="false" name="Solr velocity contrib" type="JUnit" factoryName="JUnit">

Modified: lucene/dev/trunk/dev-tools/maven/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/dev-tools/maven/pom.xml.template?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/dev-tools/maven/pom.xml.template (original)
+++ lucene/dev/trunk/dev-tools/maven/pom.xml.template Fri Aug 15 19:15:17 2014
@@ -58,7 +58,7 @@
     <tests.codec>random</tests.codec>
     <tests.directory>random</tests.directory>
     <tests.locale>random</tests.locale>
-    <tests.luceneMatchVersion>5.0</tests.luceneMatchVersion>
+    <tests.luceneMatchVersion>5.0.0</tests.luceneMatchVersion>
     <tests.multiplier>1</tests.multiplier>
     <tests.nightly>false</tests.nightly>
     <tests.postingsformat>random</tests.postingsformat>

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Fri Aug 15 19:15:17 2014
@@ -161,8 +161,8 @@ API Changes
   CoveredBy. The area requirement on the predicates was removed, and Overlaps' definition
   was fixed. (David Smiley)
 
-* LUCENE-5850: CheckIndex now prints the Lucene version used to write
-  each segment.  (Robert Muir, Mike McCandless)
+* LUCENE-5850: Made Version handling more robust and extensible. Deprecated Constants.LUCENE_MAIN_VERSION, Constants.LUCENE_VERSION and current Version constants of the form LUCENE_X_Y. Added version constants that include bugfix number of form LUCENE_X_Y_Z.  Changed Version.LUCENE_CURRENT to Version.LATEST. CheckIndex now prints the Lucene version used to write
+  each segment.  (Ryan Ernst, Uwe Schindler, Robert Muir, Mike McCandless)
 
 * LUCENE-5836: BytesRef has been splitted into BytesRef, whose intended usage is
   to be just a reference to a section of a larger byte[] and BytesRefBuilder

Modified: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/DictionaryCompoundWordTokenFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/DictionaryCompoundWordTokenFilterFactory.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/DictionaryCompoundWordTokenFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/DictionaryCompoundWordTokenFilterFactory.java Fri Aug 15 19:15:17 2014
@@ -71,7 +71,7 @@ public class DictionaryCompoundWordToken
     if (dictionary == null) {
       return input;
     }
-    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4)) {
+    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4_0)) {
       return new DictionaryCompoundWordTokenFilter(input, dictionary, minWordSize, minSubwordSize, maxSubwordSize, onlyLongestMatch);
     }
     return new Lucene43DictionaryCompoundWordTokenFilter(input, dictionary, minWordSize, minSubwordSize, maxSubwordSize, onlyLongestMatch);

Modified: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/HyphenationCompoundWordTokenFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/HyphenationCompoundWordTokenFilterFactory.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/HyphenationCompoundWordTokenFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/HyphenationCompoundWordTokenFilterFactory.java Fri Aug 15 19:15:17 2014
@@ -99,7 +99,7 @@ public class HyphenationCompoundWordToke
       final InputSource is = new InputSource(stream);
       is.setEncoding(encoding); // if it's null let xml parser decide
       is.setSystemId(hypFile);
-      if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4)) {
+      if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4_0)) {
         hyphenator = HyphenationCompoundWordTokenFilter.getHyphenationTree(is);
       } else {
         hyphenator = Lucene43HyphenationCompoundWordTokenFilter.getHyphenationTree(is);
@@ -111,7 +111,7 @@ public class HyphenationCompoundWordToke
   
   @Override
   public TokenFilter create(TokenStream input) {
-    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4)) {
+    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4_0)) {
       return new HyphenationCompoundWordTokenFilter(input, hyphenator, dictionary, minWordSize, minSubwordSize, maxSubwordSize, onlyLongestMatch);
     }
     return new Lucene43HyphenationCompoundWordTokenFilter(input, hyphenator, dictionary, minWordSize, minSubwordSize, maxSubwordSize, onlyLongestMatch);

Modified: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/WordDelimiterFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/WordDelimiterFilterFactory.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/WordDelimiterFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/WordDelimiterFilterFactory.java Fri Aug 15 19:15:17 2014
@@ -118,7 +118,7 @@ public class WordDelimiterFilterFactory 
 
   @Override
   public TokenFilter create(TokenStream input) {
-    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_8)) {
+    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_8_0)) {
       return new WordDelimiterFilter(input, typeTable == null ? WordDelimiterIterator.DEFAULT_WORD_DELIM_TABLE : typeTable,
                                    flags, protectedWords);
     } else {

Modified: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramFilterFactory.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramFilterFactory.java Fri Aug 15 19:15:17 2014
@@ -50,7 +50,7 @@ public class EdgeNGramFilterFactory exte
 
   @Override
   public TokenFilter create(TokenStream input) {
-    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4)) {
+    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4_0)) {
       return new EdgeNGramTokenFilter(input, minGramSize, maxGramSize);
     }
     return new Lucene43EdgeNGramTokenFilter(input, minGramSize, maxGramSize);

Modified: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenizerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenizerFactory.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenizerFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenizerFactory.java Fri Aug 15 19:15:17 2014
@@ -22,7 +22,6 @@ import org.apache.lucene.analysis.util.T
 import org.apache.lucene.util.AttributeFactory;
 import org.apache.lucene.util.Version;
 
-import java.io.Reader;
 import java.util.Map;
 
 /**
@@ -50,7 +49,7 @@ public class EdgeNGramTokenizerFactory e
   
   @Override
   public Tokenizer create(AttributeFactory factory) {
-    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4)) {
+    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4_0)) {
       return new EdgeNGramTokenizer(factory, minGramSize, maxGramSize);
     }
     return new Lucene43NGramTokenizer(factory, minGramSize, maxGramSize);

Modified: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramFilterFactory.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramFilterFactory.java Fri Aug 15 19:15:17 2014
@@ -50,7 +50,7 @@ public class NGramFilterFactory extends 
 
   @Override
   public TokenFilter create(TokenStream input) {
-    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4)) {
+    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4_0)) {
       return new NGramTokenFilter(input, minGramSize, maxGramSize);
     }
     return new Lucene43NGramTokenFilter(input, minGramSize, maxGramSize);

Modified: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramTokenizerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramTokenizerFactory.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramTokenizerFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/ngram/NGramTokenizerFactory.java Fri Aug 15 19:15:17 2014
@@ -52,7 +52,7 @@ public class NGramTokenizerFactory exten
   /** Creates the {@link TokenStream} of n-grams from the given {@link Reader} and {@link AttributeFactory}. */
   @Override
   public Tokenizer create(AttributeFactory factory) {
-    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4)) {
+    if (luceneMatchVersion.onOrAfter(Version.LUCENE_4_4_0)) {
       return new NGramTokenizer(factory, minGramSize, maxGramSize);
     } else {
       return new Lucene43NGramTokenizer(factory, minGramSize, maxGramSize);

Modified: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/th/ThaiAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/th/ThaiAnalyzer.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/th/ThaiAnalyzer.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/th/ThaiAnalyzer.java Fri Aug 15 19:15:17 2014
@@ -98,7 +98,7 @@ public final class ThaiAnalyzer extends 
    */
   @Override
   protected TokenStreamComponents createComponents(String fieldName) {
-    if (getVersion().onOrAfter(Version.LUCENE_4_8)) {
+    if (getVersion().onOrAfter(Version.LUCENE_4_8_0)) {
       final Tokenizer source = new ThaiTokenizer();
       TokenStream result = new LowerCaseFilter(source);
       result = new StopFilter(result, stopwords);

Modified: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/tr/TurkishAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/tr/TurkishAnalyzer.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/tr/TurkishAnalyzer.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/tr/TurkishAnalyzer.java Fri Aug 15 19:15:17 2014
@@ -119,7 +119,7 @@ public final class TurkishAnalyzer exten
   protected TokenStreamComponents createComponents(String fieldName) {
     final Tokenizer source = new StandardTokenizer();
     TokenStream result = new StandardFilter(source);
-    if (getVersion().onOrAfter(Version.LUCENE_4_8)) {
+    if (getVersion().onOrAfter(Version.LUCENE_4_8_0)) {
       result = new ApostropheFilter(result);
     }
     result = new TurkishLowerCaseFilter(result);

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/de/TestGermanAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/de/TestGermanAnalyzer.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/de/TestGermanAnalyzer.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/de/TestGermanAnalyzer.java Fri Aug 15 19:15:17 2014
@@ -51,7 +51,7 @@ public class TestGermanAnalyzer extends 
   }
   
   /** test some features of the new snowball filter
-   * these only pass with LUCENE_CURRENT, not if you use o.a.l.a.de.GermanStemmer
+   * these only pass with LATEST, not if you use o.a.l.a.de.GermanStemmer
    */
   public void testGermanSpecials() throws Exception {
     GermanAnalyzer a = new GermanAnalyzer();

Modified: lucene/dev/trunk/lucene/analysis/smartcn/src/java/org/apache/lucene/analysis/cn/smart/SmartChineseAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/smartcn/src/java/org/apache/lucene/analysis/cn/smart/SmartChineseAnalyzer.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/smartcn/src/java/org/apache/lucene/analysis/cn/smart/SmartChineseAnalyzer.java (original)
+++ lucene/dev/trunk/lucene/analysis/smartcn/src/java/org/apache/lucene/analysis/cn/smart/SmartChineseAnalyzer.java Fri Aug 15 19:15:17 2014
@@ -132,7 +132,7 @@ public final class SmartChineseAnalyzer 
   public TokenStreamComponents createComponents(String fieldName) {
     final Tokenizer tokenizer;
     TokenStream result;
-    if (getVersion().onOrAfter(Version.LUCENE_4_8)) {
+    if (getVersion().onOrAfter(Version.LUCENE_4_8_0)) {
       tokenizer = new HMMChineseTokenizer();
       result = tokenizer;
     } else {

Modified: lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/AnalyzerFactoryTask.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/AnalyzerFactoryTask.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/AnalyzerFactoryTask.java (original)
+++ lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/AnalyzerFactoryTask.java Fri Aug 15 19:15:17 2014
@@ -59,7 +59,7 @@ import java.util.regex.Pattern;
  * </ol>
  *
  * Each component analysis factory map specify <tt>luceneMatchVersion</tt> (defaults to
- * {@link Version#LUCENE_CURRENT}) and any of the args understood by the specified
+ * {@link Version#LATEST}) and any of the args understood by the specified
  * *Factory class, in the above-describe param format.
  * <p/>
  * Example:
@@ -68,7 +68,7 @@ import java.util.regex.Pattern;
  *                      positionIncrementGap:100,
  *                      HTMLStripCharFilter,
  *                      MappingCharFilter(mapping:'mapping-FoldToASCII.txt'),
- *                      WhitespaceTokenizer(luceneMatchVersion:LUCENE_5_0),
+ *                      WhitespaceTokenizer(luceneMatchVersion:LUCENE_5_0_0),
  *                      TokenLimitFilter(maxTokenCount:10000, consumeAllTokens:false))
  *     [...]
  *     -NewAnalyzer('strip html, fold to ascii, whitespace tokenize, max 10k tokens')
@@ -355,7 +355,7 @@ public class AnalyzerFactoryTask extends
         }
       }
       if (!argMap.containsKey("luceneMatchVersion")) {
-        argMap.put("luceneMatchVersion", Version.LUCENE_CURRENT.toString());
+        argMap.put("luceneMatchVersion", Version.LATEST.toString());
       }
       final AbstractAnalysisFactory instance;
       try {

Modified: lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NewAnalyzerTask.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NewAnalyzerTask.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NewAnalyzerTask.java (original)
+++ lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/NewAnalyzerTask.java Fri Aug 15 19:15:17 2014
@@ -16,9 +16,6 @@ package org.apache.lucene.benchmark.byTa
  */
 
 import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.util.CharFilterFactory;
-import org.apache.lucene.analysis.util.TokenFilterFactory;
-import org.apache.lucene.analysis.util.TokenizerFactory;
 import org.apache.lucene.benchmark.byTask.PerfRunData;
 import org.apache.lucene.benchmark.byTask.utils.AnalyzerFactory;
 import org.apache.lucene.util.Version;
@@ -47,7 +44,7 @@ public class NewAnalyzerTask extends Per
     try {
       // first try to use a ctor with version parameter (needed for many new Analyzers that have no default one anymore
       Constructor<? extends Analyzer> cnstr = clazz.getConstructor(Version.class);
-      return cnstr.newInstance(Version.LUCENE_CURRENT);
+      return cnstr.newInstance(Version.LATEST);
     } catch (NoSuchMethodException nsme) {
       // otherwise use default ctor
       return clazz.newInstance();

Modified: lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java (original)
+++ lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java Fri Aug 15 19:15:17 2014
@@ -38,7 +38,7 @@ public class CreateIndexTaskTest extends
   private PerfRunData createPerfRunData(String infoStreamValue) throws Exception {
     Properties props = new Properties();
     // :Post-Release-Update-Version.LUCENE_XY:
-    props.setProperty("writer.version", Version.LUCENE_5_0.toString());
+    props.setProperty("writer.version", Version.LUCENE_5_0_0.toString());
     props.setProperty("print.props", "false"); // don't print anything
     props.setProperty("directory", "RAMDirectory");
     if (infoStreamValue != null) {

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoReader.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoReader.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoReader.java Fri Aug 15 19:15:17 2014
@@ -42,6 +42,7 @@ import org.apache.lucene.store.IOContext
 import org.apache.lucene.util.BytesRefBuilder;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.StringHelper;
+import org.apache.lucene.util.Version;
 
 /**
  * reads plaintext segments files
@@ -60,7 +61,7 @@ public class SimpleTextSegmentInfoReader
     try {
       SimpleTextUtil.readLine(input, scratch);
       assert StringHelper.startsWith(scratch.get(), SI_VERSION);
-      final String version = readString(SI_VERSION.length, scratch);
+      final Version version = Version.parse(readString(SI_VERSION.length, scratch));
     
       SimpleTextUtil.readLine(input, scratch);
       assert StringHelper.startsWith(scratch.get(), SI_DOCCOUNT);

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java Fri Aug 15 19:15:17 2014
@@ -62,7 +62,7 @@ public class SimpleTextSegmentInfoWriter
       BytesRefBuilder scratch = new BytesRefBuilder();
     
       SimpleTextUtil.write(output, SI_VERSION);
-      SimpleTextUtil.write(output, si.getVersion(), scratch);
+      SimpleTextUtil.write(output, si.getVersion().toString(), scratch);
       SimpleTextUtil.writeNewline(output);
     
       SimpleTextUtil.write(output, SI_DOCCOUNT);

Modified: lucene/dev/trunk/lucene/common-build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/common-build.xml?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/common-build.xml (original)
+++ lucene/dev/trunk/lucene/common-build.xml Fri Aug 15 19:15:17 2014
@@ -26,6 +26,14 @@
     for standalone use.
   </description>
 
+  <!-- !!! RELEASE MANAGER: Change version numbers only here: !!! -->
+  
+  <!-- The base version of the next release (including bugfix number, e.g., x.y.z+): -->
+  <property name="version.base" value="5.0.0"/>
+
+  
+  <!-- !!! RELEASE MANAGER: Don't change anything after this line! !!! -->
+
   <dirname file="${ant.file.common}" property="common.dir"/>
   <property name="dev-tools.dir" location="${common.dir}/../dev-tools"/>
   <property name="prettify.dir" location="${common.dir}/tools/prettify"/>
@@ -48,14 +56,31 @@
   </tstamp>
 
   <property name="Name" value="Lucene"/>
-  
   <property name="name" value="${ant.project.name}"/>
-  <property name="tests.luceneMatchVersion" value="5.0"/>
-  <property name="dev.version.base" value="5.0"/>
-  <property name="dev.version.suffix" value="SNAPSHOT"/>
-  <property name="dev.version" value="${dev.version.base}-${dev.version.suffix}"/>
-  <property name="version" value="${dev.version}"/>
-  <property name="spec.version" value="${version}"/>	
+  
+  <!--TODO: remove once Jenkins jobs are updated:--><property name="dev.version.suffix" value="SNAPSHOT"/>
+
+  <!-- The corresponding version as oal.util.Version used for matchVersion (x.y): -->
+  <property name="version.luceneMatchVersion" value="${version.base}"/>
+  <!-- Suffix of the version, by default SNAPSHOT: -->
+  <property name="version.suffix" value="${dev.version.suffix}"/>
+  <property name="version" value="${version.base}-${version.suffix}"/>
+
+  
+  <fail message="If you pass -Dversion=... to set a release version, it must match &quot;${version.base}&quot;, optionally followed by a suffix (e.g., &quot;-SNAPSHOT&quot;).">
+    <condition>
+      <not><matches pattern="^\Q${version.base}\E(|\-.*)$" casesensitive="true" string="${version}"/></not>
+    </condition>
+  </fail>
+
+  <fail message="Invalid version.luceneMatchVersion property: ${version.luceneMatchVersion}">
+    <condition>
+      <not><and>
+        <matches pattern="^\d+\.\d+\.\d+$" casesensitive="true" string="${version.luceneMatchVersion}"/>
+        <matches pattern="^\Q${version.luceneMatchVersion}\E(\.|\-|\b).*$" casesensitive="true" string="${version}"/>
+      </and></not>
+    </condition>
+  </fail>
 
   <property name="year" value="2000-${current.year}"/>
   
@@ -118,6 +143,7 @@
   <property name="tests.verbose" value="false"/>
   <property name="tests.infostream" value="${tests.verbose}"/>
   <property name="tests.filterstacks" value="true"/>
+  <property name="tests.luceneMatchVersion" value="${version.luceneMatchVersion}"/>
 
   <condition property="tests.heapsize" value="768M">
     <isset property="run.clover"/>
@@ -640,7 +666,7 @@
     <attribute name="excludes" default="**/pom.xml,**/*.iml"/>
     <attribute name="metainf.source.dir" default="${common.dir}"/>
     <attribute name="implementation.title" default="org.apache.lucene"/>
-    <attribute name="spec.version" default="${spec.version}"/>
+    <attribute name="spec.version" default="${version}"/>
     <attribute name="manifest.file" default="${manifest.file}"/>
     <element name="filesets" optional="true"/>
     <element name="jarify-additional-manifest-attributes" optional="true"/>
@@ -986,7 +1012,7 @@
             <sysproperty key="java.security.manager" value="org.apache.lucene.util.TestSecurityManager" />
             <sysproperty key="java.security.policy" file="${common.dir}/tools/junit4/tests.policy" />
 
-            <sysproperty key="lucene.version" value="${version}"/>
+            <sysproperty key="tests.LUCENE_VERSION" value="${version.base}"/>
 
             <sysproperty key="jetty.testMode" value="1"/>
             <sysproperty key="jetty.insecurerandom" value="1"/>
@@ -2468,7 +2494,7 @@ The following arguments can be provided 
 
         <junit4:pickseed property="pitest.seed" />
 
-        <property name="pitest.sysprops" value="-Dlucene.version=${version},-Dtest.seed=${pitest.seed},-Djava.security.manager=org.apache.lucene.util.TestSecurityManager,-Djava.security.policy=${common.dir}/tools/junit4/tests.policy,-Djava.io.tmpdir=${tests.workDir},-Djunit4.childvm.cwd=${tests.workDir},-Djunit4.tempDir=${tests.workDir}" />
+        <property name="pitest.sysprops" value="-Dversion=${version},-Dtest.seed=${pitest.seed},-Djava.security.manager=org.apache.lucene.util.TestSecurityManager,-Djava.security.policy=${common.dir}/tools/junit4/tests.policy,-Djava.io.tmpdir=${tests.workDir},-Djunit4.childvm.cwd=${tests.workDir},-Djunit4.tempDir=${tests.workDir}" />
 
         <pitest
             classPath="pitest.classpath"

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java Fri Aug 15 19:15:17 2014
@@ -72,7 +72,7 @@ import java.util.Map;
 public abstract class Analyzer implements Closeable {
 
   private final ReuseStrategy reuseStrategy;
-  private Version version = Version.LUCENE_CURRENT;
+  private Version version = Version.LATEST;
 
   // non final as it gets nulled if closed; pkg private for access by ReuseStrategy's final helper methods:
   CloseableThreadLocal<Object> storedValue = new CloseableThreadLocal<>();

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java Fri Aug 15 19:15:17 2014
@@ -30,6 +30,7 @@ import org.apache.lucene.store.Directory
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.Version;
 
 /**
  * Lucene 4.0 implementation of {@link SegmentInfoReader}.
@@ -54,7 +55,7 @@ public class Lucene40SegmentInfoReader e
       CodecUtil.checkHeader(input, Lucene40SegmentInfoFormat.CODEC_NAME,
                                    Lucene40SegmentInfoFormat.VERSION_START,
                                    Lucene40SegmentInfoFormat.VERSION_CURRENT);
-      final String version = input.readString();
+      final Version version = Version.parse(input.readString());
       final int docCount = input.readInt();
       if (docCount < 0) {
         throw new CorruptIndexException("invalid docCount: " + docCount + " (resource=" + input + ")");

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java Fri Aug 15 19:15:17 2014
@@ -55,7 +55,7 @@ public class Lucene40SegmentInfoWriter e
     try {
       CodecUtil.writeHeader(output, Lucene40SegmentInfoFormat.CODEC_NAME, Lucene40SegmentInfoFormat.VERSION_CURRENT);
       // Write the Lucene version that created this segment, since 3.1
-      output.writeString(si.getVersion());
+      output.writeString(si.getVersion().toString());
       output.writeInt(si.getDocCount());
 
       output.writeByte((byte) (si.getUseCompoundFile() ? SegmentInfo.YES : SegmentInfo.NO));

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java Fri Aug 15 19:15:17 2014
@@ -91,8 +91,8 @@ class Lucene45DocValuesProducer extends 
   /** expert: instantiates a new reader */
   @SuppressWarnings("deprecation")
   protected Lucene45DocValuesProducer(SegmentReadState state, String dataCodec, String dataExtension, String metaCodec, String metaExtension) throws IOException {
-    String ver = state.segmentInfo.getVersion();
-    lenientFieldInfoCheck = StringHelper.getVersionComparator().compare(ver, "4.9.0") < 0;
+    Version ver = state.segmentInfo.getVersion();
+    lenientFieldInfoCheck = Version.LUCENE_4_9_0.onOrAfter(ver);
     String metaName = IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, metaExtension);
     // read in the entries from the metadata file.
     ChecksumIndexInput in = state.directory.openChecksumInput(metaName, state.context);

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoReader.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoReader.java Fri Aug 15 19:15:17 2014
@@ -30,6 +30,7 @@ import org.apache.lucene.store.ChecksumI
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.Version;
 
 /**
  * Lucene 4.6 implementation of {@link SegmentInfoReader}.
@@ -52,7 +53,7 @@ public class Lucene46SegmentInfoReader e
       int codecVersion = CodecUtil.checkHeader(input, Lucene46SegmentInfoFormat.CODEC_NAME,
                                                       Lucene46SegmentInfoFormat.VERSION_START,
                                                       Lucene46SegmentInfoFormat.VERSION_CURRENT);
-      final String version = input.readString();
+      final Version version = Version.parse(input.readString());
       final int docCount = input.readInt();
       if (docCount < 0) {
         throw new CorruptIndexException("invalid docCount: " + docCount + " (resource=" + input + ")");

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java Fri Aug 15 19:15:17 2014
@@ -53,7 +53,7 @@ public class Lucene46SegmentInfoWriter e
     try {
       CodecUtil.writeHeader(output, Lucene46SegmentInfoFormat.CODEC_NAME, Lucene46SegmentInfoFormat.VERSION_CURRENT);
       // Write the Lucene version that created this segment, since 3.1
-      output.writeString(si.getVersion());
+      output.writeString(si.getVersion().toString());
       output.writeInt(si.getDocCount());
 
       output.writeByte((byte) (si.getUseCompoundFile() ? SegmentInfo.YES : SegmentInfo.NO));

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java Fri Aug 15 19:15:17 2014
@@ -22,7 +22,6 @@ import java.io.IOException;
 import java.io.PrintStream;
 import java.text.NumberFormat;
 import java.util.ArrayList;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -46,7 +45,7 @@ import org.apache.lucene.util.CommandLin
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.LongBitSet;
-import org.apache.lucene.util.StringHelper;
+import org.apache.lucene.util.Version;
 
 
 /**
@@ -409,21 +408,19 @@ public class CheckIndex {
     }
 
     // find the oldest and newest segment versions
-    String oldest = Integer.toString(Integer.MAX_VALUE), newest = Integer.toString(Integer.MIN_VALUE);
+    Version oldest = null;
+    Version newest = null;
     String oldSegs = null;
-    boolean foundNonNullVersion = false;
-    Comparator<String> versionComparator = StringHelper.getVersionComparator();
     for (SegmentCommitInfo si : sis) {
-      String version = si.info.getVersion();
+      Version version = si.info.getVersion();
       if (version == null) {
         // pre-3.1 segment
         oldSegs = "pre-3.1";
       } else {
-        foundNonNullVersion = true;
-        if (versionComparator.compare(version, oldest) < 0) {
+        if (oldest == null || version.onOrAfter(oldest) == false) {
           oldest = version;
         }
-        if (versionComparator.compare(version, newest) > 0) {
+        if (newest == null || version.onOrAfter(newest)) {
           newest = version;
         }
       }
@@ -475,14 +472,14 @@ public class CheckIndex {
       userDataString = "";
     }
 
-    String versionString = null;
+    String versionString = "";
     if (oldSegs != null) {
-      if (foundNonNullVersion) {
+      if (newest != null) {
         versionString = "versions=[" + oldSegs + " .. " + newest + "]";
       } else {
         versionString = "version=" + oldSegs;
       }
-    } else {
+    } else if (newest != null) { // implies oldest != null
       versionString = oldest.equals(newest) ? ( "version=" + oldest ) : ("versions=[" + oldest + " .. " + newest + "]");
     }
 
@@ -527,8 +524,8 @@ public class CheckIndex {
       segInfoStat.name = info.info.name;
       segInfoStat.docCount = info.info.getDocCount();
       
-      final String version = info.info.getVersion();
-      if (info.info.getDocCount() <= 0 && version != null && versionComparator.compare(version, "4.5") >= 0) {
+      final Version version = info.info.getVersion();
+      if (info.info.getDocCount() <= 0 && version != null && version.onOrAfter(Version.LUCENE_4_5_0)) {
         throw new RuntimeException("illegal number of documents: maxDoc=" + info.info.getDocCount());
       }
 

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java Fri Aug 15 19:15:17 2014
@@ -34,12 +34,12 @@ import org.apache.lucene.store.IOContext
 import org.apache.lucene.store.TrackingDirectoryWrapper;
 import org.apache.lucene.util.ByteBlockPool.Allocator;
 import org.apache.lucene.util.ByteBlockPool.DirectTrackingAllocator;
-import org.apache.lucene.util.Constants;
 import org.apache.lucene.util.Counter;
 import org.apache.lucene.util.InfoStream;
 import org.apache.lucene.util.IntBlockPool;
 import org.apache.lucene.util.MutableBits;
 import org.apache.lucene.util.RamUsageEstimator;
+import org.apache.lucene.util.Version;
 
 import static org.apache.lucene.util.ByteBlockPool.BYTE_BLOCK_MASK;
 import static org.apache.lucene.util.ByteBlockPool.BYTE_BLOCK_SIZE;
@@ -178,7 +178,7 @@ class DocumentsWriterPerThread {
     pendingUpdates.clear();
     deleteSlice = deleteQueue.newSlice();
    
-    segmentInfo = new SegmentInfo(directoryOrig, Constants.LUCENE_MAIN_VERSION, segmentName, -1, false, codec, null);
+    segmentInfo = new SegmentInfo(directoryOrig, Version.LATEST, segmentName, -1, false, codec, null);
     assert numDocsInRAM == 0;
     if (INFO_VERBOSE && infoStream.isEnabled("DWPT")) {
       infoStream.message("DWPT", Thread.currentThread().getName() + " init seg=" + segmentName + " delQueue=" + deleteQueue);  

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java Fri Aug 15 19:15:17 2014
@@ -20,9 +20,9 @@ package org.apache.lucene.index;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
 import org.apache.lucene.util.CommandLineUtil;
-import org.apache.lucene.util.Constants;
 import org.apache.lucene.util.InfoStream;
 import org.apache.lucene.util.PrintStreamInfoStream;
+import org.apache.lucene.util.Version;
 
 import java.io.File;
 import java.io.IOException;
@@ -160,11 +160,11 @@ public final class IndexUpgrader {
     try {
       InfoStream infoStream = iwc.getInfoStream();
       if (infoStream.isEnabled("IndexUpgrader")) {
-        infoStream.message("IndexUpgrader", "Upgrading all pre-" + Constants.LUCENE_MAIN_VERSION + " segments of index directory '" + dir + "' to version " + Constants.LUCENE_MAIN_VERSION + "...");
+        infoStream.message("IndexUpgrader", "Upgrading all pre-" + Version.LATEST + " segments of index directory '" + dir + "' to version " + Version.LATEST + "...");
       }
       w.forceMerge(1);
       if (infoStream.isEnabled("IndexUpgrader")) {
-        infoStream.message("IndexUpgrader", "All segments upgraded to version " + Constants.LUCENE_MAIN_VERSION);
+        infoStream.message("IndexUpgrader", "All segments upgraded to version " + Version.LATEST);
       }
     } finally {
       w.close();

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java Fri Aug 15 19:15:17 2014
@@ -64,6 +64,7 @@ import org.apache.lucene.util.Constants;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.InfoStream;
 import org.apache.lucene.util.ThreadInterruptedException;
+import org.apache.lucene.util.Version;
 
 /**
   An <code>IndexWriter</code> creates and maintains an index.
@@ -883,7 +884,7 @@ public class IndexWriter implements Clos
       didMessageState = true;
       infoStream.message("IW", "\ndir=" + directory + "\n" +
             "index=" + segString() + "\n" +
-            "version=" + Constants.LUCENE_VERSION + "\n" +
+            "version=" + Version.LATEST.toString() + "\n" +
             config.toString());
     }
   }
@@ -2569,7 +2570,7 @@ public class IndexWriter implements Clos
       // abortable so that IW.close(false) is able to stop it
       TrackingDirectoryWrapper trackingDir = new TrackingDirectoryWrapper(directory);
 
-      SegmentInfo info = new SegmentInfo(directory, Constants.LUCENE_MAIN_VERSION, mergedName, -1,
+      SegmentInfo info = new SegmentInfo(directory, Version.LATEST, mergedName, -1,
                                          false, codec, null);
 
       SegmentMerger merger = new SegmentMerger(mergeReaders, info, infoStream, trackingDir,
@@ -3793,7 +3794,7 @@ public class IndexWriter implements Clos
     // ConcurrentMergePolicy we keep deterministic segment
     // names.
     final String mergeSegmentName = newSegmentName();
-    SegmentInfo si = new SegmentInfo(directory, Constants.LUCENE_MAIN_VERSION, mergeSegmentName, -1, false, codec, null);
+    SegmentInfo si = new SegmentInfo(directory, Version.LATEST, mergeSegmentName, -1, false, codec, null);
     Map<String,String> details = new HashMap<>();
     details.put("mergeMaxNumSegments", "" + merge.maxNumSegments);
     details.put("mergeFactor", Integer.toString(merge.segments.size()));
@@ -3817,7 +3818,7 @@ public class IndexWriter implements Clos
   private static void setDiagnostics(SegmentInfo info, String source, Map<String,String> details) {
     Map<String,String> diagnostics = new HashMap<>();
     diagnostics.put("source", source);
-    diagnostics.put("lucene.version", Constants.LUCENE_VERSION);
+    diagnostics.put("lucene.version", Version.LATEST.toString());
     diagnostics.put("os", Constants.OS_NAME);
     diagnostics.put("os.arch", Constants.OS_ARCH);
     diagnostics.put("os.version", Constants.OS_VERSION);

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfo.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfo.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfo.java Fri Aug 15 19:15:17 2014
@@ -27,6 +27,9 @@ import java.util.regex.Matcher;
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.TrackingDirectoryWrapper;
+import org.apache.lucene.util.Constants;
+import org.apache.lucene.util.StringHelper;
+import org.apache.lucene.util.Version;
 
 /**
  * Information about a segment such as it's name, directory, and files related
@@ -62,9 +65,9 @@ public final class SegmentInfo {
   // Tracks the Lucene version this segment was created with, since 3.1. Null
   // indicates an older than 3.0 index, and it's used to detect a too old index.
   // The format expected is "x.y" - "2.x" for pre-3.0 indexes (or null), and
-  // specific versions afterwards ("3.0", "3.1" etc.).
-  // see Constants.LUCENE_MAIN_VERSION.
-  private String version;
+  // specific versions afterwards ("3.0.0", "3.1.0" etc.).
+  // see o.a.l.util.Version.
+  private Version version;
 
   void setDiagnostics(Map<String, String> diagnostics) {
     this.diagnostics = diagnostics;
@@ -81,7 +84,7 @@ public final class SegmentInfo {
    * <p>Note: this is public only to allow access from
    * the codecs package.</p>
    */
-  public SegmentInfo(Directory dir, String version, String name, int docCount, 
+  public SegmentInfo(Directory dir, Version version, String name, int docCount,
                      boolean isCompoundFile, Codec codec, Map<String,String> diagnostics) {
     assert !(dir instanceof TrackingDirectoryWrapper);
     this.dir = dir;
@@ -203,23 +206,9 @@ public final class SegmentInfo {
     return dir.hashCode() + name.hashCode();
   }
 
-  /**
-   * Used by DefaultSegmentInfosReader to upgrade a 3.0 segment to record its
-   * version is "3.0". This method can be removed when we're not required to
-   * support 3x indexes anymore, e.g. in 5.0.
-   * <p>
-   * <b>NOTE:</b> this method is used for internal purposes only - you should
-   * not modify the version of a SegmentInfo, or it may result in unexpected
-   * exceptions thrown when you attempt to open the index.
-   *
-   * @lucene.internal
+  /** Returns the version of the code which wrote the segment.
    */
-  public void setVersion(String version) {
-    this.version = version;
-  }
-
-  /** Returns the version of the code which wrote the segment. */
-  public String getVersion() {
+  public Version getVersion() {
     return version;
   }
 

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java Fri Aug 15 19:15:17 2014
@@ -200,8 +200,8 @@ public final class SegmentReader extends
       return;
     }
 
-    String ver = si.info.getVersion();
-    if (ver != null && StringHelper.getVersionComparator().compare(ver, "4.9.0") >= 0) {
+    Version ver = si.info.getVersion();
+    if (ver != null && ver.onOrAfter(Version.LUCENE_4_9_0)) {
       DocValuesProducer baseProducer = null;
       for (FieldInfo fi : fieldInfos) {
         if (!fi.hasDocValues()) continue;

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java Fri Aug 15 19:15:17 2014
@@ -17,7 +17,7 @@ package org.apache.lucene.index;
  * limitations under the License.
  */
 
-import org.apache.lucene.util.Constants;
+import org.apache.lucene.util.Version;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -60,12 +60,12 @@ public class UpgradeIndexMergePolicy ext
   }
   
   /** Returns if the given segment should be upgraded. The default implementation
-   * will return {@code !Constants.LUCENE_MAIN_VERSION.equals(si.getVersion())},
+   * will return {@code !Version.LATEST.equals(si.getVersion())},
    * so all segments created with a different version number than this Lucene version will
    * get upgraded.
    */
   protected boolean shouldUpgradeSegment(SegmentCommitInfo si) {
-    return !Constants.LUCENE_MAIN_VERSION.equals(si.info.getVersion());
+    return !Version.LATEST.equals(si.info.getVersion());
   }
 
   @Override

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/NRTCachingDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/NRTCachingDirectory.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/NRTCachingDirectory.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/NRTCachingDirectory.java Fri Aug 15 19:15:17 2014
@@ -52,7 +52,7 @@ import org.apache.lucene.util.IOUtils;
  * <pre class="prettyprint">
  *   Directory fsDir = FSDirectory.open(new File("/path/to/index"));
  *   NRTCachingDirectory cachedFSDir = new NRTCachingDirectory(fsDir, 5.0, 60.0);
- *   IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_5_0, analyzer);
+ *   IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_5_0_0, analyzer);
  *   IndexWriter writer = new IndexWriter(cachedFSDir, conf);
  * </pre>
  *

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Constants.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Constants.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Constants.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Constants.java Fri Aug 15 19:15:17 2014
@@ -19,7 +19,6 @@ package org.apache.lucene.util;
 
 import java.lang.reflect.Field;
 import java.util.Collections;
-import org.apache.lucene.LucenePackage;
 
 /**
  * Some useful constants.
@@ -93,45 +92,18 @@ public final class Constants {
     JRE_IS_MINIMUM_JAVA8 = v8;
   }
 
-  // this method prevents inlining the final version constant in compiled classes,
-  // see: http://www.javaworld.com/community/node/3400
-  private static String ident(final String s) {
-    return s.toString();
-  }
-  
-  // We should never change index format with minor versions, so it should always be x.y or x.y.0.z for alpha/beta versions!
-  /**
-   * This is the internal Lucene version, recorded into each segment.
-   * NOTE: we track per-segment version as a String with the {@code "X.Y"} format
-   * (no minor version), e.g. {@code "4.0", "3.1", "3.0"}.
-   * <p>Alpha and Beta versions will have numbers like {@code "X.Y.0.Z"},
-   * anything else is not allowed. This is done to prevent people from
-   * using indexes created with ALPHA/BETA versions with the released version.
-   */
-  public static final String LUCENE_MAIN_VERSION = ident("5.0");
-
   /**
-   * This is the Lucene version for display purposes.
+   * This is the internal Lucene version, including bugfix versions, recorded into each segment.
+   * @deprecated Use {@link Version#LATEST}
    */
-  public static final String LUCENE_VERSION;
-  static {
-    Package pkg = LucenePackage.get();
-    String v = (pkg == null) ? null : pkg.getImplementationVersion();
-    if (v == null) {
-      v = mainVersionWithoutAlphaBeta() + "-SNAPSHOT";
-    }
-    LUCENE_VERSION = ident(v);
-  }
+  @Deprecated
+  public static final String LUCENE_MAIN_VERSION = Version.LATEST.toString();
   
   /**
-   * Returns a LUCENE_MAIN_VERSION without any ALPHA/BETA qualifier
-   * Used by test only!
+   * Don't use this constant because the name is not self-describing!
+   * @deprecated Use {@link Version#LATEST}
    */
-  static String mainVersionWithoutAlphaBeta() {
-    final String parts[] = LUCENE_MAIN_VERSION.split("\\.");
-    if (parts.length == 4 && "0".equals(parts[2])) {
-      return parts[0] + "." + parts[1];
-    }
-    return LUCENE_MAIN_VERSION;
-  }
+  @Deprecated
+  public static final String LUCENE_VERSION = Version.LATEST.toString();
+  
 }

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/StringHelper.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/StringHelper.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/StringHelper.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/StringHelper.java Fri Aug 15 19:15:17 2014
@@ -66,45 +66,6 @@ public abstract class StringHelper {
 
   private StringHelper() {
   }
-  
-  /**
-   * @return a Comparator over versioned strings such as X.YY.Z
-   * @lucene.internal
-   */
-  public static Comparator<String> getVersionComparator() {
-    return versionComparator;
-  }
-  
-  private static Comparator<String> versionComparator = new Comparator<String>() {
-    @Override
-    public int compare(String a, String b) {
-      StringTokenizer aTokens = new StringTokenizer(a, ".");
-      StringTokenizer bTokens = new StringTokenizer(b, ".");
-      
-      while (aTokens.hasMoreTokens()) {
-        int aToken = Integer.parseInt(aTokens.nextToken());
-        if (bTokens.hasMoreTokens()) {
-          int bToken = Integer.parseInt(bTokens.nextToken());
-          if (aToken != bToken) {
-            return aToken < bToken ? -1 : 1;
-          }
-        } else {
-          // a has some extra trailing tokens. if these are all zeroes, thats ok.
-          if (aToken != 0) {
-            return 1; 
-          }
-        }
-      }
-      
-      // b has some extra trailing tokens. if these are all zeroes, thats ok.
-      while (bTokens.hasMoreTokens()) {
-        if (Integer.parseInt(bTokens.nextToken()) != 0)
-          return -1;
-      }
-      
-      return 0;
-    }
-  };
 
   public static boolean equals(String s1, String s2) {
     if (s1 == null) {

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Version.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Version.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Version.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/Version.java Fri Aug 15 19:15:17 2014
@@ -29,95 +29,158 @@ import java.util.Locale;
  * change the version at search-time, but instead also adjust
  * your indexing code to match, and re-index.
  */
-// remove me when java 5 is no longer supported
-// this is a workaround for a JDK bug that wrongly emits a warning.
-@SuppressWarnings("dep-ann")
-public enum Version { 
+public final class Version {
+
+  /**
+   * Match settings and bugs in Lucene's 4.0.0-ALPHA release.
+   * @deprecated (5.0) Use latest
+   */
+  @Deprecated
+  public static final Version LUCENE_4_0_0_ALPHA = new Version(4, 0, 0, 1);
+
   /**
-   * Match settings and bugs in Lucene's 4.0 release.
+   * Match settings and bugs in Lucene's 4.0.0-BETA release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_0,
+  public static final Version LUCENE_4_0_0_BETA = new Version(4, 0, 0, 2);
+
+  /**
+   * Match settings and bugs in Lucene's 4.0.0 release.
+   * @deprecated (5.0) Use latest
+   */
+  @Deprecated
+  public static final Version LUCENE_4_0_0 = new Version(4, 0, 0);
   
   /**
-   * Match settings and bugs in Lucene's 4.1 release.
+   * Match settings and bugs in Lucene's 4.1.0 release.
+   * @deprecated (5.0) Use latest
+   */
+  @Deprecated
+  public static final Version LUCENE_4_1_0 = new Version(4, 1, 0);
+
+  /**
+   * Match settings and bugs in Lucene's 4.2.0 release.
+   * @deprecated (5.0) Use latest
+   */
+  @Deprecated
+  public static final Version LUCENE_4_2_0 = new Version(4, 2, 0);
+
+  /**
+   * Match settings and bugs in Lucene's 4.2.1 release.
+   * @deprecated (5.0) Use latest
+   */
+  @Deprecated
+  public static final Version LUCENE_4_2_1 = new Version(4, 2, 1);
+
+  /**
+   * Match settings and bugs in Lucene's 4.3.0 release.
+   * @deprecated (5.0) Use latest
+   */
+  @Deprecated
+  public static final Version LUCENE_4_3_0 = new Version(4, 3, 0);
+
+  /**
+   * Match settings and bugs in Lucene's 4.3.1 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_1,
+  public static final Version LUCENE_4_3_1 = new Version(4, 3, 1);
 
   /**
-   * Match settings and bugs in Lucene's 4.2 release.
+   * Match settings and bugs in Lucene's 4.4.0 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_2,
+  public static final Version LUCENE_4_4_0 = new Version(4, 4, 0);
 
   /**
-   * Match settings and bugs in Lucene's 4.3 release.
+   * Match settings and bugs in Lucene's 4.5.0 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_3,
+  public static final Version LUCENE_4_5_0 = new Version(4, 5, 0);
 
   /**
-   * Match settings and bugs in Lucene's 4.4 release.
+   * Match settings and bugs in Lucene's 4.5.1 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_4,
+  public static final Version LUCENE_4_5_1 = new Version(4, 5, 1);
 
   /**
-   * Match settings and bugs in Lucene's 4.5 release.
+   * Match settings and bugs in Lucene's 4.6.0 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_5,
+  public static final Version LUCENE_4_6_0 = new Version(4, 6, 0);
 
   /**
-   * Match settings and bugs in Lucene's 4.6 release.
+   * Match settings and bugs in Lucene's 4.6.1 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_6,
+  public static final Version LUCENE_4_6_1 = new Version(4, 6, 1);
   
   /**
-   * Match settings and bugs in Lucene's 4.7 release.
+   * Match settings and bugs in Lucene's 4.7.0 release.
+   * @deprecated (5.0) Use latest
+   */
+  @Deprecated
+  public static final Version LUCENE_4_7_0 = new Version(4, 7, 0);
+
+  /**
+   * Match settings and bugs in Lucene's 4.7.1 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_7,
+  public static final Version LUCENE_4_7_1 = new Version(4, 7, 1);
+
+  /**
+   * Match settings and bugs in Lucene's 4.7.2 release.
+   * @deprecated (5.0) Use latest
+   */
+  @Deprecated
+  public static final Version LUCENE_4_7_2 = new Version(4, 7, 2);
   
   /**
-   * Match settings and bugs in Lucene's 4.8 release.
+   * Match settings and bugs in Lucene's 4.8.0 release.
+   * @deprecated (5.0) Use latest
+   */
+  @Deprecated
+  public static final Version LUCENE_4_8_0 = new Version(4, 8, 0);
+
+  /**
+   * Match settings and bugs in Lucene's 4.8.1 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_8,
+  public static final Version LUCENE_4_8_1 = new Version(4, 8, 1);
 
   /**
-   * Match settings and bugs in Lucene's 4.9 release.
+   * Match settings and bugs in Lucene's 4.9.0 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_9,
+  public static final Version LUCENE_4_9_0 = new Version(4, 9, 0);
   
   /**
    * Match settings and bugs in Lucene's 4.10 release.
    * @deprecated (5.0) Use latest
    */
   @Deprecated
-  LUCENE_4_10,
+  public static final Version LUCENE_4_10_0 = new Version(4, 10, 0);
 
   /** Match settings and bugs in Lucene's 5.0 release.
    *  <p>
    *  Use this to get the latest &amp; greatest settings, bug
    *  fixes, etc, for Lucene.
    */
-  LUCENE_5_0,
-  
-  /* Add new constants for later versions **here** to respect order! */
+  public static final Version LUCENE_5_0_0 = new Version(5, 0, 0);
+
+  // To add a new version:
+  //  * Only add above this comment
+  //  * If the new version is the newest, change LATEST below and deprecate the previous LATEST
 
   /**
    * <p><b>WARNING</b>: if you use this setting, and then
@@ -132,21 +195,158 @@ public enum Version { 
    * Additionally, you may need to <b>re-test your entire
    * application</b> to ensure it behaves as expected, as 
    * some defaults may have changed and may break functionality 
-   * in your application. 
-   * @deprecated Use an actual version instead. 
+   * in your application.
+   */
+  public static final Version LATEST = LUCENE_5_0_0;
+
+  /**
+   * Constant for backwards compatibility.
+   * @deprecated Use {@link #LATEST}
    */
   @Deprecated
-  LUCENE_CURRENT;
+  public static final Version LUCENE_CURRENT = LATEST;
 
-  public boolean onOrAfter(Version other) {
-    return compareTo(other) >= 0;
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_0_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_0 = LUCENE_4_0_0;
+
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_1_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_1 = LUCENE_4_1_0;
+
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_2_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_2 = LUCENE_4_2_0;
+
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_3_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_3 = LUCENE_4_3_0;
+
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_4_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_4 = LUCENE_4_4_0;
+
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_5_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_5 = LUCENE_4_5_0;
+
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_6_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_6 = LUCENE_4_6_0;
+
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_7_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_7 = LUCENE_4_7_0;
+
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_8_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_8 = LUCENE_4_8_0;
+
+  /** @deprecated Bad naming of constant; use {@link #LUCENE_4_9_0} instead. */
+  @Deprecated
+  public static final Version LUCENE_4_9 = LUCENE_4_9_0;
+
+
+  /**
+   * Parse a version number of the form {@code "major.minor.bugfix.prerelease"}.
+   *
+   * Part {@code ".bugfix"} and part {@code ".prerelease"} are optional.
+   * Note that this is forwards compatible: the parsed version does not have to exist as
+   * a constant.
+   */
+  public static Version parse(String version) {
+    String[] pieces = version.split("\\.");
+    if (pieces.length < 2 || pieces.length > 4) {
+      throw new IllegalArgumentException("Version is not in form major.minor.bugfix(.prerelease): " + version);
+    }
+
+    int major = Integer.parseInt(pieces[0]);
+    int minor = Integer.parseInt(pieces[1]);
+    int bugfix = 0;
+    int prerelease = 0;
+    if (pieces.length > 2) {
+      bugfix = Integer.parseInt(pieces[2]);
+    }
+    if (pieces.length > 3) {
+      prerelease = Integer.parseInt(pieces[3]);
+      if (prerelease == 0) {
+        throw new IllegalArgumentException("Invalid value " + prerelease + " for prelrease of version " + version +", should be 1 or 2");
+      }
+    }
+
+    return new Version(major, minor, bugfix, prerelease);
   }
-  
+
+  /**
+   * Parse the given version number as a constant or dot based version.
+   * <p>This method allows to use {@code "LUCENE_X_Y"} constant names,
+   * or version numbers in the format {@code "x.y.z"}.
+   */
   public static Version parseLeniently(String version) {
+    if (version.equals("LATEST") || version.equals("LUCENE_CURRENT")) return LATEST;
     final String parsedMatchVersion = version
         .toUpperCase(Locale.ROOT)
-        .replaceFirst("^(\\d+)\\.(\\d+)$", "LUCENE_$1_$2")
-        .replaceFirst("^LUCENE_(\\d)(\\d)$", "LUCENE_$1_$2");
-    return Version.valueOf(parsedMatchVersion);
+        .replaceFirst("^LUCENE_(\\d+)_(\\d+)_(\\d+)$", "$1.$2.$3")
+        .replaceFirst("^LUCENE_(\\d+)_(\\d+)$", "$1.$2.0")
+        .replaceFirst("^LUCENE_(\\d)(\\d)$", "$1.$2.0");
+    return parse(parsedMatchVersion);
+  }
+
+  // stores the version pieces, with most significant pieces in high bits
+  // ie:  | 1 byte | 1 byte | 1 byte |   2 bits   |
+  //         major   minor    bugfix   prerelease
+  private final int encodedValue;
+
+  private Version(int major, int minor, int bugfix) {
+    this(major, minor, bugfix, 0);
+  }
+
+  private Version(int major, int minor, int bugfix, int prerelease) {
+    if (major > 5 || major < 4) {
+      throw new IllegalArgumentException("Lucene 5.x only supports 5.x and 4.x versions");
+    }
+    if (minor > 255 | minor < 0) {
+      throw new IllegalArgumentException("Illegal minor version: " + minor);
+    }
+    if (bugfix > 255 | bugfix < 0) {
+      throw new IllegalArgumentException("Illegal bugfix version: " + bugfix);
+    }
+    if (prerelease > 2 | prerelease < 0) {
+      throw new IllegalArgumentException("Illegal prerelease version: " + prerelease);
+    }
+    if (prerelease != 0 && (minor != 0 || bugfix != 0)) {
+      throw new IllegalArgumentException("Prerelease version only supported with major release");
+    }
+
+    if (prerelease == 0) {
+      // final release should sort after alpha/beta
+      prerelease = 3;
+    }
+
+    encodedValue = major << 18 | minor << 10 | bugfix << 2 | prerelease;
+  }
+
+  /**
+   * Returns true if this version is the same or after the version from the argument.
+   */
+  public boolean onOrAfter(Version other) {
+    return encodedValue >= other.encodedValue;
+  }
+
+  @Override
+  public String toString() {
+    int major = (encodedValue >>> 18) & 0xFF;
+    int minor = (encodedValue >>> 10) & 0xFF;
+    int bugfix = (encodedValue >>> 2) & 0xFF;
+    int prerelease = encodedValue & 0x3;
+    if (prerelease == 3) { // ie unencoded value is 0
+      return "" + major + "." + minor + "." + bugfix;
+    }
+    return "" + major + "." + minor + "." + bugfix + "." + prerelease;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    return o != null && o instanceof Version && ((Version)o).encodedValue == encodedValue;
   }
 }

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java Fri Aug 15 19:15:17 2014
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -59,14 +58,13 @@ import org.apache.lucene.store.RAMDirect
 import org.apache.lucene.store.SimpleFSDirectory;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.Constants;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.InfoStream;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
 import org.apache.lucene.util.NumericUtils;
-import org.apache.lucene.util.StringHelper;
 import org.apache.lucene.util.TestUtil;
+import org.apache.lucene.util.Version;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 
@@ -846,23 +844,21 @@ public class TestBackwardsCompatibility 
     riw.close();
     DirectoryReader ir = DirectoryReader.open(currentDir);
     SegmentReader air = (SegmentReader)ir.leaves().get(0).reader();
-    String currentVersion = air.getSegmentInfo().info.getVersion();
+    Version currentVersion = air.getSegmentInfo().info.getVersion();
     assertNotNull(currentVersion); // only 3.0 segments can have a null version
     ir.close();
     currentDir.close();
     
-    Comparator<String> comparator = StringHelper.getVersionComparator();
-    
     // now check all the old indexes, their version should be < the current version
     for (String name : oldNames) {
       Directory dir = oldIndexDirs.get(name);
       DirectoryReader r = DirectoryReader.open(dir);
       for (AtomicReaderContext context : r.leaves()) {
         air = (SegmentReader) context.reader();
-        String oldVersion = air.getSegmentInfo().info.getVersion();
+        Version oldVersion = air.getSegmentInfo().info.getVersion();
         assertNotNull(oldVersion); // only 3.0 segments can have a null version
-        assertTrue("current Constants.LUCENE_MAIN_VERSION is <= an old index: did you forget to bump it?!",
-            comparator.compare(oldVersion, currentVersion) < 0);
+        assertTrue("current Version.LATEST is <= an old index: did you forget to bump it?!",
+                   currentVersion.onOrAfter(oldVersion));
       }
       r.close();
     }
@@ -920,7 +916,7 @@ public class TestBackwardsCompatibility 
       System.out.println("checkAllSegmentsUpgraded: " + infos);
     }
     for (SegmentCommitInfo si : infos) {
-      assertEquals(Constants.LUCENE_MAIN_VERSION, si.info.getVersion());
+      assertEquals(Version.LATEST, si.info.getVersion());
     }
     return infos.size();
   }

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java Fri Aug 15 19:15:17 2014
@@ -43,11 +43,11 @@ import org.apache.lucene.search.ScoreDoc
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.Constants;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.InfoStream;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.TestUtil;
+import org.apache.lucene.util.Version;
 import org.junit.BeforeClass;
 
 // TODO: test multiple codecs here?
@@ -252,7 +252,7 @@ public class TestCodecs extends LuceneTe
     final Directory dir = newDirectory();
     this.write(fieldInfos, dir, fields);
     Codec codec = Codec.getDefault();
-    final SegmentInfo si = new SegmentInfo(dir, Constants.LUCENE_MAIN_VERSION, SEGMENT, 10000, false, codec, null);
+    final SegmentInfo si = new SegmentInfo(dir, Version.LATEST, SEGMENT, 10000, false, codec, null);
 
     final FieldsProducer reader = codec.postingsFormat().fieldsProducer(new SegmentReadState(dir, si, fieldInfos, newIOContext(random())));
 
@@ -309,7 +309,7 @@ public class TestCodecs extends LuceneTe
 
     this.write(fieldInfos, dir, fields);
     Codec codec = Codec.getDefault();
-    final SegmentInfo si = new SegmentInfo(dir, Constants.LUCENE_MAIN_VERSION, SEGMENT, 10000, false, codec, null);
+    final SegmentInfo si = new SegmentInfo(dir, Version.LATEST, SEGMENT, 10000, false, codec, null);
 
     if (VERBOSE) {
       System.out.println("TEST: now read postings");
@@ -804,7 +804,7 @@ public class TestCodecs extends LuceneTe
   private void write(final FieldInfos fieldInfos, final Directory dir, final FieldData[] fields) throws Throwable {
 
     final Codec codec = Codec.getDefault();
-    final SegmentInfo si = new SegmentInfo(dir, Constants.LUCENE_MAIN_VERSION, SEGMENT, 10000, false, codec, null);
+    final SegmentInfo si = new SegmentInfo(dir, Version.LATEST, SEGMENT, 10000, false, codec, null);
     final SegmentWriteState state = new SegmentWriteState(InfoStream.getDefault(), dir, si, fieldInfos, null, newIOContext(random()));
 
     Arrays.sort(fields);

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDoc.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDoc.java?rev=1618263&r1=1618262&r2=1618263&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDoc.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDoc.java Fri Aug 15 19:15:17 2014
@@ -41,9 +41,9 @@ import org.apache.lucene.store.Directory
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.store.TrackingDirectoryWrapper;
-import org.apache.lucene.util.Constants;
 import org.apache.lucene.util.InfoStream;
 import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.Version;
 
 
 /** JUnit adaptation of an older test case DocTest. */
@@ -217,7 +217,7 @@ public class TestDoc extends LuceneTestC
 
       final Codec codec = Codec.getDefault();
       TrackingDirectoryWrapper trackingDir = new TrackingDirectoryWrapper(si1.info.dir);
-      final SegmentInfo si = new SegmentInfo(si1.info.dir, Constants.LUCENE_MAIN_VERSION, merged, -1, false, codec, null);
+      final SegmentInfo si = new SegmentInfo(si1.info.dir, Version.LATEST, merged, -1, false, codec, null);
 
       SegmentMerger merger = new SegmentMerger(Arrays.<AtomicReader>asList(r1, r2),
           si, InfoStream.getDefault(), trackingDir,
@@ -226,7 +226,7 @@ public class TestDoc extends LuceneTestC
       MergeState mergeState = merger.merge();
       r1.close();
       r2.close();
-      final SegmentInfo info = new SegmentInfo(si1.info.dir, Constants.LUCENE_MAIN_VERSION, merged,
+      final SegmentInfo info = new SegmentInfo(si1.info.dir, Version.LATEST, merged,
                                                si1.info.getDocCount() + si2.info.getDocCount(),
                                                false, codec, null);
       info.setFiles(new HashSet<>(trackingDir.getCreatedFiles()));