Commit Graph

2432 Commits (142a38f350c017253be12a8d7349d5129c6519ce)

Author SHA1 Message Date
Stephane Nicoll ce169c4d51 Allow to customize how EntityScanner scans entities
This commit adds a protected method that lets an override customize the
configuration of the ClassPathScanningCandidateComponentProvider used
to scan entities.

Closes gh-23154
4 years ago
Andy Wilkinson 84a12c8436 Upgrade to Testcontainers 1.14.3
Closes gh-23122
4 years ago
Stephane Nicoll 674ad85cdb Polish "Add support for RabbitMQ's addressShuffleMode property"
See gh-23091
4 years ago
Jonghan Kim 4b77e2e205 Add support for RabbitMQ's addressShuffleMode property
See gh-23091
4 years ago
Johnny Lim e48af31ced Polish
See gh-23081
4 years ago
Stephane Nicoll 28b938a229 Merge branch '2.3.x'
Closes gh-23088
4 years ago
dreis2211 d8ba7dd4d0 Remove unused methods
See gh-23086
4 years ago
Andy Wilkinson e9ab269b3b Polish "Add a configuration property for KLC's idleBetweenPolls"
See gh-23048
4 years ago
hoaphan 03a8937d5c Add a configuration property for KLC's idleBetweenPolls
See gh-23048
4 years ago
Stephane Nicoll 085091dbe3 Adapt auto-configurations to back-off in presence of TransactionManager
Previous to this commit, an auto-configuration would create a
PlatformTransactionManager if none is present and others conditions are
met. Spring Framework now has the notion of TransactionManager, a parent
interface that gathers both PlatformTransactionManager and
ReactiveTransactionManager.

Spring Boot should not be in a situation where both managers are defined
out-of-the-box. This commit makes sure to back-off if any
TransactionManager is available.

Closes gh-22851
4 years ago
Stephane Nicoll f191b7513d Polish 4 years ago
Andy Wilkinson 7a5392d6bd Polish 4 years ago
Stephane Nicoll 640000c0bb Disable file system preference for Freemarker templates
Previously to this commit, a project that has several classpath
locations matching the template path may lead to some of those
locations to be ignored if one of them is a directory. This can easily
happen if you run your tests in your IDE.

This commit changes the default of "preferFileSystemAccess" to
false so that the complete classpath is always considered.

Closes gh-23051
4 years ago
Stephane Nicoll deee3606c3 Merge branch '2.3.x'
Closes gh-23064
4 years ago
Stephane Nicoll 0374ed2a0c Merge branch '2.2.x' into 2.3.x
Closes gh-23063
4 years ago
Stephane Nicoll 5b0f22e8fe Fix unintended import on commons lang
Closes gh-23059
4 years ago
Stephane Nicoll aed49c0631 Add configuration option for GridFsTemplate's bucket
Closes gh-22854
4 years ago
Phillip Webb ea8762c484 Update copyright year of changed files 4 years ago
Phillip Webb 2fb08ca48f Merge branch '2.3.x' 4 years ago
Phillip Webb 15a0cbc96b Update copyright year of changed files 4 years ago
Scott Frederick b7fdf8fe87 Preserve user-provided values in MongoClientSettings
Prior to this commit, values from MongoProperties would always
overwrite matching fields in MongoClientSettings. This commit
preserves all values in MongoClientSettings if the client app
provides the MongoClientSettings bean, and only overwrites from
MongoProperties if no MongoClientSettings bean is provided.

Fixes gh-22321
4 years ago
Stephane Nicoll 8c0318edc7 Polish "Consider RecordFilterStrategy in Kafka auto-configuration"
See gh-22973
4 years ago
anshlykov f68dfde35e Consider RecordFilterStrategy in Kafka auto-configuration
See gh-22973
4 years ago
Madhura Bhave bbbbe8e4d2 Make security auto-configs back off when SecurityFilterChain present
Closes gh-22739
4 years ago
Stephane Nicoll d4ba55f8d6 Do not configure a ReactiveNeo4jTransactionManager
The current arrangement with Neo4j does not allow us to know for sure
that the user intends to use `@Transactional` for reactive or imperative
operations.

The main reason for that is that the only trigger for the reactive
auto-configuration is the presence of reactor on the classpath given
that the Neo4j driver ships with both styles in the same jar. And
reactor can be on the classpath for a number of reasons that are
unrelated to imperative access (typically `WebClient`).

