1313import io .clientcore .core .implementation .TypeUtil ;
1414import io .clientcore .core .models .binarydata .BinaryData ;
1515import io .clientcore .core .serialization .SerializationFormat ;
16+ import io .clientcore .core .utils .Base64Uri ;
1617import io .clientcore .core .utils .CoreUtils ;
1718import java .io .InputStream ;
1819import java .lang .reflect .ParameterizedType ;
1920import java .util .List ;
2021import java .util .stream .Collectors ;
2122import javax .lang .model .element .TypeElement ;
23+ import javax .lang .model .type .ArrayType ;
2224import javax .lang .model .type .DeclaredType ;
2325import javax .lang .model .type .TypeKind ;
2426import javax .lang .model .type .TypeMirror ;
@@ -71,7 +73,7 @@ private static void handleResponseBody(BlockStmt body, TypeMirror returnType, ja
7173 HttpRequestContext method , boolean serializationFormatSet ) {
7274
7375 String typeCast = determineTypeCast (returnType , entityType , method , body );
74-
76+ body . tryAddImportToParentCompilationUnit ( Base64Uri . class );
7577 body .addStatement ("Object result = " + determineResultExpression (entityType , method ));
7678
7779 if (returnType instanceof DeclaredType ) {
@@ -107,21 +109,27 @@ private static String determineTypeCast(TypeMirror returnType, java.lang.reflect
107109
108110 if (!declaredType .getTypeArguments ().isEmpty ()) {
109111 TypeMirror firstGenericType = declaredType .getTypeArguments ().get (0 );
110- DeclaredType genericDeclaredType = (DeclaredType ) firstGenericType ;
111- TypeElement genericTypeElement = (TypeElement ) genericDeclaredType .asElement ();
112- body .findCompilationUnit ()
113- .ifPresent (
114- compilationUnit -> compilationUnit .addImport (genericTypeElement .getQualifiedName ().toString ()));
115- if (genericTypeElement .getQualifiedName ().contentEquals (List .class .getCanonicalName ())) {
116- String typeArgs = genericDeclaredType .getTypeArguments ()
117- .stream ()
118- .map (arg -> ((DeclaredType ) arg ).asElement ().getSimpleName ().toString ())
119- .collect (Collectors .joining (", " ));
112+ if (firstGenericType .getKind () == TypeKind .ARRAY ) {
113+ ArrayType arrayType = (ArrayType ) firstGenericType ;
114+ String componentTypeName = arrayType .getComponentType ().toString ();
115+ return componentTypeName + "[]" ;
116+ } else if (firstGenericType instanceof DeclaredType ) {
117+ DeclaredType genericDeclaredType = (DeclaredType ) firstGenericType ;
118+ TypeElement genericTypeElement = (TypeElement ) genericDeclaredType .asElement ();
119+ body .findCompilationUnit ()
120+ .ifPresent (compilationUnit -> compilationUnit
121+ .addImport (genericTypeElement .getQualifiedName ().toString ()));
122+ if (genericTypeElement .getQualifiedName ().contentEquals (List .class .getCanonicalName ())) {
123+ String typeArgs = genericDeclaredType .getTypeArguments ()
124+ .stream ()
125+ .map (arg -> ((DeclaredType ) arg ).asElement ().getSimpleName ().toString ())
126+ .collect (Collectors .joining (", " ));
120127
121- return ((DeclaredType ) firstGenericType ).asElement ().getSimpleName ().toString () + "<" + typeArgs
122- + ">" ;
123- } else {
124- return genericTypeElement .getSimpleName ().toString ();
128+ return ((DeclaredType ) firstGenericType ).asElement ().getSimpleName ().toString () + "<" + typeArgs
129+ + ">" ;
130+ } else {
131+ return genericTypeElement .getSimpleName ().toString ();
132+ }
125133 }
126134 }
127135 return typeElement .getSimpleName ().toString ();
@@ -133,11 +141,10 @@ private static String determineResultExpression(java.lang.reflect.Type entityTyp
133141 if (method .getHttpMethod () == HttpMethod .HEAD && isBooleanType (entityType )) {
134142 return "(responseStatusCode / 100) == 2;" ;
135143 } else if (TypeUtil .isTypeOrSubTypeOf (entityType , byte [].class )) {
136- // TODO: Add support for Base64Uri
137- // if (returnValueWireType == Base64Uri.class) {
138- // responseBodyBytes = new Base64Uri(responseBodyBytes).decodedBytes();
139- // }
140- return "responseBody != null ? responseBody.toBytes() : null;" ;
144+ return " byte[] responseBodyBytes = responseBody != null ? responseBody.toBytes() : null;\n "
145+ + " responseBodyBytes = responseBodyBytes != null ? new Base64Uri(responseBodyBytes).decodedBytes() : null;\n "
146+ + " return (responseBodyBytes != null && responseBodyBytes.length == 0) ? null : responseBodyBytes;"
147+ + "\n " ;
141148 } else if (TypeUtil .isTypeOrSubTypeOf (entityType , InputStream .class )) {
142149 return "responseBody.toStream();" ;
143150 } else if (TypeUtil .isTypeOrSubTypeOf (entityType , BinaryData .class )) {
@@ -159,8 +166,12 @@ private static void handleDeclaredTypeResponse(BlockStmt body, DeclaredType retu
159166
160167 if (!returnType .getTypeArguments ().isEmpty ()) {
161168 TypeMirror firstGenericType = returnType .getTypeArguments ().get (0 );
162-
163- if (firstGenericType instanceof DeclaredType ) {
169+ if (firstGenericType .getKind () == TypeKind .ARRAY ) {
170+ ArrayType arrayType = (ArrayType ) firstGenericType ;
171+ String componentTypeName = arrayType .getComponentType ().toString ();
172+ body .addStatement ("ParameterizedType returnType = CoreUtils.createParameterizedType("
173+ + typeElement .getSimpleName () + ".class," + componentTypeName + "[].class);" );
174+ } else if (firstGenericType instanceof DeclaredType ) {
164175 DeclaredType genericDeclaredType = (DeclaredType ) firstGenericType ;
165176 TypeElement genericTypeElement = (TypeElement ) genericDeclaredType .asElement ();
166177
0 commit comments