Commit Graph

399 Commits

Author SHA1 Message Date
Sam Brannen
6826bdd111 Document disabled test for hybrid annotation attribute overrides
This commit documents the @Ignore'd test to explain that Spring does not
support a hybrid approach for annotation attribute overrides with
transitive implicit aliases.

Issue: SPR-13554
2016-03-31 14:38:15 +02:00
Sam Brannen
fee056a1b1 Simplify search algorithms in AnnotatedElementUtils
This commit introduces a boolean alwaysProcesses() method in the
Processor API which allows for simplification across all search
algorithms within AnnotatedElementUtils.

Specifically, it is no longer necessary for process() methods to verify
that the supplied annotation is actually the sought target annotation.

In addition, duplicated code has been extracted into common methods
(e.g., hasMetaAnnotationTypes()) and common Processor implementations
(e.g., AlwaysTrueBooleanAnnotationProcessor).
2016-03-25 15:59:54 +01:00
Sam Brannen
46e0484bf8 Support searches for merged repeatable annotations with "get" semantics
This commit picks up where 2535469099 left off with added support for
"get" search semantics for merged repeatable annotations.

Specifically, this commit introduces a new
getMergedRepeatableAnnotations() method in AnnotatedElementUtils.

Issue: SPR-13973
2016-03-24 19:27:32 +01:00
Sam Brannen
8d0083ca96 Polishing 2016-03-24 19:27:32 +01:00
Juergen Hoeller
517ebd1d3e Consistent formatting 2016-03-24 19:22:50 +01:00
Sam Brannen
1ec35e9c62 Support searches for multiple merged annotations with "get" semantics
This commit picks up where a5139f3c66 left off with added support for
"get" search semantics for multiple merged annotations.

Specifically, this commit introduces a new getAllMergedAnnotations()
method in AnnotatedElementUtils.

Issue: SPR-13486
2016-03-24 14:46:56 +01:00
Sam Brannen
2535469099 Support repeatable annotations as composed annotations
Prior to this commit, AnnotationUtils supported searching for
repeatable annotations even if the repeatable annotation was declared
on a custom stereotype annotation. However, there was no support for
merging of attributes in composed repeatable annotations. In other
words, it was not possible for a custom annotation to override
attributes in a repeatable annotation.

This commit addresses this by introducing
findMergedRepeatableAnnotations() methods in AnnotatedElementUtils.
These new methods provide full support for explicit annotation
attribute overrides configured via @AliasFor (as well as
convention-based overrides) with "find semantics".

Issue: SPR-13973
2016-03-23 21:58:34 +01:00
Sam Brannen
a5139f3c66 Support searches for multiple merged composed annotations
Prior to this commit it was possible to search for the 1st merged
annotation above an annotated element. It was also possible to search
for annotation attributes aggregated from all annotations above an
annotated element; however, it was impossible to search for all
composed annotations above an annotated element and have the results as
synthesized merged annotations instead of a multi-map of attributes.

This commit introduces a new findAllMergedAnnotations() method in
AnnotatedElementUtils that finds all annotations of the specified type
within the annotation hierarchy above the supplied element. For each
such annotation found, it merges that annotation's attributes with
matching attributes from annotations in lower levels of the annotation
hierarchy and synthesizes the results back into an annotation of the
specified type. All such merged annotations are collected and returned
as a set.

Issue: SPR-13486
2016-03-20 19:18:11 +01:00
Sam Brannen
f1378aa376 Test status quo for finding multiple composed annotations
This commit introduces tests that verify the status quo for finding
multiple merged composed annotations on a single annotated element.

Issue: SPR-13486
2016-03-19 20:22:04 +01:00
Sam Brannen
d22480b0eb Ensure all aliased attributes in target annotation are overridden
Prior to this commit, it was possible that implicit aliases and
transitive implicit aliases (configured via @AliasFor) might not be
honored in certain circumstances, in particular if implicit aliases
were declared to override different attributes within an alias pair in
the target meta-annotation.

This commit addresses this issue by ensuring that all aliased
attributes in the target meta-annotation are overridden during the
merge process in AnnotatedElementUtils.

In addition, concrete default values for attributes in a
meta-annotation declaration can now be effectively shadowed by
transitive implicit aliases in composed annotations.

Issue: SPR-14069
2016-03-19 16:42:56 +01:00
Juergen Hoeller
1ca4340271 NumberUtils consistently raises overflow exception for BigInteger/BigDecimal input
Issue: SPR-14041
2016-03-18 18:51:41 +01:00
Sam Brannen
2153d88706 Add TODO in AnnotatedElementUtilsTests
Issue: SPR-14069
2016-03-18 15:29:25 +01:00
Sam Brannen
856da8e395 Introduce tests for transitive aliases with implied attribute names 2016-03-17 20:53:52 +01:00
Stephane Nicoll
f422e490b0 Polish contribution
Issue: SPR-14039 - Closes gh-998
2016-03-16 17:00:00 +01:00
Yanming Zhou
1a302e1fac Add converters between Enum and Integer 2016-03-16 17:00:00 +01:00
Sam Brannen
eb654dc177 Allow single element to override array in synthesized annotation
This commit picks up where 8ff9e818a5
left off.

