diff --git a/pom.xml b/pom.xml index 252e6f6..36d9499 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 - 0.50.40 + 0.50.46 @@ -44,7 +44,7 @@ com.ibeetl beetl - 3.0.15.RELEASE + 3.0.16.RELEASE com.thoughtworks.qdox @@ -106,7 +106,7 @@ org.apache.maven.plugins maven-source-plugin - 3.1.0 + 3.2.1 package diff --git a/src/main/java/com/power/doc/builder/DocBuilderTemplate.java b/src/main/java/com/power/doc/builder/DocBuilderTemplate.java index b4f96b5..f59f453 100644 --- a/src/main/java/com/power/doc/builder/DocBuilderTemplate.java +++ b/src/main/java/com/power/doc/builder/DocBuilderTemplate.java @@ -66,7 +66,7 @@ public class DocBuilderTemplate { public ApiAllData getApiData(ApiConfig config, JavaProjectBuilder javaProjectBuilder) { ApiAllData apiAllData = new ApiAllData(); apiAllData.setProjectName(config.getProjectName()); - apiAllData.setProjectId(DocUtil.handleId(config.getProjectName())); + apiAllData.setProjectId(DocUtil.generateId(config.getProjectName())); apiAllData.setLanguage(config.getLanguage().getCode()); apiAllData.setApiDocList(listOfApiData(config, javaProjectBuilder)); apiAllData.setErrorCodeList(errorCodeDictToList(config)); diff --git a/src/main/java/com/power/doc/builder/SourceBuilder.java b/src/main/java/com/power/doc/builder/SourceBuilder.java index aba2fd0..f86e384 100644 --- a/src/main/java/com/power/doc/builder/SourceBuilder.java +++ b/src/main/java/com/power/doc/builder/SourceBuilder.java @@ -1376,13 +1376,13 @@ public class SourceBuilder { */ private void handControllerAlias(ApiDoc apiDoc) { if (isUseMD5) { - String name = DocUtil.handleId(apiDoc.getName()); + String name = DocUtil.generateId(apiDoc.getName()); apiDoc.setAlias(name); } } private void handleMethodUid(ApiMethodDoc methodDoc, String methodName) { - String name = DocUtil.handleId(methodName); + String name = DocUtil.generateId(methodName); methodDoc.setMethodId(name); } diff --git a/src/main/java/com/power/doc/helper/FormDataBuildHelper.java b/src/main/java/com/power/doc/helper/FormDataBuildHelper.java index 45c8249..82a7db4 100644 --- a/src/main/java/com/power/doc/helper/FormDataBuildHelper.java +++ b/src/main/java/com/power/doc/helper/FormDataBuildHelper.java @@ -70,10 +70,7 @@ public class FormDataBuildHelper { String subTypeName = field.getType().getFullyQualifiedName(); String fieldGicName = field.getType().getGenericCanonicalName(); JavaClass javaClass = builder.getJavaProjectBuilder().getClassByName(subTypeName); - boolean ignoreField = field.getModifiers().stream() - .anyMatch(str -> str.equals(DocGlobalConstants.STATIC) || str.equals(DocGlobalConstants.FINAL)); - if (ignoreField || "this$0".equals(fieldName) || - "serialVersionUID".equals(fieldName) || + if (field.isStatic() || "this$0".equals(fieldName) || JavaClassValidateUtil.isIgnoreFieldTypes(subTypeName)) { continue; } diff --git a/src/main/java/com/power/doc/helper/JsonBuildHelper.java b/src/main/java/com/power/doc/helper/JsonBuildHelper.java index abfabf3..5d87cfa 100644 --- a/src/main/java/com/power/doc/helper/JsonBuildHelper.java +++ b/src/main/java/com/power/doc/helper/JsonBuildHelper.java @@ -26,7 +26,7 @@ public class JsonBuildHelper { /** * build return json * - * @param method The JavaMethod object + * @param method The JavaMethod object * @param builder ProjectDocConfigBuilder builder * @return String */ @@ -37,7 +37,7 @@ public class JsonBuildHelper { ApiReturn apiReturn = DocClassUtil.processReturnType(method.getReturnType().getGenericCanonicalName()); String returnType = apiReturn.getGenericCanonicalName(); String typeName = apiReturn.getSimpleName(); - return JsonFormatUtil.formatJson(buildJson(typeName, returnType, true, 0, new HashMap<>(),builder)); + return JsonFormatUtil.formatJson(buildJson(typeName, returnType, true, 0, new HashMap<>(), builder)); } /** @@ -45,8 +45,8 @@ public class JsonBuildHelper { * @param genericCanonicalName genericCanonicalName * @param isResp Response flag * @param counter Recursive counter - * @param registryClasses class container - * @param builder project config builder + * @param registryClasses class container + * @param builder project config builder * @return String */ public static String buildJson(String typeName, String genericCanonicalName, @@ -66,7 +66,7 @@ public class JsonBuildHelper { if (JavaClassValidateUtil.isPrimitive(typeName)) { return StringUtil.removeQuotes(DocUtil.jsonValueByType(typeName)); } - if(javaClass.isEnum()){ + if (javaClass.isEnum()) { return String.valueOf(JavaClassUtil.getEnumValue(javaClass, Boolean.FALSE)); } StringBuilder data0 = new StringBuilder(); @@ -90,12 +90,12 @@ public class JsonBuildHelper { data.append(DocUtil.jsonValueByType(gName)); } else if (gName.contains("<")) { String simple = DocClassUtil.getSimpleName(gName); - String json = buildJson(simple, gName, isResp, counter + 1, registryClasses,builder); + String json = buildJson(simple, gName, isResp, counter + 1, registryClasses, builder); data.append(json); } else if (JavaClassValidateUtil.isCollection(gName)) { data.append("\"any object\""); } else { - String json = buildJson(gName, gName, isResp, counter + 1, registryClasses,builder); + String json = buildJson(gName, gName, isResp, counter + 1, registryClasses, builder); data.append(json); } data.append("]"); @@ -118,10 +118,10 @@ public class JsonBuildHelper { data.append("\"mapKey2\":").append(DocUtil.jsonValueByType(gicName)).append("}"); } else if (gicName.contains("<")) { String simple = DocClassUtil.getSimpleName(gicName); - String json = buildJson(simple, gicName, isResp, counter + 1, registryClasses,builder); + String json = buildJson(simple, gicName, isResp, counter + 1, registryClasses, builder); data.append("{").append("\"mapKey\":").append(json).append("}"); } else { - data.append("{").append("\"mapKey\":").append(buildJson(gicName, gNameTemp, isResp, counter + 1, registryClasses,builder)).append("}"); + data.append("{").append("\"mapKey\":").append(buildJson(gicName, gNameTemp, isResp, counter + 1, registryClasses, builder)).append("}"); } return data.toString(); } else if (DocGlobalConstants.JAVA_OBJECT_FULLY.equals(typeName)) { @@ -137,11 +137,7 @@ public class JsonBuildHelper { for (JavaField field : fields) { String subTypeName = field.getType().getFullyQualifiedName(); String fieldName = field.getName(); - - boolean ignoreField = field.getModifiers().stream() - .anyMatch(str -> str.equals(DocGlobalConstants.STATIC) || str.equals(DocGlobalConstants.FINAL)); - if (ignoreField || "this$0".equals(fieldName) || - "serialVersionUID".equals(fieldName) || + if (field.isStatic() || "this$0".equals(fieldName) || JavaClassValidateUtil.isIgnoreFieldTypes(subTypeName)) { continue; } @@ -213,7 +209,7 @@ public class JsonBuildHelper { String gicName = DocClassUtil.getSimpleGicName(fieldGicName)[0]; if (DocGlobalConstants.JAVA_STRING_FULLY.equals(gicName)) { - data0.append("[").append("\"").append(buildJson(gicName, fieldGicName, isResp, counter + 1, registryClasses,builder)).append("\"]").append(","); + data0.append("[").append("\"").append(buildJson(gicName, fieldGicName, isResp, counter + 1, registryClasses, builder)).append("\"]").append(","); } else if (DocGlobalConstants.JAVA_LIST_FULLY.equals(gicName)) { data0.append("{\"object\":\"any object\"},"); } else if (gicName.length() == 1) { @@ -223,10 +219,10 @@ public class JsonBuildHelper { } String gicName1 = (i < globGicName.length) ? globGicName[i] : globGicName[globGicName.length - 1]; if (DocGlobalConstants.JAVA_STRING_FULLY.equals(gicName1)) { - data0.append("[").append("\"").append(buildJson(gicName1, gicName1, isResp, counter + 1, registryClasses,builder)).append("\"]").append(","); + data0.append("[").append("\"").append(buildJson(gicName1, gicName1, isResp, counter + 1, registryClasses, builder)).append("\"]").append(","); } else { if (!typeName.equals(gicName1)) { - data0.append("[").append(buildJson(DocClassUtil.getSimpleName(gicName1), gicName1, isResp, counter + 1, registryClasses,builder)).append("]").append(","); + data0.append("[").append(buildJson(DocClassUtil.getSimpleName(gicName1), gicName1, isResp, counter + 1, registryClasses, builder)).append("]").append(","); } else { data0.append("[{\"$ref\":\"..\"}]").append(","); } @@ -237,7 +233,7 @@ public class JsonBuildHelper { data0.append("[{\"mapKey\":{}}],"); continue out; } - data0.append("[").append(buildJson(gicName, fieldGicName, isResp, counter + 1, registryClasses,builder)).append("]").append(","); + data0.append("[").append(buildJson(gicName, fieldGicName, isResp, counter + 1, registryClasses, builder)).append("]").append(","); } else { data0.append("[{\"$ref\":\"..\"}]").append(","); } @@ -251,16 +247,16 @@ public class JsonBuildHelper { if (gicName.length() == 1) { String gicName1 = (i < globGicName.length) ? globGicName[i] : globGicName[globGicName.length - 1]; if (DocGlobalConstants.JAVA_STRING_FULLY.equals(gicName1)) { - data0.append("{").append("\"mapKey\":\"").append(buildJson(gicName1, gicName1, isResp, counter + 1, registryClasses,builder)).append("\"},"); + data0.append("{").append("\"mapKey\":\"").append(buildJson(gicName1, gicName1, isResp, counter + 1, registryClasses, builder)).append("\"},"); } else { if (!typeName.equals(gicName1)) { - data0.append("{").append("\"mapKey\":").append(buildJson(DocClassUtil.getSimpleName(gicName1), gicName1, isResp, counter + 1, registryClasses,builder)).append("},"); + data0.append("{").append("\"mapKey\":").append(buildJson(DocClassUtil.getSimpleName(gicName1), gicName1, isResp, counter + 1, registryClasses, builder)).append("},"); } else { data0.append("{\"mapKey\":{}},"); } } } else { - data0.append("{").append("\"mapKey\":").append(buildJson(gicName, fieldGicName, isResp, counter + 1, registryClasses,builder)).append("},"); + data0.append("{").append("\"mapKey\":").append(buildJson(gicName, fieldGicName, isResp, counter + 1, registryClasses, builder)).append("},"); } } else if (subTypeName.length() == 1) { if (!typeName.equals(genericCanonicalName)) { @@ -269,7 +265,7 @@ public class JsonBuildHelper { data0.append(DocUtil.jsonValueByType(gicName)).append(","); } else { String simple = DocClassUtil.getSimpleName(gicName); - data0.append(buildJson(simple, gicName, isResp, counter + 1, registryClasses,builder)).append(","); + data0.append(buildJson(simple, gicName, isResp, counter + 1, registryClasses, builder)).append(","); } } else { data0.append("{\"waring\":\"You may have used non-display generics.\"},"); @@ -282,10 +278,10 @@ public class JsonBuildHelper { String gicName = globGicName[i]; if (!typeName.equals(genericCanonicalName)) { if (JavaClassValidateUtil.isPrimitive(gicName)) { - data0.append("\"").append(buildJson(gicName, genericCanonicalName, isResp, counter + 1, registryClasses,builder)).append("\","); + data0.append("\"").append(buildJson(gicName, genericCanonicalName, isResp, counter + 1, registryClasses, builder)).append("\","); } else { String simpleName = DocClassUtil.getSimpleName(gicName); - data0.append(buildJson(simpleName, gicName, isResp, counter + 1, registryClasses,builder)).append(","); + data0.append(buildJson(simpleName, gicName, isResp, counter + 1, registryClasses, builder)).append(","); } } else { data0.append("{\"waring\":\"You may have used non-display generics.\"},"); @@ -297,12 +293,12 @@ public class JsonBuildHelper { } else if (typeName.equals(subTypeName)) { data0.append("{\"$ref\":\"...\"}").append(","); } else { - javaClass = builder.getJavaProjectBuilder().getClassByName(subTypeName); + javaClass = builder.getJavaProjectBuilder().getClassByName(subTypeName); if (!isResp && javaClass.isEnum()) { Object value = JavaClassUtil.getEnumValue(javaClass, Boolean.FALSE); data0.append(value).append(","); } else { - data0.append(buildJson(subTypeName, fieldGicName,isResp, counter + 1, registryClasses,builder)).append(","); + data0.append(buildJson(subTypeName, fieldGicName, isResp, counter + 1, registryClasses, builder)).append(","); } } } diff --git a/src/main/java/com/power/doc/helper/ParamsBuildHelper.java b/src/main/java/com/power/doc/helper/ParamsBuildHelper.java index f3fa879..7fd55fc 100644 --- a/src/main/java/com/power/doc/helper/ParamsBuildHelper.java +++ b/src/main/java/com/power/doc/helper/ParamsBuildHelper.java @@ -68,10 +68,7 @@ public class ParamsBuildHelper { for (JavaField field : fields) { String fieldName = field.getName(); String subTypeName = field.getType().getFullyQualifiedName(); - boolean ignoreField = field.getModifiers().stream() - .anyMatch(str -> str.equals(DocGlobalConstants.STATIC) || str.equals(DocGlobalConstants.FINAL)); - if (ignoreField || "this$0".equals(fieldName) || - "serialVersionUID".equals(fieldName) || + if (field.isStatic() || "this$0".equals(fieldName) || JavaClassValidateUtil.isIgnoreFieldTypes(subTypeName)) { continue; } diff --git a/src/main/java/com/power/doc/template/IDocBuildTemplate.java b/src/main/java/com/power/doc/template/IDocBuildTemplate.java index 1510cb3..9ddc794 100644 --- a/src/main/java/com/power/doc/template/IDocBuildTemplate.java +++ b/src/main/java/com/power/doc/template/IDocBuildTemplate.java @@ -10,7 +10,10 @@ import com.power.doc.utils.DocUtil; import com.power.doc.utils.JavaClassValidateUtil; import com.thoughtworks.qdox.model.JavaClass; import com.thoughtworks.qdox.model.JavaMethod; +import com.thoughtworks.qdox.model.JavaType; +import com.thoughtworks.qdox.model.JavaTypeVariable; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -60,7 +63,7 @@ public interface IDocBuildTemplate { apiDoc.setName(controllerName); apiDoc.setAlias(controllerName); if (isUseMD5) { - String name = DocUtil.handleId(apiDoc.getName()); + String name = DocUtil.generateId(apiDoc.getName()); apiDoc.setAlias(name); } apiDoc.setDesc(cls.getComment()); @@ -88,7 +91,7 @@ public interface IDocBuildTemplate { if (JavaClassValidateUtil.isPrimitive(gicName)) { return ParamsBuildHelper.primitiveReturnRespComment("array of " + DocClassUtil.processTypeNameForParams(gicName)); } - return ParamsBuildHelper.buildParams(gicName, "", 0, null, projectBuilder.getCustomRespFieldMap(), true, new HashMap<>(), projectBuilder); + return ParamsBuildHelper.buildParams(gicName, "", 0, null, projectBuilder.getCustomRespFieldMap(), Boolean.TRUE, new HashMap<>(), projectBuilder); } else { return null; } @@ -101,10 +104,10 @@ public interface IDocBuildTemplate { if (JavaClassValidateUtil.isPrimitive(keyValue[1])) { return ParamsBuildHelper.primitiveReturnRespComment("key value"); } - return ParamsBuildHelper.buildParams(keyValue[1], "", 0, null, projectBuilder.getCustomRespFieldMap(), true, new HashMap<>(), projectBuilder); + return ParamsBuildHelper.buildParams(keyValue[1], "", 0, null, projectBuilder.getCustomRespFieldMap(), Boolean.TRUE, new HashMap<>(), projectBuilder); } if (StringUtil.isNotEmpty(returnType)) { - return ParamsBuildHelper.buildParams(returnType, "", 0, null, projectBuilder.getCustomRespFieldMap(), true, new HashMap<>(), projectBuilder); + return ParamsBuildHelper.buildParams(returnType, "", 0, null, projectBuilder.getCustomRespFieldMap(), Boolean.TRUE, new HashMap<>(), projectBuilder); } return null; } diff --git a/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java b/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java index 09aa78a..324ae3f 100644 --- a/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java +++ b/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java @@ -78,7 +78,7 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { for (JavaAnnotation annotation : classAnnotations) { String annotationName = annotation.getType().getName(); if (DocAnnotationConstants.REQUEST_MAPPING.equals(annotationName) || DocGlobalConstants.REQUEST_MAPPING_FULLY.equals(annotationName)) { - if(annotation.getNamedParameter("value")!=null){ + if (annotation.getNamedParameter("value") != null) { baseUrl = StringUtil.removeQuotes(annotation.getNamedParameter("value").toString()); } } @@ -87,7 +87,7 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { List methodDocList = new ArrayList<>(methods.size()); int methodOrder = 0; for (JavaMethod method : methods) { - if (method.getModifiers().contains("private")) { + if (method.isPrivate()) { continue; } if (StringUtil.isEmpty(method.getComment()) && apiConfig.isStrict()) { @@ -98,7 +98,7 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { apiMethodDoc.setOrder(methodOrder); apiMethodDoc.setDesc(method.getComment()); apiMethodDoc.setName(method.getName()); - String methodUid = DocUtil.handleId(clazName + method.getName()); + String methodUid = DocUtil.generateId(clazName + method.getName()); apiMethodDoc.setMethodId(methodUid); String apiNoteValue = DocUtil.getNormalTagComments(method, DocTags.API_NOTE, cls.getName()); if (StringUtil.isEmpty(apiNoteValue)) { @@ -131,7 +131,7 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { String requestJson = requestExample.getExampleBody(); // set request example detail apiMethodDoc.setRequestExample(requestExample); - apiMethodDoc.setRequestUsage(requestJson==null?requestExample.getUrl():requestJson); + apiMethodDoc.setRequestUsage(requestJson == null ? requestExample.getUrl() : requestJson); // build response usage apiMethodDoc.setResponseUsage(JsonBuildHelper.buildReturnJson(method, projectBuilder)); // build response params @@ -261,7 +261,7 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { gicName = gicName.substring(0, gicName.indexOf("[")); } if (!JavaClassValidateUtil.isPrimitive(gicName)) { - throw new RuntimeException("FormData can't support binding Collection on method " + throw new RuntimeException("Spring MVC can't support binding Collection on method " + method.getName() + "Check it in " + method.getDeclaringClass().getCanonicalName()); } FormData formData = new FormData(); diff --git a/src/main/java/com/power/doc/utils/DocUtil.java b/src/main/java/com/power/doc/utils/DocUtil.java index bd16080..6e6e3e0 100644 --- a/src/main/java/com/power/doc/utils/DocUtil.java +++ b/src/main/java/com/power/doc/utils/DocUtil.java @@ -363,7 +363,7 @@ public class DocUtil { * @param value value * @return String */ - public static String handleId(String value) { + public static String generateId(String value) { if (StringUtil.isEmpty(value)) { return null; } diff --git a/src/main/resources/default.json b/src/main/resources/default.json new file mode 100644 index 0000000..be9fd5f --- /dev/null +++ b/src/main/resources/default.json @@ -0,0 +1,50 @@ +{ + "serverUrl": "http://127.0.0.1", + "isStrict": false, + "allInOne": true, + "outPath": "D://md2", + "coverOld": true, + "packageFilters": "", + "md5EncryptedHtmlName": false, + "projectName": "smart-doc", + "skipTransientField": true, + "revisionLogs": [ + { + "version": "1.0", + "status": "use", + "author": "author", + "revisionTime": "2019-10-12", + "remarks": "desc" + } + ], + "errorCodes": [ + { + "value": "200", + "type": "string", + "desc": "desc" + } + ], + "customResponseFields": [ + { + "name": "name", + "desc": "desc", + "ownerClassName": "ownerClassName", + "value": "value" + } + ], + "requestHeaders": [ + { + "name": "token", + "type": "string", + "desc": "desc", + "required": false, + "since": "-" + } + ], + "sourceCodePaths": [ + { + "path": "src/main/java", + "desc": "测试" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/smart-doc.json b/src/main/resources/smart-doc.json new file mode 100644 index 0000000..a33c4e2 --- /dev/null +++ b/src/main/resources/smart-doc.json @@ -0,0 +1,66 @@ +{ + "serverUrl": "http://127.0.0.1", + "isStrict": false, + "allInOne": true, + "outPath": "D://md2", + "coverOld": true, + "packageFilters": "", + "md5EncryptedHtmlName": false, + "projectName": "smart-doc", + "skipTransientField": true, + "dataDictionaries": [ + { + "title": "title", + "enumClassName": "com.data.Enum", + "codeField": "codeField", + "descField": "descField" + } + ], + "errorCodeDictionaries": [ + { + "title": "title", + "enumClassName": "com.data.Enum", + "codeField": "codeField", + "descField": "descField" + } + ], + "revisionLogs": [ + { + "version": "1.0", + "status": "use", + "author": "author", + "revisionTime": "2019-10-12", + "remarks": "desc" + } + ], + "errorCodes": [ + { + "value": "200", + "type": "string", + "desc": "desc" + } + ], + "customResponseFields": [ + { + "name": "name", + "desc": "desc", + "ownerClassName": "ownerClassName", + "value": "value" + } + ], + "requestHeaders": [ + { + "name": "token", + "type": "string", + "desc": "desc", + "required": false, + "since": "-" + } + ], + "sourceCodePaths": [ + { + "path": "src/main/java", + "desc": "测试" + } + ] +} \ No newline at end of file