Skip to content

Commit d7514e3

Browse files
authored
Fix miscellaneous bugs in annotation-processor (Azure#45138)
1 parent 20521a5 commit d7514e3

4 files changed

Lines changed: 39 additions & 22 deletions

File tree

sdk/clientcore/annotation-processor/src/main/java/io/clientcore/annotation/processor/AnnotationProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ private void addImports(TemplateInput templateInput) {
147147
templateInput.addImport(HttpRequest.class.getName());
148148
templateInput.addImport(Response.class.getName());
149149
templateInput.addImport(Void.class.getName());
150+
templateInput.addImport(UriEscapers.class.getTypeName());
150151
}
151152

152153
private HttpRequestContext createHttpRequestContext(ExecutableElement requestMethod, TemplateInput templateInput) {

sdk/clientcore/annotation-processor/src/main/java/io/clientcore/annotation/processor/templating/JavaParserTemplateProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ private void appendQueryParams(BlockStmt body, HttpRequestContext method) {
403403
});
404404

405405
// Append query parameters to the URL
406+
body.tryAddImportToParentCompilationUnit(CoreUtils.class);
406407
body.addStatement("String newUrl = CoreUtils.appendQueryParams(url, queryParamMap);");
407408
body.addStatement("if (newUrl != null) { url = newUrl; }");
408409
}

sdk/clientcore/annotation-processor/src/main/java/io/clientcore/annotation/processor/utils/RequestBodyHandler.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.clientcore.annotation.processor.models.HttpRequestContext;
1010
import io.clientcore.core.models.binarydata.BinaryData;
1111
import io.clientcore.core.serialization.SerializationFormat;
12+
import io.clientcore.core.utils.CoreUtils;
1213
import java.nio.ByteBuffer;
1314
import javax.annotation.processing.ProcessingEnvironment;
1415
import javax.lang.model.element.TypeElement;
@@ -211,6 +212,9 @@ public static void handleRequestBodySerialization(BlockStmt body, String paramet
211212

212213
private static void addRequestBodyWithNullCheck(BlockStmt body, TypeMirror parameterType, String parameterName,
213214
Elements elementUtils, Types typeUtils) {
215+
body.tryAddImportToParentCompilationUnit(SerializationFormat.class);
216+
body.tryAddImportToParentCompilationUnit(CoreUtils.class);
217+
214218
BlockStmt ifBlock = new BlockStmt();
215219
IfStmt ifStatement = new IfStmt(StaticJavaParser.parseExpression(parameterName + " != null"), ifBlock, null);
216220

sdk/clientcore/annotation-processor/src/main/java/io/clientcore/annotation/processor/utils/ResponseHandler.java

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313
import io.clientcore.core.implementation.TypeUtil;
1414
import io.clientcore.core.models.binarydata.BinaryData;
1515
import io.clientcore.core.serialization.SerializationFormat;
16+
import io.clientcore.core.utils.Base64Uri;
1617
import io.clientcore.core.utils.CoreUtils;
1718
import java.io.InputStream;
1819
import java.lang.reflect.ParameterizedType;
1920
import java.util.List;
2021
import java.util.stream.Collectors;
2122
import javax.lang.model.element.TypeElement;
23+
import javax.lang.model.type.ArrayType;
2224
import javax.lang.model.type.DeclaredType;
2325
import javax.lang.model.type.TypeKind;
2426
import 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

Comments
 (0)