1010
1111import org .elasticsearch .TransportVersion ;
1212
13- import java .lang .reflect .Field ;
14- import java .lang .reflect .Modifier ;
15- import java .util .ArrayList ;
16- import java .util .Collections ;
17- import java .util .List ;
13+ import java .util .NavigableSet ;
1814import java .util .Set ;
1915import java .util .stream .Collectors ;
2016
2117public class TransportVersionUtils {
22- private static final List <TransportVersion > ALL_VERSIONS ;
18+ private static final NavigableSet <TransportVersion > ALL_VERSIONS ;
2319
2420 static {
25- ALL_VERSIONS = getDeclaredVersions ();
21+ ALL_VERSIONS = TransportVersion . getDeclaredVersions ();
2622 }
2723
2824 /** Returns a random {@link TransportVersion} from all available versions. */
@@ -35,50 +31,17 @@ public static TransportVersion randomVersion(Set<TransportVersion> ignore) {
3531 return ESTestCase .randomFrom (ALL_VERSIONS .stream ().filter (v -> ignore .contains (v ) == false ).collect (Collectors .toList ()));
3632 }
3733
38- /**
39- * Extracts a sorted list of declared transport version constants from a class.
40- */
41- public static List <TransportVersion > getDeclaredVersions () {
42- final Field [] fields = TransportVersion .class .getFields ();
43- final List <TransportVersion > versions = new ArrayList <>(fields .length );
44- for (final Field field : fields ) {
45- final int mod = field .getModifiers ();
46- if (false == Modifier .isStatic (mod ) && Modifier .isFinal (mod ) && Modifier .isPublic (mod )) {
47- continue ;
48- }
49- if (field .getType () != TransportVersion .class ) {
50- continue ;
51- }
52- switch (field .getName ()) {
53- case "CURRENT" :
54- case "V_EMPTY" :
55- continue ;
56- }
57- assert field .getName ().matches ("V(_\\ d+){3}?" ) || field .getName ().equals ("ZERO" ) || field .getName ().equals ("MINIMUM_COMPATIBLE" )
58- : field .getName ();
59- try {
60- versions .add (((TransportVersion ) field .get (null )));
61- } catch (final IllegalAccessException e ) {
62- throw new RuntimeException (e );
63- }
64- }
65- Collections .sort (versions );
66- return versions ;
67- }
68-
6934 public static TransportVersion getPreviousVersion () {
7035 TransportVersion version = getPreviousVersion (TransportVersion .CURRENT );
7136 assert version .before (TransportVersion .CURRENT );
7237 return version ;
7338 }
7439
7540 public static TransportVersion getPreviousVersion (TransportVersion version ) {
76- for (int i = ALL_VERSIONS .size () - 1 ; i >= 0 ; i --) {// TODO should be RELEASED_VERSIONS
77- TransportVersion v = ALL_VERSIONS .get (i );
78- if (v .before (version )) {
79- return v ;
80- }
41+ TransportVersion prev = ALL_VERSIONS .lower (version );
42+ if (prev == null ) {
43+ throw new IllegalArgumentException ("couldn't find any released versions before [" + version + "]" );
8144 }
82- throw new IllegalArgumentException ( "couldn't find any released versions before [" + version + "]" ) ;
45+ return prev ;
8346 }
8447}
0 commit comments