Specifically, this commit introduces support that allows a single
element attribute to override an array attribute with a matching
component type when synthesizing annotations (e.g., in annotations
synthesized from attributes that have been merged from the annotation
hierarchy above a composed annotation).

Issue: SPR-13972
2016-03-07 15:22:27 +01:00
Juergen Hoeller
7a32ce317c LinkedCaseInsensitiveMap provides reliable getOrDefault implementation
Issue: SPR-13981
2016-02-25 21:42:11 +01:00
Juergen Hoeller
8ff9e818a5 Allow for a single element overriding an array attribute in a meta-annotation
Includes refinements for consistent quoting of names in exception messages.

Issue: SPR-13972
2016-02-22 23:24:30 +01:00
Phillip Webb
d8a05592e2 Allow package private classes in spring.factories
Update SpringFactoriesLoader so that package private classes can be
used.

Issue: SPR-13969
2016-02-22 10:01:35 -08:00
mnhock
e98977cbc8 Fix Format-string method arguments
Closes gh-934
2016-02-20 09:01:54 +01:00
Phillip Webb
c4117885bd Refine AntPathMatcher optimizations
Refine the optimizations made in 6f55ab69 in order to restore binary
compatibility and resolve a regression.

Tests of the form pathMatcher.match("/foo/bar/**", "/foo/bar") should
return true as this was the behavior in Spring 4.2.

Issue: SPR-13913
2016-02-18 18:49:58 -08:00
soldierkam
e77ff3c991 Improve AntPathMatcher matching performance
This commit speeds up the AntPathMatcher implementation by
pre-processing patterns and checking that candidates are likely
matches if they start with the static prefix of the pattern.

Those changes can result in a small performance penalty for positive
matches, but with a significant boost for checking candidates that don't
match. Overall, this tradeoff is acceptable since this feature is often
used to select a few matching patterns in a much bigger list.

This will lead to small but consistent performance improvements in
Spring MVC when matching a given request with the available routes.

Issue: SPR-13913
2016-02-10 11:39:38 +01:00
Juergen Hoeller
74c07d3085 Removed JavaVersion checks from spring-core tests (for JDK 9 compatibility)
Issue: SPR-13344
2016-01-15 17:45:37 +01:00
Juergen Hoeller
3242ad8fc4 @AliasFor attribute name defaults to declaring attribute
Issue: SPR-13828
2015-12-29 17:58:57 +01:00
Juergen Hoeller
95d62658ff SystemEnvironmentPropertySource replaces hyphens in property names as well
Issue: SPR-13594
2015-12-22 16:18:13 +01:00
Juergen Hoeller
f8860e2938 SimpleNamespaceContext implements all subtleties of the NamespaceContext contract
Issue: SPR-13713
2015-12-21 20:37:44 +01:00
Juergen Hoeller
64bd8b7f34 Polishing 2015-12-18 22:19:03 +01:00
Juergen Hoeller
387c8a8181 Differentiate between TypeDescriptors with same annotations but different attributes
Issue: SPR-13714
2015-12-18 22:10:50 +01:00
Sam Brannen
5b3edcd9f9 Spring Cleaning in December
- Delete unused imports
- Delete unused code
- Clean up warnings
2015-12-17 20:27:33 +01:00
Gary Russell
14fc6c2a99 SPR-13784: Base64Utils: URL/File Safe Alphabet
JIRA: https://jira.spring.io/browse/SPR-13784

JDK8 and Apache Commons Codec support the RFC 4648
"URL and Filename Safe" Base64 alphabet.

Add methods to `Base64Utils` to support this feature.
2015-12-11 14:55:15 -05:00
Juergen Hoeller
d0814703c4 AnnotationUtils.synthesizeAnnotation explicitly checks whether SynthesizedAnnotation is exposable
Issue: SPR-13696
2015-12-07 17:36:14 +01:00
Juergen Hoeller
4755467cca Polishing 2015-11-30 12:36:30 +01:00
Juergen Hoeller
3234d9ede3 ObjectToObjectConverter caches detected methods/constructors
Includes polishing of related conversion exception messages.