This commits removes the auto-configuration of the
ReactiveNeo4jAutoConfiguration and makes sure that if the user defines
one, the regular `PlatformTransactionManager` backs off. This is
a temporarily situation until we can provide a better signal that the
user intends to primarily use imperative repositories.

Closes gh-22940
4 years ago
Andy Wilkinson 4398c71d12 Merge branch '2.3.x'
Closes gh-22938
4 years ago
Andy Wilkinson 8c4e6f766c Revert "Merge pull request #21060 from dsyer"
This reverts commit 6547ea56f9, reversing
changes made to e9e4a34e62.

Fixes gh-22039
4 years ago
Stephane Nicoll 947e484001 Merge branch '2.3.x'
Closes gh-22928
4 years ago
Stephane Nicoll d0662e824a Fix default value of server.jetty.accesslog.format
Closes gh-22921
4 years ago
Stephane Nicoll 25e08d2dee Restore handling of certain spring.data.neo4j.* properties
This commit switches the deprecation level of several properties in the
spring.data.neo4j namespace from error and warning. The server URI and
basic authentication can be used in a deprecated fashion to configure
the new neo4j driver.

Closes gh-22653
4 years ago
Phillip Webb 7838c7b072 Polish 'Support ConfigurationClassPostProcessor supplier'
See gh-22858
4 years ago
Dave Syer 06eff45a71 Support ConfigurationClassPostProcessor supplier
Update `SharedMetadataReaderFactoryContextInitializer` to optionally
support a `ConfigurationClassPostProcessor` provided via an instance
`Supplier`.

If the instance supplier is available then we can use that to set the
`MetadataReaderFactory` non-reflectively, instead of using a
`PropertyValue` (and the `BeanWrapper` eventually).

The previous behavior is left as a  fallback and without a change in
Spring Framework will continue to be the default for most applications.

See gh-22858
4 years ago
Andy Wilkinson abf6123bae Upgrade to Kafka 2.5.1
Closes gh-22868
4 years ago
Stephane Nicoll 5bd69fcd61 Merge branch '2.3.x'
Closes gh-22874
4 years ago
Stephane Nicoll dc4de06b35 Restore customization of the Couchbase cache manager
With the upgrade to the new Couchbase SDK and the related changes in
Spring Data Couchbase, CacheManagerCustomizer can no longer be used to
customize the Couchbase cache manager as it is an immutable class.

This commit introduces a dedicated callback for the
CouchbaseCacheManagerBuilder that is used by the auto-configuration and
update the documentation to refer to it with a sample usage.

Closes gh-22573
4 years ago
Andy Wilkinson ca93c8da94 Merge branch '2.3.x'
Closes gh-22856
4 years ago
Andy Wilkinson 1270af90c2 Only enable full path optimization when there's one DispatcherServlet
Previously, UrlPathHelper's full path optimization was enabled when
there was a dispatcher servlet mapped to /. The UrlPathHelper is used
across Spring MVC and if there are multiple dispatcher servlets they
all share the sample UrlPathHelper. This meant that any additional
dispatcher servlets mapping to locations other than / would not be able
to map requests correctly as the UrlPathHelper would use the full path,
ignoring the url mapping of the dispatcher servlet.

This commit updates the MVC auto-configuration so that use of the full
path is only enabled if there's a single dispatcher servlet
registration.

Fixes gh-22682
4 years ago
Andy Wilkinson 969dd35e45 Upgrade to Mockito 3.4.6
Closes gh-22838
4 years ago
Andy Wilkinson 4933b2688f Align with changes in latest Integration snapshots
See gh-22729
4 years ago
Phillip Webb f7f4ff0ac9 Update copyright year of changed files 4 years ago
Stephane Nicoll dac63fc3e5 Polish 4 years ago
Brian Clozel 4ef08425e6 Require RSocket 1.0+
This commit removes usage of methods and classes that were previously
deprecated in RSocket and Spring Framework and have been removed.

Closes gh-22764
4 years ago
Madhura Bhave f0ef47dfad Fix additional deprecations 4 years ago
Madhura Bhave 0d79bd08a6 Fix deprecations 4 years ago
Stephane Nicoll 516582f6d3 Merge branch '2.3.x'
Closes gh-22744
4 years ago
Stephane Nicoll 621f026499 Polish "Support configuration of entityId for a SAML Relying Party"
See gh-22258
4 years ago
Danilo Piazzalunga 5352ec1cba Support configuration of entityId for a SAML Relying Party
See gh-22258
4 years ago
Stephane Nicoll 589669d0cc Polish "Add support for selecting the Redis client to use"
See gh-22569
4 years ago
bono007 ac651442fa Add support for selecting the Redis client to use
See gh-22569
4 years ago
Andy Wilkinson bc44cd6705 Polish 4 years ago
Andy Wilkinson 7f53aef568 Upgrade to Kafka 2.6.0
Closes gh-22731
4 years ago
Stephane Nicoll 903dc93887 Polish "Add option to disable Redis Cluster dynamic sources refresh"
See gh-22571
4 years ago
bono007 3cfde51a8c Add option to disable Redis Cluster dynamic sources refresh
This commit adds an option to enable/disable the DynamicRefreshSources
setting on the Lettuce cluster toplogy refresh options.

See gh-22571
4 years ago
Stephane Nicoll 36fb86a110 Update to core r2dbc support
This commit adapts the auto-configuration for the new core r2dbc support
in Spring Framework and provides auto-configuration for
R2dbcEntityOperations.

Closes gh-22708
4 years ago
Brian Clozel 3354e0f030 Upgrade to Spring Security 5.4.0-SNAPSHOT
See gh-22668
4 years ago
Brian Clozel 94148e9b54 Upgrade to Couchbase Java Client 3.0.7
Closes gh-22688
4 years ago
Brian Clozel fb1234a22c Upgrade to Reactor 2020.0.0 SNAPSHOTs
See gh-22667
4 years ago
dreis2211 e49e2dfff1 Use Supplier variants of Assert methods
See gh-22699
4 years ago
Stephane Nicoll 9bc71fe44f Polish "Upgrade to Spring Data Neo4j 6"
See gh-22299
4 years ago
Gerrit Meier 15cd343737 Upgrade to Spring Data Neo4j 6
See gh-22299
4 years ago
Stephane Nicoll 5777aa5615 Start building against Spring Data 2020.0.0 snapshots
See gh-22647
4 years ago
Andy Wilkinson 3b54fe20a8 Merge branch '2.3.x'
Closes gh-22642
4 years ago
Andy Wilkinson a580e3a370 Merge branch '2.2.x' into 2.3.x
Closes gh-22641
4 years ago
Andy Wilkinson 72551242fd Allow XADataSource auto-config with no spring.datasource properties
Fixes gh-20229
4 years ago
Brian Clozel 6f2098ad71 Upgrade to Spring Framework 5.3.0-SNAPSHOT
This commit also switches to RSocket SNAPSHOTs and updates the
repository configuration to rely on "libs-snapshot", since the RSocket
SNAPSHOTs are mirrored there.

See gh-22640
4 years ago
Stephane Nicoll 8c418adb9b Polish "Add auto-configuration for Neo4j driver"
See gh-22301
4 years ago
Gerrit Meier 6134ff19f9 Add auto-configuration for Neo4j driver
This commit adds the support for creating a managed instance of the
Neo4j Java driver. The low-level support for Neo4j is helpful in
situations where the high-level abstraction of Spring Data Neo4j is not
needed.

See gh-22301
4 years ago
Andy Wilkinson 4827e84a12 Merge branch '2.3.x'
Closes gh-22581
4 years ago
Andy Wilkinson d0c75aef19 Merge branch '2.2.x' into 2.3.x
Closes gh-22580
4 years ago
Andy Wilkinson 16eaae0b2f Defer background pre-init till the environment is prepared
Previously, background pre-init was started in response to the
application starting event. This meant that it would be running while
the logging turbo filter was in place and was rejecting all logging.
As a result, any logging performed during pre-init would be lost.

This commit changes background pre-init so that it is now started
in response to the application environment prepared event. By this
point, the logging turbo filter has been removed as the logging levels
have been configured from the environment.

