@@ -404,26 +404,10 @@ private void collectPlatformExtensions(final ExtensionCatalogBuilder catalogBuil
404
404
throws RegistryResolutionException {
405
405
final RegistryExtensionResolver registry = registries .get (registryIndex );
406
406
407
- final List <PlatformCatalog > downstreamPreferences = new ArrayList <>(catalogBuilder .upstreamQuarkusVersions .size ());
408
- for (String quarkusVersion : catalogBuilder .upstreamQuarkusVersions ) {
409
- if (!registry .isAcceptsQuarkusVersionQueries (quarkusVersion )) {
410
- continue ;
411
- }
412
- final PlatformCatalog pc = registry .resolvePlatformCatalog (quarkusVersion );
413
- if (pc == null ) {
414
- continue ;
415
- }
416
- downstreamPreferences .add (pc );
417
- }
418
-
419
- PlatformCatalog pc = registry .resolvePlatformCatalog ();
420
- if (pc == null && downstreamPreferences .isEmpty ()) {
407
+ final PlatformCatalog pc = resolvePlatformCatalog (registry , catalogBuilder .upstreamQuarkusVersions );
408
+ if (pc == null ) {
421
409
return ;
422
410
}
423
- if (!downstreamPreferences .isEmpty ()) {
424
- downstreamPreferences .add (pc );
425
- pc = CatalogMergeUtility .mergePlatformCatalogs (downstreamPreferences );
426
- }
427
411
428
412
int platformIndex = 0 ;
429
413
for (Platform platform : pc .getPlatforms ()) {
@@ -446,7 +430,7 @@ private void collectPlatformExtensions(final ExtensionCatalogBuilder catalogBuil
446
430
int memberIndex = 0 ;
447
431
for (ArtifactCoords bom : release .getMemberBoms ()) {
448
432
memberIndex ++;
449
- final ExtensionCatalog .Mutable ec = ( ExtensionCatalog . Mutable ) registry .resolvePlatformExtensions (bom );
433
+ final ExtensionCatalog .Mutable ec = registry .resolvePlatformExtensions (bom );
450
434
if (ec != null ) {
451
435
final OriginPreference originPreference = new OriginPreference (registryIndex , platformIndex ,
452
436
releaseIndex , memberIndex , compatiblityCode );
@@ -461,9 +445,53 @@ private void collectPlatformExtensions(final ExtensionCatalogBuilder catalogBuil
461
445
}
462
446
}
463
447
464
- private void addOriginPreference (final ExtensionCatalog .Mutable ec , OriginPreference originPreference ) {
465
- Map <String , Object > metadata = ec .getMetadata ();
466
- metadata .put ("origin-preference" , originPreference );
448
+ /**
449
+ * Resolves a platform catalog from a given registry. The method may return null in case the registry does not
450
+ * provide platforms.
451
+ *
452
+ * <p>
453
+ * It starts by resolving the default platform catalog. If a list of Quarkus core versions is provided,
454
+ * it will also resolve platform catalogs for each Quarkus core version (if the registry recognizes
455
+ * those Quarkus core versions), merge all the resolved platform catalogs into a single one and return the result.
456
+ *
457
+ * @param registry the registry to resolve the catalogs from
458
+ * @param quarkusVersions optional extra Quarkus core versions
459
+ * @return platform catalog or null if the registry does not provide any platforms
460
+ * @throws RegistryResolutionException in case a registry querying failed or some other error happened
461
+ */
462
+ private static PlatformCatalog resolvePlatformCatalog (RegistryExtensionResolver registry , List <String > quarkusVersions )
463
+ throws RegistryResolutionException {
464
+ // default registry recommendations
465
+ PlatformCatalog defaultCatalog = registry .resolvePlatformCatalog ();
466
+ if (quarkusVersions .isEmpty ()) {
467
+ return defaultCatalog ;
468
+ }
469
+
470
+ List <PlatformCatalog > catalogsToMerge = List .of ();
471
+ for (int i = 0 ; i < quarkusVersions .size (); ++i ) {
472
+ var quarkusVersion = quarkusVersions .get (i );
473
+ if (registry .isAcceptsQuarkusVersionQueries (quarkusVersion )) {
474
+ final PlatformCatalog pcForQuarkusVersion = registry .resolvePlatformCatalog (quarkusVersion );
475
+ if (pcForQuarkusVersion != null ) {
476
+ if (catalogsToMerge .isEmpty ()) {
477
+ catalogsToMerge = new ArrayList <>(quarkusVersions .size () - i + 1 );
478
+ if (defaultCatalog != null ) {
479
+ catalogsToMerge .add (defaultCatalog );
480
+ }
481
+ }
482
+ catalogsToMerge .add (pcForQuarkusVersion );
483
+ }
484
+ }
485
+ }
486
+
487
+ if (catalogsToMerge .isEmpty ()) {
488
+ return defaultCatalog ;
489
+ }
490
+ return CatalogMergeUtility .mergePlatformCatalogs (catalogsToMerge );
491
+ }
492
+
493
+ private static void addOriginPreference (final ExtensionCatalog .Mutable ec , OriginPreference originPreference ) {
494
+ ec .getMetadata ().put ("origin-preference" , originPreference );
467
495
}
468
496
469
497
public ExtensionCatalog resolveExtensionCatalog (String quarkusCoreVersion ) throws RegistryResolutionException {
@@ -740,15 +768,15 @@ private void ensureRegistriesConfigured() throws RegistryResolutionException {
740
768
}
741
769
}
742
770
743
- private void appendNonPlatformExtensions (
771
+ private static void appendNonPlatformExtensions (
744
772
ExtensionCatalogBuilder catalogBuilder ,
745
773
String quarkusVersion ) throws RegistryResolutionException {
746
774
for (RegistryExtensionResolver registry : catalogBuilder .getRegistriesForQuarkusCore (quarkusVersion )) {
747
775
appendNonPlatformExtensions (registry , catalogBuilder , quarkusVersion );
748
776
}
749
777
}
750
778
751
- private void appendNonPlatformExtensions (RegistryExtensionResolver registry , ExtensionCatalogBuilder catalogBuilder ,
779
+ private static void appendNonPlatformExtensions (RegistryExtensionResolver registry , ExtensionCatalogBuilder catalogBuilder ,
752
780
String quarkusVersion ) throws RegistryResolutionException {
753
781
final ExtensionCatalog .Mutable nonPlatformCatalog = registry .resolveNonPlatformExtensions (quarkusVersion );
754
782
if (nonPlatformCatalog == null ) {
@@ -777,7 +805,7 @@ private int getRegistryIndex(String registryId) {
777
805
throw new IllegalStateException (buf .toString ());
778
806
}
779
807
780
- private void collectPlatformExtensions (String quarkusCoreVersion , ExtensionCatalogBuilder catalogBuilder ,
808
+ private static void collectPlatformExtensions (String quarkusCoreVersion , ExtensionCatalogBuilder catalogBuilder ,
781
809
Set <String > processedPlatformKeys )
782
810
throws RegistryResolutionException {
783
811
final List <RegistryExtensionResolver > quarkusVersionRegistries = catalogBuilder
@@ -803,7 +831,7 @@ private void collectPlatformExtensions(String quarkusCoreVersion, ExtensionCatal
803
831
}
804
832
}
805
833
806
- private void collectPlatformExtensions (ExtensionCatalogBuilder catalogBuilder ,
834
+ private static void collectPlatformExtensions (ExtensionCatalogBuilder catalogBuilder ,
807
835
RegistryExtensionResolver registry , int platformIndex ,
808
836
Platform p ) throws RegistryResolutionException {
809
837
0 commit comments