Lukasz Lenart created WW-5654:
---------------------------------
Summary: Remove deprecated TypeConverterHolder mapping primitives
(getMapping, addMapping, containsNoMapping)
Key: WW-5654
URL: https://issues.apache.org/jira/browse/WW-5654
Project: Struts 2
Issue Type: Improvement
Components: Core
Affects Versions: 7.3.0
Reporter: Lukasz Lenart
Fix For: 8.0.0
Follow-up to WW-5539 (Concurrency performance enhancements, PR #1799).
WW-5539 added `TypeConverterHolder#computeMappingIfAbsent(Class, Function)` and
deprecated
the three check-then-act primitives it subsumes, marking them
`@Deprecated(since = "7.3.0", forRemoval = true)`. It also retained the
`StrutsTypeConverterHolder.unknownMappings` field as a deprecated, unused
vestige solely to
preserve binary compatibility (retyping it would have thrown `NoSuchFieldError`
for
subclasses compiled against an earlier version).
This ticket tracks their removal. Because dropping public SPI methods is a
binary-incompatible change, it targets the next major release (8.0.0).
To remove:
- `TypeConverterHolder#getMapping(Class)`
- `TypeConverterHolder#addMapping(Class, Map)`
- `TypeConverterHolder#containsNoMapping(Class)`
- `StrutsTypeConverterHolder` — the three corresponding overrides
- `StrutsTypeConverterHolder.unknownMappings` (deprecated `protected
HashSet<String>`
vestige; live storage already lives in the private `unknownMappingsInternal`
set)
Consequential work — this is not just deleting annotations:
- The `default` implementation of `computeMappingIfAbsent` on the interface is
written in
terms of the three primitives (it is the compatibility fallback for
third-party holders
that do not override the method). Once the primitives are gone that default
body no longer
compiles: either rewrite it without them, or make `computeMappingIfAbsent` an
abstract
method every implementation must provide.
- `XWorkConverter.conditionalReload` calls `addMapping` to force an
unconditional overwrite
on config reload — something `computeMappingIfAbsent` cannot express. A
replacement
primitive (e.g. `putMapping`/`replaceMapping`) or an alternative reload
mechanism must
exist before `addMapping` can be dropped.
- Remove the now-unnecessary `@SuppressWarnings({"deprecation", "removal"})`
from
`XWorkConverter.conditionalReload` and `@SuppressWarnings("removal")` from
the three
`StrutsTypeConverterHolder` overrides.
- Third-party `TypeConverterHolder` implementations that call or implement
these methods
will break — note this in the release notes / migration guide.
Migration: callers resolving a class-level converter mapping should use
`computeMappingIfAbsent(clazz, builder)`, which resolves and caches the result
— including
the negative (no-mapping) case — in a single call.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)