maven依赖
<dependency>
<groupId>org.eclipse.core</groupId>
<artifactId>org.eclipse.core.resources</artifactId>
<version>3.7.100</version>
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.11.1.v20150902-1521</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
代码
@Slf4j
class JDKParser {
// https://blog.youkuaiyun.com/weixin_36431280/article/details/80717296
public static void main(String[] args) {
ASTParser parser = ASTParser.newParser(AST.JLS4); //设置Java语⾔规范版本
parser.setKind(ASTParser.K_COMPILATION_UNIT);
Map<String, String> compilerOptions = JavaCore.getOptions();
compilerOptions.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_8); //设置Java语⾔版本
compilerOptions.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_8);
compilerOptions.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_8);
parser.setCompilerOptions(compilerOptions); //设置编译选项
char[] src = FileUtil.readString(
"E:\\Data\\Git\\mygit\\skb\\SKB_Report_Sync\\src\\main\\test\\java\\MyTask.java", Charset.defaultCharset())
.toCharArray();
parser.setSource(src);
CompilationUnit comp = (CompilationUnit) parser.createAST(
null);//这个参数是IProgessMonitor,⽤于GUI的进度显⽰,我们不需要,填个null. 返回值是AST的根结点
System.out.println(comp); //把AST直接输出看看啥样
List<Comment> commentList = comp.getCommentList();
Comment comment = commentList.get(0);
log.info("commentList: {}", commentList);
// 获取类
List<TypeDeclaration> types = comp.types();
log.info("types: {}", types);
// 获取方法
MethodDeclaration[] methods = types.get(0).getMethods();
SimpleName name = methods[0].getName();
int startPosition1 = methods[0].getStartPosition();
int endposition = methods[0].getLength() + startPosition1;
int startLineNum = comp.getLineNumber(startPosition1);
int endLineNum = comp.getLineNumber(endposition);
log.info("methodname: {}", name);
log.info("startPosition1: {}", startPosition1);
log.info("startLineNum: {}, endLineNum: {}", startLineNum, endLineNum);
int startPosition = comment.getStartPosition();
int endPosition = startPosition + comment.getLength();
log.info("start: {}, end: {}", startPosition, endPosition);
}
}