From 968b68c3226214aa0905ca1377e62380f3757e60 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 2 Jun 2015 10:53:08 -0700 Subject: [PATCH] Polish --- .../MetricFilterAutoConfiguration.java | 6 +-- ...agementSecurityAutoConfigurationTests.java | 43 ++++++++----------- .../condition/BeanTypeRegistry.java | 37 ++++++++-------- .../web/GzipFilterProperties.java | 2 +- ...rchRepositoriesAutoConfigurationTests.java | 20 ++++----- .../ElasticsearchAutoConfigurationTests.java | 2 +- ...asticsearchDataAutoConfigurationTests.java | 3 +- .../cli/command/shell/RunProcessCommand.java | 1 + .../SampleElasticsearchApplicationTests.java | 11 ++--- .../boot/loader/jar/JarEntryData.java | 33 ++++++++------ .../boot/loader/jar/JarFileTests.java | 2 +- .../bind/PropertySourcesPropertyValues.java | 22 +++++----- .../config/ConfigFileApplicationListener.java | 12 +++--- .../PropertySourcesPropertyValuesTests.java | 11 +++-- 14 files changed, 107 insertions(+), 98 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java index b7f4c9a3ba5..e29e6e7f824 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java @@ -135,14 +135,12 @@ public class MetricFilterAutoConfiguration { } private boolean is4xxClientError(int status) { - HttpStatus httpStatus = HttpStatus.OK; try { - httpStatus = HttpStatus.valueOf(status); + return HttpStatus.valueOf(status).is4xxClientError(); } catch (Exception ex) { - // not convertible + return false; } - return httpStatus.is4xxClientError(); } private String getKey(String string) { diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfigurationTests.java index 14cfd1e42f8..4097b46669c 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfigurationTests.java @@ -44,11 +44,11 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.web.FilterChainProxy; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultMatcher; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.util.StringUtils; -import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import static org.hamcrest.Matchers.greaterThan; @@ -209,44 +209,36 @@ public class ManagementSecurityAutoConfigurationTests { PropertyPlaceholderAutoConfiguration.class); this.context.refresh(); - MockMvc mockMvc = MockMvcBuilders - .webAppContextSetup((WebApplicationContext) this.context) - .addFilters( - this.context.getBean("springSecurityFilterChain", Filter.class)) - .build(); - + Filter filter = this.context.getBean("springSecurityFilterChain", Filter.class); + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(this.context) + .addFilters(filter).build(); // no user (Main) - mockMvc.perform( - MockMvcRequestBuilders.get("/")) + mockMvc.perform(MockMvcRequestBuilders.get("/")) .andExpect(MockMvcResultMatchers.status().isUnauthorized()) - .andExpect( - MockMvcResultMatchers.header().string("www-authenticate", - Matchers.containsString("realm=\"Spring\""))); + .andExpect(springAuthenticateRealmHeader()); // invalid user (Main) mockMvc.perform( MockMvcRequestBuilders.get("/").header("authorization", "Basic xxx")) .andExpect(MockMvcResultMatchers.status().isUnauthorized()) - .andExpect( - MockMvcResultMatchers.header().string("www-authenticate", - Matchers.containsString("realm=\"Spring\""))); + .andExpect(springAuthenticateRealmHeader()); // no user (Management) - mockMvc.perform( - MockMvcRequestBuilders.get("/beans")) + mockMvc.perform(MockMvcRequestBuilders.get("/beans")) .andExpect(MockMvcResultMatchers.status().isUnauthorized()) - .andExpect( - MockMvcResultMatchers.header().string("www-authenticate", - Matchers.containsString("realm=\"Spring\""))); + .andExpect(springAuthenticateRealmHeader()); // invalid user (Management) mockMvc.perform( MockMvcRequestBuilders.get("/beans").header("authorization", "Basic xxx")) .andExpect(MockMvcResultMatchers.status().isUnauthorized()) - .andExpect( - MockMvcResultMatchers.header().string("www-authenticate", - Matchers.containsString("realm=\"Spring\""))); + .andExpect(springAuthenticateRealmHeader()); + } + + private ResultMatcher springAuthenticateRealmHeader() { + return MockMvcResultMatchers.header().string("www-authenticate", + Matchers.containsString("realm=\"Spring\"")); } @EnableGlobalAuthentication @@ -254,9 +246,8 @@ public class ManagementSecurityAutoConfigurationTests { static class AuthenticationConfig { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth - .inMemoryAuthentication() - .withUser("user").password("password").roles("USER"); + auth.inMemoryAuthentication().withUser("user").password("password") + .roles("USER"); } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/BeanTypeRegistry.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/BeanTypeRegistry.java index 013991b20f0..96fe2b20bc2 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/BeanTypeRegistry.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/BeanTypeRegistry.java @@ -116,26 +116,14 @@ abstract class BeanTypeRegistry { definition.getFactoryMethodName()); Class generic = ResolvableType.forMethodReturnType(method) .as(FactoryBean.class).resolveGeneric(); - if (generic == null || generic.equals(Object.class)) { - generic = determineTypeFromDefinitionAttribute(factoryDefinition); + if ((generic == null || generic.equals(Object.class)) + && definition.hasAttribute(FACTORY_BEAN_OBJECT_TYPE)) { + generic = getTypeFromAttribute(definition + .getAttribute(FACTORY_BEAN_OBJECT_TYPE)); } return generic; } - private Class determineTypeFromDefinitionAttribute(BeanDefinition definition) - throws ClassNotFoundException, LinkageError { - if (definition.hasAttribute(FACTORY_BEAN_OBJECT_TYPE)) { - Object attributeObject = definition.getAttribute(FACTORY_BEAN_OBJECT_TYPE); - if (attributeObject instanceof Class) { - return (Class) attributeObject; - } - else if (attributeObject instanceof String) { - return ClassUtils.forName((String) attributeObject, null); - } - } - return Object.class; - } - private Class getDirectFactoryBeanGeneric( ConfigurableListableBeanFactory beanFactory, BeanDefinition definition, String name) throws ClassNotFoundException, LinkageError { @@ -143,12 +131,25 @@ abstract class BeanTypeRegistry { beanFactory.getBeanClassLoader()); Class generic = ResolvableType.forClass(factoryBeanClass) .as(FactoryBean.class).resolveGeneric(); - if (generic == null || generic.equals(Object.class)) { - generic = determineTypeFromDefinitionAttribute(definition); + if ((generic == null || generic.equals(Object.class)) + && definition.hasAttribute(FACTORY_BEAN_OBJECT_TYPE)) { + generic = getTypeFromAttribute(definition + .getAttribute(FACTORY_BEAN_OBJECT_TYPE)); } return generic; } + private Class getTypeFromAttribute(Object attribute) + throws ClassNotFoundException, LinkageError { + if (attribute instanceof Class) { + return (Class) attribute; + } + if (attribute instanceof String) { + return ClassUtils.forName((String) attribute, null); + } + return null; + } + /** * Factory method to get the {@link BeanTypeRegistry} for a given {@link BeanFactory}. * @param beanFactory the source bean factory diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/GzipFilterProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/GzipFilterProperties.java index 1b238d6af7f..a180db2707c 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/GzipFilterProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/GzipFilterProperties.java @@ -163,7 +163,7 @@ public class GzipFilterProperties { } public List getExcludedMimeTypes() { - return excludedMimeTypes; + return this.excludedMimeTypes; } public void setExcludedMimeTypes(List excludedMimeTypes) { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchRepositoriesAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchRepositoriesAutoConfigurationTests.java index 2c0ca346a50..537d9ad0a3f 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchRepositoriesAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchRepositoriesAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 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. @@ -51,9 +51,7 @@ public class ElasticsearchRepositoriesAutoConfigurationTests { @Test public void testDefaultRepositoryConfiguration() throws Exception { this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, - "spring.data.elasticsearch.properties.path.data:target/data", - "spring.data.elasticsearch.properties.path.logs:target/logs"); + addElasticsearchProperties(this.context); this.context.register(TestConfiguration.class, ElasticsearchAutoConfiguration.class, ElasticsearchRepositoriesAutoConfiguration.class, @@ -67,9 +65,7 @@ public class ElasticsearchRepositoriesAutoConfigurationTests { @Test public void testNoRepositoryConfiguration() throws Exception { this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, - "spring.data.elasticsearch.properties.path.data:target/data", - "spring.data.elasticsearch.properties.path.logs:target/logs"); + addElasticsearchProperties(this.context); this.context.register(EmptyConfiguration.class, ElasticsearchAutoConfiguration.class, ElasticsearchRepositoriesAutoConfiguration.class, @@ -82,9 +78,7 @@ public class ElasticsearchRepositoriesAutoConfigurationTests { @Test public void doesNotTriggerDefaultRepositoryDetectionIfCustomized() { this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, - "spring.data.elasticsearch.properties.path.data:target/data", - "spring.data.elasticsearch.properties.path.logs:target/logs"); + addElasticsearchProperties(this.context); this.context.register(CustomizedConfiguration.class, ElasticsearchAutoConfiguration.class, ElasticsearchRepositoriesAutoConfiguration.class, @@ -94,6 +88,12 @@ public class ElasticsearchRepositoriesAutoConfigurationTests { assertNotNull(this.context.getBean(CityElasticsearchDbRepository.class)); } + private void addElasticsearchProperties(AnnotationConfigApplicationContext context) { + EnvironmentTestUtils.addEnvironment(context, + "spring.data.elasticsearch.properties.path.data:target/data", + "spring.data.elasticsearch.properties.path.logs:target/logs"); + } + @Configuration @TestAutoConfigurationPackage(City.class) protected static class TestConfiguration { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfigurationTests.java index 33660ad358d..80452211f16 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 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. diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchDataAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchDataAutoConfigurationTests.java index 361c13abb54..53f9d2899ba 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchDataAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchDataAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 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. @@ -54,4 +54,5 @@ public class ElasticsearchDataAutoConfigurationTests { assertEquals(1, this.context.getBeanNamesForType(ElasticsearchTemplate.class).length); } + } diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/shell/RunProcessCommand.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/shell/RunProcessCommand.java index 9515bb80846..1820f14f6a2 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/shell/RunProcessCommand.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/shell/RunProcessCommand.java @@ -34,6 +34,7 @@ import org.springframework.boot.loader.tools.RunProcess; class RunProcessCommand extends AbstractCommand { private final String[] command; + private volatile RunProcess process; public RunProcessCommand(String... command) { diff --git a/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java index ac626eb34d0..da1f9ca3455 100644 --- a/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 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. @@ -33,6 +33,10 @@ import static org.junit.Assert.assertTrue; */ public class SampleElasticsearchApplicationTests { + private static final String[] PROPERTIES = { + "spring.data.elasticsearch.properties.path.data:target/data", + "spring.data.elasticsearch.properties.path.logs:target/logs" }; + @Rule public OutputCapture outputCapture = new OutputCapture(); @@ -40,10 +44,7 @@ public class SampleElasticsearchApplicationTests { public void testDefaultSettings() throws Exception { try { new SpringApplicationBuilder(SampleElasticsearchApplication.class) - .properties( - "spring.data.elasticsearch.properties.path.data:target/data", - "spring.data.elasticsearch.properties.path.logs:target/logs") - .run(); + .properties(PROPERTIES).run(); } catch (IllegalStateException ex) { if (serverNotRunning(ex)) { diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarEntryData.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarEntryData.java index 5f79d25f524..adc3bde0b27 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarEntryData.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarEntryData.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 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. @@ -19,6 +19,7 @@ package org.springframework.boot.loader.jar; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftReference; +import java.util.Calendar; import java.util.GregorianCalendar; import java.util.zip.ZipEntry; @@ -31,6 +32,7 @@ import org.springframework.boot.loader.util.AsciiBytes; * the entry is actually needed. * * @author Phillip Webb + * @author Andy Wilkinson */ public final class JarEntryData { @@ -146,20 +148,27 @@ public final class JarEntryData { } public long getTime() { - long time = Bytes.littleEndianValue(this.header, 12, 2); - - int seconds = (int) ((time << 1) & 0x3E); - int minutes = (int) ((time >> 5) & 0x3F); - int hours = (int) ((time >> 11) & 0x1F); - long date = Bytes.littleEndianValue(this.header, 14, 2); + long time = Bytes.littleEndianValue(this.header, 12, 2); + return decodeMsDosFormatDateTime(date, time).getTimeInMillis(); + } - int day = (int) (date & 0x1F); - int month = (int) ((date >> 5) & 0xF) - 1; + /** + * Decode MSDOS Date Time details. See mindprod.com/jgloss/zip.html for + * more details of the format. + * @param date the date part + * @param time the time part + * @return a {@link Calendar} containing the decoded date. + */ + private Calendar decodeMsDosFormatDateTime(long date, long time) { int year = (int) ((date >> 9) & 0x7F) + 1980; - - return new GregorianCalendar(year, month, day, hours, minutes, seconds) - .getTimeInMillis(); + int month = (int) ((date >> 5) & 0xF) - 1; + int day = (int) (date & 0x1F); + int hours = (int) ((time >> 11) & 0x1F); + int minutes = (int) ((time >> 5) & 0x3F); + int seconds = (int) ((time << 1) & 0x3E); + return new GregorianCalendar(year, month, day, hours, minutes, seconds); } public long getCrc() { diff --git a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java index 3b59869c2bc..dfbbb7149a2 100644 --- a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java +++ b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 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. diff --git a/spring-boot/src/main/java/org/springframework/boot/bind/PropertySourcesPropertyValues.java b/spring-boot/src/main/java/org/springframework/boot/bind/PropertySourcesPropertyValues.java index 83a87a8b854..ec13ad1a324 100644 --- a/spring-boot/src/main/java/org/springframework/boot/bind/PropertySourcesPropertyValues.java +++ b/spring-boot/src/main/java/org/springframework/boot/bind/PropertySourcesPropertyValues.java @@ -121,16 +121,7 @@ public class PropertySourcesPropertyValues implements PropertyValues { .contains(source.getName()) && !includes.matches(propertyName)) { continue; } - Object value = null; - try { - value = resolver.getProperty(propertyName, Object.class); - } - catch (RuntimeException ex) { - // Probably could not resolve placeholders, ignore it here - if (value == null) { - value = source.getProperty(propertyName); - } - } + Object value = getEnumerableProperty(source, resolver, propertyName); if (!this.propertyValues.containsKey(propertyName)) { this.propertyValues.put(propertyName, new PropertyValue(propertyName, value)); @@ -139,6 +130,17 @@ public class PropertySourcesPropertyValues implements PropertyValues { } } + private Object getEnumerableProperty(EnumerablePropertySource source, + PropertySourcesPropertyResolver resolver, String propertyName) { + try { + return resolver.getProperty(propertyName, Object.class); + } + catch (RuntimeException ex) { + // Probably could not resolve placeholders, ignore it here + return source.getProperty(propertyName); + } + } + private void processCompositePropertySource(CompositePropertySource source, PropertySourcesPropertyResolver resolver, PropertyNamePatternsMatcher includes, Collection exacts) { diff --git a/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java b/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java index 3ddeb4e7886..0fdb02b4847 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java @@ -387,15 +387,17 @@ public class ConfigFileApplicationListener implements .getProperty(INCLUDE_PROFILES_PROPERTY)); } } - StringBuilder msg = new StringBuilder(); msg.append(propertySource == null ? "Skipped " : "Loaded "); msg.append("config file "); - msg.append("'").append(location).append("' "); - msg.append(StringUtils.hasLength(profile) ? "for profile " + profile : " "); - msg.append(resource == null || !resource.exists() ? "resource not found" : ""); + msg.append("'").append(location).append("'"); + if (StringUtils.hasLength(profile)) { + msg.append(" for profile" + profile); + } + if (resource == null || !resource.exists()) { + msg.append(" resource not found"); + } this.debug.add(msg); - return propertySource; } diff --git a/spring-boot/src/test/java/org/springframework/boot/bind/PropertySourcesPropertyValuesTests.java b/spring-boot/src/test/java/org/springframework/boot/bind/PropertySourcesPropertyValuesTests.java index afd1240884b..458ca9732e2 100644 --- a/spring-boot/src/test/java/org/springframework/boot/bind/PropertySourcesPropertyValuesTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/bind/PropertySourcesPropertyValuesTests.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; +import java.util.Map; import org.junit.Before; import org.junit.Test; @@ -44,6 +45,7 @@ public class PropertySourcesPropertyValuesTests { @Before public void init() { this.propertySources.addFirst(new PropertySource("static", "foo") { + @Override public Object getProperty(String name) { if (name.equals(getSource())) { @@ -59,10 +61,8 @@ public class PropertySourcesPropertyValuesTests { @Test public void testTypesPreserved() { - this.propertySources.replace( - "map", - new MapPropertySource("map", Collections. singletonMap( - "name", 123))); + Map map = Collections. singletonMap("name", 123); + this.propertySources.replace("map", new MapPropertySource("map", map)); PropertySourcesPropertyValues propertyValues = new PropertySourcesPropertyValues( this.propertySources); assertEquals(123, propertyValues.getPropertyValues()[0].getValue()); @@ -123,6 +123,7 @@ public class PropertySourcesPropertyValuesTests { @Test public void testNonEnumeratedPlaceholder() { this.propertySources.addFirst(new PropertySource("another", "baz") { + @Override public Object getProperty(String name) { if (name.equals(getSource())) { @@ -179,10 +180,12 @@ public class PropertySourcesPropertyValuesTests { TestBean target = new TestBean(); DataBinder binder = new DataBinder(target); this.propertySources.addFirst(new PropertySource("application", "STUFF") { + @Override public Object getProperty(String name) { return new Object(); } + }); binder.bind(new PropertySourcesPropertyValues(this.propertySources, (Collection) null, Collections.singleton("name")));