Issue: SPR-13703
2015-11-29 22:17:16 +01:00
Juergen Hoeller
c88877f1c4 Polishing 2015-11-05 16:35:20 +01:00
Juergen Hoeller
9683da52b2 Avoid annotation synthesizing for getAnnotationAttributes retrieval
Issue: SPR-13621
2015-11-05 16:35:07 +01:00
Juergen Hoeller
2ba5cb2734 Polishing 2015-11-05 12:30:29 +01:00
Juergen Hoeller
23c8f712c4 Polishing 2015-11-02 21:30:03 +01:00
Sam Brannen
c2bc2b27ea Suppress varargs warnings when compiling tests w/ Gradle 2015-10-14 02:00:08 +03:00
Juergen Hoeller
1c3a668370 AbstractFileResolvingResource uses extractArchiveURL for last-modified check
Issue: SPR-13393
(cherry picked from commit 302a069)
2015-10-13 20:47:29 +02:00
Juergen Hoeller
155bbf5057 ResourceUtils supports Tomcat's "war🫙" URL format
Issue: SPR-13393
2015-10-13 14:36:00 +02:00
Sam Brannen
1a227da19e Polish AnnotatedElementUtilsTests 2015-10-09 22:51:27 +02:00
Sam Brannen
5e1d6e47a9 Introduced failing, @Ignored test for SPR-13554
Issue: SPR-13554
2015-10-09 22:23:49 +02:00
Juergen Hoeller
9cf28950e5 PathResourceTests defensively compares last-modified timestamps at seconds precision
Issue: SPR-13542
2015-10-06 13:25:27 +02:00
Sam Brannen
d5ee787e1e Migrate JUnit 3 tests to JUnit 4
This commit migrates all remaining tests from JUnit 3 to JUnit 4, with
the exception of Spring's legacy JUnit 3.8 based testing framework that
is still in use in the spring-orm module.

Issue: SPR-13514
2015-09-27 21:17:51 +02:00
Juergen Hoeller
a6a6aed17f StopWatch provides getId/currentTaskName accessors (plus further fine-tuning)
Issue: SPR-13509
2015-09-25 15:23:39 +02:00
Sam Brannen
2a6716d380 Support transitive implicit attribute aliases with @AliasFor
This commit picks up where 3eacb837c2
(SPR-13345) left off by adding support for transitive implicit aliases
configured via @AliasFor.

Issue: SPR-13405
2015-08-31 15:46:12 +02:00
Sam Brannen
d40a35ba5c Support implicit attribute aliases with @AliasFor
Spring Framework 4.2 introduced support for aliases between annotation
attributes that fall into the following two categories.

1) Alias pairs: two attributes in the same annotation that use
   @AliasFor to declare that they are explicit aliases for each other.
2) Meta-annotation attribute overrides: an attribute in one annotation
   uses @AliasFor to declare that it is an explicit override of an
   attribute in a meta-annotation.

However, the existing functionality fails to support the case where two
attributes in the same annotation both use @AliasFor to declare that
they are both explicit overrides of the same attribute in the same
meta-annotation. In such scenarios, one would intuitively assume that
two such attributes would be treated as "implicit" aliases for each
other, analogous to the existing support for explicit alias pairs.
Furthermore, an annotation may potentially declare multiple aliases
that are effectively a set of implicit aliases for each other.

This commit introduces support for implicit aliases configured via
@AliasFor through an extensive overhaul of the support for alias
lookups, validation, etc. Specifically, this commit includes the
following.

- Introduced isAnnotationMetaPresent() in AnnotationUtils.

- Introduced private AliasDescriptor class in AnnotationUtils in order
  to encapsulate the parsing, validation, and comparison of both
  explicit and implicit aliases configured via @AliasFor.

- Switched from single values for alias names to lists of alias names.

- Renamed getAliasedAttributeName() to getAliasedAttributeNames() in
  AnnotationUtils.

- Converted alias map to contain lists of aliases in AnnotationUtils.

- Refactored the following to support multiple implicit aliases:
  getRequiredAttributeWithAlias() in AnnotationAttributes,
  AbstractAliasAwareAnnotationAttributeExtractor,
  MapAnnotationAttributeExtractor, MergedAnnotationAttributesProcessor
  in AnnotatedElementUtils, and postProcessAnnotationAttributes() in
  AnnotationUtils.

- Introduced numerous tests for implicit alias support, including
  AbstractAliasAwareAnnotationAttributeExtractorTestCase,
  DefaultAnnotationAttributeExtractorTests, and
  MapAnnotationAttributeExtractorTests.

- Updated Javadoc in @AliasFor regarding implicit aliases and in
  AnnotationUtils regarding "meta-present".

Issue: SPR-13345
2015-08-28 18:56:17 +02:00
Sam Brannen
8af0151f1b Suppress recent deprecation warnings in tests 2015-08-27 17:57:50 +02:00
Sam Brannen
6085be3a71 Assert status quo for finding annotations on bridged methods 2015-08-22 16:49:12 +02:00
Sam Brannen
a3e7848a30 Clean up warnings and tests in spring-core 2015-08-20 15:49:33 +02:00