Lukasz Lenart created WW-5817:
---------------------------------

             Summary: Reduce duplication across the range validator annotations 
and their configuration builder methods
                 Key: WW-5817
                 URL: https://issues.apache.org/jira/browse/WW-5817
             Project: Struts 2
          Issue Type: Improvement
          Components: Annotations
            Reporter: Lukasz Lenart


SonarCloud flags duplicated code in the range validators (8.7% duplicated lines 
on new code in apache/struts#2060, WW-5816).

h2. What is duplicated
* *{{AnnotationValidationConfigurationBuilder}}:* 
{{processIntRangeFieldValidatorAnnotation}}, 
{{processLongRangeFieldValidatorAnnotation}}, 
{{processShortRangeFieldValidatorAnnotation}}, 
{{processDateRangeFieldValidatorAnnotation}} and 
{{processLocalDateRangeFieldValidatorAnnotation}} repeat the same steps: 
{{fieldName}} resolution, {{min}}/{{max}}/{{minExpression}}/{{maxExpression}} 
params, and the {{ValidatorConfig.Builder}} chain with {{methodName}}, 
{{shortCircuit}}, {{message}}, {{key}} and {{messageParams}}. Only the 
validator type and how {{min}}/{{max}} are parsed differ. The per-annotation 
loops over {{@Validations}} members also repeat the same null checks.
* *The annotations:* {{@IntRangeFieldValidator}}, {{@LongRangeFieldValidator}}, 
{{@ShortRangeFieldValidator}} and {{@LocalDateRangeFieldValidator}} declare the 
same members with the same javadoc. Java annotations cannot inherit members, so 
this part can only be reduced in the javadoc, not in the declarations.

h2. Proposal
* Extract a shared helper in {{AnnotationValidationConfigurationBuilder}} for 
the common range params and the builder chain, taking the validator type and a 
bound parser.
* Leave the annotation declarations as they are, since they cannot be shared. 
Consider whether Sonar should exclude annotation definitions from the 
duplication check.

This is a refactoring only, with no behaviour change. The existing 
{{AnnotationValidationConfigurationBuilderTest}} covers it.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to