compilationUnit : compilationUnits) { GeneratedJavaFile gjf = new GeneratedJavaFile( compilationUnit : compilationUnits) { GeneratedJavaFile gjf = new GeneratedJavaFile( compilationUnit) { //生成的是 JavaModel 和 JavaModelExample 文件 if(compilationUnit instanceof TopLevelClass ; String shortName = compilationUnit.getType().getShortName(); topLevelClass.addAnnotation("@ instanceof Interface){ Interface anInterface = (Interface)compilationUnit; //下面的可以给JavaFile
org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.CompilationUnit false); field.addJavaDocLine(" */"); } @Override public void addJavaFileComment(CompilationUnit compilationUnit) { super.addJavaFileComment(compilationUnit); //只在model中添加swagger注解类的导入 compilationUnit.isJavaInterface()&&! compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){ compilationUnit.addImportedType
doAction(String content) { JavaParser javaParser = createJavaParser(); ParseResult<CompilationUnit > result = javaParser.parse(content); Optional<CompilationUnit> optionalCompilationUnit = result.getResult optionalCompilationUnit.isPresent()) { return ""; } CompilationUnit compilationUnit (compilationUnit); } private static void removeComments(CompilationUnit compilationUnit) { List<Comment> comments = compilationUnit.getAllContainedComments(); List<Comment> unwantedComments
org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.CompilationUnit false); field.addJavaDocLine(" */"); } @Override public void addJavaFileComment(CompilationUnit compilationUnit) { super.addJavaFileComment(compilationUnit); //只在model中添加swagger注解类的导入 compilationUnit.isJavaInterface()&&! compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){ compilationUnit.addImportedType
groovy.lang.GroovyClassLoader$ClassCollector.call(GroovyClassLoader.java:521) at org.codehaus.groovy.control.CompilationUnit $16.call(CompilationUnit.java:822) at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes (CompilationUnit.java:1053) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java :591) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java: 569) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546) at groovy.lang.GroovyClassLoader.doParseClass
doAction(String content) { JavaParser javaParser = createJavaParser(); ParseResult<CompilationUnit > result = javaParser.parse(content); Optional<CompilationUnit> optionalCompilationUnit = result.getResult optionalCompilationUnit.isPresent()) { return ""; } CompilationUnit compilationUnit (compilationUnit); } private static void removeComments(CompilationUnit compilationUnit) { List<Comment> comments = compilationUnit.getAllContainedComments(); List<Comment>
org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.CompilationUnit false); field.addJavaDocLine(" */"); } @Override public void addJavaFileComment(CompilationUnit compilationUnit) { super.addJavaFileComment(compilationUnit); //只在model中添加swagger注解类的导入 compilationUnit.isJavaInterface()&&! compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){ compilationUnit.addImportedType
,如import io.swagger.annotations.ApiModelProperty; * * @param compilationUnit the compilation unit */ @Override public void addJavaFileComment(CompilationUnit compilationUnit) { super.addJavaFileComment(compilationUnit); // 只在model中的非Example添加swagger注解类的导入 // 这是防止上述添加了 compilationUnit.getType().getFullyQualifiedName().contains(MAPPER_SUFFIX) && ! compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)) { compilationUnit.addImportedType
compilationUnit) { compilationUnit.addFileCommentLine("/*** copyright (c) 2019 Marvis addServiceInterface = addServiceInterface(introspectedTable, targetPackage); CompilationUnit -> ((Interface) compilationUnit).getMethods().forEach( m -> serviceInterface.addMethod -> ((Interface) compilationUnit).getMethods().forEach(m -> { Method serviceImplMethod introspectedTable.hasBLOBColumns(); } private Method additionalServiceLayerMethod(CompilationUnit
的类,用于扫描Java代码并检测漏洞: import com.github.javaparser.StaticJavaParser; import com.github.javaparser.ast.CompilationUnit String> scan(String sourceCode) { List<String> vulnerabilities = new ArrayList<>(); CompilationUnit compilationUnit = StaticJavaParser.parse(sourceCode); List<MethodDeclaration> methods = compilationUnit.findAll
) )) ); // 创建一个编译单元 CompilationUnitSyntax compilationUnit = SyntaxFactory.CompilationUnit() .AddUsings(SyntaxFactory.UsingDirective(SyntaxFactory.ParseName ) .AddMembers(newClass); // 格式化代码 var formattedCode = Formatter.Format(compilationUnit
SimpleJavaClientGenerator类重写getCompilationUnits方法,如 此代码由Java架构师必看网-架构君整理 @Override public List<CompilationUnit this.addCountListMethod(interfaze); this.addQueryPageListMethod(interfaze); List<CompilationUnit > answer = new ArrayList<CompilationUnit>(); if (this.context.getPlugins().clientGenerated(interfaze TopLevelClass) null, this.introspectedTable)) { answer.add(interfaze); } List<CompilationUnit
The Parse() method then calls void Parse (CompilationUnit file) to start reading from the source code the parsing process by calling the: Collapse | Copy Code void Parse (SeekableStreamReader reader, CompilationUnit CSharpParser by calling the Collapse | Copy Code public CSharpParser(SeekableStreamReader reader, CompilationUnit of the CSharpParser class Collapse | Copy Code public CSharpParser (SeekableStreamReader reader, CompilationUnit )cu[i], ctx); } else { Parse((CompilationUnit)cu[i]); }
更新java文件 在完成对代码的清理之后,需要将内容更新到java文件,CompilationUnit重写了toString方法,可以支持直接将代码转换成字符串的形式。 com.github.javaparser.JavaParser 这是最常用的类,用于触发解析过程并生成AST,在上一章节中,使用StaticJavaParser将源文件解析成CompilationUnit 上一章节使用的com.github.javaparser.ast.CompilationUnit是一个非常重要的类,它代表了Java源代码文件的根节点,是这个结构的抽象表示,包含整个文件的结构,例如: (Package Declaration) 导入声明(Imports) 类型声明(Type Declarations),这可能是类、接口、枚举或注解 注释(Comments) 任何顶级的注解 通过操作CompilationUnit 在上一章节的最后提到的CompilationUnit重写的toString方法,实际上就是使用了Printer来完成AST到源码字符串的转换。
) final_globalCode = "public class test1{"+ final_globalCode + "}";//让globalcode变成符合ast格式 CompilationUnit compilationUnit1 = StaticJavaParser.parse(final_globalCode); convertStringsToByteArrays(compilationUnit1 ); List<MethodDeclaration> methods1 = compilationUnit1.findAll(MethodDeclaration.class); for compilationUnit = StaticJavaParser.parse(final_job_code); convertStringsToByteArrays(compilationUnit ); MethodDeclaration test1_method = compilationUnit.findFirst(MethodDeclaration.class,
org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.CompilationUnit ApiModelProperty(value = \""+remarks+"\")"); } } @Override public void addJavaFileComment(CompilationUnit compilationUnit) { super.addJavaFileComment(compilationUnit); //只在model中添加swagger注解类的导入 String fullyQualifiedName = compilationUnit.getType().getFullyQualifiedName(); if(! fullyQualifiedName.contains(EXAMPLE_SUFFIX)){ compilationUnit.addImportedType(new FullyQualifiedJavaType
GroovyCodeSource codeSource) { validate(codeSource); // 简单校验一些参数是否为null Class answer; CompilationUnit GroovyClassLoader的createCollector方法,如下所示代码3.1.1.3(出自JDK源码): protected ClassCollector createCollector(CompilationUnit return new ClassCollector(loader, unit, su); } public static class ClassCollector extends CompilationUnit.ClassgenCallback protected ClassCollector(InnerLoader cl, CompilationUnit unit, SourceUnit su) { this.cl = cl
GroovyCodeSource codeSource) { validate(codeSource); // 简单校验一些参数是否为null Class answer; CompilationUnit GroovyClassLoader的createCollector方法,如下所示代码3.1.1.3(出自JDK源码): protected ClassCollector createCollector(CompilationUnit return new ClassCollector(loader, unit, su); } public static class ClassCollector extends CompilationUnit.ClassgenCallback protected ClassCollector(InnerLoader cl, CompilationUnit unit, SourceUnit su) { this.cl = cl
语法节点 语法树 CompilationUnit,是语法树的根节点。 例如一个常规的文件的第 0、1 级语法节点通常是这样的: CompilationUnit UsingDirective UsingDirective NamespaceDeclaration
:使用 JavaParser 进行源码解析收起javaimport com.github.javaparser.JavaParser;import com.github.javaparser.ast.CompilationUnit try { // 读取源码文件 File file = new File("src/main/java/Example.java"); CompilationUnit