3131
3232import static java .util .Objects .requireNonNull ;
3333
34-
3534@ Value
3635@ EqualsAndHashCode (callSuper = false )
3736public class UpdateSdkMan extends Recipe {
38- static final String SDKMAN_CONFIG_FILE_PATTERN = "**/.sdkmanrc" ;
37+ private static final String SDKMAN_CONFIG_FILE_PATTERN = ".sdkmanrc" ;
38+
3939 /**
4040 * Retrieve from https://api.sdkman.io/2/candidates/java/linuxx64/versions/all
4141 * TODO: Investifate the best way to get the latest versions from SDKMAN
4242 */
4343 private static final String SDKMAN_CANDIDATES_LIST = "11.0.14.1-jbr,11.0.15-trava,11.0.25-albba,11.0.25-amzn,11.0.25-kona,11.0.25-librca,11.0.25-ms,11.0.25-sapmchn,11.0.25-sem,11.0.25-tem,11.0.25-zulu,11.0.25.fx-librca,11.0.25.fx-zulu,17.0.12-graal,17.0.12-jbr,17.0.12-oracle,17.0.13-albba,17.0.13-amzn,17.0.13-kona,17.0.13-librca,17.0.13-ms,17.0.13-sapmchn,17.0.13-sem,17.0.13-tem,17.0.13-zulu,17.0.13.crac-librca,17.0.13.crac-zulu,17.0.13.fx-librca,17.0.13.fx-zulu,17.0.9-graalce,21.0.2-graalce,21.0.2-open,21.0.5-amzn,21.0.5-graal,21.0.5-jbr,21.0.5-kona,21.0.5-librca,21.0.5-ms,21.0.5-oracle,21.0.5-sapmchn,21.0.5-sem,21.0.5-tem,21.0.5-zulu,21.0.5.crac-librca,21.0.5.crac-zulu,21.0.5.fx-librca,21.0.5.fx-zulu,22.0.2-oracle,22.1.0.1.r11-gln,22.1.0.1.r17-gln,22.3.5.r11-nik,22.3.5.r17-mandrel,22.3.5.r17-nik,23-open,23.0.1-amzn,23.0.1-graal,23.0.1-graalce,23.0.1-librca,23.0.1-oracle,23.0.1-sapmchn,23.0.1-tem,23.0.1-zulu,23.0.1.crac-zulu,23.0.1.fx-librca,23.0.1.fx-zulu,23.0.6.fx-nik,23.0.6.r17-mandrel,23.0.6.r17-nik,23.1.5.fx-nik,23.1.5.r21-mandrel,23.1.5.r21-nik,24.0.2.r22-mandrel,24.1.1.r23-mandrel,24.1.1.r23-nik,24.ea.22-graal,24.ea.23-graal,24.ea.24-graal,24.ea.26-open,24.ea.27-open,24.ea.28-open,24.ea.29-open,25.ea.1-graal,25.ea.1-open,25.ea.2-open,25.ea.3-open,6.0.119-zulu,7.0.352-zulu,8.0.282-trava,8.0.432-albba,8.0.432-amzn,8.0.432-kona,8.0.432-librca,8.0.432-sem,8.0.432-tem,8.0.432-zulu,8.0.432.fx-librca,8.0.432.fx-zulu" ;
44-
45- @ Nullable
46- private static Map <String , Set <String >> sdkmanJDKs ;
44+ private static final Map <String , Set <String >> sdkmanJDKs = Arrays .stream (SDKMAN_CANDIDATES_LIST .split ("," ))
45+ .collect (HashMap ::new , (map , candidate ) -> {
46+ String [] parts = candidate .split ("-" );
47+ String dist = parts [1 ];
48+ String version = parts [0 ];
49+ map .computeIfAbsent (dist , k -> new HashSet <>()).add (version );
50+ }, HashMap ::putAll );
4751
4852 @ Option (displayName = "Java version" , description = "The Java version to update to." , example = "17" )
4953 @ Nullable
@@ -57,46 +61,33 @@ private static String getMajorVersion(String version) {
5761 return version .split ("\\ ." )[0 ];
5862 }
5963
60- private static Map <String , Set <String >> getSdkManJDKs () {
61- if (sdkmanJDKs == null ) {
62- Map <String , Set <String >> jdks = new HashMap <>();
63- for (String candidate : SDKMAN_CANDIDATES_LIST .split ("," )) {
64- String [] parts = candidate .split ("-" );
65- String dist = parts [1 ];
66- String version = parts [0 ];
67- jdks .computeIfAbsent (dist , k -> new HashSet <>()).add (version );
68- }
69- sdkmanJDKs = jdks ;
70- }
71- return sdkmanJDKs ;
72- }
73-
7464 @ Override
7565 public String getDisplayName () {
76- return "Update SDKMan java version" ;
66+ return "Update SDKMan Java version" ;
7767 }
7868
7969 @ Override
8070 public String getDescription () {
71+ //language=markdown
8172 return "Update the SDKMAN JDK version in the `.sdkmanrc` file. Given a major release (e.g., 17), the recipe " +
82- "will update the current distribution to the current default SDKMAN version of the specified major " +
83- "release. The distribution option can be used to specify a specific JVM distribution. " +
84- "Note that these must correspond to valid SDKMAN distributions." ; }
73+ "will update the current distribution to the current default SDKMAN version of the specified major " +
74+ "release. The distribution option can be used to specify a specific JVM distribution. " +
75+ "Note that these must correspond to valid SDKMAN distributions." ;
76+ }
8577
8678 private Optional <String > getNewJDK (String currentVersion , String currentDist ) {
8779 if (currentVersion .equals (newVersion ) && currentDist .equals (newDistribution )) {
8880 return Optional .empty ();
8981 }
9082
91- Map <String , Set <String >> jdks = getSdkManJDKs ();
9283 String dist = newDistribution == null ? currentDist : newDistribution ;
9384 String ver = newVersion == null ? currentVersion : newVersion ;
9485
95- if (!jdks .containsKey (dist )) {
86+ if (!sdkmanJDKs .containsKey (dist )) {
9687 return Optional .empty ();
9788 }
9889
99- Optional <String > sdkmanVersion = jdks .get (dist ).stream ().filter (v -> v .startsWith (ver ) || v .startsWith (getMajorVersion (ver ))).reduce ((first , second ) -> {
90+ Optional <String > sdkmanVersion = sdkmanJDKs .get (dist ).stream ().filter (v -> v .startsWith (ver ) || v .startsWith (getMajorVersion (ver ))).reduce ((first , second ) -> {
10091 if (first .equals (ver )) {
10192 return first ;
10293 } else if (second .equals (ver )) {
@@ -124,7 +115,6 @@ private Optional<String> getNewJDK(String currentVersion, String currentDist) {
124115
125116 @ Override
126117 public TreeVisitor <?, ExecutionContext > getVisitor () {
127-
128118 TreeVisitor <?, ExecutionContext > visitor = new TreeVisitor <Tree , ExecutionContext >() {
129119 @ Override
130120 public Tree visit (@ Nullable Tree tree , ExecutionContext ctx ) {
0 commit comments