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.8.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.9.RELEASE
Choose a head ref

Commits on Jul 21, 2020

  1. Copy the full SHA
    fc6b38a View commit details

Commits on Jul 22, 2020

  1. Refine use of substring operations

    Closes gh-25445
    XenoAmess authored and sbrannen committed Jul 22, 2020
    Copy the full SHA
    ab859fc View commit details
  2. Polish contribution

    sbrannen committed Jul 22, 2020
    Copy the full SHA
    335c3d5 View commit details

Commits on Jul 25, 2020

  1. Avoid infinite loop in AnnotationScanner

    Prior to this commit, scanning for annotations resulted in an infinite
    loop when using the INHERITED_ANNOTATIONS search strategy and a class
    filter that filters out visited classes.
    
    This commit avoids an infinite loop in AnnotationsScanner's
    processClassInheritedAnnotations(...) method by skipping the current
    level of the class hierarchy when the current source class has been
    filtered out.
    
    Closes gh-25429
    yilianhuaixiao authored and sbrannen committed Jul 25, 2020
    Copy the full SHA
    650cbee View commit details
  2. Polish contribution

    sbrannen committed Jul 25, 2020
    Copy the full SHA
    5442d87 View commit details

Commits on Jul 28, 2020

  1. Remove unused class filtering support in AnnotationScanner

    PR gh-25429 brought it to our attention that there was a bug in
    AnnotationScanner when using a non-null class filter that filtered out
    classes; however, it turns out that there is no production code that
    utilizes the package-private class filtering support.
    
    This commit therefore removes all class filtering support from
    AnnotationScanner since that functionality is effectively unused.
    
    Closes gh-25477
    sbrannen committed Jul 28, 2020
    Copy the full SHA
    2b3fdfa View commit details

Commits on Jul 29, 2020

  1. Copy the full SHA
    b841e85 View commit details
  2. Filter repeatable annotations in AnnotationTypeMappings

    Prior to this commit, AnnotationTypeMappings did not filter repeatable
    annotations with the supplied annotation filter.
    
    Closes gh-25483
    yilianhuaixiao authored and sbrannen committed Jul 29, 2020
    Copy the full SHA
    83a9583 View commit details
  3. Polish contribution

    sbrannen committed Jul 29, 2020
    Copy the full SHA
    7dbf42e View commit details

Commits on Aug 1, 2020

  1. Copy the full SHA
    9b07290 View commit details
  2. Polish Javadoc

    sbrannen committed Aug 1, 2020
    Copy the full SHA
    89bb9cb View commit details
  3. Copy the full SHA
    785ab57 View commit details
  4. Reset charset field in MockHttpServletResponse

    Prior to this commit, calling reset() on MockHttpServletResponse did not
    reset the `charset` field to `false` which could result in the
    "Content-Type" header containing `;charset=null` which in turn would
    result in errors when parsing the "Content-Type" header.
    
    This commit resets the charset field to `false` in
    MockHttpServletResponse's reset() method to avoid such errors.
    
    Closes gh-25501
    sbrannen committed Aug 1, 2020
    Copy the full SHA
    5576321 View commit details
  5. Copy the full SHA
    5a12e7b View commit details
  6. Fix error message for type mismatch in jsonPath().value()

    Prior to this commit, if a value existed at the specified JSON path but
    had an incompatible type, the AssertionError thrown contained a message
    stating that the value did not exist (i.e., "No Value at JSON Path"),
    which was not only misleading but also technically incorrect.
    
    This commit fixes the error message for such use cases. For example, the
    AssertionError thrown in such use cases now resembles the following.
    
      At JSON path "$.name", value <Lisa> of type <java.lang.String> cannot
      be converted to type <byte[]>
    
    Closes gh-25480
    sbrannen committed Aug 1, 2020
    Copy the full SHA
    482adb9 View commit details

Commits on Aug 3, 2020

  1. Update copyright date

    sbrannen committed Aug 3, 2020
    Copy the full SHA
    969aa8a View commit details
  2. Use Spliterators.emptySpliterator() in TypeMappedAnnotations

    For greater clarity, this commit invokes Spliterators.emptySpliterator()
    directly instead of going through java.util.Collections.EmptyList.
    sbrannen committed Aug 3, 2020
    Copy the full SHA
    91d1383 View commit details

Commits on Aug 4, 2020

  1. Fix bug in StaticListableBeanFactory.isSingleton()

    Prior to this commit, StaticListableBeanFactory.isSingleton() returned
    false for singleton beans unless they were created by a FactoryBean.
    
    StaticListableBeanFactory.isSingleton() now properly returns true for
    all beans not created by a FactoryBean.
    
    Closes gh-25522
    sbrannen committed Aug 4, 2020
    Copy the full SHA
    7a31885 View commit details

