1. 27 5月, 2015 3 次提交
    • S
      Ensure synthesized nested annotation arrays retain correct type · f41de12c
      Sam Brannen 提交于
      Prior to this commit, when a nested array of annotations was
      synthesized while adapting values within an AnnotationAttributes map,
      the array was improperly replaced with an array of type Annotation[]
      instead of an array of the concrete annotation type, which can lead to
      unexpected run-time exceptions.
      
      This commit fixes this bug by replacing annotations in the existing
      array with synthesized versions of those annotations, thereby retaining
      the original array's component type.
      
      Issue: SPR-13077
      f41de12c
    • S
      Support nested annotations in AnnotationAttributes · a2f152ce
      Sam Brannen 提交于
      This commit introduces support in AnnotationAttributes for retrieving
      nested annotations that is on par with the existing type-safe support
      for retrieving nested AnnotationAttributes.
      
      Issue: SPR-13074
      a2f152ce
    • S
      Document public API in AnnotationAttributes · 0ac0e2ce
      Sam Brannen 提交于
      AnnotationAttributes has existed for several years, but none of the
      "get" methods that make up its public API are documented. In many
      cases, the behavior can be inferred from the name of the method, but
      for some methods there are "hidden gems" and unexpected behavior
      lurking behind the scenes.
      
      This commit addresses this issue by documenting all public methods. In
      addition, the hidden support for converting single elements into
      single-element arrays has also been documented and tested.
      
      Issue: SPR-13072
      0ac0e2ce
  2. 24 5月, 2015 3 次提交
  3. 23 5月, 2015 1 次提交
  4. 22 5月, 2015 5 次提交
    • S
      Polish annotation utility tests · 73170224
      Sam Brannen 提交于
      73170224
    • S
      Verify that SynthesizedAnnotation must be public · e7ea9256
      Sam Brannen 提交于
      This commit introduces a test that will fail if SynthesizedAnnotation is
      not public as is required by the contract for getProxyClass() in
      java.lang.reflect.Proxy.
      
      Issue: SPR-13057
      e7ea9256
    • J
      ByteBufferConverter explicitly declares applicability to byte[] · 792b7b9d
      Juergen Hoeller 提交于
      Includes an optimization for simple ByteBuffer duplication.
      
      Issue: SPR-13056
      792b7b9d
    • S
      Polish · 27c435c4
      Stephane Nicoll 提交于
      27c435c4
    • S
      Support annotation attribute aliases and overrides via @AliasFor · ca66e076
      Sam Brannen 提交于
      This commit introduces first-class support for aliases for annotation
      attributes. Specifically, this commit introduces a new @AliasFor
      annotation that can be used to declare a pair of aliased attributes
      within a single annotation or an alias from an attribute in a custom
      composed annotation to an attribute in a meta-annotation.
      
      To support @AliasFor within annotation instances, AnnotationUtils has
      been overhauled to "synthesize" any annotations returned by "get" and
      "find" searches. A SynthesizedAnnotation is an annotation that is
      wrapped in a JDK dynamic proxy which provides run-time support for
      @AliasFor semantics. SynthesizedAnnotationInvocationHandler is the
      actual handler behind the proxy.
      
      In addition, the contract for @AliasFor is fully validated, and an
      AnnotationConfigurationException is thrown in case invalid
      configuration is detected.
      
      For example, @ContextConfiguration from the spring-test module is now
      declared as follows:
      
          public @interface ContextConfiguration {
      
              @AliasFor(attribute = "locations")
              String[] value() default {};
      
              @AliasFor(attribute = "value")
              String[] locations() default {};
      
              // ...
          }
      
      The following annotations and their related support classes have been
      modified to use @AliasFor.
      
      - @ManagedResource
      - @ContextConfiguration
      - @ActiveProfiles
      - @TestExecutionListeners
      - @TestPropertySource
      - @Sql
      - @ControllerAdvice
      - @RequestMapping
      
      Similarly, support for AnnotationAttributes has been reworked to
      support @AliasFor as well. This allows for fine-grained control over
      exactly which attributes are overridden within an annotation hierarchy.
      In fact, it is now possible to declare an alias for the 'value'
      attribute of a meta-annotation.
      
      For example, given the revised declaration of @ContextConfiguration
      above, one can now develop a composed annotation with a custom
      attribute override as follows.
      
          @ContextConfiguration
          public @interface MyTestConfig {
      
              @AliasFor(
                 annotation = ContextConfiguration.class,
                 attribute = "locations"
              )
              String[] xmlFiles();
      
              // ...
          }
      
      Consequently, the following are functionally equivalent.
      
      - @MyTestConfig(xmlFiles = "test.xml")
      - @ContextConfiguration("test.xml")
      - @ContextConfiguration(locations = "test.xml").
      
      Issue: SPR-11512, SPR-11513
      ca66e076
  5. 19 5月, 2015 1 次提交
  6. 18 5月, 2015 1 次提交
  7. 15 5月, 2015 1 次提交
    • S
      Harmonize default converters · 0612bc7b
      Stephane Nicoll 提交于
      Provide Converter implementations for Charset, Currency and TimeZone as
      related PropertyEditors are available for those.
      
      Issue: SPR-13020
      0612bc7b
  8. 13 5月, 2015 1 次提交
    • S
      Favor local, composed annotations in AnnotatedElementUtils · ebed52cc
      Sam Brannen 提交于
      This commit updates the "get semantics" search algorithm used in
      `AnnotatedElementUtils` so that locally declared 'composed annotations'
      are favored over inherited annotations.
      
      Specifically, the internal `searchWithGetSemantics()` method now
      searches locally declared annotations before searching inherited
      annotations.
      
      All TODOs in `AnnotatedElementUtilsTests` have been completed, and all
      ignored tests have been reinstated.
      
      Issue: SPR-11598
      ebed52cc
  9. 12 5月, 2015 1 次提交
  10. 10 5月, 2015 1 次提交
  11. 09 5月, 2015 1 次提交
  12. 08 5月, 2015 5 次提交
  13. 07 5月, 2015 4 次提交
  14. 06 5月, 2015 4 次提交
    • S
      Document & test AnnotatedElementUtils.getAllAnnotationAttributes · 5c0f98ae
      Sam Brannen 提交于
      Issue: SPR-11514
      5c0f98ae
    • S
      Introduce tests for AnnotatedElementUtils.isAnnotated() · 9eb35185
      Sam Brannen 提交于
      Issue: SPR-11514
      9eb35185
    • S
      Eliminate inspection of annotations on core Java annotations · 5d67219a
      Sam Brannen 提交于
      This commit picks up where SPR-11483 left off, with the goal of
      eliminating all unnecessary inspection of core JDK annotations in
      Spring's annotation search algorithms in AnnotatedElementUtils and
      AnnotationMetadataReadingVisitor.
      
      Issue: SPR-12989
      5d67219a
    • S
      Overhaul AnnotatedElementUtils · ba84458c
      Sam Brannen 提交于
       - Methods which search for a specific annotation now properly ensure
         that the sought annotation was actually found.
      
       - Both the "get" and the "find" search algorithms no longer needlessly
         traverse meta-annotation hierarchies twice.
      
       - Both the "get" and the "find" search algorithms now properly
         increment the metaDepth when recursively searching within the
         meta-annotation hierarchy.
      
       - Redesigned getMetaAnnotationTypes() so that it doesn't needlessly
         search irrelevant annotations.
      
       - Documented and tested hasMetaAnnotationTypes().
      
       - Documented isAnnotated().
      
      Issue: SPR-11514
      ba84458c
  15. 03 5月, 2015 1 次提交
  16. 27 4月, 2015 1 次提交
    • S
      Document & test status quo for getMetaAnnotationTypes() · 7ef9ac7a
      Sam Brannen 提交于
      This commit documents the status quo for the getMetaAnnotationTypes()
      method in AnnotatedElementUtils and adds appropriate regression tests to
      AnnotatedElementUtilsTests.
      
      In addition, this commit also introduces a SimpleAnnotationProcessor
      base class in AnnotatedElementUtils.
      
      Issue: SPR-11514
      7ef9ac7a
  17. 25 4月, 2015 1 次提交
  18. 24 4月, 2015 1 次提交
    • S
      Support abstract, bridge, & interface methods in AnnotatedElementUtils · ad6bea1c
      Sam Brannen 提交于
      This commit introduces support for finding annotations on abstract,
      bridge, and interface methods in AnnotatedElementUtils.
      
       - Introduced dedicated findAnnotationAttributes() methods in
         AnnotatedElementUtils that provide first-class support for
         processing methods, class hierarchies, interfaces, bridge methods,
         etc.
      
       - Introduced find/get search algorithm dichotomy in
         AnnotatedElementUtils which is visible in the public API as well as
         in the internal implementation. This was necessary in order to
         maintain backwards compatibility with the existing API (even though
         it was undocumented).
      
       - Reverted all recent changes made to the "get semantics" search
         algorithm in AnnotatedElementUtils in order to ensure backwards
         compatibility, and reverted recent changes to
         JtaTransactionAnnotationParser and SpringTransactionAnnotationParser
         accordingly.
      
       - Documented internal AnnotatedElementUtils.Processor<T> interface.
      
       - Enabled failing tests and introduced
         findAnnotationAttributesFromBridgeMethod() test in
         AnnotatedElementUtilsTests.
      
       - Refactored ApplicationListenerMethodAdapter.getCondition() and
         enabled failing test in TransactionalEventListenerTests.
      
       - AnnotationUtils.isInterfaceWithAnnotatedMethods() is now package
         private.
      
      Issue: SPR-12738, SPR-11514, SPR-11598
      ad6bea1c
  19. 23 4月, 2015 2 次提交
    • S
      Support annotations on interfaces in AnnotatedElementUtils · 7f0f04df
      Sam Brannen 提交于
      This commit introduces support in AnnotatedElementUtils for finding
      annotations declared on interfaces at the type level.
      
      NB: this commit does not include support for finding annotations
      declared on interface methods.
      
      In order to maintain backward compatibility with @Transactional
      annotation attribute processing, a new getAnnotationAttributes() method
      has been added to AnnotatedElementUtils that provides a flag to control
      whether interfaces should be searched.
      SpringTransactionAnnotationParser and JtaTransactionAnnotationParser
      have been updated accordingly to ensure that interfaces are not
      unintentionally searched in the @Transactional resolution process.
      
      This commit also introduces additional tests and updates TODOs for
      SPR-12738.
      
      Issue: SPR-12944, SPR-12738
      7f0f04df
    • S
      9c6d4b78
  20. 22 4月, 2015 2 次提交
    • S
      Support n meta-annotation levels on methods in AnnotationUtils · b9b0b78f
      Sam Brannen 提交于
      Prior to this commit, the search algorithm used by the
      findAnnotation(Method, Class) method in AnnotationUtils only found
      direct annotations or direct meta-annotations (i.e., one level of
      meta-annotations).
      
      This commit reworks the search algorithm so that it supports arbitrary
      levels of meta-annotations on methods. To make this possible, a new
      findAnnotation(AnnotatedElement, Class) method has been introduced in
      AnnotationUtils.
      
      This fix also allows for the @Ignore'd tests in
      TransactionalEventListenerTests to be re-enabled.
      
      Issue: SPR-12941
      b9b0b78f
    • S
      Fix broken test in AnnotationUtilsTests · 666d1cec
      Sam Brannen 提交于
      666d1cec