5
5
6
6
import com .microsoft .typespec .http .client .generator .core .extension .model .codemodel .Parameter ;
7
7
import com .microsoft .typespec .http .client .generator .core .extension .model .codemodel .Request ;
8
+ import com .microsoft .typespec .http .client .generator .core .extension .model .codemodel .RequestParameterLocation ;
8
9
import com .microsoft .typespec .http .client .generator .core .model .clientmodel .ClassType ;
9
10
import com .microsoft .typespec .http .client .generator .core .model .clientmodel .ClientMethodParameter ;
10
11
import com .microsoft .typespec .http .client .generator .core .model .clientmodel .GenericType ;
16
17
import java .util .HashMap ;
17
18
import java .util .List ;
18
19
import java .util .Map ;
20
+ import java .util .stream .Collectors ;
21
+ import java .util .stream .Stream ;
19
22
20
23
final class ClientMethodParameterProcessor {
21
24
22
- static ClientMethodParameterProcessor . Result process (Request request , List < Parameter > codeModelParameters ,
23
- boolean mapFluxByteBufferToBinaryData , boolean isProtocolMethod ) {
25
+ static ClientMethodParametersDetails process (Request request , boolean mapFluxByteBufferToBinaryData ,
26
+ boolean isProtocolMethod ) {
24
27
25
- final List <ClientMethodParameter > parameters = new ArrayList <>();
26
- final List <String > requiredParameterExpressions = new ArrayList <>();
28
+ final List <Parameter > codeModelParameters = getCodeModelParameters (request , isProtocolMethod );
29
+ final List <ParametersTuple > parametersTuples = new ArrayList <>();
30
+ final List <String > requiredNullableParameterExpressions = new ArrayList <>();
27
31
final Map <String , String > validateParameterExpressions = new HashMap <>();
28
32
final boolean isJsonPatch = MethodUtil .isContentTypeInRequest (request , "application/json-patch+json" );
29
33
30
34
final ParametersTransformationProcessor transformationProcessor
31
35
= new ParametersTransformationProcessor (isProtocolMethod );
32
- for (Parameter parameter : codeModelParameters ) {
33
- final ClientMethodParameter clientMethodParameter
34
- = toClientMethodParameter (parameter , isJsonPatch , mapFluxByteBufferToBinaryData , isProtocolMethod );
35
- if (request .getSignatureParameters ().contains (parameter )) {
36
- parameters .add (clientMethodParameter );
36
+ for (Parameter codeModelParameter : codeModelParameters ) {
37
+ final ClientMethodParameter clientMethodParameter = toClientMethodParameter (codeModelParameter , isJsonPatch ,
38
+ mapFluxByteBufferToBinaryData , isProtocolMethod );
39
+ final ParametersTuple tuple = new ParametersTuple (codeModelParameter , clientMethodParameter );
40
+ if (request .getSignatureParameters ().contains (codeModelParameter )) {
41
+ parametersTuples .add (tuple );
37
42
}
38
- transformationProcessor .addParameter (clientMethodParameter , parameter );
43
+ transformationProcessor .addParameter (tuple );
39
44
40
- if (!parameter .isConstant () && parameter .getGroupedBy () == null ) {
45
+ if (!codeModelParameter .isConstant () && codeModelParameter .getGroupedBy () == null ) {
41
46
final MethodParameter methodParameter ;
42
47
final String expression ;
43
- if (parameter .getImplementation () != Parameter .ImplementationLocation .CLIENT ) {
48
+ if (codeModelParameter .getImplementation () != Parameter .ImplementationLocation .CLIENT ) {
44
49
methodParameter = clientMethodParameter ;
45
50
expression = methodParameter .getName ();
46
51
} else {
47
- ProxyMethodParameter proxyParameter = Mappers .getProxyParameterMapper ().map (parameter );
52
+ ProxyMethodParameter proxyParameter = Mappers .getProxyParameterMapper ().map (codeModelParameter );
48
53
methodParameter = proxyParameter ;
49
54
expression = proxyParameter .getParameterReference ();
50
55
}
51
56
52
57
if (methodParameter .isRequired () && methodParameter .isReferenceClientType ()) {
53
- requiredParameterExpressions .add (expression );
58
+ requiredNullableParameterExpressions .add (expression );
54
59
}
55
60
final String validation = methodParameter .getClientType ().validate (expression );
56
61
if (validation != null ) {
@@ -60,8 +65,26 @@ static ClientMethodParameterProcessor.Result process(Request request, List<Param
60
65
}
61
66
final ParameterTransformations parameterTransformations = transformationProcessor .process (request );
62
67
63
- return new ClientMethodParameterProcessor .Result (parameters , requiredParameterExpressions ,
64
- validateParameterExpressions , parameterTransformations , hasNonRequiredParameters (parameters ));
68
+ return new ClientMethodParametersDetails (parametersTuples , requiredNullableParameterExpressions ,
69
+ validateParameterExpressions , parameterTransformations );
70
+ }
71
+
72
+ private static List <Parameter > getCodeModelParameters (Request request , boolean isProtocolMethod ) {
73
+ final Stream <Parameter > codeModelParameters ;
74
+ if (isProtocolMethod ) {
75
+ // Required path, body, header and query parameters are allowed
76
+ codeModelParameters = request .getParameters ().stream ().filter (p -> {
77
+ RequestParameterLocation location = p .getProtocol ().getHttp ().getIn ();
78
+ return p .isRequired ()
79
+ && (location == RequestParameterLocation .PATH
80
+ || location == RequestParameterLocation .BODY
81
+ || location == RequestParameterLocation .HEADER
82
+ || location == RequestParameterLocation .QUERY );
83
+ });
84
+ } else {
85
+ codeModelParameters = request .getParameters ().stream ().filter (p -> !p .isFlattened ());
86
+ }
87
+ return codeModelParameters .collect (Collectors .toList ());
65
88
}
66
89
67
90
private static ClientMethodParameter toClientMethodParameter (Parameter parameter , boolean isJsonPatch ,
@@ -82,26 +105,4 @@ private static ClientMethodParameter toClientMethodParameter(Parameter parameter
82
105
return clientMethodParameter ;
83
106
}
84
107
}
85
-
86
- private static boolean hasNonRequiredParameters (List <ClientMethodParameter > parameters ) {
87
- return parameters .stream ().anyMatch (p -> !p .isRequired () && !p .isConstant ());
88
- }
89
-
90
- static final class Result {
91
- final List <ClientMethodParameter > parameters ;
92
- final List <String > requiredParameterExpressions ;
93
- final Map <String , String > validateParameterExpressions ;
94
- final ParameterTransformations parameterTransformations ;
95
- final boolean hasNonRequiredParameters ;
96
-
97
- private Result (List <ClientMethodParameter > parameters , List <String > requiredParameterExpressions ,
98
- Map <String , String > validateParameterExpressions , ParameterTransformations parameterTransformations ,
99
- boolean hasNonRequiredParameters ) {
100
- this .parameters = parameters ;
101
- this .requiredParameterExpressions = requiredParameterExpressions ;
102
- this .validateParameterExpressions = validateParameterExpressions ;
103
- this .parameterTransformations = parameterTransformations ;
104
- this .hasNonRequiredParameters = hasNonRequiredParameters ;
105
- }
106
- }
107
108
}
0 commit comments