From d810a10c7af9df957214bd8b31937f093506945f Mon Sep 17 00:00:00 2001 From: aoshiguchen <1052045476@qq.com> Date: Mon, 12 Sep 2022 20:56:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Ecompiler=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/aop/compiler/AsgcCompiler.java | 77 ++++++++++++++++++- .../aop/compiler/CustomJavaFileObject.java | 2 +- .../core/aop/compiler/DynamicClassLoader.java | 2 +- .../aop/compiler/DynamicJavaFileManager.java | 2 +- .../core/aop/compiler/MemoryByteCode.java | 2 +- .../aop/compiler/PackageInternalsFinder.java | 2 +- .../core/aop/compiler/StringSource.java | 2 +- 7 files changed, 81 insertions(+), 8 deletions(-) diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/AsgcCompiler.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/AsgcCompiler.java index 4d5edf18..1b040b2d 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/AsgcCompiler.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/AsgcCompiler.java @@ -36,7 +36,7 @@ import java.util.*; import java.util.stream.Collectors; /** - * + * asgc编译器 * @author: aoshiguchen * @date: 2022/8/17 */ @@ -58,10 +58,17 @@ public class AsgcCompiler { private final List> errors = new ArrayList>(); private final List> warnings = new ArrayList>(); + /** + * 构造编译器 + */ public AsgcCompiler() { this(ClassLoader.getSystemClassLoader()); } + /** + * 构造编译器 + * @param classLoader + */ public AsgcCompiler(ClassLoader classLoader) { if (null == javaCompiler) { throw new RuntimeException("Can not load JavaCompiler from javax.tools.ToolProvider#getSystemJavaCompiler(),\n please confirm the application running in JDK not JRE."); @@ -78,6 +85,10 @@ public class AsgcCompiler { addOption("-target", "1.8"); } + /** + * 添加类路径 + * @param classpath + */ public void addClasspath(String classpath) { if (this.classpathList.contains(classpath)) { return; @@ -85,18 +96,34 @@ public class AsgcCompiler { this.classpathList.add(classpath); } + /** + * 设置是否保存类文件 + * @param saveClassFile + */ public void setSaveClassFile(boolean saveClassFile) { this.isSaveClassFile = saveClassFile; } + /** + * 设置是否保存源代码文件 + * @param saveSourceCodeFile + */ public void setSaveSourceCodeFile(boolean saveSourceCodeFile) { isSaveSourceCodeFile = saveSourceCodeFile; } + /** + * 设置保存代码路径 + * @param generatorCodeSavePath + */ public void setGeneratorCodeSavePath(String generatorCodeSavePath) { this.generatorCodeSavePath = generatorCodeSavePath; } + /** + * 获取options + * @return + */ private List getOptions() { List list = Lists.newArrayList(options); List cp = getClasspathList(); @@ -107,19 +134,37 @@ public class AsgcCompiler { return list; } + /** + * 添加option + * @param option + */ private void addOption(String option) { this.options.add(option); } + /** + * 添加option + * @param key + * @param val + */ private void addOption(String key, String val) { this.options.add(key); this.options.add(val); } + /** + * 添加源代码 + * @param className + * @param source + */ private void addSource(String className, String source) { addSource(new StringSource(className, source)); } + /** + * 添加源代码 + * @param javaFileObject + */ private void addSource(JavaFileObject javaFileObject) { compilationUnits.add(javaFileObject); } @@ -165,6 +210,11 @@ public class AsgcCompiler { return dynamicClassLoader.findClass(pkg + "." + className); } + /** + * 获取编译诊断信息 + * @param diagnostics + * @return + */ private List diagnosticToString(List> diagnostics) { List diagnosticMessages = new ArrayList(); @@ -178,14 +228,25 @@ public class AsgcCompiler { } + /** + * 获取异常信息 + * @return + */ public List getErrors() { return diagnosticToString(errors); } + /** + * 获取警告信息 + * @return + */ public List getWarnings() { return diagnosticToString(warnings); } + /** + * 打印编译日志 + */ private void log() { List warnings = getWarnings(); List errors = getErrors(); @@ -193,10 +254,14 @@ public class AsgcCompiler { // log.warn(warnings.stream().collect(Collectors.joining())); // } if (!CollectionUtil.isEmpty(errors)) { - log.warn(errors.stream().collect(Collectors.joining())); + log.error(errors.stream().collect(Collectors.joining())); } } + /** + * 获取URL类路径加载器 + * @return + */ private URLClassLoader getURLClassLoader() { ClassLoader ret = Thread.currentThread().getContextClassLoader(); if (null == ret) { @@ -205,6 +270,10 @@ public class AsgcCompiler { return (ret instanceof URLClassLoader) ? (URLClassLoader)ret : null; } + /** + * 获取类路径列表 + * @return + */ public List getClasspathList() { List classpathList = new ArrayList<>(); List defaultClasspathList = getDefaultClasspathList(); @@ -218,6 +287,10 @@ public class AsgcCompiler { return classpathList; } + /** + * 获取默认的类路径列表 + * @return + */ private synchronized List getDefaultClasspathList() { if (!CollectionUtil.isEmpty(defaultClassPathList)) { return defaultClassPathList; diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/CustomJavaFileObject.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/CustomJavaFileObject.java index 34a223d5..2bb5ce9c 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/CustomJavaFileObject.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/CustomJavaFileObject.java @@ -28,7 +28,7 @@ import java.io.*; import java.net.URI; /** - * + * 自定义java文件对象 * @author: aoshiguchen * @date: 2022/8/25 */ diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/DynamicClassLoader.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/DynamicClassLoader.java index bba1c78c..d25ed611 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/DynamicClassLoader.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/DynamicClassLoader.java @@ -37,7 +37,7 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; /** - * + * 动态类加载器 * @author: aoshiguchen * @date: 2022/8/25 */ diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/DynamicJavaFileManager.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/DynamicJavaFileManager.java index 836cce2d..a42b66e1 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/DynamicJavaFileManager.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/DynamicJavaFileManager.java @@ -26,7 +26,7 @@ import java.io.IOException; import java.util.*; /** - * + * 动态java文件管理器 * @author: aoshiguchen * @date: 2022/8/17 */ diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/MemoryByteCode.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/MemoryByteCode.java index f48f9d05..16f3b363 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/MemoryByteCode.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/MemoryByteCode.java @@ -29,7 +29,7 @@ import java.net.URI; import java.net.URISyntaxException; /** - * + * 内存字节码 * @author: aoshiguchen * @date: 2022/8/25 */ diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/PackageInternalsFinder.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/PackageInternalsFinder.java index 50723908..24c65628 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/PackageInternalsFinder.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/PackageInternalsFinder.java @@ -35,7 +35,7 @@ import java.util.List; import java.util.jar.JarEntry; /** - * + * 包内部查询器 * @author: aoshiguchen * @date: 2022/8/25 */ diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/StringSource.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/StringSource.java index 3359e411..a6f3ad18 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/StringSource.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/compiler/StringSource.java @@ -26,7 +26,7 @@ import java.io.IOException; import java.net.URI; /** - * + * 字符串源码 * @author: aoshiguchen * @date: 2022/8/25 */