1717import java .util .ArrayList ;
1818import java .util .Arrays ;
1919import java .util .List ;
20+ import java .util .Optional ;
2021
2122import com .fortify .cli .common .exception .FcliSimpleException ;
2223import com .fortify .cli .common .util .FcliDataHelper ;
@@ -292,7 +293,7 @@ private File findExistingInstallation(String requestedVersion) {
292293
293294 // If specific version requested, look for matching installation
294295 if (!"any" .equals (requestedVersion )) {
295- var optionalVersionDescriptor = toolDefinition . getOptionalVersionOrDefault (requestedVersion );
296+ var optionalVersionDescriptor = getOptionalVersionOrDefault (toolDefinition , requestedVersion );
296297 if (optionalVersionDescriptor .isPresent ()) {
297298 var requestedVersionDescriptor = optionalVersionDescriptor .get ();
298299 var installation = ToolInstallationDescriptor .load (toolName , requestedVersionDescriptor );
@@ -388,7 +389,7 @@ private String detectVersionFromBinary(File toolBinary, File installDir) {
388389 private void validateVersionMatch (ToolDefinitionVersionDescriptor versionDescriptor , String requestedVersion ) {
389390 if (!definitionsOptional ) {
390391 var toolDefinition = getRequiredDefinition ();
391- var optionalRequestedVersion = toolDefinition . getOptionalVersionOrDefault (requestedVersion );
392+ var optionalRequestedVersion = getOptionalVersionOrDefault (toolDefinition , requestedVersion );
392393 if (optionalRequestedVersion .isEmpty ()) {
393394 throw new FcliSimpleException (
394395 String .format ("Requested version %s not found in tool definitions. Detected version is %s" ,
@@ -411,7 +412,7 @@ private void validateVersionMatch(ToolDefinitionVersionDescriptor versionDescrip
411412 // No definitions → accept any detected version for requestedVersion
412413 return ;
413414 }
414- var optionalRequestedVersion = toolDefinition . getOptionalVersionOrDefault (requestedVersion );
415+ var optionalRequestedVersion = getOptionalVersionOrDefault (toolDefinition , requestedVersion );
415416 if (optionalRequestedVersion .isEmpty ()) {
416417 // Without definitions, we already returned; if we got here, behave like strict
417418 // mode
@@ -444,7 +445,7 @@ private ToolInstallationDescriptor createAndSaveInstallation(File toolBinary, To
444445
445446 private File findMatchingCandidate (List <File > candidates , String requestedVersion ) {
446447 var toolDefinition = ToolDefinitionsHelper .getToolDefinitionRootDescriptor (toolName );
447- var optionalVersionDescriptor = toolDefinition . getOptionalVersionOrDefault (requestedVersion );
448+ var optionalVersionDescriptor = getOptionalVersionOrDefault (toolDefinition , requestedVersion );
448449 if (optionalVersionDescriptor .isEmpty ()) {
449450 throw new FcliSimpleException (
450451 String .format ("Requested version %s not found in tool definitions" , requestedVersion ));
@@ -512,7 +513,7 @@ private ToolDefinitionVersionDescriptor resolveVersionDescriptor(String detected
512513 String normalizedVersion = toolDefinition .normalizeVersionFormat (detectedVersion );
513514
514515 // Try to find matching version in tool definitions using normalized version
515- return toolDefinition . getOptionalVersion (normalizedVersion )
516+ return getOptionalVersion (toolDefinition , normalizedVersion )
516517 .orElseGet (() -> {
517518 // Version not found in definitions, create synthetic descriptor with normalized
518519 // version
@@ -524,6 +525,23 @@ private ToolDefinitionVersionDescriptor resolveVersionDescriptor(String detected
524525 });
525526 }
526527
528+ private Optional <ToolDefinitionVersionDescriptor > getOptionalVersionOrDefault (
529+ ToolDefinitionRootDescriptor toolDefinition , String versionOrAlias ) {
530+ try {
531+ return Optional .of (toolDefinition .getVersionOrDefault (versionOrAlias ));
532+ } catch (FcliSimpleException e ) {
533+ return Optional .empty ();
534+ }
535+ }
536+
537+ private Optional <ToolDefinitionVersionDescriptor > getOptionalVersion (
538+ ToolDefinitionRootDescriptor toolDefinition , String versionOrAlias ) {
539+ try {
540+ return Optional .of (toolDefinition .getVersion (versionOrAlias ));
541+ } catch (FcliSimpleException e ) {
542+ return Optional .empty ();
543+ }
544+ }
527545 private ToolDefinitionRootDescriptor getRequiredDefinition () {
528546 return ToolDefinitionsHelper .getToolDefinitionRootDescriptor (toolName );
529547 }
0 commit comments