11package org .springdoc .core ;
22
3- import java .beans .IntrospectionException ;
4- import java .beans .Introspector ;
5- import java .beans .PropertyDescriptor ;
63import java .lang .annotation .Annotation ;
74import java .lang .reflect .AnnotatedElement ;
85import java .lang .reflect .Constructor ;
96import java .lang .reflect .Executable ;
10- import java .lang .reflect .Field ;
117import java .lang .reflect .Member ;
128import java .lang .reflect .Method ;
139import java .lang .reflect .Type ;
1410import java .util .ArrayList ;
1511import java .util .Arrays ;
1612import java .util .List ;
1713import java .util .Objects ;
18- import java .util .stream .Stream ;
1914
20- import io .swagger .v3 .oas .annotations .Parameter ;
2115import org .apache .commons .lang3 .ArrayUtils ;
2216import org .springdoc .api .annotations .ParameterObject ;
2317import org .springdoc .core .converters .AdditionalModelsConverter ;
2418
2519import org .springframework .core .MethodParameter ;
2620import org .springframework .core .ParameterNameDiscoverer ;
2721import org .springframework .lang .NonNull ;
28- import org .springframework .lang .Nullable ;
2922
3023/**
3124 * @author zarebski.m
3225 */
3326class DelegatingMethodParameter extends MethodParameter {
27+
3428 private MethodParameter delegate ;
3529
3630 private Annotation [] additionalParameterAnnotations ;
@@ -50,10 +44,7 @@ public static MethodParameter[] customize(String[] pNames, MethodParameter[] par
5044 MethodParameter p = parameters [i ];
5145 if (p .hasParameterAnnotation (ParameterObject .class )) {
5246 Class <?> paramClass = AdditionalModelsConverter .getReplacement (p .getParameterType ());
53- allFieldsOf (paramClass ).stream ()
54- .map (f -> fromGetterOfField (paramClass , f ))
55- .filter (Objects ::nonNull )
56- .forEach (explodedParameters ::add );
47+ MethodParameterPojoExtractor .extractFrom (paramClass ).forEach (explodedParameters ::add );
5748 }
5849 else {
5950 String name = pNames != null ? pNames [i ] : p .getParameterName ();
@@ -139,31 +130,6 @@ public void initParameterNameDiscovery(ParameterNameDiscoverer parameterNameDisc
139130 delegate .initParameterNameDiscovery (parameterNameDiscoverer );
140131 }
141132
142- @ Nullable
143- static MethodParameter fromGetterOfField (Class <?> paramClass , Field field ) {
144- try {
145- Annotation [] filedAnnotations = field .getDeclaredAnnotations ();
146- Parameter parameter = field .getAnnotation (Parameter .class );
147- if (parameter != null && !parameter .required ()) {
148- Field fieldNullable = NullableFieldClass .class .getDeclaredField ("nullableField" );
149- Annotation annotation = fieldNullable .getAnnotation (Nullable .class );
150- filedAnnotations = ArrayUtils .add (filedAnnotations , annotation );
151- }
152- Annotation [] filedAnnotationsNew = filedAnnotations ;
153- return Stream .of (Introspector .getBeanInfo (paramClass ).getPropertyDescriptors ())
154- .filter (d -> d .getName ().equals (field .getName ()))
155- .map (PropertyDescriptor ::getReadMethod )
156- .filter (Objects ::nonNull )
157- .findFirst ()
158- .map (method -> new MethodParameter (method , -1 ))
159- .map (param -> new DelegatingMethodParameter (param , field .getName (), filedAnnotationsNew ))
160- .orElse (null );
161- }
162- catch (IntrospectionException | NoSuchFieldException e ) {
163- return null ;
164- }
165- }
166-
167133 @ Override
168134 public boolean equals (Object o ) {
169135 if (this == o ) return true ;
@@ -181,18 +147,4 @@ public int hashCode() {
181147 result = 31 * result + Arrays .hashCode (additionalParameterAnnotations );
182148 return result ;
183149 }
184-
185- private class NullableFieldClass {
186- @ Nullable
187- private String nullableField ;
188- }
189-
190- private static List <Field > allFieldsOf (Class <?> clazz ) {
191- List <Field > fields = new ArrayList <>();
192- do {
193- fields .addAll (Arrays .asList (clazz .getDeclaredFields ()));
194- clazz = clazz .getSuperclass ();
195- } while (clazz != null );
196- return fields ;
197- }
198150}
0 commit comments