@@ -77,19 +77,29 @@ public Integer list(
7777 dev .jbang .devkitman .Jdk defaultJdk = jdkMan .getDefaultJdk ();
7878 String defVersion = defaultJdk != null ? defaultJdk .version () : "" ;
7979 PrintStream out = System .out ;
80- List <? extends dev . jbang . devkitman . Jdk > jdks ;
80+ List <JdkOut > jdkOuts ;
8181 if (available ) {
82- jdks = jdkMan .listAvailableJdks ();
82+ List <dev .jbang .devkitman .Jdk .AvailableJdk > jdks = jdkMan .listAvailableJdks ();
83+ jdkOuts = jdks .stream ()
84+ .map (jdk -> new JdkOut (jdk .id (), jdk .version (), jdk .provider ().name (),
85+ null , null ,
86+ details ? jdk .equals (defaultJdk )
87+ : jdk .version ().equals (defVersion ),
88+ jdk .tags ()))
89+ .collect (Collectors .toList ());
8390 } else {
84- jdks = jdkMan .listInstalledJdks ();
91+ List <dev .jbang .devkitman .Jdk .InstalledJdk > jdks = jdkMan .listInstalledJdks ();
92+ jdkOuts = jdks .stream ()
93+ .map (jdk -> new JdkOut (jdk .id (), jdk .version (), jdk .provider ().name (),
94+ jdk .home (),
95+ jdk instanceof dev .jbang .devkitman .Jdk .LinkedJdk
96+ ? ((dev .jbang .devkitman .Jdk .LinkedJdk ) jdk ).linked ().id ()
97+ : null ,
98+ details ? jdk .equals (defaultJdk )
99+ : jdk .version ().equals (defVersion ),
100+ jdk .tags ()))
101+ .collect (Collectors .toList ());
85102 }
86- List <JdkOut > jdkOuts = jdks .stream ()
87- .map (jdk -> new JdkOut (jdk .id (), jdk .version (), jdk .provider ().name (),
88- jdk .isInstalled () ? ((dev .jbang .devkitman .Jdk .InstalledJdk ) jdk ).home () : null ,
89- details ? jdk .equals (defaultJdk )
90- : jdk .version ().equals (defVersion ),
91- jdk .tags ()))
92- .collect (Collectors .toList ());
93103 if (!details ) {
94104 // Only keep a list of unique versions
95105 Set <JdkOut > uniqueJdks = new TreeSet <>(Comparator .<JdkOut >comparingInt (j -> j .version ).reversed ());
@@ -142,11 +152,13 @@ static class JdkOut implements Comparable<JdkOut> {
142152 String providerName ;
143153 String javaHomeDir ;
144154 String realHomeDir ;
155+ String linkedId ;
145156 @ SerializedName ("default" )
146157 Boolean isDefault ;
147158 Set <String > tags ;
148159
149- public JdkOut (String id , String version , String providerName , Path home , boolean isDefault , Set <String > tags ) {
160+ public JdkOut (String id , String version , String providerName , Path home , String linkedId , boolean isDefault ,
161+ Set <String > tags ) {
150162 this .id = id ;
151163 this .version = JavaUtil .parseJavaVersion (version );
152164 this .fullVersion = version ;
@@ -160,6 +172,7 @@ public JdkOut(String id, String version, String providerName, Path home, boolean
160172 // Ignore
161173 }
162174 }
175+ this .linkedId = linkedId ;
163176 if (isDefault ) {
164177 this .isDefault = true ;
165178 }
@@ -306,6 +319,9 @@ public Integer exec(
306319 @ CommandLine .Command (name = "default" , description = "Sets the default JDK to be used by JBang." )
307320 public Integer defaultJdk (
308321 @ CommandLine .Parameters (paramLabel = "versionOrId" , index = "0" , description = "The version of the JDK to select" , arity = "0..1" ) String versionOrId ,
322+ @ CommandLine .Option (names = {
323+ "--for-version" ,
324+ "-v" }, description = "Sets the default for the specified major version" ) boolean forVersion ,
309325 @ CommandLine .Option (names = {
310326 "--show-details" , "--details" ,
311327 "-d" }, description = "Shows detailed information for each JDK (only when format=text)" ) boolean details ,
@@ -316,19 +332,25 @@ public Integer defaultJdk(
316332 Util .warnMsg ("Cannot perform operation, the 'default' provider was not found" );
317333 return EXIT_INVALID_INPUT ;
318334 }
319- dev .jbang .devkitman .Jdk .InstalledJdk defjdk = jdkMan .getDefaultJdk ();
320335 if (versionOrId != null ) {
321336 dev .jbang .devkitman .Jdk .InstalledJdk jdk = jdkMan .getOrInstallJdk (versionOrId );
337+ dev .jbang .devkitman .Jdk .InstalledJdk defjdk = forVersion
338+ ? jdkMan .getDefaultJdkForVersion (jdk .majorVersion ())
339+ : jdkMan .getDefaultJdk ();
322340 if (defjdk == null || (!jdk .equals (defjdk ) && !Objects .equals (jdk .home (), defjdk .home ()))) {
323- jdkMan .setDefaultJdk (jdk );
341+ if (forVersion ) {
342+ jdkMan .setDefaultJdkForVersion (jdk );
343+ } else {
344+ jdkMan .setDefaultJdk (jdk );
345+ }
324346 } else {
325347 Util .infoMsg ("Default JDK already set to " + defjdk .majorVersion ());
326348 }
327349 } else {
328- List <dev .jbang .devkitman .Jdk .InstalledJdk > jdks = jdkMan .listDefaultJdks ();
350+ List <dev .jbang .devkitman .Jdk .LinkedJdk > jdks = jdkMan .listDefaultJdks ();
329351 List <JdkOut > jdkOuts = jdks .stream ()
330352 .map (jdk -> new JdkOut (jdk .id (), jdk .version (), jdk .provider ().name (), jdk .home (),
331- jdk .id ().equals ("default" ), jdk .tags ()))
353+ jdk .linked (). id (), jdk . id ().equals ("default" ), jdk .tags ()))
332354 .collect (Collectors .toList ());
333355 PrintStream out = System .out ;
334356 if (format == FormatMixin .Format .json ) {
@@ -345,13 +367,15 @@ public Integer defaultJdk(
345367 out .print (jdk .version );
346368 }
347369 out .print (" -> " );
348- out .print (jdk .realHomeDir );
370+ out .print (jdk .linkedId );
349371 if (details ) {
350- out .print (" (" + jdk .fullVersion + ", " + jdk .id );
372+ out .print (" (" + jdk .realHomeDir + ", " + jdk . fullVersion + ", " + jdk .id );
351373 if (!jdk .tags .isEmpty ()) {
352374 out .print (", " + jdk .tags );
353375 }
354376 out .print (")" );
377+ } else {
378+ out .print (" (" + jdk .fullVersion + ")" );
355379 }
356380 out .println ();
357381 });
0 commit comments