Commits on Aug 5, 2020

  1. Copy the full SHA
    40fc472 View commit details
  2. Support @RestControllerAdvice in Standalone MockMvc again

    Since Spring Framework 5.2, @RestControllerAdvice registered with
    MockMvc when using MockMvcBuilders.standaloneSetup() has no longer been
    properly supported if annotation attributes were declared in the
    @RestControllerAdvice annotation. Prior to 5.2, this was not an issue.
    
    The cause for this regression is two-fold.
    
    1. Commit 50c2577 refactored
       DefaultListableBeanFactory so that findAnnotationOnBean() supports
       merged annotations; however, that commit did not refactor
       StaticListableBeanFactory#findAnnotationOnBean() to support merged
       annotations.
    
    2. Commit 978adbd refactored
       ControllerAdviceBean so that a merged @ControllerAdvice annotation
       is only looked up via ApplicationContext#findAnnotationOnBean().
    
    The latter relies on the fact that findAnnotationOnBean() supports
    merged annotations (e.g., @RestControllerAdvice as a merged instance of
    @ControllerAdvice). Behind the scenes, MockMvcBuilders.standaloneSetup()
    creates a StubWebApplicationContext which internally uses a
    StubBeanFactory which extends StaticListableBeanFactory. Consequently,
    since the implementation of findAnnotationOnBean() in
    StaticListableBeanFactory was not updated to support merged annotations
    like it was in DefaultListableBeanFactory, we only see this regression
    with the standalone MockMvc support and not with MockMvc support for an
    existing WebApplicationContext or with standard Spring applications
    using an ApplicationContext that uses DefaultListableBeanFactory.
    
    This commit fixes this regression by supporting merged annotations in
    StaticListableBeanFactory#findAnnotationOnBean() as well.
    
    Closes gh-25520
    sbrannen committed Aug 5, 2020
    Copy the full SHA
    96da1ff View commit details

Commits on Aug 6, 2020

  1. Fix asciidoctor syntax for source

    diguage authored and snicoll committed Aug 6, 2020
    Copy the full SHA
    5cb2cc2 View commit details
  2. Merge pull request #25539 from diguage

    * pr/25539:
      Fix asciidoctor syntax for source
    
    Closes gh-25539
    snicoll committed Aug 6, 2020
    Copy the full SHA
    b684273 View commit details
  3. Fix comment syntax in xml examples

    diguage authored and sbrannen committed Aug 6, 2020
    Copy the full SHA
    0501999 View commit details

Commits on Aug 7, 2020

  1. Copy the full SHA
    6acbc50 View commit details
  2. Copy the full SHA
    96a4e11 View commit details
  3. Copy the full SHA
    94eee6a View commit details
  4. Polishing

    jhoeller committed Aug 7, 2020
    Copy the full SHA
    8dd285f View commit details
  5. Upgrade to Jetty 9.4.31, Groovy 2.5.13, Hibernate ORM 5.4.19, Eclipse…

    …Link 2.7.7, Checkstyle 8.35
    jhoeller committed Aug 7, 2020
    Copy the full SHA
    7fdb33a View commit details
  6. Polishing

    jhoeller committed Aug 7, 2020
    Copy the full SHA
    692c5f2 View commit details
  7. Polishing

    jhoeller committed Aug 7, 2020
    Copy the full SHA
    3b9558a View commit details
  8. Upgrade to Jackson 2.10.5

    jhoeller committed Aug 7, 2020
    Copy the full SHA
    686f5d4 View commit details
  9. Copy the full SHA
    292f581 View commit details

Commits on Aug 8, 2020

  1. Copy the full SHA
    a614abe View commit details
  2. Assert preconditions for MergedAnnotations.from() factory methods

    Prior to this commit, if null values were supplied for the
    RepeatableContainers or AnnotationFilter arguments to `from()` factory
    methods in MergedAnnotations, certain operations would eventually
    result in a NullPointerException. This is to be expected; however, the
    NullPointerException is often swallowed and only logged at INFO level
    with an exception message similar to the following.
    
    > Failed to introspect annotations on org.example.MyClass: NullPointerException
    
    In such cases, the INFO log message is not helpful in diagnosing the
    problem. Furthermore, since the exception is swallowed, the desired
    operation (e.g., MergedAnnotations.stream(...)) simply returns no
    results.
    
    This commit improves the user experience by eagerly asserting non-null
    preconditions for required arguments in MergedAnnotations.from()
    factory methods.
    
    Closes gh-25568
    sbrannen committed Aug 8, 2020
    Copy the full SHA
    e25e690 View commit details

Commits on Aug 10, 2020

  1. Add @FunctionalInterface to MessagePostProcessor

    Add the @FunctionalInterface annotation to the MessagePostProcessor
    interfaces in the spring-jms and spring-messaging projects.
    
    Closes gh-25571
    marschall authored and sbrannen committed Aug 10, 2020
    Copy the full SHA
    6a7e58a View commit details
  2. Copy the full SHA
    bd65762 View commit details
  3. Copy the full SHA
    7d56c30 View commit details
  4. Copy the full SHA
    9bf5cba View commit details

Commits on Aug 16, 2020

  1. Copy the full SHA
    93e5214 View commit details

Commits on Aug 17, 2020

  1. Copy the full SHA
    32e8516 View commit details
  2. Introduce createContext() factory method in AbstractGenericContextLoader

    Prior to this commit it was possible to configure the
    DefaultListableBeanFactory used by the GenericApplicationContext
    created by AbstractGenericContextLoader, but it was not possible to
    completely replace the bean factory.
    
    This commit introduces a new createContext() factory method in
    AbstractGenericContextLoader which indirectly allows subclasses to
    supply a custom DefaultListableBeanFactory implementation to the
    GenericApplicationContext.
    
    Closes gh-25600
    Maciej Miklas authored and sbrannen committed Aug 17, 2020
    Copy the full SHA
    a83529c View commit details
  3. Polish contribution

    sbrannen committed Aug 17, 2020
    Copy the full SHA
    d939016 View commit details

