Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 80b6bfa

Browse files
committed
update jar
1 parent 1abb338 commit 80b6bfa

File tree

5 files changed

+153
-149
lines changed

5 files changed

+153
-149
lines changed

‎build.gradle‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,5 @@ dependencies {
3030
compileOnly "org.projectlombok:lombok:1.16.16"
3131
annotationProcessor "org.projectlombok:lombok:1.16.16"
3232
implementation 'com.github.javaparser:javaparser-symbol-solver-core:3.14.4-SNAPSHOT'
33-
3433

3534
}

‎src/main/java/com/hsjfans/github/config/Config.java‎

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,24 @@
99
public class Config {
1010

1111
/**
12-
* package name
12+
* package name
1313
*/
1414
private String packageName;
1515

1616
/**
1717
* the path to store the generated docs
18-
*
18+
* <p>
1919
* default is src/static/
2020
*/
2121
private String outPath = "src/static/";
2222

2323
/**
24-
* the path of classes files
24+
* the default build jar path
25+
*/
26+
private String jarPath = "build/libs/";
27+
28+
/**
29+
* the path of classes files
2530
*/
2631
private String classPath;
2732

@@ -30,30 +35,29 @@ public class Config {
3035

3136

3237
/**
33-
* the repository of gradle
38+
* the repository of gradle
3439
*/
3540
private String gradlePath;
3641

3742

3843
/**
39-
* the repository of maven
44+
* the repository of maven
4045
*/
4146
private String mvnPath;
4247

4348

4449
/**
45-
* api doc name - xxx 接口文档
50+
* api doc name - xxx 接口文档
4651
*/
4752
private String docName;
4853

4954

5055
private String apiName;
5156

5257

53-
public String getOutPath(){
54-
return this.outPath+this.apiName+"/";
58+
public String getOutPath(){
59+
return this.outPath + this.apiName + "/";
5560
}
5661

5762

58-
5963
}

‎src/main/java/com/hsjfans/github/parser/AbstractParser.java‎

Lines changed: 64 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.hsjfans.github.parser;
22

3-
import com.github.javaparser.ast.CompilationUnit;
43
import com.github.javaparser.ast.body.FieldDeclaration;
54
import com.github.javaparser.ast.body.MethodDeclaration;
65
import com.github.javaparser.ast.body.TypeDeclaration;
@@ -16,7 +15,10 @@
1615
import com.hsjfans.github.util.*;
1716

1817
import java.io.File;
19-
import java.lang.reflect.*;
18+
import java.lang.reflect.Method;
19+
import java.lang.reflect.Modifier;
20+
import java.lang.reflect.Parameter;
21+
import java.lang.reflect.Type;
2022
import java.util.Arrays;
2123
import java.util.List;
2224
import java.util.Optional;
@@ -26,17 +28,17 @@
2628
* @author hsjfans[hsjfans.scholar@gmail.com]
2729
*/
2830

29-
public abstract class AbstractParser implements Parser {
31+
public abstract class AbstractParser implements Parser {
3032

31-
public static ClassLoader classLoader;
33+
public static ClassLoader classLoader;
3234

3335
protected final Config config;
3436

3537
private final ApiTree apiTree;
3638

37-
public AbstractParser(Config config){
39+
public AbstractParser(Config config){
3840
this.config = config;
39-
classLoader = new GradleClassLoader(config);
41+
classLoader = new ApiClassLoader(config);
4042
this.apiTree = new ApiTree();
4143
}
4244

@@ -47,17 +49,18 @@ public AbstractParser(Config config){
4749

4850

4951
/**
50-
* 解析单个 controllerClass 文件
52+
* 解析单个 controllerClass 文件
53+
*
5154
* @param cl not null
5255
* @return the controllerMethod
5356
* @see ControllerClass
5457
*/
55-
protected ControllerClass parseControllerClass(Class<?> cl){
58+
protected ControllerClass parseControllerClass(Class<?> cl){
5659

57-
ControllerClass controllerClass =ControllerClass.of(cl);
60+
ControllerClass controllerClass =ControllerClass.of(cl);
5861

5962
//第一步 解析 controller 注释
60-
parseControllerClassDoc(cl,controllerClass);
63+
parseControllerClassDoc(cl,controllerClass);
6164

6265
//第二步 解析 设置 method
6366
controllerClass.setControllerMethod(parseControllerMethods(cl));
@@ -68,21 +71,22 @@ protected ControllerClass parseControllerClass(Class<?> cl){
6871

6972

7073
/**
71-
* 解析 class 的 methods
74+
* 解析 class 的 methods
75+
*
7276
* @param cl not null
7377
* @return ControllerMethods
7478
*/
75-
protected List<ControllerMethod> parseControllerMethods(Class<?> cl){
79+
protected List<ControllerMethod> parseControllerMethods(Class<?> cl){
7680

7781
Method[] methods = cl.getDeclaredMethods();
7882
TypeDeclaration<?> typeDeclaration = ClassCache.getTypeDeclaration(cl.getName());
7983
List<ControllerMethod> controllerMethods = Lists.newArrayListWithCapacity(methods.length);
8084
// just public method
8185
// and has PostMapping GetMapping ...
8286
Arrays.stream(methods).filter(SpringUtil::isSpringMethods).forEach(method -> {
83-
List<MethodDeclaration> methodDeclarations = typeDeclaration.getMethodsBySignature(method.getName(),ClassUtils.methodSignature(method));
84-
if(methodDeclarations.size()>0){
85-
Optional.ofNullable(parseControllerMethod(methodDeclarations.get(0),method)).ifPresent(controllerMethods::add);
87+
List<MethodDeclaration> methodDeclarations = typeDeclaration.getMethodsBySignature(method.getName(),ClassUtils.methodSignature(method));
88+
if(methodDeclarations.size() > 0) {
89+
Optional.ofNullable(parseControllerMethod(methodDeclarations.get(0),method)).ifPresent(controllerMethods::add);
8690
}
8791
});
8892
return controllerMethods;
@@ -91,30 +95,30 @@ protected List<ControllerMethod> parseControllerMethods(Class<?> cl){
9195
protected abstract List<ClassField> parseParameterClassField(Parameter parameter);
9296

9397

94-
protected abstract ControllerMethod parseControllerMethod(MethodDeclaration methodDeclaration, Method method);
98+
protected abstract ControllerMethod parseControllerMethod(MethodDeclaration methodDeclaration, Method method);
9599

96100

97101
/**
98-
* 过滤 java 文件
102+
* 过滤 java 文件
99103
*/
100-
protected Set<Class<?>> parseJavaFiles(Set<File> javaFiles){
104+
protected Set<Class<?>> parseJavaFiles(Set<File> javaFiles){
101105

102106
final Set<Class<?>> controllerClasses = Sets.newHashSet();
103-
javaFiles.forEach(file->{
104-
if(!FileUtil.filterTest(config.getPackageName(),file)){
107+
javaFiles.forEach(file -> {
108+
if(!FileUtil.filterTest(config.getPackageName(),file)){
105109
Optional.ofNullable(ClassUtils.parseJavaFile(file)).ifPresent(compilationUnit -> {
106110
compilationUnit.getPackageDeclaration().ifPresent(packageDeclaration -> {
107111
String packageName = packageDeclaration.getNameAsString();
108112
compilationUnit.getPrimaryType().ifPresent(typeDeclaration -> {
109-
String className = packageName+"."+typeDeclaration.getName();
110-
Class<?> cl;
113+
String className = packageName + "." + typeDeclaration.getName();
114+
Class<?> cl;
111115
try {
112116
cl = classLoader.loadClass(className);
113-
ClassCache.putTypeDeclaration(className,typeDeclaration);
114-
ClassCache.putClass(className,cl);
117+
ClassCache.putTypeDeclaration(className,typeDeclaration);
118+
ClassCache.putClass(className,cl);
115119
controllerClasses.add(cl);
116120
} catch (ClassNotFoundException e) {
117-
LogUtil.error(" 加载类失败 e={} ",e);
121+
LogUtil.error(" 加载类失败 e={} ",e);
118122
}
119123
});
120124
});
@@ -130,20 +134,20 @@ protected Set<Class<?>> parseJavaFiles(Set<File> javaFiles){
130134

131135
@Override
132136
public ApiTree parse(String projectPath, boolean recursive) throws ParserException {
133-
LogUtil.info("开始解析 projectPath = %s ",projectPath);
134-
Set<File> javaFiles = ClassUtils.scan(projectPath,true);
137+
LogUtil.info("开始解析 projectPath = %s ",projectPath);
138+
Set<File> javaFiles = ClassUtils.scan(projectPath,true);
135139
Set<ControllerClass> controllerClasses = Sets.newHashSet();
136-
getAllControllerClass(javaFiles).forEach(cl-> controllerClasses.add(this.parseControllerClass(cl)));
140+
getAllControllerClass(javaFiles).forEach(cl-> controllerClasses.add(this.parseControllerClass(cl)));
137141
this.apiTree.insertAll(controllerClasses);
138142
return apiTree;
139143
}
140144

141145

142146
@Override
143147
public ApiTree parse(List<String> projectPaths, boolean recursive) throws ParserException {
144-
projectPaths.forEach(path->{
148+
projectPaths.forEach(path -> {
145149
try {
146-
this.apiTree.union(this.parse(path,recursive));
150+
this.apiTree.union(this.parse(path,recursive));
147151
} catch (ParserException e) {
148152
e.printStackTrace();
149153
}
@@ -152,115 +156,113 @@ public ApiTree parse(List<String> projectPaths, boolean recursive) throws Parser
152156
}
153157

154158

155-
156159
/**
157-
*
158160
* 解析 field 参数
159161
* 支持`request`请求以及`response`返回值
162+
*
160163
* @param request the request param class
161164
*/
162-
protected static List<ClassField> parserClassFields(Type type,Class<?> request, boolean response){
165+
protected static List<ClassField> parserClassFields(Type type,Class<?> request, boolean response){
163166

164167
List<ClassField> classFields = Lists.newArrayList();
165168

166-
if(request.isEnum()){
169+
if(request.isEnum()){
167170
ClassField classField = new ClassField();
168171
Object[] enumValues = ClassUtils.getEnumValues(request);
169172
classField.setType("String");
170173
classField.setEnumValues(enumValues);
171174
classField.setEnumType(true);
172175
classFields.add(classField);
173176
return classFields;
174-
} else if(request.isArray()){
177+
} else if(request.isArray()){
175178
ClassField classField = new ClassField();
176179
classField.setType(request.getTypeName());
177180
classField.setName(request.getSimpleName());
178181
classField.setArray(true);
179-
classField.setFields(parserClassFields(type,request.getComponentType(),response));
182+
classField.setFields(parserClassFields(type,request.getComponentType(),response));
180183
classFields.add(classField);
181184
return classFields;
182-
}else{
185+
}else{
183186
// 如果是标准库的集合类型
184-
Class<?> c = ClassUtils.isCollection(type);
185-
if(c!=null){
187+
Class<?> c = ClassUtils.isCollection(type);
188+
if (c != null){
186189
ClassField classField = new ClassField();
187190
classField.setType(request.getTypeName());
188191
classField.setName(request.getSimpleName());
189192
classField.setArray(true);
190-
classField.setFields(parserClassFields(c.getComponentType(),c,response));
193+
classField.setFields(parserClassFields(c.getComponentType(),c, response));
191194
classFields.add(classField);
192195
return classFields;
193196
}
194197

195198
}
196199

197200
TypeDeclaration typeDeclaration = ClassCache.getTypeDeclaration(request.getName());
198-
if (typeDeclaration==null){
199-
LogUtil.error(" 没有找到对应的 typeDeclaration key= %s ",request.getName());
201+
if (typeDeclaration == null){
202+
LogUtil.error(" 没有找到对应的 typeDeclaration key= %s ",request.getName());
200203
return classFields;
201204
}
202205

203206
// 结构字段解析
204207
Arrays.stream(request.getDeclaredFields()).filter(
205-
field -> !field.isSynthetic()&&
208+
field -> !field.isSynthetic()&&
206209
(field.getModifiers() & Modifier.FINAL) == 0
207-
&& (field.getModifiers() & Modifier.STATIC)==0
208-
&& (field.getModifiers() & Modifier.NATIVE)==0
209-
&& (field.getModifiers() & Modifier.ABSTRACT)==0
210-
&& (field.getModifiers() & Modifier.INTERFACE)==0
211-
&& (field.getModifiers() & Modifier.TRANSIENT)==0
210+
&& (field.getModifiers() & Modifier.STATIC) == 0
211+
&& (field.getModifiers() & Modifier.NATIVE) == 0
212+
&& (field.getModifiers() & Modifier.ABSTRACT) == 0
213+
&& (field.getModifiers() & Modifier.INTERFACE) == 0
214+
&& (field.getModifiers() & Modifier.TRANSIENT) == 0
212215
).forEach(field -> {
213216
// 类型信息,这里填充
214217
ClassField classField = new ClassField();
215218
classField.setType(field.getType().getTypeName());
216219
classField.setName(field.getName());
217220
// 先填充注释信息
218221
typeDeclaration.getFieldByName(field.getName()).ifPresent(fieldDeclaration -> {
219-
if(((FieldDeclaration)fieldDeclaration).getComment().isPresent()){
220-
Javadoc javadoc = ((FieldDeclaration)fieldDeclaration).getComment().get().parse();
222+
if(((FieldDeclaration)fieldDeclaration).getComment().isPresent()){
223+
Javadoc javadoc = ((FieldDeclaration)fieldDeclaration).getComment().get().parse();
221224

222-
Optional<JavadocBlockTag> ignoreOpt = CollectionUtil.contains(javadoc.getBlockTags(),JavadocBlockTag.Type.IGNORE);
225+
Optional<JavadocBlockTag> ignoreOpt = CollectionUtil.contains(javadoc.getBlockTags(),JavadocBlockTag.Type.IGNORE);
223226
ignoreOpt.ifPresent(javadocBlockTag -> {
224227
classField.setIgnore(true);
225228
classField.setDescription(javadocBlockTag.getContent().toText());
226229
});
227-
if(classField.isIgnore()){
230+
if(classField.isIgnore()){
228231
return;
229232
}
230233
// if contains `@name`
231-
CollectionUtil.contains(javadoc.getBlockTags(),JavadocBlockTag.Type.NAME).ifPresent(javadocBlockTag -> {
234+
CollectionUtil.contains(javadoc.getBlockTags(),JavadocBlockTag.Type.NAME).ifPresent(javadocBlockTag -> {
232235
classField.setName(javadocBlockTag.getContent().toText());
233236
classField.setDescription(javadocBlockTag.getContent().toText());
234237
});
235238
// if contains `@fuzzy`
236-
CollectionUtil.contains(javadoc.getBlockTags(),JavadocBlockTag.Type.FUZZY).ifPresent(javadocBlockTag -> {
239+
CollectionUtil.contains(javadoc.getBlockTags(),JavadocBlockTag.Type.FUZZY).ifPresent(javadocBlockTag -> {
237240
classField.setFuzzy(true);
238241
classField.setDescription(javadocBlockTag.getContent().toText());
239242
});
240243
// if contains `@nullable`
241-
CollectionUtil.contains(javadoc.getBlockTags(),JavadocBlockTag.Type.NULLABLE).ifPresent(javadocBlockTag -> {
244+
CollectionUtil.contains(javadoc.getBlockTags(),JavadocBlockTag.Type.NULLABLE).ifPresent(javadocBlockTag -> {
242245
classField.setNullable(true);
243246
classField.setDescription(javadocBlockTag.getContent().toText());
244247
});
245-
if(!javadoc.getDescription().toText().isEmpty()){
248+
if(!javadoc.getDescription().toText().isEmpty()){
246249
classField.setDescription(javadoc.getDescription().toText());
247250
}
248251
}
249252
});
250253

251254
// 如果 参数被忽略,跳过
252-
if(classField.isIgnore()&&!response){
255+
if(classField.isIgnore() && !response){
253256
return;
254257
}
255258
// 如果是基本类型,这里直接进行解析
256-
if(ClassUtils.isFieldPrimitive(field)||field.getType().equals(String.class)|ClassUtils.isTime(field.getType())){
259+
if(ClassUtils.isFieldPrimitive(field) || field.getType().equals(String.class) | ClassUtils.isTime(field.getType())){
257260
// nothing to do
258261
classFields.add(classField);
259262
return;
260-
}
261-
else {
262-
classField.setFields(parserClassFields(field.getGenericType(),field.getType(),response));
263-
if(field.getType().isEnum()){
263+
} else {
264+
classField.setFields(parserClassFields(field.getGenericType(), field.getType(), response));
265+
if (field.getType().isEnum()) {
264266
classField.setEnumType(true);
265267
classField.setEnumValues(classField.getFields().get(0).getEnumValues());
266268
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /