Merge pull request #45212 from nosan
	
		
			
	
		
	
	
		
			
				
	
				Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run
				
					Details
				
			
		
			
				
	
				Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions
				
					Details
				
			
		
			
				
	
				Build and Deploy Snapshot / Verify (push) Blocked by required conditions
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:22], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:22], map[id:windows-latest name:Windows]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:23], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:23], map[id:windows-latest name:Windows]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run
				
					Details
				
			
		
	
				
					
				
			
				
	
				Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run
				
					Details
				
			
		
			
				
	
				Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions
				
					Details
				
			
		
			
				
	
				Build and Deploy Snapshot / Verify (push) Blocked by required conditions
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:22], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:22], map[id:windows-latest name:Windows]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:23], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:23], map[id:windows-latest name:Windows]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Waiting to run
				
					Details
				
			
		
			
				
	
				Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run
				
					Details
				
			
		
	* gh-45212: Polish "Fix parameter replacement when message matches its code" Fix parameter replacement when message matches its code Closes gh-45212
This commit is contained in:
		
						commit
						b218e9d3db
					
				| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2023 the original author or authors.
 | 
			
		||||
 * Copyright 2012-2025 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +34,8 @@ import org.springframework.context.i18n.LocaleContextHolder;
 | 
			
		|||
 */
 | 
			
		||||
class MessageSourceMessageInterpolator implements MessageInterpolator {
 | 
			
		||||
 | 
			
		||||
	private static final String DEFAULT_MESSAGE = MessageSourceMessageInterpolator.class.getName();
 | 
			
		||||
 | 
			
		||||
	private static final char PREFIX = '{';
 | 
			
		||||
 | 
			
		||||
	private static final char SUFFIX = '}';
 | 
			
		||||
| 
						 | 
				
			
			@ -115,13 +117,11 @@ class MessageSourceMessageInterpolator implements MessageInterpolator {
 | 
			
		|||
 | 
			
		||||
	private String replaceParameter(String parameter, Locale locale, Set<String> visitedParameters) {
 | 
			
		||||
		parameter = replaceParameters(parameter, locale, visitedParameters);
 | 
			
		||||
		String value = this.messageSource.getMessage(parameter, null, null, locale);
 | 
			
		||||
		return (value != null && !isUsingCodeAsDefaultMessage(value, parameter))
 | 
			
		||||
				? replaceParameters(value, locale, visitedParameters) : null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private boolean isUsingCodeAsDefaultMessage(String value, String parameter) {
 | 
			
		||||
		return value.equals(parameter);
 | 
			
		||||
		String value = this.messageSource.getMessage(parameter, null, DEFAULT_MESSAGE, locale);
 | 
			
		||||
		if (value == null || value.equals(DEFAULT_MESSAGE)) {
 | 
			
		||||
			return null;
 | 
			
		||||
		}
 | 
			
		||||
		return replaceParameters(value, locale, visitedParameters);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2023 the original author or authors.
 | 
			
		||||
 * Copyright 2012-2025 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -66,6 +66,19 @@ class MessageSourceMessageInterpolatorTests {
 | 
			
		|||
			.isEqualTo("{foo}{child}+{child}{bar}");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	void interpolateShouldReplaceParameterThatReferencesAMessageThatMatchesItsCode() {
 | 
			
		||||
		this.messageSource.addMessage("foo", Locale.getDefault(), "foo");
 | 
			
		||||
		assertThat(this.interpolator.interpolate("{foo}", this.context)).isEqualTo("foo");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	void interpolateUsingCodeAsDefaultShouldReplaceParameterThatReferencesAMessageThatMatchesItsCode() {
 | 
			
		||||
		this.messageSource.setUseCodeAsDefaultMessage(true);
 | 
			
		||||
		this.messageSource.addMessage("foo", Locale.getDefault(), "foo");
 | 
			
		||||
		assertThat(this.interpolator.interpolate("{foo}", this.context)).isEqualTo("foo");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	void interpolateWhenParametersAreNestedShouldFullyReplaceAllParameters() {
 | 
			
		||||
		this.messageSource.addMessage("top", Locale.getDefault(), "{child}+{child}");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue