Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: spring-projects/spring-framework
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v5.2.9.RELEASE
Choose a base ref
...
head repository: spring-projects/spring-framework
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v5.2.10.RELEASE
Choose a head ref
Loading
Showing with 1,864 additions and 1,219 deletions.
  1. +17 −16 build.gradle
  2. +1 −1 gradle.properties
  3. +36 −25 gradle/docs.gradle
  4. +1 −0 spring-beans/spring-beans.gradle
  5. +4 −2 ...rc/main/java/org/springframework/beans/factory/support/CglibSubclassingInstantiationStrategy.java
  6. +15 −2 spring-beans/src/test/java/org/springframework/beans/factory/annotation/LookupAnnotationTests.java
  7. +2 −2 ...rc/test/java/org/springframework/beans/factory/support/DefinitionMetadataEqualsHashCodeTests.java
  8. +2 −2 spring-context-support/src/main/java/org/springframework/ui/freemarker/FreeMarkerTemplateUtils.java
  9. +98 −54 ...-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java
  10. +10 −3 spring-context/src/main/java/org/springframework/context/support/SimpleThreadScope.java
  11. +3 −2 ...-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskScheduler.java
  12. +82 −2 spring-context/src/test/java/org/springframework/context/event/ApplicationContextEventTests.java
  13. +3 −3 spring-context/src/test/java/org/springframework/context/support/SimpleThreadScopeTests.java
  14. +11 −3 spring-context/src/test/resources/org/springframework/context/support/simpleThreadScopeTests.xml
  15. +5 −5 spring-core/spring-core.gradle
  16. +2 −3 spring-core/src/main/java/org/springframework/core/OrderComparator.java
  17. +62 −129 spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java
  18. +1 −0 spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java
  19. +2 −2 spring-core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java
  20. +2 −0 spring-core/src/main/java/org/springframework/core/convert/support/StringToBooleanConverter.java
  21. +3 −1 spring-core/src/main/java/org/springframework/core/convert/support/StringToCharacterConverter.java
  22. +3 −1 spring-core/src/main/java/org/springframework/core/convert/support/StringToEnumConverterFactory.java
  23. +3 −1 ...g-core/src/main/java/org/springframework/core/convert/support/StringToNumberConverterFactory.java
  24. +306 −189 spring-core/src/main/java/org/springframework/core/io/buffer/DataBufferUtils.java
  25. +8 −5 spring-core/src/main/java/org/springframework/util/Assert.java
  26. +1 −1 spring-core/src/main/java/org/springframework/util/FileCopyUtils.java
  27. +143 −4 spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java
  28. +11 −6 spring-core/src/main/java/org/springframework/util/MimeType.java
  29. +5 −0 spring-core/src/main/java/org/springframework/util/MultiValueMapAdapter.java
  30. +5 −8 spring-core/src/main/java/org/springframework/util/ObjectUtils.java
  31. +6 −4 spring-core/src/main/java/org/springframework/util/StreamUtils.java
  32. +2 −2 spring-core/src/test/java/org/springframework/core/MethodParameterTests.java
  33. +2 −2 spring-core/src/test/java/org/springframework/core/annotation/SynthesizingMethodParameterTests.java
  34. +12 −4 spring-core/src/test/java/org/springframework/core/codec/StringDecoderTests.java
  35. +29 −9 spring-core/src/test/java/org/springframework/core/io/buffer/DataBufferUtilsTests.java
  36. +4 −3 ...xtures/java/org/springframework/core/testfixture/io/buffer/AbstractDataBufferAllocatingTests.java
  37. +3 −3 ...g-expression/src/test/java/org/springframework/expression/spel/support/ReflectionHelperTests.java
  38. +2 −2 spring-jdbc/src/main/java/org/springframework/jdbc/core/SqlProvider.java
  39. +2 −0 spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataProviderFactory.java
  40. +4 −4 spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/ParsedSql.java
  41. +4 −4 ...-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java
  42. +2 −4 spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java
  43. +23 −21 spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java
  44. +20 −16 ...saging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java
  45. +8 −5 ...-messaging/src/main/java/org/springframework/messaging/converter/MarshallingMessageConverter.java
  46. +2 −2 spring-messaging/src/main/java/org/springframework/messaging/converter/ProtobufMessageConverter.java
  47. +3 −5 ...ringframework/messaging/handler/annotation/reactive/AbstractNamedValueMethodArgumentResolver.java
  48. +5 −7 ...pringframework/messaging/handler/annotation/support/AbstractNamedValueMethodArgumentResolver.java
  49. +1 −2 ...ringframework/messaging/handler/invocation/reactive/HandlerMethodReturnValueHandlerComposite.java
  50. +2 −2 ...ging/src/main/java/org/springframework/messaging/handler/invocation/reactive/InvocableHelper.java
  51. +3 −8 spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java
  52. +61 −55 spring-messaging/src/main/java/org/springframework/messaging/support/MessageHeaderAccessor.java
  53. +83 −33 ...ng-messaging/src/main/java/org/springframework/messaging/support/NativeMessageHeaderAccessor.java
  54. +19 −22 ...g/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java
  55. +30 −13 ...ssaging/src/test/java/org/springframework/messaging/support/NativeMessageHeaderAccessorTests.java
  56. +2 −0 spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java
  57. +2 −2 spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java
  58. +2 −2 spring-test/src/main/java/org/springframework/test/context/ActiveProfiles.java
  59. +4 −4 spring-test/src/main/java/org/springframework/test/context/MergedContextConfiguration.java
  60. +7 −18 spring-test/src/main/java/org/springframework/test/context/support/ActiveProfilesUtils.java
  61. +3 −3 ...ng-test/src/main/java/org/springframework/test/context/support/DefaultActiveProfilesResolver.java
  62. +2 −2 ...est/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java
  63. +1 −2 spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java
  64. +18 −18 spring-test/src/test/java/org/springframework/test/context/MergedContextConfigurationTests.java
  65. +3 −3 spring-test/src/test/java/org/springframework/test/context/cache/ContextCacheTests.java
  66. +7 −7 spring-test/src/test/java/org/springframework/test/context/support/ActiveProfilesUtilsTests.java
  67. +7 −1 spring-tx/src/main/java/org/springframework/transaction/event/TransactionalEventListener.java
  68. +10 −3 spring-tx/src/main/java/org/springframework/transaction/support/SimpleTransactionScope.java
  69. +4 −4 spring-web/src/main/java/org/springframework/http/ResponseCookie.java
  70. +12 −9 spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpConnector.java
  71. +11 −24 spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java
  72. +7 −9 spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpResponse.java
  73. +1 −1 spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Decoder.java
  74. +34 −21 spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java
  75. +1 −3 spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java
  76. +2 −2 spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverter.java
  77. +3 −5 ...b/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java
  78. +24 −18 spring-web/src/main/java/org/springframework/http/server/reactive/HttpHeadResponseDecorator.java
  79. +5 −7 spring-web/src/main/java/org/springframework/web/client/RestTemplate.java
  80. +9 −9 ...main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java
  81. +14 −14 spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java
  82. +14 −7 ...b/src/main/java/org/springframework/web/multipart/support/MissingServletRequestPartException.java
  83. +47 −25 .../src/main/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequest.java
  84. +9 −13 spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java
  85. +25 −2 spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java
  86. +8 −5 ...g-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java
  87. +3 −4 ...b/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBeanTests.java
  88. +1 −8 spring-web/src/test/java/org/springframework/http/converter/json/SpringHandlerInstantiatorTests.java
  89. +9 −1 ...ng-web/src/test/java/org/springframework/http/server/reactive/HttpHeadResponseDecoratorTests.java
  90. +2 −2 ...web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestIntegrationTests.java
  91. +2 −2 ...eb/src/test/java/org/springframework/http/server/reactive/ServerHttpsRequestIntegrationTests.java
  92. +15 −1 ...test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java
  93. +1 −1 spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java
  94. +1 −2 spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternParserTests.java
  95. +1 −1 spring-web/src/test/resources/log4j2-test.xml
  96. +2 −2 ...estFixtures/java/org/springframework/web/testfixture/servlet/MockMultipartHttpServletRequest.java
  97. +3 −8 spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java
  98. +1 −6 .../src/main/java/org/springframework/web/reactive/result/condition/AbstractMediaTypeExpression.java
  99. +0 −4 ...n/java/org/springframework/web/reactive/result/method/HandlerMethodArgumentResolverComposite.java
  100. +5 −4 ...-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java
  101. +8 −8 ...org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java
  102. +1 −0 .../java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerMapping.java
  103. +0 −4 spring-webflux/src/test/java/org/springframework/web/reactive/resource/ResourceWebHandlerTests.java
  104. +7 −7 ...flux/src/test/java/org/springframework/web/reactive/result/condition/RequestMappingInfoTests.java
  105. +11 −12 ...ng-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequestBuilder.java
  106. +18 −23 ...g-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java
  107. +1 −6 ...bmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractMediaTypeExpression.java
  108. +31 −12 ...bmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitter.java
  109. +10 −3 .../org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java
  110. +4 −8 spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java
  111. +5 −18 spring-webmvc/src/main/java/org/springframework/web/servlet/tags/MessageTag.java
  112. +4 −4 spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java
  113. +22 −21 spring-webmvc/src/main/java/org/springframework/web/servlet/view/json/AbstractJackson2View.java
  114. +8 −8 spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoTests.java
  115. +1 −0 ...rg/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java
  116. +27 −1 ...k/web/servlet/mvc/method/annotation/UriTemplateServletAnnotationControllerHandlerMethodTests.java
  117. +45 −1 ...ebmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java
  118. +6 −6 .../src/test/java/org/springframework/web/socket/server/support/OriginHandshakeInterceptorTests.java
  119. +5 −5 .../test/java/org/springframework/web/socket/sockjs/transport/handler/DefaultSockJsServiceTests.java
  120. +1 −1 src/docs/asciidoc/core/core-resources.adoc
  121. +114 −64 src/docs/asciidoc/data-access.adoc
  122. 0 src/docs/asciidoc/{ → data-access}/data-access-appendix.adoc
  123. +1 −1 src/docs/asciidoc/integration.adoc
  124. 0 src/docs/asciidoc/{ → integration}/integration-appendix.adoc
  125. +1 −1 src/docs/asciidoc/testing.adoc
  126. 0 src/docs/asciidoc/{ → testing}/testing-webtestclient.adoc
  127. +10 −12 src/docs/asciidoc/web/webmvc.adoc
33 changes: 17 additions & 16 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@ plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.72' apply false
id 'org.jetbrains.dokka' version '0.10.1' apply false
id 'org.asciidoctor.jvm.convert' version '2.4.0'
id 'org.asciidoctor.jvm.pdf' version '2.4.0'
id 'de.undercouch.download' version '4.1.1'
id "io.freefair.aspectj" version '4.1.6' apply false
id 'com.gradle.build-scan' version '3.2'
@@ -28,19 +29,19 @@ configure(allprojects) { project ->
imports {
mavenBom "com.fasterxml.jackson:jackson-bom:2.10.5"
mavenBom "io.netty:netty-bom:4.1.51.Final"
mavenBom "io.projectreactor:reactor-bom:Dysprosium-SR12"
mavenBom "io.rsocket:rsocket-bom:1.0.1"
mavenBom "io.projectreactor:reactor-bom:Dysprosium-SR13"
mavenBom "io.rsocket:rsocket-bom:1.0.3"
mavenBom "org.eclipse.jetty:jetty-bom:9.4.31.v20200723"
mavenBom "org.jetbrains.kotlin:kotlin-bom:1.3.72"
mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.3.5"
mavenBom "org.junit:junit-bom:5.6.2"
mavenBom "org.junit:junit-bom:5.6.3"
}
dependencies {
dependencySet(group: 'org.apache.logging.log4j', version: '2.13.3') {
entry 'log4j-api'
entry 'log4j-core'
entry 'log4j-slf4j-impl'
entry 'log4j-jul'
entry 'log4j-slf4j-impl'
}
dependency "org.slf4j:slf4j-api:1.7.30"
dependency "com.google.code.findbugs:jsr305:3.0.2"
@@ -61,11 +62,11 @@ configure(allprojects) { project ->
dependency "io.reactivex:rxjava:1.3.8"
dependency "io.reactivex:rxjava-reactive-streams:1.2.1"
dependency "io.reactivex.rxjava2:rxjava:2.2.19"
dependency "io.projectreactor.tools:blockhound:1.0.2.RELEASE"
dependency "io.projectreactor.tools:blockhound:1.0.4.RELEASE"

dependency "com.caucho:hessian:4.0.63"
dependency "com.fasterxml:aalto-xml:1.2.2"
dependency("com.fasterxml.woodstox:woodstox-core:6.2.1") {
dependency("com.fasterxml.woodstox:woodstox-core:6.2.3") {
exclude group: "stax", name: "stax-api"
}
dependency "com.google.code.gson:gson:2.8.6"
@@ -84,11 +85,11 @@ configure(allprojects) { project ->
entry 'jibx-run'
}
dependency "org.ogce:xpp3:1.1.6"
dependency "org.yaml:snakeyaml:1.26"
dependency "org.yaml:snakeyaml:1.27"

dependency "com.h2database:h2:1.4.200"
dependency "com.github.ben-manes.caffeine:caffeine:2.8.5"
dependency "com.github.librepdf:openpdf:1.3.20"
dependency "com.github.ben-manes.caffeine:caffeine:2.8.6"
dependency "com.github.librepdf:openpdf:1.3.22"
dependency "com.rometools:rome:1.12.2"
dependency "commons-io:commons-io:2.5"
dependency "io.vavr:vavr:0.10.3"
@@ -101,7 +102,7 @@ configure(allprojects) { project ->
entry 'activemq-stomp'
}
dependency "org.apache.bcel:bcel:6.0"
dependency "org.apache.commons:commons-pool2:2.8.0"
dependency "org.apache.commons:commons-pool2:2.8.1"
dependencySet(group: 'org.apache.derby', version: '10.14.2.0') {
entry 'derby'
entry 'derbyclient'
@@ -115,9 +116,9 @@ configure(allprojects) { project ->
dependency "net.sf.ehcache:ehcache:2.10.6"
dependency "org.ehcache:jcache:1.0.1"
dependency "org.ehcache:ehcache:3.4.0"
dependency "org.hibernate:hibernate-core:5.4.21.Final"
dependency "org.hibernate:hibernate-validator:6.1.5.Final"
dependency "org.webjars:webjars-locator-core:0.45"
dependency "org.hibernate:hibernate-core:5.4.22.Final"
dependency "org.hibernate:hibernate-validator:6.1.6.Final"
dependency "org.webjars:webjars-locator-core:0.46"
dependency "org.webjars:underscorejs:1.8.3"

dependencySet(group: 'org.apache.tomcat', version: '9.0.37') {
@@ -131,7 +132,7 @@ configure(allprojects) { project ->
entry 'tomcat-embed-core'
entry 'tomcat-embed-websocket'
}
dependencySet(group: 'io.undertow', version: '2.0.31.Final') {
dependencySet(group: 'io.undertow', version: '2.0.32.Final') {
entry 'undertow-core'
entry('undertow-websockets-jsr') {
exclude group: "org.jboss.spec.javax.websocket", name: "jboss-websocket-api_1.1_spec"
@@ -325,7 +326,7 @@ configure([rootProject] + javaProjects) { project ->
}

checkstyle {
toolVersion = "8.36.1"
toolVersion = "8.36.2"
configDir = rootProject.file("src/checkstyle")
}

@@ -366,7 +367,7 @@ configure([rootProject] + javaProjects) { project ->
"https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.10/",
"https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/",
"https://junit.org/junit4/javadoc/4.12/",
"https://junit.org/junit5/docs/5.6.2/api/"
"https://junit.org/junit5/docs/5.6.3/api/"
] as String[]
}

2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version=5.2.9.BUILD-SNAPSHOT
version=5.2.10.RELEASE
org.gradle.jvmargs=-Xmx1536M
org.gradle.caching=true
org.gradle.parallel=true
61 changes: 36 additions & 25 deletions gradle/docs.gradle
Original file line number Diff line number Diff line change
@@ -130,51 +130,62 @@ asciidoctorj {
}
}
fatalWarnings ".*"
options doctype: 'book', eruby: 'erubis'
attributes([
icons: 'font',
idprefix: '',
idseparator: '-',
docinfo: 'shared',
revnumber: project.version,
sectanchors: '',
sectnums: '',
'source-highlighter': 'highlight.js',
highlightjsdir: 'js/highlight',
'highlightjs-theme': 'github', // 'googlecode',
stylesdir: 'css/',
stylesheet: 'stylesheet.css',
'spring-version': project.version
])
}

/**
* Produce the Spring Framework Reference documentation
* from "src/docs/asciidoc" into "build/asciidoc/html5"
* Generate the Spring Framework Reference documentation from "src/docs/asciidoc"
* in "build/docs/ref-docs/html5".
*/
asciidoctor {
baseDirFollowsSourceDir()
configurations 'asciidoctorExt'
sources {
include '*.adoc'
}
outputDir "$buildDir/docs/ref-docs/"
outputDir "$buildDir/docs/ref-docs/html5"
logDocuments = true
resources {
from(sourceDir) {
include 'images/*', 'css/**', 'js/**'
}
from extractDocResources
}
logDocuments = true
outputOptions {
backends = ["html5", "pdf"]
}

/**
* Generate the Spring Framework Reference documentation from "src/docs/asciidoc"
* in "build/docs/ref-docs/pdf".
*/
asciidoctorPdf {
baseDirFollowsSourceDir()
configurations 'asciidoctorExt'
sources {
include '*.adoc'
}
options doctype: 'book', eruby: 'erubis'
attributes([
icons: 'font',
idprefix: '',
idseparator: '-',
docinfo: 'shared',
revnumber: project.version,
sectanchors: '',
sectnums: '',
'source-highlighter': 'highlight.js',
highlightjsdir: 'js/highlight',
'highlightjs-theme': 'github', // 'googlecode',
stylesdir: 'css/',
stylesheet: 'stylesheet.css',
'spring-version': project.version
])
outputDir "$buildDir/docs/ref-docs/pdf"
logDocuments = true
}

/**
* Zip all docs (API and reference) into a single archive
*/
task docsZip(type: Zip, dependsOn: ['api', 'asciidoctor', 'dokka']) {
task docsZip(type: Zip, dependsOn: ['api', 'asciidoctor', 'asciidoctorPdf', 'dokka']) {
group = "Distribution"
description = "Builds -${archiveClassifier} archive containing api and reference " +
"for deployment at https://docs.spring.io/spring-framework/docs."
@@ -187,10 +198,10 @@ task docsZip(type: Zip, dependsOn: ['api', 'asciidoctor', 'dokka']) {
from (api) {
into "javadoc-api"
}
from ("$asciidoctor.outputDir/html5") {
from ("$asciidoctor.outputDir") {
into "spring-framework-reference"
}
from ("$asciidoctor.outputDir/pdf") {
from ("$asciidoctorPdf.outputDir") {
into "spring-framework-reference/pdf"
}
from (dokka) {
1 change: 1 addition & 0 deletions spring-beans/spring-beans.gradle
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@ sourceSets {
compileGroovy {
sourceCompatibility = 1.8
targetCompatibility = 1.8
options.compilerArgs += "-Werror"
}

// This module also builds Kotlin code and the compileKotlin task naturally depends on
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 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.
@@ -238,8 +238,10 @@ public Object intercept(Object obj, Method method, Object[] args, MethodProxy mp
Assert.state(lo != null, "LookupOverride not found");
Object[] argsToUse = (args.length > 0 ? args : null); // if no-arg, don't insist on args at all
if (StringUtils.hasText(lo.getBeanName())) {
return (argsToUse != null ? this.owner.getBean(lo.getBeanName(), argsToUse) :
Object bean = (argsToUse != null ? this.owner.getBean(lo.getBeanName(), argsToUse) :
this.owner.getBean(lo.getBeanName()));
// Detect package-protected NullBean instance through equals(null) check
return (bean.equals(null) ? null : bean);
}
else {
return (argsToUse != null ? this.owner.getBean(method.getReturnType(), argsToUse) :
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 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.
@@ -108,10 +108,23 @@ public void testWithEarlyInjection() {
assertThat(beanFactory.getBean(BeanConsumer.class).abstractBean).isSameAs(bean);
}

@Test // gh-25806
public void testWithNullBean() {
RootBeanDefinition tbd = new RootBeanDefinition(TestBean.class, () -> null);
tbd.setScope(BeanDefinition.SCOPE_PROTOTYPE);
beanFactory.registerBeanDefinition("testBean", tbd);

AbstractBean bean = beanFactory.getBean("beanConsumer", BeanConsumer.class).abstractBean;
assertThat(bean).isNotNull();
Object expected = bean.get();
assertThat(expected).isNull();
assertThat(beanFactory.getBean(BeanConsumer.class).abstractBean).isSameAs(bean);
}


public static abstract class AbstractBean {

@Lookup
@Lookup("testBean")
public abstract TestBean get();

@Lookup
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 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.
@@ -126,7 +126,7 @@ private void assertEqualsAndHashCodeContracts(Object master, Object equal, Objec
assertThat(equal.hashCode()).as("Hash code for equal instances should match").isEqualTo(master.hashCode());

assertThat(notEqual).as("Should not be equal").isNotEqualTo(master);
assertThat(notEqual.hashCode()).as("Hash code for non-equal instances should not match").isNotEqualTo((long) master.hashCode());
assertThat(notEqual.hashCode()).as("Hash code for non-equal instances should not match").isNotEqualTo(master.hashCode());

assertThat(subclass).as("Subclass should be equal").isEqualTo(master);
assertThat(subclass.hashCode()).as("Hash code for subclass should match").isEqualTo(master.hashCode());
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2020 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.
@@ -46,7 +46,7 @@ public abstract class FreeMarkerTemplateUtils {
public static String processTemplateIntoString(Template template, Object model)
throws IOException, TemplateException {

StringWriter result = new StringWriter();
StringWriter result = new StringWriter(1024);
template.process(model, result);
return result.toString();
}
Loading