Commits on Aug 22, 2020

  1. Fix regressions in SimpleThreadScope and SimpleTransactionScope

    PR gh-25038 introduced regressions in SimpleThreadScope and
    SimpleTransactionScope in Spring Framework 5.2.7. Specifically, if a
    thread-scoped or transaction-scoped bean has a dependency on another
    thread-scoped or transaction-scoped bean, respectively, a
    ConcurrentModificationException will be thrown on Java 11 or higher.
    
    The reason is that Java 11 introduced a check for concurrent
    modification in java.util.HashMap's computeIfAbsent() implementation,
    and such a modification can occur when a thread-scoped bean is being
    created in order to satisfy a dependency of another thread-scoped bean
    that is currently being created.
    
    This commit fixes these regressions by switching from HashMap to
    ConcurrentHashMap for the instance maps in SimpleThreadScope and
    SimpleTransactionScope.
    
    Closes gh-25618
    sbrannen committed Aug 22, 2020
    Copy the full SHA
    148dc95 View commit details

Commits on Aug 25, 2020

  1. Copy the full SHA
    0d4040a View commit details
  2. Copy the full SHA
    04df9b8 View commit details
  3. Polishing

    jhoeller committed Aug 25, 2020
    Copy the full SHA
    6f0461c View commit details
  4. Copy the full SHA
    f43c39c View commit details

Commits on Aug 27, 2020

  1. Copy the full SHA
    60fa704 View commit details
  2. Copy the full SHA
    589060d View commit details
  3. Copy the full SHA
    cf2e0c7 View commit details