Closes gh-21897
4 years ago
Andy Wilkinson 3444a23765 Merge branch '2.3.x'
Closes gh-22579
4 years ago
Andy Wilkinson f0d90020e5 Merge branch '2.2.x' into 2.3.x
Closes gh-22578
4 years ago
Andy Wilkinson b98c3dccfd Fix property-based configuration of Undertow socket options
Previously, only UndertowOptions was used as the source of options for
both server and socket options, but it only contains server options.
As a result, attempting to configure any socket options defined by
XNIO's Options class would fail.

This commit updates the property-based configuration of options to use
UndertowOptions as the source for server options and XNIO's Options as
the source for socket options.

Fixes gh-22502
4 years ago
Stephane Nicoll 85ed16de13 Merge branch '2.3.x'
Closes gh-22568
4 years ago
Stephane Nicoll 6b32e62142 Fix CacheAutoConfiguration relative order for Couchbase
This commit fixes the auto-configuration of the Couchbase caching
support by configuring the cache once Spring Data Couchbase has gotten
a chance to be processed.

Closes gh-22542
4 years ago
izeye 6eba7c5f10 Polish
See gh-22549
4 years ago
Andy Wilkinson 793d266b7e Merge branch '2.3.x'
Closes gh-22546
4 years ago
Andy Wilkinson c605a6e34b Override other variant of registerBeanDefintions
Fixes gh-22480
4 years ago
Phillip Webb 14c1b0938a Polish 4 years ago
Phillip Webb da69286838 Merge branch '2.3.x' 4 years ago
Phillip Webb 187d3af7fc Update copyright year of changed files 4 years ago
Phillip Webb 217b2eff89 Merge branch '2.2.x' into 2.3.x 4 years ago
Phillip Webb b5e70157dc Update copyright year of changed files 4 years ago
Andy Wilkinson f88038f00d Upgrade to Couchbase Client 3.0.6
Closes gh-22456
4 years ago
Sébastien Deleuze 66bf684eb6 Ignore BackgroundPreinitializer in native images
BackgroundPreinitializer is not relevant in native images so it is
better to ignore it automatically in order to reduce the footprint
in such environment.

See gh-22392
4 years ago
Andy Wilkinson 85828953bd Perform enablement checks once in BackgroundPreinitializer
Closes gh-22406
4 years ago
Andy Wilkinson 0e8bf94289 Polish "Add properties for Netty HttpDecoderSpec"
See gh-22367
4 years ago
Julien Eyraud f068f9fc52 Add properties for Netty HttpDecoderSpec
See gh-22367
4 years ago
Stephane Nicoll 0cd83007e9 Merge branch '2.3.x'
Closes gh-22357
4 years ago
dreis2211 267283e3cd Handle null items as advertized in the Javadoc
See gh-22344
4 years ago
Andy Wilkinson 18a3459dc3 Polish "Avoid using reflection when configuring Tomcat listener"
See gh-22329
4 years ago
Filip Hanik be7048b58f Avoid using reflection when configuring Tomcat listener
This benefits native image building and AOT compilation,
as reflection requires manual configuration.

See gh-22329
4 years ago
Andy Wilkinson 177b3918ee Merge branch '2.3.x'
Closes gh-22340
4 years ago
Andy Wilkinson 259ea65388 Merge branch '2.2.x' into 2.3.x
Closes gh-22339
4 years ago
Andy Wilkinson d9882f2c88 Clarify the effects of ordering auto-configuration classes
Closes gh-22337
4 years ago
Andy Wilkinson 8abcb1b125 Polish 4 years ago
Andy Wilkinson c9eead31d1 Avoid reflection when creating manual RootBeanDefinitions
Closes gh-22318
4 years ago
Stephane Nicoll fe39a91290 Merge branch '2.3.x'
Closes gh-22331
4 years ago
dreis2211 de30e5c6ac Avoid unnecessary allocations in ConditionMessage for NORMAL style
See gh-22330
4 years ago
Stephane Nicoll 3ceae84176 Merge branch '2.3.x' 4 years ago
Stephane Nicoll 603e65a629 Polish 4 years ago
Stephane Nicoll c8b67becce Polish "Add additional properties to configure R2DBC pool"
See gh-21219
4 years ago
Rodolpho Couto 0d41596a42 Add additional properties to configure R2DBC pool
See gh-21219
4 years ago
Andy Wilkinson 2642b04073 Merge branch '2.3.x'
Closes gh-22327
4 years ago
dreis2211 60e7146326 Reduce started threads in OnClassCondition
Prior to this commit, OnClassCondition started a thread even if the number of
passed autoconfiguration class candidates never exceeded 1. This commit only
starts a thread if there is actually work to split in half.

