Polish "Add support for converting String to Pattern"
See gh-24311
This commit is contained in:
		
							parent
							
								
									06f6b45248
								
							
						
					
					
						commit
						a20a74817e
					
				| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright 2002-2022 the original author or authors.
 | 
					 * Copyright 2002-2023 the original author or authors.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,7 @@ import java.util.Locale;
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
import java.util.regex.Pattern;
 | 
					import java.util.regex.Pattern;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.core.KotlinDetector;
 | 
				
			||||||
import org.springframework.core.convert.ConversionService;
 | 
					import org.springframework.core.convert.ConversionService;
 | 
				
			||||||
import org.springframework.core.convert.converter.ConverterRegistry;
 | 
					import org.springframework.core.convert.converter.ConverterRegistry;
 | 
				
			||||||
import org.springframework.lang.Nullable;
 | 
					import org.springframework.lang.Nullable;
 | 
				
			||||||
| 
						 | 
					@ -170,6 +171,11 @@ public class DefaultConversionService extends GenericConversionService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		converterRegistry.addConverter(new StringToPatternConverter());
 | 
							converterRegistry.addConverter(new StringToPatternConverter());
 | 
				
			||||||
		converterRegistry.addConverter(Pattern.class, String.class, new ObjectToStringConverter());
 | 
							converterRegistry.addConverter(Pattern.class, String.class, new ObjectToStringConverter());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (KotlinDetector.isKotlinPresent()) {
 | 
				
			||||||
 | 
								converterRegistry.addConverter(new StringToRegexConverter());
 | 
				
			||||||
 | 
								converterRegistry.addConverter(kotlin.text.Regex.class, String.class, new ObjectToStringConverter());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright 2002-2022 the original author or authors.
 | 
					 * Copyright 2002-2023 the original author or authors.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
| 
						 | 
					@ -21,15 +21,19 @@ import java.util.regex.Pattern;
 | 
				
			||||||
import org.springframework.core.convert.converter.Converter;
 | 
					import org.springframework.core.convert.converter.Converter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Convert a String to a {@link Pattern}.
 | 
					 * Converts from a String to a {@link java.util.regex.Pattern}.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @author Valery Yatsynovich
 | 
					 * @author Valery Yatsynovich
 | 
				
			||||||
 * @since 5.2
 | 
					 * @author Stephane Nicoll
 | 
				
			||||||
 | 
					 * @since 6.1
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
class StringToPatternConverter implements Converter<String, Pattern> {
 | 
					final class StringToPatternConverter implements Converter<String, Pattern> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Pattern convert(String source) {
 | 
						public Pattern convert(String source) {
 | 
				
			||||||
 | 
							if (source.isEmpty()) {
 | 
				
			||||||
 | 
								return null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return Pattern.compile(source);
 | 
							return Pattern.compile(source);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					package org.springframework.core.convert.support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.core.convert.converter.Converter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Converts from a String to a [Regex].
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Stephane Nicoll
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class StringToRegexConverter : Converter<String, Regex> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						override fun convert(source: String): Regex? {
 | 
				
			||||||
 | 
							if (source.isEmpty()) {
 | 
				
			||||||
 | 
								return null
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return source.toRegex()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -319,10 +319,16 @@ class DefaultConversionServiceTests {
 | 
				
			||||||
		assertThat(convertToUUID).isEqualTo(uuid);
 | 
							assertThat(convertToUUID).isEqualTo(uuid);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void stringToPatternEmptyString() {
 | 
				
			||||||
 | 
							assertThat(conversionService.convert("", Pattern.class)).isNull();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	void stringToPattern() {
 | 
						void stringToPattern() {
 | 
				
			||||||
		String regex = "\\s";
 | 
							String pattern = "\\s";
 | 
				
			||||||
		assertThat(conversionService.convert(regex, Pattern.class)).extracting(Pattern::pattern).isEqualTo(regex);
 | 
							assertThat(conversionService.convert(pattern, Pattern.class))
 | 
				
			||||||
 | 
									.isInstanceOfSatisfying(Pattern.class, regex -> assertThat(regex.pattern()).isEqualTo(pattern));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					package org.springframework.core.convert.support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.assertj.core.api.Assertions.assertThat
 | 
				
			||||||
 | 
					import org.junit.jupiter.api.Test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Tests for Kotlin support in [DefaultConversionService].
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Stephane Nicoll
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class DefaultConversionServiceKotlinTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private val conversionService = DefaultConversionService()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						fun stringToRegexEmptyString() {
 | 
				
			||||||
 | 
							assertThat(conversionService.convert("", Regex::class.java)).isNull();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						fun stringToRegex() {
 | 
				
			||||||
 | 
							val pattern = "\\w+"
 | 
				
			||||||
 | 
							assertThat(conversionService.convert(pattern, Regex::class.java)).isInstanceOfSatisfying(
 | 
				
			||||||
 | 
								Regex::class.java
 | 
				
			||||||
 | 
							) { regex -> assertThat(regex.pattern).isEqualTo(pattern) }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						fun regexToString() {
 | 
				
			||||||
 | 
							val pattern = "\\w+"
 | 
				
			||||||
 | 
							assertThat(conversionService.convert(pattern.toRegex(), String::class.java)).isEqualTo(pattern)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue