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

Reply via email to