See gh-22294
4 years ago
Andy Wilkinson 2af550ef73 Avoid using reflection with manual bean definitions
Closes gh-22318
4 years ago
Brian Clozel 0f264b68e8 Add option to configure PathPatternParser
As of Spring Framework 5.3, it is now possible to use `PathPatternParser`
to parse and match request mapping path patterns, as an alternative to
the current default `AntPathMatcher`.

This new implementation has been used for a while in Spring WebFlux and
it’s been designed for consistency and performance.

This commit introduces a new configuration property for opting-in this
new variant:

`spring.mvc.pathmatch.matching-strategy=path_pattern_parser`

The default option is still `ant_path_matcher` for now, but we might
change the default in future versions since Spring Framework considers
it the best choice for modern applications.

There are several behavior differences with this new variant:

* double wildcards `"**"` are rejected when used in the middle patterns,
this is only allowed as the last matching segment in a pattern.

* it is incompatible with some path matching options, like
suffix-pattern, registered-suffix-pattern or configuring a Servlet
prefix on the `DispatcherServlet` (`spring.mvc.servlet.path=/test`)

This commit introduces two `FailureAnalyzer` implementations to guide
developers when facing those issues.

Closes gh-21694
4 years ago
Andy Wilkinson 553d58a234 Merge branch '2.3.x'
Closes gh-22283
4 years ago
Andy Wilkinson c765df6e5d Merge branch '2.2.x' into 2.3.x
Closes gh-22282
4 years ago
Andy Wilkinson afa5b12bdb Make reactive Jetty auto-config back off without jetty-servlet
Fixes gh-22275
4 years ago
Scott Frederick 6b7640ba2e Merge branch '2.3.x'
Closes gh-22272
4 years ago
Scott Frederick 1e2176b6c9 Improve Redis URL validation
This commit improves the validation of URLs provided in the property
'spring.redis.url' used to auto-configure a Spring Data Redis
connection. In particular, only the URL schemes 'redis://' and
'rediss://' are allowed, and any other scheme will result in a
configuration error. A failure analyzer is also provided to improve
diagnostics for common mis-configurations detected by this validation.

Fixes gh-21999
4 years ago
Andy Wilkinson 3e33b6c854 Merge branch '2.3.x'
Closes gh-22263
4 years ago
Andy Wilkinson 502ccb6586 Honor spring.autoconfigure.exclude in test slices
Previously, the import selector for `@ImportAutoConfiguration` did not
consider the spring.autoconfigure.exclude property when determining
which auto-configurations to exclude. This meant that tests using a
slice that included a particular auto-configuration would include it
even if the application's configuration excluded it via
spring.autoconfigure.exclude. Confusingly, this could result in a
sliced test using an auto-configuration that would be excluded in a
broader `@SpringBootTest`.

This commit updates the ImportAutoConfigurationImportSelector to
consider the spring.autoconfigure.exclude property so that sliced tests
will use a subset of the auto-configurations that a `@SpringBootTest`
would use.