Showing with 1,959 additions and 1,108 deletions.
  1. +19 −19 build.gradle
  2. +1 −1 gradle.properties
  3. +2 −2 spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAdviceParameterNameDiscoverer.java
  4. +2 −2 ...p/src/main/java/org/springframework/aop/aspectj/annotation/BeanFactoryAspectJAdvisorsBuilder.java
  5. +4 −3 spring-aop/src/main/java/org/springframework/aop/config/AdviceEntry.java
  6. +3 −2 spring-aop/src/main/java/org/springframework/aop/config/AdvisorEntry.java
  7. +3 −2 spring-aop/src/main/java/org/springframework/aop/config/AspectEntry.java
  8. +4 −2 spring-aop/src/main/java/org/springframework/aop/config/PointcutEntry.java
  9. +3 −8 spring-beans/src/main/java/org/springframework/beans/BeanUtils.java
  10. +12 −18 spring-beans/src/main/java/org/springframework/beans/CachedIntrospectionResults.java
  11. +5 −3 spring-beans/src/main/java/org/springframework/beans/GenericTypeAwarePropertyDescriptor.java
  12. +1 −1 spring-beans/src/main/java/org/springframework/beans/PropertyEditorRegistrySupport.java
  13. +12 −10 spring-beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java
  14. +3 −3 spring-beans/src/main/java/org/springframework/beans/factory/parsing/BeanEntry.java
  15. +25 −30 spring-beans/src/main/java/org/springframework/beans/factory/parsing/ParseState.java
  16. +3 −5 spring-beans/src/main/java/org/springframework/beans/factory/parsing/PropertyEntry.java
  17. +8 −3 spring-beans/src/main/java/org/springframework/beans/factory/parsing/QualifierEntry.java
  18. +11 −10 spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java
  19. +8 −8 spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java
  20. +17 −9 ...g-beans/src/main/java/org/springframework/beans/factory/support/DefaultSingletonBeanRegistry.java
  21. +2 −2 ...beans/src/main/java/org/springframework/beans/factory/support/PropertiesBeanDefinitionReader.java
  22. +5 −4 spring-beans/src/main/java/org/springframework/beans/factory/support/ReplaceOverride.java
  23. +16 −12 spring-beans/src/main/java/org/springframework/beans/factory/support/StaticListableBeanFactory.java
  24. +2 −2 spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java
  25. +2 −2 spring-beans/src/main/java/org/springframework/beans/propertyeditors/URIEditor.java
  26. +163 −1 spring-beans/src/test/java/org/springframework/beans/factory/BeanFactoryUtilsTests.java
  27. +37 −16 spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java
  28. +4 −2 ...-context-support/src/main/java/org/springframework/scheduling/quartz/LocalDataSourceJobStore.java
  29. +26 −1 spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java
  30. +2 −4 spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java
  31. +7 −1 spring-context/src/main/java/org/springframework/cache/support/SimpleCacheManager.java
  32. +2 −2 spring-context/src/main/java/org/springframework/context/annotation/Bean.java
  33. +3 −3 spring-context/src/main/java/org/springframework/context/annotation/Condition.java
  34. +2 −2 spring-context/src/main/java/org/springframework/context/annotation/ConditionContext.java
  35. +2 −2 spring-context/src/main/java/org/springframework/context/annotation/Conditional.java
  36. +14 −6 .../src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java
  37. +3 −2 spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java
  38. +4 −4 spring-context/src/main/java/org/springframework/context/annotation/ConfigurationCondition.java
  39. +18 −5 .../main/java/org/springframework/context/annotation/ContextAnnotationAutowireCandidateResolver.java
  40. +1 −1 ...context/src/main/java/org/springframework/context/support/AbstractResourceBasedMessageSource.java
  41. +3 −3 spring-context/src/main/java/org/springframework/context/support/SimpleThreadScope.java
  42. +3 −3 ...-context/src/main/java/org/springframework/format/support/DefaultFormattingConversionService.java
  43. +1 −1 ...context/src/main/java/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.java
  44. +2 −2 spring-context/src/main/java/org/springframework/scheduling/config/TaskExecutorFactoryBean.java
  45. +7 −7 spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java
  46. +4 −4 spring-context/src/main/java/org/springframework/validation/AbstractErrors.java
  47. +2 −3 spring-context/src/main/java/org/springframework/validation/BindException.java
  48. +6 −1 spring-context/src/main/java/org/springframework/validation/MapBindingResult.java
  49. +2 −2 ...g-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java
  50. +9 −3 ...st/java/org/springframework/context/annotation/LazyAutowiredAnnotationBeanPostProcessorTests.java
  51. +38 −1 .../java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java
  52. +4 −4 spring-context/src/test/java/org/springframework/context/support/SimpleThreadScopeTests.java
  53. +6 −36 spring-context/src/test/resources/org/springframework/context/support/simpleThreadScopeTests.xml
  54. +4 −4 ...ntext/src/testFixtures/java/org/springframework/context/testfixture/jndi/SimpleNamingContext.java
  55. +11 −17 spring-core/src/main/java/org/springframework/core/annotation/AnnotationTypeMappings.java
  56. +41 −92 spring-core/src/main/java/org/springframework/core/annotation/AnnotationsScanner.java
  57. +10 −6 spring-core/src/main/java/org/springframework/core/annotation/MergedAnnotations.java
  58. +2 −2 spring-core/src/main/java/org/springframework/core/annotation/TypeMappedAnnotations.java
  59. +24 −10 spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java
  60. +4 −3 spring-core/src/main/java/org/springframework/core/convert/support/StringToBooleanConverter.java
  61. +3 −1 spring-core/src/main/java/org/springframework/core/convert/support/StringToUUIDConverter.java
  62. +4 −11 spring-core/src/main/java/org/springframework/core/io/FileUrlResource.java
  63. +23 −10 spring-core/src/main/java/org/springframework/core/io/UrlResource.java
  64. +3 −3 ...g-core/src/main/java/org/springframework/core/io/support/PathMatchingResourcePatternResolver.java
  65. +3 −2 spring-core/src/main/java/org/springframework/core/io/support/PropertiesLoaderSupport.java
  66. +37 −13 spring-core/src/main/java/org/springframework/core/log/LogAccessor.java
  67. +6 −5 spring-core/src/main/java/org/springframework/util/FastByteArrayOutputStream.java
  68. +1 −1 spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java
  69. +4 −9 spring-core/src/main/java/org/springframework/util/SimpleIdGenerator.java
  70. +20 −6 spring-core/src/main/java/org/springframework/util/StringUtils.java
  71. +4 −2 spring-core/src/main/java/org/springframework/util/unit/DataSize.java
  72. +11 −5 spring-core/src/test/java/org/springframework/core/annotation/AnnotationTypeMappingsTests.java
  73. +23 −17 spring-core/src/test/java/org/springframework/core/annotation/AnnotationsScannerTests.java
  74. +43 −8 ...src/test/java/org/springframework/core/annotation/MergedAnnotationsRepeatableAnnotationTests.java
  75. +21 −0 spring-core/src/test/java/org/springframework/core/annotation/MergedAnnotationsTests.java
  76. +4 −3 spring-expression/src/main/java/org/springframework/expression/spel/ast/MethodReference.java
  77. +1 −1 ...ng-expression/src/test/java/org/springframework/expression/spel/SpelCompilationCoverageTests.java
  78. +65 −1 spring-expression/src/test/java/org/springframework/expression/spel/standard/SpelCompilerTests.java
  79. +7 −11 spring-jdbc/src/main/java/org/springframework/jdbc/core/BeanPropertyRowMapper.java
  80. +3 −7 spring-jdbc/src/main/java/org/springframework/jdbc/core/SingleColumnRowMapper.java
  81. +6 −7 spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java
  82. +5 −5 spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataContext.java
  83. +1 −1 spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataProviderFactory.java
  84. +39 −15 spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallParameterMetaData.java
  85. +1 −1 spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.java
  86. +3 −4 spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataProviderFactory.java
  87. +25 −1 spring-jdbc/src/main/java/org/springframework/jdbc/datasource/lookup/AbstractRoutingDataSource.java
  88. +6 −4 spring-jdbc/src/main/java/org/springframework/jdbc/support/DatabaseMetaDataCallback.java
  89. +32 −10 spring-jdbc/src/main/java/org/springframework/jdbc/support/JdbcUtils.java
  90. +28 −24 spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslator.java
  91. +25 −5 spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLErrorCodesFactory.java
  92. +2 −3 spring-jdbc/src/test/java/org/springframework/jdbc/core/BeanPropertyRowMapperTests.java
  93. +38 −7 ...-jdbc/src/test/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslatorTests.java
  94. +15 −15 spring-jdbc/src/test/java/org/springframework/jdbc/support/SQLErrorCodesFactoryTests.java
  95. +2 −2 spring-jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java
  96. +6 −6 spring-jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java
  97. +11 −8 spring-jms/src/main/java/org/springframework/jms/core/MessagePostProcessor.java
  98. +1 −1 spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java
  99. +2 −2 spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java
  100. +2 −2 spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecConfig.java
  101. +3 −2 spring-messaging/src/main/java/org/springframework/messaging/core/MessagePostProcessor.java
  102. +3 −3 ...java/org/springframework/messaging/handler/invocation/HandlerMethodArgumentResolverComposite.java
  103. +5 −6 ...springframework/messaging/handler/invocation/reactive/HandlerMethodArgumentResolverComposite.java
  104. +2 −2 .../springframework/messaging/rsocket/annotation/support/RSocketRequesterMethodArgumentResolver.java
  105. +1 −1 spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java
  106. +4 −5 spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java
  107. +6 −6 spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo.java
  108. +2 −3 ...orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java
  109. +2 −2 spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
  110. +2 −2 spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContext.java
  111. +5 −4 spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java
  112. +2 −2 spring-test/src/main/java/org/springframework/test/context/jdbc/MergedSqlConfig.java
  113. +30 −25 spring-test/src/main/java/org/springframework/test/context/support/AbstractGenericContextLoader.java
  114. +2 −2 ...ng-test/src/main/java/org/springframework/test/context/support/GenericGroovyXmlContextLoader.java
  115. +13 −4 spring-test/src/main/java/org/springframework/test/util/JsonPathExpectationsHelper.java
  116. +1 −4 ...est/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java
  117. +3 −5 spring-test/src/main/java/org/springframework/test/web/servlet/setup/PatternMappingFilterProxy.java
  118. +81 −55 spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java
  119. +13 −13 spring-test/src/test/java/org/springframework/test/util/JsonPathExpectationsHelperTests.java
  120. +12 −4 ...g-test/src/test/java/org/springframework/test/web/servlet/result/JsonPathResultMatchersTests.java
  121. +149 −19 .../src/test/java/org/springframework/test/web/servlet/samples/standalone/ExceptionHandlerTests.java
  122. +6 −6 ...-tx/src/main/java/org/springframework/dao/support/PersistenceExceptionTranslationInterceptor.java
  123. +5 −5 spring-tx/src/main/java/org/springframework/transaction/config/TxAdviceBeanDefinitionParser.java
  124. +3 −3 spring-tx/src/main/java/org/springframework/transaction/support/SimpleTransactionScope.java
  125. +1 −1 spring-web/src/main/java/org/springframework/http/ContentDisposition.java
  126. +8 −7 spring-web/src/main/java/org/springframework/http/HttpHeaders.java
  127. +1 −2 spring-web/src/main/java/org/springframework/http/MediaType.java
  128. +13 −5 ...b/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java
  129. +5 −5 ...g-web/src/main/java/org/springframework/http/converter/json/AbstractJsonHttpMessageConverter.java
  130. +4 −4 spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java
  131. +2 −2 spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java
  132. +4 −4 spring-web/src/main/java/org/springframework/http/converter/json/JsonbHttpMessageConverter.java
  133. +2 −2 spring-web/src/main/java/org/springframework/http/server/DefaultRequestPath.java
  134. +7 −16 spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java
  135. +2 −1 spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeBindException.java
  136. +2 −2 spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeDataBinder.java
  137. +4 −4 spring-web/src/main/java/org/springframework/web/bind/support/WebRequestDataBinder.java
  138. +6 −20 spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java
  139. +3 −3 .../src/main/java/org/springframework/web/method/support/HandlerMethodArgumentResolverComposite.java
  140. +0 −2 spring-web/src/main/java/org/springframework/web/server/adapter/WebHttpHandlerBuilder.java
  141. +15 −8 spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java
  142. +2 −2 spring-web/src/main/java/org/springframework/web/util/UriTemplate.java
  143. +78 −20 spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java
  144. +4 −1 spring-web/src/main/java/org/springframework/web/util/WebUtils.java
  145. +3 −3 spring-web/src/main/java/org/springframework/web/util/pattern/RegexPathElement.java
  146. +20 −0 spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java
  147. +3 −11 spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java
  148. +23 −11 spring-web/src/test/java/org/springframework/web/util/WebUtilsTests.java
  149. +5 −4 ...eb/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java
  150. +2 −2 spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ToStringVisitor.java
  151. +5 −6 ...n/java/org/springframework/web/reactive/result/method/HandlerMethodArgumentResolverComposite.java
  152. +1 −3 ...org/springframework/web/reactive/result/method/annotation/PathVariableMethodArgumentResolver.java
  153. +3 −4 spring-webflux/src/main/java/org/springframework/web/reactive/result/view/RedirectView.java
  154. +16 −12 ...ng-webflux/src/test/java/org/springframework/web/reactive/resource/PathResourceResolverTests.java
  155. +18 −5 spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java
  156. +5 −1 spring-webmvc/src/main/java/org/springframework/web/servlet/function/ToStringVisitor.java
  157. +25 −24 spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java
  158. +2 −1 spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java
  159. +1 −2 spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java
  160. +1 −1 ...-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PatternsRequestCondition.java
  161. +4 −14 ...rg/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java
  162. +2 −2 ...g/springframework/web/servlet/mvc/method/annotation/ServletCookieValueMethodArgumentResolver.java
  163. +2 −1 spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlEncodingFilter.java
  164. +2 −2 spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java
  165. +2 −2 spring-webmvc/src/main/java/org/springframework/web/servlet/support/AbstractFlashMapManager.java
  166. +2 −2 spring-webmvc/src/main/java/org/springframework/web/servlet/support/ServletUriComponentsBuilder.java
  167. +2 −2 spring-webmvc/src/main/java/org/springframework/web/servlet/tags/UrlTag.java
  168. +2 −2 spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/ErrorsTag.java
  169. +2 −2 spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java
  170. +25 −2 ...rg/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java
  171. +7 −4 spring-webmvc/src/test/java/org/springframework/web/servlet/resource/PathResourceResolverTests.java
  172. +2 −2 spring-websocket/src/main/java/org/springframework/web/socket/WebSocketExtension.java
  173. +12 −1 ...src/main/java/org/springframework/web/socket/sockjs/transport/TransportHandlingSockJsService.java
  174. +17 −17 src/docs/asciidoc/core/core-aop-api.adoc
  175. +2 −2 src/docs/asciidoc/core/core-aop.adoc
  176. +2 −2 src/docs/asciidoc/core/core-appendix.adoc
  177. +4 −3 src/docs/asciidoc/core/core-beans.adoc
  178. +1 −1 src/docs/asciidoc/data-access.adoc
  179. +2 −2 src/docs/asciidoc/integration.adoc
  180. +1 −1 src/docs/asciidoc/languages/dynamic-languages.adoc
  181. +33 −0 src/docs/asciidoc/web/webmvc.adoc
