3535import org .slf4j .Logger ;
3636import org .slf4j .LoggerFactory ;
3737
38- public class Versions
38+ public final class Versions
3939{
4040 private static final Logger logger = LoggerFactory .getLogger (Versions .class );
4141
@@ -69,7 +69,8 @@ public enum Major
6969 v22 ("2\\ .2\\ .([0-9]+)" ),
7070 v30 ("3\\ .0\\ .([0-9]+)" ),
7171 v3X ("3\\ .([1-9]|1[01])(\\ .([0-9]+))?" ),
72- v4 ("4\\ .([0-9]+)" );
72+ v40 ("4\\ .0(?:\\ .|-alpha|-beta|-rc)([0-9]+)(\\ .([0-9]+))?" ),
73+ v4X ("4\\ .([1-9][0-9]*)(\\ .([0-9]+))?" );
7374 final Pattern pattern ;
7475
7576 Major (String verify )
@@ -92,7 +93,9 @@ static Major fromFull(String version)
9293 return v30 ;
9394 return v3X ;
9495 case '4' :
95- return v4 ;
96+ if (version .startsWith ("4.0" ))
97+ return v40 ;
98+ return v4X ;
9699 default :
97100 throw new IllegalArgumentException (version );
98101 }
@@ -108,14 +111,15 @@ boolean verify(String version)
108111 int compare (String a , String b )
109112 {
110113 Matcher ma = pattern .matcher (a );
111- Matcher mb = pattern .matcher (a );
114+ Matcher mb = pattern .matcher (b );
112115 if (!ma .matches ()) throw new IllegalArgumentException (a );
113116 if (!mb .matches ()) throw new IllegalArgumentException (b );
114117 int result = Integer .compare (Integer .parseInt (ma .group (1 )), Integer .parseInt (mb .group (1 )));
115118 if (result == 0 && this == v3X && (ma .group (3 ) != null || mb .group (3 ) != null ))
116119 {
117120 if (ma .group (3 ) != null && mb .group (3 ) != null )
118121 {
122+ // XXX likely wrong for alpha|beta|rc versions
119123 result = Integer .compare (Integer .parseInt (ma .group (3 )), Integer .parseInt (mb .group (3 )));
120124 }
121125 else
@@ -149,7 +153,7 @@ public Version(Major major, String version, URL[] classpath)
149153
150154 private final Map <Major , List <Version >> versions ;
151155
152- public Versions (Map <Major , List <Version >> versions )
156+ private Versions (Map <Major , List <Version >> versions )
153157 {
154158 this .versions = versions ;
155159 }
@@ -173,19 +177,22 @@ public static Versions find()
173177 final String dtestJarDirectory = System .getProperty (PROPERTY_PREFIX + "test.dtest_jar_path" , "build" );
174178 final File sourceDirectory = new File (dtestJarDirectory );
175179 logger .info ("Looking for dtest jars in " + sourceDirectory .getAbsolutePath ());
176- final Pattern pattern = Pattern .compile ("dtest-(?<fullversion>(\\ d+)\\ .(\\ d+)(\\ .\\ d+ )?(\\ .\\ d+)?)([~\\ -]\\ w[.\\ w]*(?:\\ -\\ w[.\\ w]*)*)?(\\ +[.\\ w]+)?\\ .jar" );
180+ final Pattern pattern = Pattern .compile ("dtest-(?<fullversion>(\\ d+)\\ .(\\ d+)(( \\ .|-alpha|-beta|-rc)([0-9]+) )?(\\ .\\ d+)?)([~\\ -]\\ w[.\\ w]*(?:\\ -\\ w[.\\ w]*)*)?(\\ +[.\\ w]+)?\\ .jar" );
177181 final Map <Major , List <Version >> versions = new HashMap <>();
178182 for (Major major : Major .values ())
179183 versions .put (major , new ArrayList <>());
180184
181- for ( File file : sourceDirectory .listFiles ())
185+ if ( sourceDirectory .exists ())
182186 {
183- Matcher m = pattern .matcher (file .getName ());
184- if (!m .matches ())
185- continue ;
186- String version = m .group (1 );
187- Major major = Major .fromFull (version );
188- versions .get (major ).add (new Version (major , version , new URL []{ toURL (file ) }));
187+ for (File file : sourceDirectory .listFiles ())
188+ {
189+ Matcher m = pattern .matcher (file .getName ());
190+ if (!m .matches ())
191+ continue ;
192+ String version = m .group (1 );
193+ Major major = Major .fromFull (version );
194+ versions .get (major ).add (new Version (major , version , new URL []{ toURL (file ) }));
195+ }
189196 }
190197
191198 for (Map .Entry <Major , List <Version >> e : versions .entrySet ())
@@ -199,7 +206,7 @@ public static Versions find()
199206 return new Versions (versions );
200207 }
201208
202- public static URL toURL (File file )
209+ private static URL toURL (File file )
203210 {
204211 try
205212 {
0 commit comments