Skip to content

Commit

Permalink
Merge pull request #803 from shalousun/master
Browse files Browse the repository at this point in the history
fix: Fix the bug where enum type parameter comments are missing in the query
  • Loading branch information
shalousun authored Jun 5, 2024
2 parents 652c70e + 8f281bd commit 4d28eff
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 23 deletions.
50 changes: 35 additions & 15 deletions src/main/java/com/ly/doc/helper/FormDataBuildHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,21 @@
*/
package com.ly.doc.helper;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;

import com.ly.doc.constants.DocGlobalConstants;
import com.ly.doc.constants.ValidatorAnnotations;
import com.ly.doc.model.ApiConfig;
import com.ly.doc.model.CustomField;
import com.ly.doc.model.DocJavaField;
import com.ly.doc.model.FormData;
import com.ly.doc.utils.*;
import com.power.common.util.CollectionUtil;
import com.power.common.util.RandomUtil;
import com.power.common.util.StringUtil;
import com.ly.doc.builder.ProjectDocConfigBuilder;
import com.ly.doc.constants.DocTags;
import com.thoughtworks.qdox.model.JavaAnnotation;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaField;

Expand All @@ -52,15 +51,19 @@ public class FormDataBuildHelper extends BaseHelper {
* @param counter invoked counter
* @param builder ProjectDocConfigBuilder
* @param pre pre
* @param groupClasses group class
* @return list of FormData
*/
public static List<FormData> getFormData(String className, Map<String, String> registryClasses, int counter
, ProjectDocConfigBuilder builder, String pre) {
, ProjectDocConfigBuilder builder, String pre, Set<String> groupClasses) {

if (StringUtil.isEmpty(className)) {
throw new RuntimeException("Class name can't be null or empty.");
}

ApiConfig apiConfig = builder.getApiConfig();

ClassLoader classLoader = builder.getApiConfig().getClassLoader();
List<FormData> formDataList = new ArrayList<>();
if (counter > apiConfig.getRecursionLimit()) {
return formDataList;
Expand All @@ -78,7 +81,7 @@ public static List<FormData> getFormData(String className, Map<String, String> r
String simpleName = DocClassUtil.getSimpleName(className);
String[] globGicName = DocClassUtil.getSimpleGicName(className);
JavaClass cls = builder.getJavaProjectBuilder().getClassByName(simpleName);
List<DocJavaField> fields = JavaClassUtil.getFields(cls, 0, new LinkedHashMap<>(),builder.getApiConfig().getClassLoader());
List<DocJavaField> fields = JavaClassUtil.getFields(cls, 0, new LinkedHashMap<>(), builder.getApiConfig().getClassLoader());
if (JavaClassValidateUtil.isPrimitive(simpleName)) {
FormData formData = new FormData();
formData.setKey(pre);
Expand All @@ -95,22 +98,39 @@ public static List<FormData> getFormData(String className, Map<String, String> r
if (JavaClassValidateUtil.isPrimitive(gicName)) {
pre = pre.substring(0, pre.lastIndexOf("."));
}
formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + "[]"));
formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + "[]", groupClasses));
}
int n = 0;
out:
for (DocJavaField docField : fields) {
JavaField field = docField.getJavaField();
String fieldName = field.getName();
String subTypeName = docField.getTypeFullyQualifiedName();
String fieldGicName = docField.getTypeGenericCanonicalName();
JavaClass javaClass = field.getType();
if (field.isStatic() || "this$0".equals(fieldName) ||
JavaClassValidateUtil.isIgnoreFieldTypes(subTypeName)) {
JavaClassValidateUtil.isIgnoreFieldTypes(subTypeName)) {
continue;
}
if (field.isTransient() && skipTransientField) {
continue;
}
List<JavaAnnotation> javaAnnotations = docField.getAnnotations();
for (JavaAnnotation annotation : javaAnnotations) {
String simpleAnnotationName = annotation.getType().getValue();
if (ValidatorAnnotations.NULL.equals(simpleAnnotationName)) {
if (CollectionUtil.isEmpty(groupClasses)) {
continue out;
}
Set<String> groupClassList = JavaClassUtil.getParamGroupJavaClass(annotation);
for (String javaClassName : groupClassList) {
if (groupClasses.contains(javaClassName)) {
continue out;
}
}
}
}

if (responseFieldToUnderline || requestFieldToUnderline) {
fieldName = StringUtil.camelToUnderline(fieldName);
}
Expand All @@ -119,7 +139,7 @@ public static List<FormData> getFormData(String className, Map<String, String> r
if (JavaClassValidateUtil.isMap(subTypeName)) {
continue;
}
String comment = docField.getComment();
String comment = docField.getComment() + JavaFieldUtil.getJsrComment(apiConfig.isShowValidation(), classLoader, javaAnnotations);
if (JavaClassValidateUtil.isFile(fieldGicName)) {
FormData formData = new FormData();
formData.setKey(pre + fieldName);
Expand All @@ -140,7 +160,7 @@ public static List<FormData> getFormData(String className, Map<String, String> r
CustomField customRequestField = builder.getCustomReqFieldMap().get(key);
// cover request value
if (Objects.nonNull(customRequestField) && Objects.nonNull(customRequestField.getValue())
&& JavaClassUtil.isTargetChildClass(simpleName, customRequestField.getOwnerClassName())) {
&& JavaClassUtil.isTargetChildClass(simpleName, customRequestField.getOwnerClassName())) {
fieldValue = String.valueOf(customRequestField.getValue());
}
FormData formData = new FormData();
Expand Down Expand Up @@ -186,25 +206,25 @@ public static List<FormData> getFormData(String className, Map<String, String> r
if (len > 0) {
String gicName = globGicName[n];
if (!JavaClassValidateUtil.isPrimitive(gicName) && !simpleName.equals(gicName)) {
formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + fieldName + "[0]."));
formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + fieldName + "[0].", groupClasses));
}
}
} else {
formDataList.addAll(getFormData(gName, registryClasses, counter, builder, pre + fieldName + "[0]."));
formDataList.addAll(getFormData(gName, registryClasses, counter, builder, pre + fieldName + "[0].", groupClasses));
}
}
}
}
// else if (subTypeName.length() == 1 || DocGlobalConstants.JAVA_OBJECT_FULLY.equals(subTypeName)) {
// For Generics,do nothing, spring mvc not support
// For Generics,do nothing, spring mvc not support
// if (n < globGicName.length) {
// String gicName = globGicName[n];
// formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + fieldName + "."));
// }
// n++;
// }
else {
formDataList.addAll(getFormData(javaClass.getGenericFullyQualifiedName(), registryClasses, counter, builder, pre + fieldName + "."));
formDataList.addAll(getFormData(javaClass.getGenericFullyQualifiedName(), registryClasses, counter, builder, pre + fieldName + ".", groupClasses));
}
}
return formDataList;
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/com/ly/doc/template/IRestDocTemplate.java
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ default List<ApiMethodDoc> buildEntryPointMethod(
//handle extension
Map<String, String> extensions = DocUtil.getCommentsByTag(method, DocTags.EXTENSION, null);
if (extensions != null) {
Map extensionParams = apiMethodDoc.getExtensions() != null ? apiMethodDoc.getExtensions() : new HashMap();
Map<String, Object> extensionParams = apiMethodDoc.getExtensions() != null ? apiMethodDoc.getExtensions() : new HashMap();
extensions.entrySet().stream().forEach(e -> extensionParams.put(e.getKey(), DocUtil.detectTagValue(e.getValue())));
apiMethodDoc.setExtensions(extensionParams);
}
Expand Down Expand Up @@ -803,13 +803,16 @@ default ApiMethodReqParam requestParams(final DocJavaMethod docJavaMethod, Proje
else if (javaClass.isEnum()) {
String enumName = JavaClassUtil.getEnumParams(javaClass);
Object value = JavaClassUtil.getEnumValue(javaClass, isPathVariable || queryParam);
if (Boolean.TRUE.equals(builder.getApiConfig().getInlineEnum())) {
comment.append("<br/>[Enum: "+StringUtil.removeQuotes(enumName)+"]");
}
ApiParam param = ApiParam.of().setField(paramName)
.setId(paramList.size() + 1)
.setPathParam(isPathVariable)
.setQueryParam(queryParam)
.setValue(StringUtil.removeDoubleQuotes(String.valueOf(value)))
.setType(DocGlobalConstants.PARAM_TYPE_ENUM)
.setDesc(StringUtil.removeQuotes(enumName))
.setDesc(comment.toString())
.setRequired(required)
.setVersion(DocGlobalConstants.DEFAULT_VERSION)
.setEnumInfo(JavaClassUtil.getEnumInfo(javaClass, builder))
Expand Down Expand Up @@ -1039,7 +1042,7 @@ default ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap
formData.setValue(strVal);
formDataList.add(formData);
} else {
formDataList.addAll(FormDataBuildHelper.getFormData(gicTypeName, new HashMap<>(16), 0, configBuilder, DocGlobalConstants.EMPTY));
formDataList.addAll(FormDataBuildHelper.getFormData(gicTypeName, new HashMap<>(16), 0, configBuilder, DocGlobalConstants.EMPTY, groupClasses));
}
}

Expand All @@ -1054,7 +1057,7 @@ default ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap
// formData add to params '--data'
queryParamsMap.putAll(formDataToMap);
// set example body
RequestExampleUtil.setExampleBody(apiMethodDoc,requestExample,formDataList,pathParamsMap,queryParamsMap);
RequestExampleUtil.setExampleBody(apiMethodDoc, requestExample, formDataList, pathParamsMap, queryParamsMap);
return requestExample;
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/ly/doc/template/JAXRSDocBuildTemplate.java
Original file line number Diff line number Diff line change
Expand Up @@ -627,7 +627,7 @@ private ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap
formDataList.add(formData);
} else {
formDataList.addAll(
FormDataBuildHelper.getFormData(gicTypeName, new HashMap<>(16), 0, configBuilder, DocGlobalConstants.EMPTY));
FormDataBuildHelper.getFormData(gicTypeName, new HashMap<>(16), 0, configBuilder, DocGlobalConstants.EMPTY, groupClasses));
}
}
} else {
Expand All @@ -640,7 +640,7 @@ private ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap
}
}
requestExample.setFormDataList(formDataList);
RequestExampleUtil.setExampleBody(apiMethodDoc,requestExample,formDataList,pathParamsMap,pathParamsMap);
RequestExampleUtil.setExampleBody(apiMethodDoc, requestExample, formDataList, pathParamsMap, pathParamsMap);
return requestExample;
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/ly/doc/utils/ParamUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static JavaClass handleSeeEnum(ApiParam param, JavaField javaField, Proje
param.setType(DocGlobalConstants.PARAM_TYPE_ENUM);
}
Object value = JavaClassUtil.getEnumValue(seeEnum, !jsonRequest);
param.setValue(String.valueOf(value));
param.setValue(StringUtil.removeDoubleQuotes(String.valueOf(value)));
param.setEnumValues(JavaClassUtil.getEnumValues(seeEnum));
param.setEnumInfo(JavaClassUtil.getEnumInfo(seeEnum, builder));
// Override old value
Expand Down
Loading

0 comments on commit 4d28eff

Please sign in to comment.