38 changes: 19 additions & 19 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
plugins {
id 'io.spring.dependency-management' version '1.0.8.RELEASE' apply false
id 'io.spring.dependency-management' version '1.0.9.RELEASE' apply false
id 'io.spring.gradle-enterprise-conventions' version '0.0.2'
id 'io.spring.nohttp' version '0.0.5.RELEASE'
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 'io.spring.gradle-enterprise-conventions' version '0.0.2'
id 'io.spring.nohttp' version '0.0.5.RELEASE'
id 'de.undercouch.download' version '4.0.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'
id "com.jfrog.artifactory" version '4.12.0' apply false
id "io.freefair.aspectj" version '4.1.1' apply false
id "com.github.ben-manes.versions" version '0.24.0'
}

@@ -26,11 +26,11 @@ configure(allprojects) { project ->

dependencyManagement {
imports {
mavenBom "com.fasterxml.jackson:jackson-bom:2.10.4"
mavenBom "com.fasterxml.jackson:jackson-bom:2.10.5"
mavenBom "io.netty:netty-bom:4.1.51.Final"
mavenBom "io.projectreactor:reactor-bom:Dysprosium-SR10"
mavenBom "io.projectreactor:reactor-bom:Dysprosium-SR12"
mavenBom "io.rsocket:rsocket-bom:1.0.1"
mavenBom "org.eclipse.jetty:jetty-bom:9.4.30.v20200611"
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"
@@ -45,12 +45,12 @@ configure(allprojects) { project ->
dependency "org.slf4j:slf4j-api:1.7.30"
dependency "com.google.code.findbugs:jsr305:3.0.2"

dependencySet(group: 'org.aspectj', version: '1.9.5') {
dependencySet(group: 'org.aspectj', version: '1.9.6') {
entry 'aspectjrt'
entry 'aspectjtools'
entry 'aspectjweaver'
}
dependencySet(group: 'org.codehaus.groovy', version: '2.5.12') {
dependencySet(group: 'org.codehaus.groovy', version: '2.5.13') {
entry 'groovy'
entry 'groovy-jsr223'
entry 'groovy-templates'
@@ -65,7 +65,7 @@ configure(allprojects) { project ->

dependency "com.caucho:hessian:4.0.63"
dependency "com.fasterxml:aalto-xml:1.2.2"
dependency("com.fasterxml.woodstox:woodstox-core:6.1.1") {
dependency("com.fasterxml.woodstox:woodstox-core:6.2.1") {
exclude group: "stax", name: "stax-api"
}
dependency "com.google.code.gson:gson:2.8.6"
@@ -109,13 +109,13 @@ configure(allprojects) { project ->
dependency "org.apache.poi:poi-ooxml:4.1.2"
dependency "org.apache-extras.beanshell:bsh:2.0b6"
dependency "org.freemarker:freemarker:2.3.30"
dependency "org.hsqldb:hsqldb:2.5.0"
dependency "org.hsqldb:hsqldb:2.5.1"
dependency "org.quartz-scheduler:quartz:2.3.2"
dependency "org.codehaus.fabric3.api:commonj:1.1.0"
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.18.Final"
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.webjars:underscorejs:1.8.3"
@@ -131,7 +131,7 @@ configure(allprojects) { project ->
entry 'tomcat-embed-core'
entry 'tomcat-embed-websocket'
}
dependencySet(group: 'io.undertow', version: '2.0.30.Final') {
dependencySet(group: 'io.undertow', version: '2.0.31.Final') {
entry 'undertow-core'
entry('undertow-websockets-jsr') {
exclude group: "org.jboss.spec.javax.websocket", name: "jboss-websocket-api_1.1_spec"
@@ -179,7 +179,7 @@ configure(allprojects) { project ->
dependency "org.testng:testng:6.14.3"
dependency "org.hamcrest:hamcrest:2.1"
dependency "org.awaitility:awaitility:3.1.6"
dependency "org.assertj:assertj-core:3.16.1"
dependency "org.assertj:assertj-core:3.17.2"
dependencySet(group: 'org.xmlunit', version: '2.6.2') {
entry 'xmlunit-assertj'
entry('xmlunit-matchers') {
@@ -194,10 +194,10 @@ configure(allprojects) { project ->
}
dependency "io.mockk:mockk:1.10.0"

dependency("net.sourceforge.htmlunit:htmlunit:2.42.0") {
dependency("net.sourceforge.htmlunit:htmlunit:2.43.0") {
exclude group: "commons-logging", name: "commons-logging"
}
dependency("org.seleniumhq.selenium:htmlunit-driver:2.42.0") {
dependency("org.seleniumhq.selenium:htmlunit-driver:2.43.1") {
exclude group: "commons-logging", name: "commons-logging"
}
dependency("org.seleniumhq.selenium:selenium-java:3.141.59") {
@@ -225,7 +225,7 @@ configure(allprojects) { project ->
dependency "com.ibm.websphere:uow:6.0.2.17"
dependency "com.jamonapi:jamon:2.82"
dependency "joda-time:joda-time:2.10.6"
dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:2.7.6"
dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:2.7.7"
dependency "org.javamoney:moneta:1.3"

dependency "com.sun.activation:javax.activation:1.2.0"
@@ -325,7 +325,7 @@ configure([rootProject] + javaProjects) { project ->
}

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

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.8.BUILD-SNAPSHOT
version=5.2.9.RELEASE
org.gradle.jvmargs=-Xmx1536M
org.gradle.caching=true
org.gradle.parallel=true
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 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.
@@ -648,7 +648,7 @@ private PointcutBody getPointcutBody(String[] tokens, int startIndex) {
}

if (tokens[currentIndex].endsWith(")")) {
sb.append(tokens[currentIndex].substring(0, tokens[currentIndex].length() - 1));
sb.append(tokens[currentIndex], 0, tokens[currentIndex].length() - 1);
return new PointcutBody(numTokensConsumed, sb.toString().trim());
}

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 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.
@@ -97,7 +97,7 @@ public List<Advisor> buildAspectJAdvisors() {
}
// We must be careful not to instantiate beans eagerly as in this case they
// would be cached by the Spring container but would not have been weaved.
Class<?> beanType = this.beanFactory.getType(beanName);
Class<?> beanType = this.beanFactory.getType(beanName, false);
if (beanType == null) {
continue;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2012 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.
@@ -30,13 +30,14 @@ public class AdviceEntry implements ParseState.Entry {


/**
* Creates a new instance of the {@link AdviceEntry} class.
* @param kind the kind of advice represented by this entry (before, after, around, etc.)
* Create a new {@code AdviceEntry} instance.
* @param kind the kind of advice represented by this entry (before, after, around)
*/
public AdviceEntry(String kind) {
this.kind = kind;
}


@Override
public String toString() {
return "Advice (" + this.kind + ")";
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2012 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.
@@ -30,13 +30,14 @@ public class AdvisorEntry implements ParseState.Entry {


/**
* Creates a new instance of the {@link AdvisorEntry} class.
* Create a new {@code AdvisorEntry} instance.
* @param name the bean name of the advisor
*/
public AdvisorEntry(String name) {
this.name = name;
}


@Override
public String toString() {
return "Advisor '" + this.name + "'";
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 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.
@@ -34,7 +34,7 @@ public class AspectEntry implements ParseState.Entry {


/**
* Create a new AspectEntry.
* Create a new {@code AspectEntry} instance.
* @param id the id of the aspect element
* @param ref the bean name referenced by this aspect element
*/
@@ -43,6 +43,7 @@ public AspectEntry(String id, String ref) {
this.ref = ref;
}


@Override
public String toString() {
return "Aspect: " + (StringUtils.hasLength(this.id) ? "id='" + this.id + "'" : "ref='" + this.ref + "'");
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2012 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.
@@ -28,14 +28,16 @@ public class PointcutEntry implements ParseState.Entry {

private final String name;


/**
* Creates a new instance of the {@link PointcutEntry} class.
* Create a new {@code PointcutEntry} instance.
* @param name the bean name of the pointcut
*/
public PointcutEntry(String name) {
this.name = name;
}


@Override
public String toString() {
return "Pointcut '" + this.name + "'";
Original file line number Diff line number Diff line change
@@ -227,7 +227,6 @@ public static <T> T instantiateClass(Constructor<T> ctor, Object... args) throws
* @since 5.0
* @see <a href="https://kotlinlang.org/docs/reference/classes.html#constructors">Kotlin docs</a>
*/
@SuppressWarnings("unchecked")
@Nullable
public static <T> Constructor<T> findPrimaryConstructor(Class<T> clazz) {
Assert.notNull(clazz, "Class must not be null");
@@ -442,8 +441,7 @@ else if (startParen == -1) {
* @throws BeansException if PropertyDescriptor look fails
*/
public static PropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) throws BeansException {
CachedIntrospectionResults cr = CachedIntrospectionResults.forClass(clazz);
return cr.getPropertyDescriptors();
return CachedIntrospectionResults.forClass(clazz).getPropertyDescriptors();
}

/**
@@ -454,11 +452,8 @@ public static PropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) throws
* @throws BeansException if PropertyDescriptor lookup fails
*/
@Nullable
public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String propertyName)
throws BeansException {

CachedIntrospectionResults cr = CachedIntrospectionResults.forClass(clazz);
return cr.getPropertyDescriptor(propertyName);
public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String propertyName) throws BeansException {
return CachedIntrospectionResults.forClass(clazz).getPropertyDescriptor(propertyName);
}

/**
Original file line number Diff line number Diff line change
@@ -92,6 +92,8 @@ public final class CachedIntrospectionResults {
*/
public static final String IGNORE_BEANINFO_PROPERTY_NAME = "spring.beaninfo.ignore";

private static final PropertyDescriptor[] EMPTY_PROPERTY_DESCRIPTOR_ARRAY = {};


private static final boolean shouldIntrospectorIgnoreBeaninfoClasses =
SpringProperties.getFlag(IGNORE_BEANINFO_PROPERTY_NAME);
@@ -253,7 +255,7 @@ private static BeanInfo getBeanInfo(Class<?> beanClass) throws IntrospectionExce
private final BeanInfo beanInfo;

/** PropertyDescriptor objects keyed by property name String. */
private final Map<String, PropertyDescriptor> propertyDescriptorCache;
private final Map<String, PropertyDescriptor> propertyDescriptors;

/** TypeDescriptor objects keyed by PropertyDescriptor. */
private final ConcurrentMap<PropertyDescriptor, TypeDescriptor> typeDescriptorCache;
@@ -274,7 +276,7 @@ private CachedIntrospectionResults(Class<?> beanClass) throws BeansException {
if (logger.isTraceEnabled()) {
logger.trace("Caching PropertyDescriptors for class [" + beanClass.getName() + "]");
}
this.propertyDescriptorCache = new LinkedHashMap<>();
this.propertyDescriptors = new LinkedHashMap<>();

// This call is slow so we do it once.
PropertyDescriptor[] pds = this.beanInfo.getPropertyDescriptors();
@@ -291,7 +293,7 @@ private CachedIntrospectionResults(Class<?> beanClass) throws BeansException {
"; editor [" + pd.getPropertyEditorClass().getName() + "]" : ""));
}
pd = buildGenericTypeAwarePropertyDescriptor(beanClass, pd);
this.propertyDescriptorCache.put(pd.getName(), pd);
this.propertyDescriptors.put(pd.getName(), pd);
}

// Explicitly check implemented interfaces for setter/getter methods as well,
@@ -313,13 +315,13 @@ private void introspectInterfaces(Class<?> beanClass, Class<?> currClass) throws
for (Class<?> ifc : currClass.getInterfaces()) {
if (!ClassUtils.isJavaLanguageInterface(ifc)) {
for (PropertyDescriptor pd : getBeanInfo(ifc).getPropertyDescriptors()) {
PropertyDescriptor existingPd = this.propertyDescriptorCache.get(pd.getName());
PropertyDescriptor existingPd = this.propertyDescriptors.get(pd.getName());
if (existingPd == null ||
(existingPd.getReadMethod() == null && pd.getReadMethod() != null)) {
// GenericTypeAwarePropertyDescriptor leniently resolves a set* write method
// against a declared read method, so we prefer read method descriptors here.
pd = buildGenericTypeAwarePropertyDescriptor(beanClass, pd);
this.propertyDescriptorCache.put(pd.getName(), pd);
this.propertyDescriptors.put(pd.getName(), pd);
}
}
introspectInterfaces(ifc, ifc);
@@ -338,27 +340,19 @@ Class<?> getBeanClass() {

@Nullable
PropertyDescriptor getPropertyDescriptor(String name) {
PropertyDescriptor pd = this.propertyDescriptorCache.get(name);
PropertyDescriptor pd = this.propertyDescriptors.get(name);
if (pd == null && StringUtils.hasLength(name)) {
// Same lenient fallback checking as in Property...
pd = this.propertyDescriptorCache.get(StringUtils.uncapitalize(name));
pd = this.propertyDescriptors.get(StringUtils.uncapitalize(name));
if (pd == null) {
pd = this.propertyDescriptorCache.get(StringUtils.capitalize(name));
pd = this.propertyDescriptors.get(StringUtils.capitalize(name));
}
}
return (pd == null || pd instanceof GenericTypeAwarePropertyDescriptor ? pd :
buildGenericTypeAwarePropertyDescriptor(getBeanClass(), pd));
return pd;
}

PropertyDescriptor[] getPropertyDescriptors() {
PropertyDescriptor[] pds = new PropertyDescriptor[this.propertyDescriptorCache.size()];
int i = 0;
for (PropertyDescriptor pd : this.propertyDescriptorCache.values()) {
pds[i] = (pd instanceof GenericTypeAwarePropertyDescriptor ? pd :
buildGenericTypeAwarePropertyDescriptor(getBeanClass(), pd));
i++;
}
return pds;
return this.propertyDescriptors.values().toArray(EMPTY_PROPERTY_DESCRIPTOR_ARRAY);
}

private PropertyDescriptor buildGenericTypeAwarePropertyDescriptor(Class<?> beanClass, PropertyDescriptor pd) {
Loading