Fixes gh-21736
4 years ago
Johnny Lim df34d26f4f Replace ReflectionUtils with AssertJ's extracting()
See gh-22261
4 years ago
Andy Wilkinson 9894be8f1e Merge branch '2.3.x'
Closes gh-22255
4 years ago
Andy Wilkinson 0af8c35428 Auto-configure Rabbit CF with credentials provider and refresh service
Closes gh-22016
4 years ago
Andy Wilkinson 1b85ce0769 Streamline OAuth2 resource server auto-config class conditions
Fixes gh-22233
4 years ago
Andy Wilkinson 247fd59422 Merge branch '2.3.x'
Closes gh-22252
4 years ago
Andy Wilkinson b8bc219b25 Merge branch '2.2.x' into 2.3.x
Closes gh-22251
4 years ago
Andy Wilkinson 4e79bb1cff Disable bean method proxying in SpringBootJdbcConfiguration
Closes gh-22231
4 years ago
dreis2211 507eb9498b Use Class.getDeclaredConstructor().newInstance()
See gh-21913
4 years ago
Andy Wilkinson fbfb7df3e1 Merge branch '2.3.x'
Closes gh-22247
4 years ago
Andy Wilkinson 24e1a1dddf Merge branch '2.2.x' into 2.3.x
Closes gh-22246
4 years ago
Andy Wilkinson a8d3f9af31 Polish "Rename NoneOfNestedConditions to NoneNestedConditions in example docs"
See gh-22207
4 years ago
Clayton Walker 7fee70a625 Rename NoneOfNestedConditions to NoneNestedConditions in example docs
See gh-22207
4 years ago
XenoAmess 7c73ed69e1 Use valueOf rather than parseInt as result is assigned to an int
See gh-22209
4 years ago
XenoAmess 90d8480ffe Use new ArrayList(Collection) rather than new, iterate, and add
See gh-22210
4 years ago
Andy Wilkinson aca609c4c5 Merge branch '2.3.x'
Closes gh-22235
4 years ago
Andy Wilkinson 2007490ce7 Merge branch '2.2.x' into 2.3.x
Closes gh-22234
4 years ago
Andy Wilkinson 4301580095 Improve testing of PropertyPlaceholderAutoConfiguration
Since Spring Framework 4.3.0.RC2, a default embedded value resolver
has been registered with the bean factory when one is not otherwise
configured. This meant that placeholders in `@Value` would be resolved
with or without PropertyPlaceholderAutoConfiguration defining a
PropertySourcesPlaceholderConfigurer bean. However, placeholders in
bean definitions would only be resolved if a
PropertySourcesPlaceholderConfigurer was defined.

This commit updates PropertyPlaceholderAutoConfigurationTests to align
with this change in Framework. We now test that placeholders are
resolved in `@Value` annotations with or without the auto-configuration
and that placeholders in bean definitions are only resolved with the
auto-configured.

Closes gh-22230
4 years ago
Andy Wilkinson ecc50d179d Merge branch '2.3.x'
Closes gh-22198
4 years ago
Andy Wilkinson f6b3666b16 Merge branch '2.2.x' into 2.3.x
Closes gh-22197
4 years ago
Andy Wilkinson 21453b5016 Ignore scoped targets when finding matching beans
Fixes gh-22038
4 years ago
Andy Wilkinson 81d6751ba7 Use ApplicationContextRunner in ConditionalOnSingleCandidateTests 4 years ago
Andy Wilkinson d85774ea77 Merge branch '2.3.x'
Closes gh-22196
4 years ago
Eddú Meléndez 54e0a61b42 Reinstate metrics for Kafka Streams
See gh-21921
4 years ago
Andy Wilkinson 8c341df73b Polish "Add properties to control exceptions ignored by LdapTemplate"
See gh-21289
4 years ago
Filip Hrisafov 6853320661 Add properties to control exceptions ignored by LdapTemplate
See gh-21289
4 years ago
Andy Wilkinson 568f41e8e2 Merge branch '2.3.x'
Closes gh-22176
4 years ago
Andy Wilkinson 0e1ded6893 Merge branch '2.2.x' into 2.3.x
Closes gh-22175
4 years ago
dreis2211 8c0e302f2e Accept empty filter dispatcher types in auto-configurations
Prior to this commit, the usage of EnumSet.copyOf resulted in exceptions when
the underlying collection was empty.

See gh-22138
4 years ago
Andy Wilkinson 6da52a0d08 Suggest iso-offset as value for WebFlux time and date-time properties
Closes gh-22174
4 years ago
Andy Wilkinson 9230ea4ab7 Polish "Support iso-offset for date-time and time formatting with MVC"
See gh-21630
4 years ago
Gaurav Pareek c3b1172aea Support iso-offset for date-time and time formatting with MVC
See gh-21630
4 years ago
Andy Wilkinson bb1a0ffbd5 Merge branch '2.3.x'
Closes gh-22173
4 years ago
Andy Wilkinson 4566ac5c25 Add package info to o.s.b.autoconfigure.elasticsearch.rest
Closes gh-22147
4 years ago
Andy Wilkinson 27c458ca26 Merge branch '2.3.x'
Closes gh-22160
4 years ago
Andy Wilkinson f86831da9c Use TCCL at time of access for resource loading
Fixes gh-22119
4 years ago
Kedar Joshi 6c29b29bd5 Upgrade to Flyway 6.5.0 and support createSchemas
See gh-22120
4 years ago