2828import java .lang .reflect .Type ;
2929import java .util .ArrayList ;
3030import java .util .Arrays ;
31+ import java .util .Collections ;
3132import java .util .List ;
3233import java .util .Map ;
3334import java .util .Optional ;
@@ -145,14 +146,22 @@ private Object buildArg(Type p, GraphQLType graphQLType, Optional<Object> arg) {
145146 Constructor <?> constructor = getBuildArgConstructor (constructors );
146147 Parameter [] parameters = constructor .getParameters ();
147148
148- if (parameters .length == 1 && parameters [0 ].getType ().isAssignableFrom (arg .get ().getClass ())) {
149- return constructNewInstance (constructor , arg .get ());
149+ if (parameters .length == 1 && parameters [0 ].getType ().isAssignableFrom ((Class <?>) p )) {
150+ if (parameters [0 ].getType ().isAssignableFrom (Optional .class )) {
151+ return constructNewInstance (constructor , arg );
152+ } else {
153+ return constructNewInstance (constructor , arg .orElse (null ));
154+ }
150155 } else {
151156 List <Object > objects = new ArrayList <>();
152- Map map = (Map ) arg .get ( );
157+ Map map = (Map ) arg .orElseGet ( Collections :: emptyMap );
153158 for (Parameter parameter : parameters ) {
154159 String name = toGraphqlName (parameter .getAnnotation (GraphQLName .class ) != null ? parameter .getAnnotation (GraphQLName .class ).value () : parameter .getName ());
155- objects .add (buildArg (parameter .getParameterizedType (), ((GraphQLInputObjectType ) graphQLType ).getField (name ).getType (), map .containsKey (name ) ? Optional .ofNullable (map .get (name )) : null ));
160+ if (!map .containsKey (name )) {
161+ objects .add (null );
162+ } else {
163+ objects .add (buildArg (parameter .getParameterizedType (), ((GraphQLInputObjectType ) graphQLType ).getField (name ).getType (), Optional .ofNullable (map .get (name ))));
164+ }
156165 }
157166 return constructNewInstance (constructor , objects .toArray (new Object [objects .size ()]));
158167 }
@@ -169,7 +178,7 @@ private Object buildArg(Type p, GraphQLType graphQLType, Optional<Object> arg) {
169178 Type subType = ((ParameterizedType ) p ).getActualTypeArguments ()[0 ];
170179 GraphQLType wrappedType = ((GraphQLList ) graphQLType ).getWrappedType ();
171180
172- for (Object item : ((List ) arg .get ( ))) {
181+ for (Object item : ((List ) arg .orElseGet ( Collections :: emptyList ))) {
173182 list .add (buildArg (subType , wrappedType , Optional .ofNullable (item )));
174183 }
175184 return list ;
@@ -182,7 +191,7 @@ private Object buildArg(Type p, GraphQLType graphQLType, Optional<Object> arg) {
182191 return Optional .ofNullable (buildArg (subType , new GraphQLUndefined (), arg ));
183192 }
184193 } else {
185- return arg .get ( );
194+ return arg .orElse ( null );
186195 }
187196 }
188197
0 commit comments