This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch WW-3871-typeconversion-key-derivation in repository https://gitbox.apache.org/repos/asf/struts.git
commit 43d7e9b6b37a012846bcc52a3ce42a2651564cd5 Author: Lukasz Lenart <[email protected]> AuthorDate: Sat Jul 25 15:13:20 2026 +0200 WW-3871 refactor(core): split addConverterMapping into per-source passes --- .../struts2/conversion/impl/XWorkConverter.java | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/conversion/impl/XWorkConverter.java b/core/src/main/java/org/apache/struts2/conversion/impl/XWorkConverter.java index 5579a15d3..8685e9d71 100644 --- a/core/src/main/java/org/apache/struts2/conversion/impl/XWorkConverter.java +++ b/core/src/main/java/org/apache/struts2/conversion/impl/XWorkConverter.java @@ -498,10 +498,16 @@ public class XWorkConverter extends DefaultTypeConverter { String converterFilename = buildConverterFilename(clazz); fileProcessor.process(mapping, clazz, converterFilename); - // Process annotations - Annotation[] annotations = clazz.getAnnotations(); + processClassLevelAnnotations(mapping, clazz); + processMethodAnnotations(mapping, clazz); + } - for (Annotation annotation : annotations) { + /** + * Registers the {@link TypeConversion} entries declared by a class level {@link Conversion} + * annotation. + */ + private void processClassLevelAnnotations(Map<String, Object> mapping, Class clazz) { + for (Annotation annotation : clazz.getAnnotations()) { if (annotation instanceof Conversion conversion) { for (TypeConversion tc : conversion.conversions()) { if (mapping.containsKey(tc.key())) { @@ -518,11 +524,14 @@ public class XWorkConverter extends DefaultTypeConverter { } } } + } - // Process annotated methods + /** + * Registers {@link TypeConversion} annotations found on the class' methods. + */ + private void processMethodAnnotations(Map<String, Object> mapping, Class clazz) { for (Method method : clazz.getMethods()) { - annotations = method.getAnnotations(); - for (Annotation annotation : annotations) { + for (Annotation annotation : method.getAnnotations()) { if (annotation instanceof TypeConversion tc) { String key = tc.key(); // Default to the property name with prefix
