Merge branch '1.5.x'

Closes gh-10457
pull/10494/head
Andy Wilkinson 7 years ago
commit 41424e4529

@ -115,7 +115,7 @@ Running a full build is a two phase process.
Preparing the build will compile and install the `spring-boot-maven-plugin` so that it Preparing the build will compile and install the `spring-boot-maven-plugin` so that it
can be referenced during the full build. It also generates a `settings.xml` file that can be referenced during the full build. It also generates a `settings.xml` file that
enables a `snapshot`, `milestone` or `release` profiles based on the version being enables a `snapshot`, `milestone` or `release` profiles based on the version being
build. To prepare the build, from the root directory use: built. To prepare the build, from the root directory use:
[indent=0] [indent=0]
---- ----

@ -53,7 +53,7 @@ import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMappi
/** /**
* A custom {@link RequestMappingInfoHandlerMapping} that makes web endpoints available on * A custom {@link RequestMappingInfoHandlerMapping} that makes web endpoints available on
* Cloudfoundry specific URLS over HTTP using Spring MVC. * Cloud Foundry specific URLs over HTTP using Spring MVC.
* *
* @author Madhura Bhave * @author Madhura Bhave
*/ */

@ -37,7 +37,7 @@ public class HealthIndicatorProperties {
private List<String> order = null; private List<String> order = null;
/** /**
* Mapping of health statuses to HttpStatus codes. By default, registered health * Mapping of health statuses to HTTP status codes. By default, registered health
* statuses map to sensible defaults (i.e. UP maps to 200). * statuses map to sensible defaults (i.e. UP maps to 200).
*/ */
private final Map<String, Integer> httpMapping = new HashMap<>(); private final Map<String, Integer> httpMapping = new HashMap<>();

@ -513,7 +513,7 @@
{ {
"name": "endpoints.health.mapping", "name": "endpoints.health.mapping",
"type": "java.util.Map<java.lang.String,org.springframework.http.HttpStatus>", "type": "java.util.Map<java.lang.String,org.springframework.http.HttpStatus>",
"description": "Mapping of health statuses to HttpStatus codes. By default, registered health\n statuses map to sensible defaults (i.e. UP maps to 200).", "description": "Mapping of health statuses to HTTP status codes. By default, registered health\n statuses map to sensible defaults (i.e. UP maps to 200).",
"deprecation": { "deprecation": {
"replacement": "management.health.status.http-mapping", "replacement": "management.health.status.http-mapping",
"level": "error" "level": "error"

@ -45,7 +45,7 @@ public class JolokiaManagementContextConfigurationTests {
JolokiaManagementContextConfiguration.class)); JolokiaManagementContextConfiguration.class));
@Test @Test
public void jolokiaIsEnabledByDefault() { public void jolokiaCanBeEnabled() {
this.contextRunner.withPropertyValues("management.jolokia.enabled=true") this.contextRunner.withPropertyValues("management.jolokia.enabled=true")
.run((context) -> { .run((context) -> {
context.getBean(ServletRegistrationBean.class); context.getBean(ServletRegistrationBean.class);

@ -38,18 +38,18 @@ import org.springframework.context.ConfigurableApplicationContext;
@Endpoint(id = "shutdown", defaultEnablement = DefaultEnablement.DISABLED) @Endpoint(id = "shutdown", defaultEnablement = DefaultEnablement.DISABLED)
public class ShutdownEndpoint implements ApplicationContextAware { public class ShutdownEndpoint implements ApplicationContextAware {
private static final Map<String, Object> NO_CONTEXT_MESSAGE = Collections private static final Map<String, String> NO_CONTEXT_MESSAGE = Collections
.unmodifiableMap(Collections.<String, Object>singletonMap("message", .unmodifiableMap(Collections.<String, String>singletonMap("message",
"No context to shutdown.")); "No context to shutdown."));
private static final Map<String, Object> SHUTDOWN_MESSAGE = Collections private static final Map<String, String> SHUTDOWN_MESSAGE = Collections
.unmodifiableMap(Collections.<String, Object>singletonMap("message", .unmodifiableMap(Collections.<String, String>singletonMap("message",
"Shutting down, bye...")); "Shutting down, bye..."));
private ConfigurableApplicationContext context; private ConfigurableApplicationContext context;
@WriteOperation @WriteOperation
public Map<String, Object> shutdown() { public Map<String, String> shutdown() {
if (this.context == null) { if (this.context == null) {
return NO_CONTEXT_MESSAGE; return NO_CONTEXT_MESSAGE;
} }

@ -74,7 +74,7 @@ public class CompositeReactiveHealthIndicator implements ReactiveHealthIndicator
} }
/** /**
* Specify an alternative timeout {@link Health} if an {@link HealthIndicator} failed * Specify an alternative timeout {@link Health} if a {@link HealthIndicator} failed
* to reply after specified {@code timeout}. * to reply after specified {@code timeout}.
* @param timeout number of milliseconds to wait before using the * @param timeout number of milliseconds to wait before using the
* {@code timeoutHealth} * {@code timeoutHealth}

@ -51,7 +51,7 @@ public class ShutdownEndpointTests {
contextRunner.run((context) -> { contextRunner.run((context) -> {
EndpointConfig config = context.getBean(EndpointConfig.class); EndpointConfig config = context.getBean(EndpointConfig.class);
ClassLoader previousTccl = Thread.currentThread().getContextClassLoader(); ClassLoader previousTccl = Thread.currentThread().getContextClassLoader();
Map<String, Object> result; Map<String, String> result;
Thread.currentThread().setContextClassLoader( Thread.currentThread().setContextClassLoader(
new URLClassLoader(new URL[0], getClass().getClassLoader())); new URLClassLoader(new URL[0], getClass().getClassLoader()));
try { try {
@ -60,7 +60,7 @@ public class ShutdownEndpointTests {
finally { finally {
Thread.currentThread().setContextClassLoader(previousTccl); Thread.currentThread().setContextClassLoader(previousTccl);
} }
assertThat((String) result.get("message")).startsWith("Shutting down"); assertThat(result.get("message")).startsWith("Shutting down");
assertThat(((ConfigurableApplicationContext) context).isActive()).isTrue(); assertThat(((ConfigurableApplicationContext) context).isActive()).isTrue();
assertThat(config.latch.await(10, TimeUnit.SECONDS)).isTrue(); assertThat(config.latch.await(10, TimeUnit.SECONDS)).isTrue();
assertThat(config.threadContextClassLoader) assertThat(config.threadContextClassLoader)
@ -74,7 +74,7 @@ public class ShutdownEndpointTests {
EmptyConfig.class).child(EndpointConfig.class) EmptyConfig.class).child(EndpointConfig.class)
.web(WebApplicationType.NONE).run(); .web(WebApplicationType.NONE).run();
CountDownLatch latch = context.getBean(EndpointConfig.class).latch; CountDownLatch latch = context.getBean(EndpointConfig.class).latch;
assertThat((String) context.getBean(ShutdownEndpoint.class).shutdown() assertThat(context.getBean(ShutdownEndpoint.class).shutdown()
.get("message")).startsWith("Shutting down"); .get("message")).startsWith("Shutting down");
assertThat(context.isActive()).isTrue(); assertThat(context.isActive()).isTrue();
assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue();
@ -87,7 +87,7 @@ public class ShutdownEndpointTests {
.web(WebApplicationType.NONE).run(); .web(WebApplicationType.NONE).run();
CountDownLatch parentLatch = context.getBean(EndpointConfig.class).latch; CountDownLatch parentLatch = context.getBean(EndpointConfig.class).latch;
CountDownLatch childLatch = context.getBean(EmptyConfig.class).latch; CountDownLatch childLatch = context.getBean(EmptyConfig.class).latch;
assertThat((String) context.getBean(ShutdownEndpoint.class).shutdown() assertThat(context.getBean(ShutdownEndpoint.class).shutdown()
.get("message")).startsWith("Shutting down"); .get("message")).startsWith("Shutting down");
assertThat(context.isActive()).isTrue(); assertThat(context.isActive()).isTrue();
assertThat(parentLatch.await(10, TimeUnit.SECONDS)).isTrue(); assertThat(parentLatch.await(10, TimeUnit.SECONDS)).isTrue();

@ -42,7 +42,7 @@ public class SessionProperties {
*/ */
private StoreType storeType; private StoreType storeType;
private Integer timeout; private final Integer timeout;
private Servlet servlet = new Servlet(); private Servlet servlet = new Servlet();

@ -190,7 +190,7 @@ public class HttpMessageConvertersAutoConfigurationTests {
} }
@Test @Test
public void sringCustomConverter() { public void stringCustomConverter() {
this.contextRunner.withUserConfiguration(StringConverterConfig.class) this.contextRunner.withUserConfiguration(StringConverterConfig.class)
.run(assertConverter(StringHttpMessageConverter.class, .run(assertConverter(StringHttpMessageConverter.class,
"customStringMessageConverter")); "customStringMessageConverter"));

@ -335,7 +335,7 @@ public class SecurityAutoConfigurationTests {
protected static class TestAuthenticationProviderConfiguration { protected static class TestAuthenticationProviderConfiguration {
@Bean @Bean
public AuthenticationProvider myauthenticationProvider() { public AuthenticationProvider myAuthenticationProvider() {
return new TestingAuthenticationProvider(); return new TestingAuthenticationProvider();
} }

@ -38,14 +38,14 @@ import org.springframework.boot.cli.command.run.RunCommand;
*/ */
public class DefaultCommandFactory implements CommandFactory { public class DefaultCommandFactory implements CommandFactory {
private static final List<Command> DEFAULT_COMMANDS = Arrays.<Command>asList( private static final List<Command> defaultCommands = Arrays.<Command>asList(
new VersionCommand(), new RunCommand(), new GrabCommand(), new JarCommand(), new VersionCommand(), new RunCommand(), new GrabCommand(), new JarCommand(),
new WarCommand(), new InstallCommand(), new UninstallCommand(), new WarCommand(), new InstallCommand(), new UninstallCommand(),
new InitCommand()); new InitCommand());
@Override @Override
public Collection<Command> getCommands() { public Collection<Command> getCommands() {
return DEFAULT_COMMANDS; return defaultCommands;
} }
} }

@ -42,23 +42,23 @@ import org.springframework.core.env.PropertySource;
@Order(Ordered.LOWEST_PRECEDENCE) @Order(Ordered.LOWEST_PRECEDENCE)
public class DevToolsPropertyDefaultsPostProcessor implements EnvironmentPostProcessor { public class DevToolsPropertyDefaultsPostProcessor implements EnvironmentPostProcessor {
private static final Map<String, Object> PROPERTIES; private static final Map<String, Object> properties;
static { static {
Map<String, Object> properties = new HashMap<>(); Map<String, Object> devToolsProperties = new HashMap<>();
properties.put("spring.thymeleaf.cache", "false"); devToolsProperties.put("spring.thymeleaf.cache", "false");
properties.put("spring.freemarker.cache", "false"); devToolsProperties.put("spring.freemarker.cache", "false");
properties.put("spring.groovy.template.cache", "false"); devToolsProperties.put("spring.groovy.template.cache", "false");
properties.put("spring.mustache.cache", "false"); devToolsProperties.put("spring.mustache.cache", "false");
properties.put("server.session.persistent", "true"); devToolsProperties.put("server.session.persistent", "true");
properties.put("spring.h2.console.enabled", "true"); devToolsProperties.put("spring.h2.console.enabled", "true");
properties.put("spring.resources.cache-period", "0"); devToolsProperties.put("spring.resources.cache-period", "0");
properties.put("spring.resources.chain.cache", "false"); devToolsProperties.put("spring.resources.chain.cache", "false");
properties.put("spring.template.provider.cache", "false"); devToolsProperties.put("spring.template.provider.cache", "false");
properties.put("spring.mvc.log-resolved-exception", "true"); devToolsProperties.put("spring.mvc.log-resolved-exception", "true");
properties.put("server.servlet.jsp.init-parameters.development", "true"); devToolsProperties.put("server.servlet.jsp.init-parameters.development", "true");
properties.put("spring.reactor.stacktrace-mode.enabled", "true"); devToolsProperties.put("spring.reactor.stacktrace-mode.enabled", "true");
PROPERTIES = Collections.unmodifiableMap(properties); properties = Collections.unmodifiableMap(devToolsProperties);
} }
@Override @Override
@ -66,7 +66,7 @@ public class DevToolsPropertyDefaultsPostProcessor implements EnvironmentPostPro
SpringApplication application) { SpringApplication application) {
if (isLocalApplication(environment) && canAddProperties(environment)) { if (isLocalApplication(environment) && canAddProperties(environment)) {
PropertySource<?> propertySource = new MapPropertySource("refresh", PropertySource<?> propertySource = new MapPropertySource("refresh",
PROPERTIES); properties);
environment.getPropertySources().addLast(propertySource); environment.getPropertySources().addLast(propertySource);
} }
} }

@ -1249,7 +1249,7 @@ content into your application; rather pick only the properties that you need.
management.health.rabbit.enabled=true # Enable RabbitMQ health check. management.health.rabbit.enabled=true # Enable RabbitMQ health check.
management.health.redis.enabled=true # Enable Redis health check. management.health.redis.enabled=true # Enable Redis health check.
management.health.solr.enabled=true # Enable Solr health check. management.health.solr.enabled=true # Enable Solr health check.
management.health.status.http-mapping= # Mapping of health statuses to HttpStatus codes. By default, registered health statuses map to sensible defaults (i.e. UP maps to 200). management.health.status.http-mapping= # Mapping of health statuses to HTTP status codes. By default, registered health statuses map to sensible defaults (i.e. UP maps to 200).
management.health.status.order=DOWN, OUT_OF_SERVICE, UP, UNKNOWN # Comma-separated list of health statuses in order of severity. management.health.status.order=DOWN, OUT_OF_SERVICE, UP, UNKNOWN # Comma-separated list of health statuses in order of severity.
# INFO CONTRIBUTORS ({sc-spring-boot-actuator}/autoconfigure/info/InfoContributorProperties.{sc-ext}[InfoContributorProperties]) # INFO CONTRIBUTORS ({sc-spring-boot-actuator}/autoconfigure/info/InfoContributorProperties.{sc-ext}[InfoContributorProperties])

@ -1836,7 +1836,7 @@ respectively.
Spring Data REST can expose the `Repository` implementations as REST endpoints for you as Spring Data REST can expose the `Repository` implementations as REST endpoints for you as
long as Spring MVC has been enabled for the application. long as Spring MVC has been enabled for the application.
Spring Boot exposes as set of useful properties from the `spring.data.rest` namespace that Spring Boot exposes a set of useful properties from the `spring.data.rest` namespace that
customize the customize the
{spring-data-rest-javadoc}/core/config/RepositoryRestConfiguration.{dc-ext}[`RepositoryRestConfiguration`]. {spring-data-rest-javadoc}/core/config/RepositoryRestConfiguration.{dc-ext}[`RepositoryRestConfiguration`].
If you need to provide additional customization, you should use a If you need to provide additional customization, you should use a

@ -114,7 +114,7 @@ The following technology agnostic endpoints are available:
|Allows the application to be gracefully shutdown (not enabled by default). |Allows the application to be gracefully shutdown (not enabled by default).
|`status` |`status`
|Show application status information (i.e. `health` status with no additional details) |Show application status information (i.e. `health` status with no additional details).
|`threaddump` |`threaddump`
|Performs a thread dump. |Performs a thread dump.
@ -393,7 +393,7 @@ to your application properties:
The HTTP status code in the response reflects the overall health status (e.g. `UP` The HTTP status code in the response reflects the overall health status (e.g. `UP`
maps to 200, `OUT_OF_SERVICE` or `DOWN` to 503). You might also want to register custom maps to 200, `OUT_OF_SERVICE` or `DOWN` to 503). You might also want to register custom
status mappings if you access the health endpoint over HTTP. For example, the following status mappings if you access the health endpoint over HTTP. For example, the following
maps `FATAL` to `HttpStatus.SERVICE_UNAVAILABLE`: maps `FATAL` to 503 (service unavailable).
[source,properties,indent=0] [source,properties,indent=0]
---- ----

@ -1903,7 +1903,7 @@ You can also customize the static resource locations using
`spring.resources.static-locations` (replacing the default values with a list `spring.resources.static-locations` (replacing the default values with a list
of directory locations). The root Servlet context path `"/"` will be automatically of directory locations). The root Servlet context path `"/"` will be automatically
added as a location as well. If you do this the default welcome page detection will added as a location as well. If you do this the default welcome page detection will
switch to your custom locations, so if there is an `index.html` in any of your locations switch to your custom locations. So if there is an `index.html` in any of your locations
on startup, it will be the home page of the application. on startup, it will be the home page of the application.
In addition to the '`standard`' static resource locations above, a special case is made In addition to the '`standard`' static resource locations above, a special case is made

@ -228,14 +228,14 @@ class ImportsContextCustomizer implements ContextCustomizer {
private static final Class<?>[] NO_IMPORTS = {}; private static final Class<?>[] NO_IMPORTS = {};
private static final Set<AnnotationFilter> ANNOTATION_FILTERS; private static final Set<AnnotationFilter> annotationFilters;
static { static {
Set<AnnotationFilter> filters = new HashSet<>(); Set<AnnotationFilter> filters = new HashSet<>();
filters.add(new JavaLangAnnotationFilter()); filters.add(new JavaLangAnnotationFilter());
filters.add(new KotlinAnnotationFilter()); filters.add(new KotlinAnnotationFilter());
filters.add(new SpockAnnotationFilter()); filters.add(new SpockAnnotationFilter());
ANNOTATION_FILTERS = Collections.unmodifiableSet(filters); annotationFilters = Collections.unmodifiableSet(filters);
} }
private final Set<Object> key; private final Set<Object> key;
@ -274,7 +274,7 @@ class ImportsContextCustomizer implements ContextCustomizer {
} }
private boolean isIgnoredAnnotation(Annotation annotation) { private boolean isIgnoredAnnotation(Annotation annotation) {
for (AnnotationFilter annotationFilter : ANNOTATION_FILTERS) { for (AnnotationFilter annotationFilter : annotationFilters) {
if (annotationFilter.isIgnored(annotation)) { if (annotationFilter.isIgnored(annotation)) {
return true; return true;
} }

@ -29,7 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link ApplicationContextAssert}. * Tests for {@link ApplicationContextAssert}.
* *
* @author Phillip Webb * @author Phillip Webb
* @uathor Andy Wilkinson * @author Andy Wilkinson
*/ */
public class ApplicationContextAssertTests { public class ApplicationContextAssertTests {

@ -76,7 +76,7 @@ public class JavaCompilerFieldValuesParser implements FieldValuesParser {
WRAPPER_TYPES = Collections.unmodifiableMap(types); WRAPPER_TYPES = Collections.unmodifiableMap(types);
} }
private static final Map<Class<?>, Object> DEFAULT_TYPE_VALUES; private static final Map<Class<?>, Object> defaultTypeValues;
static { static {
Map<Class<?>, Object> values = new HashMap<>(); Map<Class<?>, Object> values = new HashMap<>();
@ -85,16 +85,16 @@ public class JavaCompilerFieldValuesParser implements FieldValuesParser {
values.put(Short.class, (short) 0); values.put(Short.class, (short) 0);
values.put(Integer.class, 0); values.put(Integer.class, 0);
values.put(Long.class, (long) 0); values.put(Long.class, (long) 0);
DEFAULT_TYPE_VALUES = Collections.unmodifiableMap(values); defaultTypeValues = Collections.unmodifiableMap(values);
} }
private static final Map<String, Object> WELL_KNOWN_STATIC_FINALS; private static final Map<String, Object> wellKnownStaticFinals;
static { static {
Map<String, Object> values = new HashMap<>(); Map<String, Object> values = new HashMap<>();
values.put("Boolean.TRUE", true); values.put("Boolean.TRUE", true);
values.put("Boolean.FALSE", false); values.put("Boolean.FALSE", false);
WELL_KNOWN_STATIC_FINALS = Collections.unmodifiableMap(values); wellKnownStaticFinals = Collections.unmodifiableMap(values);
} }
private final Map<String, Object> fieldValues = new HashMap<>(); private final Map<String, Object> fieldValues = new HashMap<>();
@ -115,7 +115,7 @@ public class JavaCompilerFieldValuesParser implements FieldValuesParser {
private Object getValue(VariableTree variable) throws Exception { private Object getValue(VariableTree variable) throws Exception {
ExpressionTree initializer = variable.getInitializer(); ExpressionTree initializer = variable.getInitializer();
Class<?> wrapperType = WRAPPER_TYPES.get(variable.getType()); Class<?> wrapperType = WRAPPER_TYPES.get(variable.getType());
Object defaultValue = DEFAULT_TYPE_VALUES.get(wrapperType); Object defaultValue = defaultTypeValues.get(wrapperType);
if (initializer != null) { if (initializer != null) {
return getValue(initializer, defaultValue); return getValue(initializer, defaultValue);
} }
@ -148,7 +148,7 @@ public class JavaCompilerFieldValuesParser implements FieldValuesParser {
return this.staticFinals.get(expression.toString()); return this.staticFinals.get(expression.toString());
} }
if (expression.getKind().equals("MEMBER_SELECT")) { if (expression.getKind().equals("MEMBER_SELECT")) {
return WELL_KNOWN_STATIC_FINALS.get(expression.toString()); return wellKnownStaticFinals.get(expression.toString());
} }
return defaultValue; return defaultValue;
} }

@ -120,7 +120,7 @@ public final class Layouts {
*/ */
public static class War implements Layout { public static class War implements Layout {
private static final Map<LibraryScope, String> SCOPE_DESTINATIONS; private static final Map<LibraryScope, String> scopeDestinations;
static { static {
Map<LibraryScope, String> map = new HashMap<>(); Map<LibraryScope, String> map = new HashMap<>();
@ -128,7 +128,7 @@ public final class Layouts {
map.put(LibraryScope.CUSTOM, "WEB-INF/lib/"); map.put(LibraryScope.CUSTOM, "WEB-INF/lib/");
map.put(LibraryScope.RUNTIME, "WEB-INF/lib/"); map.put(LibraryScope.RUNTIME, "WEB-INF/lib/");
map.put(LibraryScope.PROVIDED, "WEB-INF/lib-provided/"); map.put(LibraryScope.PROVIDED, "WEB-INF/lib-provided/");
SCOPE_DESTINATIONS = Collections.unmodifiableMap(map); scopeDestinations = Collections.unmodifiableMap(map);
} }
@Override @Override
@ -138,7 +138,7 @@ public final class Layouts {
@Override @Override
public String getLibraryDestination(String libraryName, LibraryScope scope) { public String getLibraryDestination(String libraryName, LibraryScope scope) {
return SCOPE_DESTINATIONS.get(scope); return scopeDestinations.get(scope);
} }
@Override @Override

@ -42,15 +42,15 @@ import org.springframework.boot.loader.tools.LibraryScope;
*/ */
public class ArtifactsLibraries implements Libraries { public class ArtifactsLibraries implements Libraries {
private static final Map<String, LibraryScope> SCOPES; private static final Map<String, LibraryScope> scopes;
static { static {
Map<String, LibraryScope> scopes = new HashMap<>(); Map<String, LibraryScope> libraryScopes = new HashMap<>();
scopes.put(Artifact.SCOPE_COMPILE, LibraryScope.COMPILE); libraryScopes.put(Artifact.SCOPE_COMPILE, LibraryScope.COMPILE);
scopes.put(Artifact.SCOPE_RUNTIME, LibraryScope.RUNTIME); libraryScopes.put(Artifact.SCOPE_RUNTIME, LibraryScope.RUNTIME);
scopes.put(Artifact.SCOPE_PROVIDED, LibraryScope.PROVIDED); libraryScopes.put(Artifact.SCOPE_PROVIDED, LibraryScope.PROVIDED);
scopes.put(Artifact.SCOPE_SYSTEM, LibraryScope.PROVIDED); libraryScopes.put(Artifact.SCOPE_SYSTEM, LibraryScope.PROVIDED);
SCOPES = Collections.unmodifiableMap(scopes); scopes = Collections.unmodifiableMap(libraryScopes);
} }
private final Set<Artifact> artifacts; private final Set<Artifact> artifacts;
@ -70,7 +70,7 @@ public class ArtifactsLibraries implements Libraries {
public void doWithLibraries(LibraryCallback callback) throws IOException { public void doWithLibraries(LibraryCallback callback) throws IOException {
Set<String> duplicates = getDuplicates(this.artifacts); Set<String> duplicates = getDuplicates(this.artifacts);
for (Artifact artifact : this.artifacts) { for (Artifact artifact : this.artifacts) {
LibraryScope scope = SCOPES.get(artifact.getScope()); LibraryScope scope = scopes.get(artifact.getScope());
if (scope != null && artifact.getFile() != null) { if (scope != null && artifact.getFile() != null) {
String name = getFileName(artifact); String name = getFileName(artifact);
if (duplicates.contains(name)) { if (duplicates.contains(name)) {

@ -56,12 +56,12 @@ public class Binder {
private static final Set<Class<?>> NON_BEAN_CLASSES = Collections private static final Set<Class<?>> NON_BEAN_CLASSES = Collections
.unmodifiableSet(new HashSet<>(Arrays.asList(Object.class, Class.class))); .unmodifiableSet(new HashSet<>(Arrays.asList(Object.class, Class.class)));
private static final List<BeanBinder> BEAN_BINDERS; private static final List<BeanBinder> beanBinders;
static { static {
List<BeanBinder> beanBinders = new ArrayList<>(); List<BeanBinder> binders = new ArrayList<>();
beanBinders.add(new JavaBeanBinder()); binders.add(new JavaBeanBinder());
BEAN_BINDERS = Collections.unmodifiableList(beanBinders); beanBinders = Collections.unmodifiableList(binders);
} }
private final Iterable<ConfigurationPropertySource> sources; private final Iterable<ConfigurationPropertySource> sources;
@ -302,7 +302,7 @@ public class Binder {
return null; return null;
} }
return context.withBean(type, () -> { return context.withBean(type, () -> {
Stream<?> boundBeans = BEAN_BINDERS.stream() Stream<?> boundBeans = beanBinders.stream()
.map((b) -> b.bind(name, target, context, propertyBinder)); .map((b) -> b.bind(name, target, context, propertyBinder));
return boundBeans.filter(Objects::nonNull).findFirst().orElse(null); return boundBeans.filter(Objects::nonNull).findFirst().orElse(null);
}); });

@ -49,28 +49,28 @@ import org.springframework.boot.ansi.AnsiStyle;
@ConverterKeys({ "clr", "color" }) @ConverterKeys({ "clr", "color" })
public final class ColorConverter extends LogEventPatternConverter { public final class ColorConverter extends LogEventPatternConverter {
private static final Map<String, AnsiElement> ELEMENTS; private static final Map<String, AnsiElement> elements;
static { static {
Map<String, AnsiElement> elements = new HashMap<>(); Map<String, AnsiElement> ansiElements = new HashMap<>();
elements.put("faint", AnsiStyle.FAINT); ansiElements.put("faint", AnsiStyle.FAINT);
elements.put("red", AnsiColor.RED); ansiElements.put("red", AnsiColor.RED);
elements.put("green", AnsiColor.GREEN); ansiElements.put("green", AnsiColor.GREEN);
elements.put("yellow", AnsiColor.YELLOW); ansiElements.put("yellow", AnsiColor.YELLOW);
elements.put("blue", AnsiColor.BLUE); ansiElements.put("blue", AnsiColor.BLUE);
elements.put("magenta", AnsiColor.MAGENTA); ansiElements.put("magenta", AnsiColor.MAGENTA);
elements.put("cyan", AnsiColor.CYAN); ansiElements.put("cyan", AnsiColor.CYAN);
ELEMENTS = Collections.unmodifiableMap(elements); elements = Collections.unmodifiableMap(ansiElements);
} }
private static final Map<Integer, AnsiElement> LEVELS; private static final Map<Integer, AnsiElement> levels;
static { static {
Map<Integer, AnsiElement> levels = new HashMap<>(); Map<Integer, AnsiElement> ansiLevels = new HashMap<>();
levels.put(Level.FATAL.intLevel(), AnsiColor.RED); ansiLevels.put(Level.FATAL.intLevel(), AnsiColor.RED);
levels.put(Level.ERROR.intLevel(), AnsiColor.RED); ansiLevels.put(Level.ERROR.intLevel(), AnsiColor.RED);
levels.put(Level.WARN.intLevel(), AnsiColor.YELLOW); ansiLevels.put(Level.WARN.intLevel(), AnsiColor.YELLOW);
LEVELS = Collections.unmodifiableMap(levels); levels = Collections.unmodifiableMap(ansiLevels);
} }
private final List<PatternFormatter> formatters; private final List<PatternFormatter> formatters;
@ -101,7 +101,7 @@ public final class ColorConverter extends LogEventPatternConverter {
} }
PatternParser parser = PatternLayout.createPatternParser(config); PatternParser parser = PatternLayout.createPatternParser(config);
List<PatternFormatter> formatters = parser.parse(options[0]); List<PatternFormatter> formatters = parser.parse(options[0]);
AnsiElement element = (options.length == 1 ? null : ELEMENTS.get(options[1])); AnsiElement element = (options.length == 1 ? null : elements.get(options[1]));
return new ColorConverter(formatters, element); return new ColorConverter(formatters, element);
} }
@ -125,7 +125,7 @@ public final class ColorConverter extends LogEventPatternConverter {
AnsiElement element = this.styling; AnsiElement element = this.styling;
if (element == null) { if (element == null) {
// Assume highlighting // Assume highlighting
element = LEVELS.get(event.getLevel().intLevel()); element = levels.get(event.getLevel().intLevel());
element = (element == null ? AnsiColor.GREEN : element); element = (element == null ? AnsiColor.GREEN : element);
} }
appendAnsiString(toAppendTo, buf.toString(), element); appendAnsiString(toAppendTo, buf.toString(), element);

@ -38,35 +38,35 @@ import org.springframework.boot.ansi.AnsiStyle;
*/ */
public class ColorConverter extends CompositeConverter<ILoggingEvent> { public class ColorConverter extends CompositeConverter<ILoggingEvent> {
private static final Map<String, AnsiElement> ELEMENTS; private static final Map<String, AnsiElement> elements;
static { static {
Map<String, AnsiElement> elements = new HashMap<>(); Map<String, AnsiElement> ansiElements = new HashMap<>();
elements.put("faint", AnsiStyle.FAINT); ansiElements.put("faint", AnsiStyle.FAINT);
elements.put("red", AnsiColor.RED); ansiElements.put("red", AnsiColor.RED);
elements.put("green", AnsiColor.GREEN); ansiElements.put("green", AnsiColor.GREEN);
elements.put("yellow", AnsiColor.YELLOW); ansiElements.put("yellow", AnsiColor.YELLOW);
elements.put("blue", AnsiColor.BLUE); ansiElements.put("blue", AnsiColor.BLUE);
elements.put("magenta", AnsiColor.MAGENTA); ansiElements.put("magenta", AnsiColor.MAGENTA);
elements.put("cyan", AnsiColor.CYAN); ansiElements.put("cyan", AnsiColor.CYAN);
ELEMENTS = Collections.unmodifiableMap(elements); elements = Collections.unmodifiableMap(ansiElements);
} }
private static final Map<Integer, AnsiElement> LEVELS; private static final Map<Integer, AnsiElement> levels;
static { static {
Map<Integer, AnsiElement> levels = new HashMap<>(); Map<Integer, AnsiElement> ansiLevels = new HashMap<>();
levels.put(Level.ERROR_INTEGER, AnsiColor.RED); ansiLevels.put(Level.ERROR_INTEGER, AnsiColor.RED);
levels.put(Level.WARN_INTEGER, AnsiColor.YELLOW); ansiLevels.put(Level.WARN_INTEGER, AnsiColor.YELLOW);
LEVELS = Collections.unmodifiableMap(levels); levels = Collections.unmodifiableMap(ansiLevels);
} }
@Override @Override
protected String transform(ILoggingEvent event, String in) { protected String transform(ILoggingEvent event, String in) {
AnsiElement element = ELEMENTS.get(getFirstOption()); AnsiElement element = elements.get(getFirstOption());
if (element == null) { if (element == null) {
// Assume highlighting // Assume highlighting
element = LEVELS.get(event.getLevel().toInteger()); element = levels.get(event.getLevel().toInteger());
element = (element == null ? AnsiColor.GREEN : element); element = (element == null ? AnsiColor.GREEN : element);
} }
return toAnsiString(in, element); return toAnsiString(in, element);

@ -66,23 +66,23 @@ public class ApplicationPidFileWriter
private static final String DEFAULT_FILE_NAME = "application.pid"; private static final String DEFAULT_FILE_NAME = "application.pid";
private static final List<Property> FILE_PROPERTIES; private static final List<Property> fileProperties;
static { static {
List<Property> properties = new ArrayList<>(); List<Property> properties = new ArrayList<>();
properties.add(new SpringProperty("spring.pid.", "file")); properties.add(new SpringProperty("spring.pid.", "file"));
properties.add(new SpringProperty("spring.", "pidfile")); properties.add(new SpringProperty("spring.", "pidfile"));
properties.add(new SystemProperty("PIDFILE")); properties.add(new SystemProperty("PIDFILE"));
FILE_PROPERTIES = Collections.unmodifiableList(properties); fileProperties = Collections.unmodifiableList(properties);
} }
private static final List<Property> FAIL_ON_WRITE_ERROR_PROPERTIES; private static final List<Property> failOnWriteErrorProperties;
static { static {
List<Property> properties = new ArrayList<>(); List<Property> properties = new ArrayList<>();
properties.add(new SpringProperty("spring.pid.", "fail-on-write-error")); properties.add(new SpringProperty("spring.pid.", "fail-on-write-error"));
properties.add(new SystemProperty("PID_FAIL_ON_WRITE_ERROR")); properties.add(new SystemProperty("PID_FAIL_ON_WRITE_ERROR"));
FAIL_ON_WRITE_ERROR_PROPERTIES = Collections.unmodifiableList(properties); failOnWriteErrorProperties = Collections.unmodifiableList(properties);
} }
private static final AtomicBoolean created = new AtomicBoolean(false); private static final AtomicBoolean created = new AtomicBoolean(false);
@ -153,7 +153,7 @@ public class ApplicationPidFileWriter
private void writePidFile(SpringApplicationEvent event) throws IOException { private void writePidFile(SpringApplicationEvent event) throws IOException {
File pidFile = this.file; File pidFile = this.file;
String override = getProperty(event, FILE_PROPERTIES); String override = getProperty(event, fileProperties);
if (override != null) { if (override != null) {
pidFile = new File(override); pidFile = new File(override);
} }
@ -162,7 +162,7 @@ public class ApplicationPidFileWriter
} }
private boolean failOnWriteError(SpringApplicationEvent event) { private boolean failOnWriteError(SpringApplicationEvent event) {
String value = getProperty(event, FAIL_ON_WRITE_ERROR_PROPERTIES); String value = getProperty(event, failOnWriteErrorProperties);
return (value == null ? false : Boolean.parseBoolean(value)); return (value == null ? false : Boolean.parseBoolean(value));
} }

@ -43,14 +43,14 @@ import org.springframework.web.context.WebApplicationContext;
class ServletComponentRegisteringPostProcessor class ServletComponentRegisteringPostProcessor
implements BeanFactoryPostProcessor, ApplicationContextAware { implements BeanFactoryPostProcessor, ApplicationContextAware {
private static final List<ServletComponentHandler> HANDLERS; private static final List<ServletComponentHandler> handlers;
static { static {
List<ServletComponentHandler> handlers = new ArrayList<>(); List<ServletComponentHandler> servletComponentHandlers = new ArrayList<>();
handlers.add(new WebServletHandler()); servletComponentHandlers.add(new WebServletHandler());
handlers.add(new WebFilterHandler()); servletComponentHandlers.add(new WebFilterHandler());
handlers.add(new WebListenerHandler()); servletComponentHandlers.add(new WebListenerHandler());
HANDLERS = Collections.unmodifiableList(handlers); handlers = Collections.unmodifiableList(servletComponentHandlers);
} }
private final Set<String> packagesToScan; private final Set<String> packagesToScan;
@ -78,7 +78,7 @@ class ServletComponentRegisteringPostProcessor
for (BeanDefinition candidate : componentProvider for (BeanDefinition candidate : componentProvider
.findCandidateComponents(packageToScan)) { .findCandidateComponents(packageToScan)) {
if (candidate instanceof ScannedGenericBeanDefinition) { if (candidate instanceof ScannedGenericBeanDefinition) {
for (ServletComponentHandler handler : HANDLERS) { for (ServletComponentHandler handler : handlers) {
handler.handle(((ScannedGenericBeanDefinition) candidate), handler.handle(((ScannedGenericBeanDefinition) candidate),
(BeanDefinitionRegistry) this.applicationContext); (BeanDefinitionRegistry) this.applicationContext);
} }
@ -97,7 +97,7 @@ class ServletComponentRegisteringPostProcessor
false); false);
componentProvider.setEnvironment(this.applicationContext.getEnvironment()); componentProvider.setEnvironment(this.applicationContext.getEnvironment());
componentProvider.setResourceLoader(this.applicationContext); componentProvider.setResourceLoader(this.applicationContext);
for (ServletComponentHandler handler : HANDLERS) { for (ServletComponentHandler handler : handlers) {
componentProvider.addIncludeFilter(handler.getTypeFilter()); componentProvider.addIncludeFilter(handler.getTypeFilter());
} }
return componentProvider; return componentProvider;

Loading…
Cancel
Save