From 620b68e9663626a90aeb3d40f3915542d5eaaccc Mon Sep 17 00:00:00 2001
From: oppofind <836575280@qq.com>
Date: Sun, 10 Nov 2019 16:12:26 +0800
Subject: [PATCH] support enum
---
.../power/doc/builder/DocBuilderTemplate.java | 6 +-
.../com/power/doc/builder/SourceBuilder.java | 70 +++++++++++++++++--
2 files changed, 68 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/power/doc/builder/DocBuilderTemplate.java b/src/main/java/com/power/doc/builder/DocBuilderTemplate.java
index af8e904..2929b22 100644
--- a/src/main/java/com/power/doc/builder/DocBuilderTemplate.java
+++ b/src/main/java/com/power/doc/builder/DocBuilderTemplate.java
@@ -209,15 +209,15 @@ public class DocBuilderTemplate {
} else {
dataDict.setType("int32");
}
- dataDict.setDesc(desc.toString());
- dataDict.setValue(val.toString());
+ dataDict.setDesc(String.valueOf(desc));
+ dataDict.setValue(String.valueOf(val));
dataDictList.add(dataDict);
}
apiDocDict.setDataDictList(dataDictList);
apiDocDictList.add(apiDocDict);
}
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException e) {
- e.fillInStackTrace();
+ e.printStackTrace();
}
return apiDocDictList;
}
diff --git a/src/main/java/com/power/doc/builder/SourceBuilder.java b/src/main/java/com/power/doc/builder/SourceBuilder.java
index 516a5a8..4fecbfa 100644
--- a/src/main/java/com/power/doc/builder/SourceBuilder.java
+++ b/src/main/java/com/power/doc/builder/SourceBuilder.java
@@ -446,7 +446,6 @@ public class SourceBuilder {
param.setDesc(DocGlobalConstants.ANY_OBJECT_MSG).setVersion(DocGlobalConstants.DEFAULT_VERSION);
} else {
param.setDesc(DocGlobalConstants.ANY_OBJECT_MSG).setRequired(false).setVersion(DocGlobalConstants.DEFAULT_VERSION);
-
}
paramList.add(param);
} else {
@@ -523,8 +522,8 @@ public class SourceBuilder {
comment = field.getComment();
}
if (StringUtil.isNotEmpty(comment)) {
- comment = comment.replace("\r\n", "
");
- comment = comment.replace("\n", "
");
+ comment = comment.replaceAll("\r\n", "
");
+ comment = comment.replaceAll("\n", "
");
}
if (DocClassUtil.isPrimitive(subTypeName)) {
ApiParam param = ApiParam.of().setField(pre + fieldName);
@@ -537,8 +536,36 @@ public class SourceBuilder {
}
} else {
ApiParam param = ApiParam.of().setField(pre + fieldName);
+ JavaClass javaClass = builder.getClassByName(subTypeName);
+ String enumComments = javaClass.getComment();
+ if(StringUtil.isNotEmpty(enumComments)){
+ enumComments = enumComments.replaceAll("\r\n", "
");
+ enumComments = enumComments.replaceAll("\r\n", "
");
+ comment = comment +"(See: "+ enumComments+")";
+ }
String processedType = DocClassUtil.processTypeNameForParams(typeSimpleName.toLowerCase());
param.setType(processedType);
+ if (!isResp && javaClass.isEnum()) {
+ List methods = javaClass.getMethods();
+ int index = 0;
+ String reTypeName = "object";
+ enumOut:for (JavaMethod method : methods) {
+ JavaType type = method.getReturnType();
+ reTypeName = type.getCanonicalName();
+ List javaAnnotationList = method.getAnnotations();
+ for (JavaAnnotation annotation : javaAnnotationList) {
+ if (annotation.getType().getSimpleName().contains("JsonValue")) {
+ break enumOut;
+ }
+ }
+ if (CollectionUtil.isEmpty(javaAnnotations) && index < 1) {
+ break enumOut;
+ }
+ index++;
+ }
+ param.setType(DocClassUtil.processTypeNameForParams(reTypeName));
+ }
+
if (StringUtil.isNotEmpty(comment)) {
commonHandleParam(paramList, param, isRequired, comment, since, strRequired);
} else {
@@ -629,7 +656,9 @@ public class SourceBuilder {
} else if (simpleName.equals(subTypeName)) {
//do nothing
} else {
- paramList.addAll(buildParams(fieldGicName, preBuilder.toString(), i + 1, isRequired, responseFieldMap, isResp, registryClasses));
+ if (isResp && !javaClass.isEnum()) {
+ paramList.addAll(buildParams(fieldGicName, preBuilder.toString(), i + 1, isRequired, responseFieldMap, isResp, registryClasses));
+ }
}
}
}
@@ -899,7 +928,38 @@ public class SourceBuilder {
} else if (typeName.equals(subTypeName)) {
data0.append("{\"$ref\":\"...\"}").append(",");
} else {
- data0.append(buildJson(subTypeName, fieldGicName, responseFieldMap, isResp, counter + 1, registryClasses)).append(",");
+ JavaClass javaClass = builder.getClassByName(subTypeName);
+ if (!isResp && javaClass.isEnum()) {
+ List methods = javaClass.getMethods();
+ int index = 0;
+ enumOut:
+ for (JavaMethod method : methods) {
+ JavaType type = method.getReturnType();
+ List javaAnnotations = method.getAnnotations();
+ for (JavaAnnotation annotation : javaAnnotations) {
+ if (annotation.getType().getSimpleName().contains("JsonValue")) {
+ break enumOut;
+ }
+ }
+ if (CollectionUtil.isEmpty(javaAnnotations) && index < 1) {
+ break enumOut;
+ }
+ index++;
+ }
+ List javaFields = javaClass.getEnumConstants();
+ Object value = null;
+ index = 0;
+ for (JavaField javaField : javaFields) {
+ String simpleName = javaField.getType().getSimpleName();
+ if (!DocClassUtil.isPrimitive(simpleName) && index < 1) {
+ value = javaField.getEnumConstantArguments().get(0);
+ }
+ }
+ data0.append(value).append(",");
+ } else {
+ data0.append(buildJson(subTypeName, fieldGicName, responseFieldMap, isResp, counter + 1, registryClasses)).append(",");
+ }
+
}
}
}