All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.zlyx.easy.drools.reader.DroolsReader Maven / Gradle / Ivy

There is a newer version: 4.3.11
Show newest version
package com.zlyx.easy.drools.reader;

import java.io.File;
import java.io.FileInputStream;

import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.ImportDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.TypeDeclaration;
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
import com.zlyx.easy.core.reflect.ClassBody;
import com.zlyx.easy.core.reflect.ClassBuilder;
import com.zlyx.easy.core.utils.ClassUtils;

/**
 * 解析类文件工具
 *
 * @Author 赵光
 * @Desc MethodReader
 * @Date 2020年5月30日
 */
public class DroolsReader {

	/**
	 * 将java类解析为ClassBody对象
	 *
	 * @param cls  类
	 * @param name 方法名
	 * @return
	 * @throws Exception
	 */
	public static ClassBody parse(Class cls) throws Exception {
		String classPath = ClassUtils.getClassPath(cls);
		ClassBody classBody = ClassBuilder.newBody(cls);
		FileInputStream in = new FileInputStream(new File(classPath));
		CompilationUnit cu = JavaParser.parse(in);
		if (cu.getTypes().size() > 0) {
			for (ImportDeclaration importDeclaration : cu.getImports()) {
				classBody.importClass(importDeclaration.toString());
			}
			TypeDeclaration typeDeclaration = cu.getTypes().get(0);
			if (typeDeclaration.hasJavaDocComment()) {
				classBody.header(typeDeclaration.getJavadocComment().get().toString());
			}
			new VoidVisitorAdapter() {
				@Override
				public void visit(MethodDeclaration methodDeclaration, Void arg) {
					String methodBody = methodDeclaration.getBody().get().toString();
					methodBody = methodBody.substring(1, methodBody.length() - 1);
					classBody.method(methodDeclaration.getNameAsString(), methodBody);
				}
			}.visit(cu, null);
		}
		return classBody;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy