@@ -443,34 +443,30 @@ record SimplePlaceholderPart(String text, String key, @Nullable String fallback)
443
443
444
444
@ Override
445
445
public String resolve (PartResolutionContext resolutionContext ) {
446
- String resolvedValue = resolveToText ( resolutionContext , this .key );
447
- if ( resolvedValue != null ) {
448
- return resolvedValue ;
449
- }
450
- else if (this .fallback != null ) {
451
- return this .fallback ;
452
- }
453
- return resolutionContext .handleUnresolvablePlaceholder (this . key , this .text );
446
+ String resolvedKey = Part . resolveAll ( this .keyParts , resolutionContext );
447
+ String value = resolveToText ( resolutionContext , resolvedKey );
448
+ if ( value != null ) {
449
+ return value ;
450
+ } else if (this .defaultParts != null ) {
451
+ return Part . resolveAll ( this .defaultParts , resolutionContext ) ;
452
+ }
453
+ return resolutionContext .handleUnresolvablePlaceholder (resolvedKey , this .text );
454
454
}
455
-
456
- @ Nullable
455
+
457
456
private String resolveToText (PartResolutionContext resolutionContext , String text ) {
458
- String resolvedValue = resolutionContext .resolvePlaceholder (text );
459
- if (resolvedValue != null ) {
460
- resolutionContext .flagPlaceholderAsVisited (text );
461
- // Let's check if we need to recursively resolve that value
462
- List <Part > nestedParts = resolutionContext .parse (resolvedValue );
463
- String value = toText (nestedParts );
464
- if (!isTextOnly (nestedParts )) {
465
- value = new ParsedValue (resolvedValue , nestedParts ).resolve (resolutionContext );
466
- }
467
- resolutionContext .removePlaceholder (text );
468
- return value ;
469
- }
470
- // Not found
471
- return null ;
457
+ String resolvedValue = resolutionContext .resolvePlaceholder (text );
458
+ if (resolvedValue != null ) {
459
+ resolutionContext .flagPlaceholderAsVisited (text );
460
+ // Check for nested placeholders
461
+ List <Part > nestedParts = resolutionContext .parse (resolvedValue );
462
+ String value = Part .resolveAll (nestedParts , resolutionContext );
463
+ resolutionContext .removePlaceholder (text );
464
+ return value ;
465
+ }
466
+ return null ;
472
467
}
473
468
469
+
474
470
private boolean isTextOnly (List <Part > parts ) {
475
471
return parts .stream ().allMatch (TextPart .class ::isInstance );
476
472
}
0 commit comments