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 25e2839

Browse files
committed
back
1 parent 2e9df32 commit 25e2839

File tree

10 files changed

+105
-28
lines changed

10 files changed

+105
-28
lines changed

‎build.gradle‎

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,16 @@ version '1.0-SNAPSHOT'
88
sourceCompatibility = 1.8
99

1010
repositories {
11-
// using the local
12-
if (project.version.endsWith('-SNAPSHOT')) {
13-
mavenLocal()
14-
}
15-
else {
16-
mavenCentral()
17-
}
18-
11+
mavenLocal()
12+
mavenCentral()
1913
}
2014

2115
dependencies {
2216
testCompile group: 'junit', name: 'junit', version: '4.12'
2317
compile 'com.google.guava:guava:27.1-jre'
2418
compileOnly "org.projectlombok:lombok:1.16.16"
2519
implementation 'com.github.javaparser:javaparser-symbol-solver-core:3.14.4-SNAPSHOT'
20+
// https://mvnrepository.com/artifact/org.springframework/spring-webmvc
21+
implementation 'org.springframework.boot:spring-boot-starter-web'
22+
2623
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.hsjfans.github.model;
2+
3+
import com.google.common.collect.Maps;
4+
5+
import java.io.Serializable;
6+
import java.util.Map;
7+
import java.util.concurrent.ConcurrentMap;
8+
9+
/**
10+
* @author hsjfans[hsjfans.scholar@gmail.com]
11+
*/
12+
public class ApiTree implements Serializable {
13+
14+
private static final ConcurrentMap<Class<?>,ControllerClass> controllerClassMap
15+
= Maps.newConcurrentMap();
16+
17+
/**
18+
* insert the controller cl
19+
* @param cl
20+
*/
21+
public void insert(Class<?> cl,ControllerClass controllerClass){
22+
controllerClassMap.putIfAbsent(cl,controllerClass);
23+
}
24+
25+
public static ConcurrentMap<Class<?>, ControllerClass> getControllerClassMap() {
26+
return controllerClassMap;
27+
}
28+
}

‎src/main/java/com/hsjfans/github/model/ControllerClass.java‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
*/
88
public class ControllerClass implements Serializable {
99

10+
11+
private Class<?> aClass;
12+
1013
/**
1114
* the class name `@name`
1215
*/
@@ -30,4 +33,13 @@ public class ControllerClass implements Serializable {
3033
private Constant.RequestMethod[] methods;
3134

3235

36+
/**
37+
*
38+
*/
39+
private ControllerMethod controllerMethod;
40+
41+
42+
43+
44+
3345
}

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

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

33
import com.github.javaparser.ast.CompilationUnit;
4+
import com.hsjfans.github.model.ApiTree;
5+
import com.hsjfans.github.model.ControllerClass;
46
import com.hsjfans.github.util.ClassUtils;
57
import com.hsjfans.github.util.LogUtil;
68

@@ -19,21 +21,23 @@ public abstract class AbstractParser implements Parser {
1921

2022
protected abstract Set<CompilationUnit> getAllControllerClass(Set<File> javaFiles);
2123

22-
protected abstract void parseCompilationUnit(CompilationUnit compilationUnit);
24+
protected abstract ControllerClass parseCompilationUnit(CompilationUnit compilationUnit);
2325

2426

2527
@Override
26-
public void parse(String projectPath,boolean recursive) throws ParserException {
28+
public ApiTree parse(String projectPath,boolean recursive) throws ParserException {
2729
LogUtil.info("开始解析 projectPath# "+projectPath);
2830
Set<File> javaFiles = ClassUtils.scan(projectPath,true);
2931
Set<CompilationUnit> compilationUnits = getAllControllerClass(javaFiles);
3032
compilationUnits.forEach(this::parseCompilationUnit);
33+
return null;
3134
}
3235

3336

3437
@Override
35-
public void parse(List<String> projectPaths, boolean recursive) throws ParserException {
38+
public ApiTree parse(List<String> projectPaths, boolean recursive) throws ParserException {
3639
// todo
40+
return null;
3741
}
3842

3943

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

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

33
import com.github.javaparser.ast.CompilationUnit;
4+
import com.hsjfans.github.model.ApiTree;
45

56
import java.util.List;
67

@@ -21,7 +22,7 @@ public interface Parser {
2122
* @param recursive recursive scan or not
2223
* @throws ParserException
2324
*/
24-
void parse(String projectPath,boolean recursive) throws ParserException;
25+
ApiTree parse(String projectPath,boolean recursive) throws ParserException;
2526

2627

2728
/**
@@ -33,7 +34,7 @@ public interface Parser {
3334
* @param recursive recursive scan or not
3435
* @throws ParserException
3536
*/
36-
void parse(List<String> projectPaths,boolean recursive) throws ParserException;
37+
ApiTree parse(List<String> projectPaths,boolean recursive) throws ParserException;
3738

3839

3940

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

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
44
import com.github.javaparser.ast.CompilationUnit;
55
import com.github.javaparser.ast.PackageDeclaration;
66
import com.github.javaparser.ast.body.TypeDeclaration;
7-
import com.github.javaparser.javadoc.description.JavadocInlineTag;
87
import com.google.common.collect.Sets;
9-
import com.hsjfans.github.model.Param;
8+
import com.hsjfans.github.model.ControllerClass;
109
import com.hsjfans.github.util.ClassUtils;
11-
import com.hsjfans.github.util.CommentUtil;
10+
import com.hsjfans.github.util.CollectionUtil;
1211
import com.hsjfans.github.util.Constant;
1312
import com.hsjfans.github.util.LogUtil;
13+
import org.springframework.web.bind.annotation.*;
1414

1515
import java.io.File;
16+
import java.lang.annotation.Annotation;
17+
import java.util.Map;
1618
import java.util.Optional;
1719
import java.util.Set;
1820

@@ -52,26 +54,40 @@ protected Set<CompilationUnit> getAllControllerClass(Set<File> javaFiles) {
5254
}
5355

5456
@Override
55-
protected void parseCompilationUnit(CompilationUnit compilationUnit) {
57+
protected ControllerClass parseCompilationUnit(CompilationUnit compilationUnit) {
58+
ControllerClass controllerClass = null;
5659
Optional<PackageDeclaration> packageDeclaration = compilationUnit.getPackageDeclaration();
5760
if(!packageDeclaration.isPresent()){
58-
return;
61+
returnnull;
5962
}
6063
String packageName = packageDeclaration.get().getNameAsString();
6164
Optional<TypeDeclaration<?>> typeDeclaration = compilationUnit.getPrimaryType();
6265
if(!typeDeclaration.isPresent()){
63-
return;
66+
returnnull;
6467
}
6568
String className = packageName+"."+typeDeclaration.get().getName();
6669
Class<?> cl ;
6770
try {
6871
cl = classLoader.loadClass(className);
6972
}catch (Exception e){
7073
LogUtil.warn(e.getMessage());
71-
return;
74+
returnnull;
7275
}
7376

74-
Param param = ClassUtils.parseClassComment(typeDeclaration.get().getComment().orElse(null),cl);
77+
Map<Class<?>, Annotation> annotationMap = CollectionUtil.convertToMap(
78+
cl.getAnnotations()
79+
);
80+
81+
if(!annotationMap.containsKey(Controller.class)&&!annotationMap.containsKey(RestController.class)){
82+
return null;
83+
}
84+
85+
// contain `RequestMapping(Value="")`
86+
if(annotationMap.containsKey(RequestMapping.class)){
87+
((RequestMapping)annotationMap.get(RequestMapping.class))
88+
}
89+
90+
controllerClass = ClassUtils.parseClassComment(typeDeclaration.get().getComment().orElse(null),cl);
7591

7692

7793

‎src/main/java/com/hsjfans/github/util/ClassUtils.java‎

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import com.github.javaparser.ast.PackageDeclaration;
77
import com.github.javaparser.ast.body.TypeDeclaration;
88
import com.github.javaparser.ast.comments.Comment;
9+
import com.github.javaparser.javadoc.Javadoc;
10+
import com.github.javaparser.javadoc.JavadocBlockTag;
11+
import com.hsjfans.github.model.ControllerClass;
912
import com.hsjfans.github.model.Param;
1013

1114
import java.io.File;
@@ -136,13 +139,18 @@ public static Param parseFieldComment(Comment comment, Field field){
136139
* @param cl @Ignore
137140
* @return
138141
*/
139-
public static Param parseClassComment(Comment comment,Class<?> cl){
142+
public static ControllerClass parseClassComment(Comment comment,Class<?> cl){
140143
if(comment==null){return null;}
144+
Javadoc javadoc = comment.parse();
145+
javadoc.getBlockTags().forEach(
146+
a->{
147+
if(!a.getTagName().equals(JavadocBlockTag.Type.IGNORE
148+
&&a.getTagName().equals())){
141149

142-
CommentUtil.parseParam(comment);
150+
}
151+
}
152+
);
143153

144-
// todo
145-
return null;
146154
}
147155

148156

‎src/main/java/com/hsjfans/github/util/CollectionUtil.java‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.hsjfans.github.util;
22

3+
import com.google.common.collect.Maps;
34
import com.google.common.collect.Sets;
45

56
import java.lang.annotation.Annotation;
7+
import java.util.Map;
68
import java.util.Set;
79

810
/**
@@ -33,4 +35,14 @@ public static boolean contain(Annotation[] annotations,Class<?> a){
3335
}
3436
return false;
3537
}
38+
39+
40+
public static Map<Class<?>,Annotation> convertToMap(Annotation[] annotations){
41+
Map<Class<?>,Annotation> annotationMap = Maps.newConcurrentMap();
42+
for(Annotation annotation:annotations){
43+
annotationMap.put(annotation.getClass(),annotation);
44+
}
45+
return annotationMap;
46+
}
47+
3648
}

‎src/main/java/com/hsjfans/github/util/CommentUtil.java‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ public class CommentUtil {
2828
public static List<Map<String,String>> parseParam(Comment comment){
2929

3030
Javadoc javadoc = comment.parse();
31-
System.out.println(comment.getContent());
32-
System.out.println(javadoc.getBlockTags());
33-
System.out.println("\n");
31+
3432

3533
return null;
3634

‎src/main/java/com/hsjfans/github/util/Constant.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class Constant {
1212
public static final String SPRING_REQUEST_MAPPING = "RequestMapping";
1313

1414

15+
1516
public static enum RequestMethod{
1617
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
1718
}

0 commit comments

Comments
(0)

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