diff --git a/README.md b/README.md
index f94170b83bf67d4f2e99a9cbd480fa715e01b143..293fcc3a234709bd30ed1da41bc1b0da75b6ab4b 100644
--- a/README.md
+++ b/README.md
@@ -4,13 +4,15 @@
## 代码示例
-```
+### 原始代码
+
+```go
func main() {
print "hello world!"
}
```
-生成代码如下:
+### 目标代码
```java
package com.sum.test.main;
@@ -31,66 +33,73 @@ public class Main {
## 快速开始
-1、在pom文件中,引入Maven插件。
-
-```xml
-
-
-
- com.gitee.chentaoah
- spirit-maven-plugin
- 最新版(>= 2.1.30)
-
-
-
- compile
-
-
-
-
-
-
-```
-
-2、在src/main/resources目录下,创建sources子目录。在sources目录下,创建一个文件夹,作为包。例如:com.sum.spirit.example。
-
-3、在刚创建的包下,创建Main.sp文本文件。内容如下:
-
-```
-func main() {
- print "hello world!"
-}
-```
-
-4、执行Maven命令(mvn spirit:compile)并刷新,在src/main/java目录下,即可看到生成Java代码。
-
-## 编辑器
+### 依赖配置
-1. 下载安装sublime编辑器,并将项目中sublime-plugs目录下的所有文件,拷贝到sublime插件目录下的User文件夹中。
-2. 在sublime中打开后缀名为sp的文件,即可看到代码样式。
-
-## Maven依赖
-
-请确保项目中有如下依赖:
+在pom.xml中引入以下jar包:
```xml
- com.gitee.chentaoah
- spirit-stdlib
- ${project.version}
+ com.gitee.chentaoah
+ spirit-stdlib
+ 最新版(>= 2.1.30)
- org.slf4j
- slf4j-api
- ${slf4j.version}
+ org.slf4j
+ slf4j-api
+ 1.7.25
- org.apache.commons
- commons-lang3
- ${lang3.version}
+ org.apache.commons
+ commons-lang3
+ 3.9
```
+### 代码编辑
+
+1. 下载并安装sublime编辑器。
+
+2. 打开sublime,点击上方Preferences->Browse Packages按钮。
+
+3. 将spirit项目中sublime-plugs目录下的所有文件,拷贝到User文件夹中。
+
+4. 在项目src/main/resources目录下,创建sources子目录。在sources目录下,创建一个文件夹。例如:com.sum.spirit.example。
+
+5. 在文件夹下,创建Main.sp文件,并在sublime中打开,输入如下内容:
+
+ ```go
+ func main() {
+ print "hello world!"
+ }
+ ```
+
+### 代码编译
+
+1. 在pom.xml中引入插件。
+
+ ```xml
+
+
+
+ com.gitee.chentaoah
+ spirit-maven-plugin
+ 最新版(>= 2.1.30)
+
+
+
+ compile
+
+
+
+
+
+
+ ```
+
+2. 执行Maven命令(mvn spirit:compile)并刷新,在src/main/java目录下,即可看到生成的Java代码。
+
+
+
diff --git a/spirit-common/src/main/java/com/gitee/spirit/common/constants/AppConfig.java b/spirit-common/src/main/java/com/gitee/spirit/common/constants/AppConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d0e84086fa6c98eef798dddc610661a656847e1
--- /dev/null
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/constants/AppConfig.java
@@ -0,0 +1,21 @@
+package com.gitee.spirit.common.constants;
+
+public interface AppConfig {
+
+ public static interface Argument {
+ String INPUT = "input";
+ String OUTPUT = "output";
+ String CLASSPATHS = "classpaths";
+ String LANG_PACKAGE = "langPackage";
+ String UTIL_PACKAGE = "utilPackage";
+ String FILE_EXTENSION = "fileExtension";
+ String DEBUG = "debug";
+ }
+
+ public static interface DefaultValue {
+ String CHARSET = "UTF-8";
+ String FILE_EXTENSION = "sp";
+ boolean DEBUG = true;
+ }
+
+}
diff --git a/spirit-common/src/main/java/com/gitee/spirit/common/constants/Attribute.java b/spirit-common/src/main/java/com/gitee/spirit/common/constants/Attribute.java
new file mode 100644
index 0000000000000000000000000000000000000000..8afd15800ef3703cbb5da9c7051b3ae9cbf7dc9f
--- /dev/null
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/constants/Attribute.java
@@ -0,0 +1,17 @@
+package com.gitee.spirit.common.constants;
+
+public interface Attribute {
+
+ String SIMPLE_NAME = "SIMPLE_NAME"; // 类名
+ String MEMBER_NAME = "MEMBER_NAME"; // 字段名或者方法名
+
+ String OPERAND = "OPERAND"; // 操作数
+ String TREE_ID = "TREE_ID"; // 树节点id
+
+ String POSITION = "POSITION"; // 在语句中的位置
+ String LENGTH = "LENGTH"; // 字符串的宽度
+
+ String TYPE = "TYPE"; // 类型
+ String DERIVED = "DERIVED"; // 是否声明
+
+}
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/enums/KeywordEnum.java b/spirit-common/src/main/java/com/gitee/spirit/common/enums/KeywordEnum.java
similarity index 98%
rename from spirit-common/src/main/java/com/sum/spirit/common/enums/KeywordEnum.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/enums/KeywordEnum.java
index 23828238c268aaccd3afc9980da56c13999392c4..65d0d1915827042c139254fb253c60780168c13b 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/enums/KeywordEnum.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/enums/KeywordEnum.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.common.enums;
+package com.gitee.spirit.common.enums;
import java.util.LinkedHashMap;
import java.util.Map;
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/enums/ModifierEnum.java b/spirit-common/src/main/java/com/gitee/spirit/common/enums/ModifierEnum.java
similarity index 88%
rename from spirit-common/src/main/java/com/sum/spirit/common/enums/ModifierEnum.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/enums/ModifierEnum.java
index b4b8d93577caa9db5ed33a6b1fec90c4595c3b38..7ce3dd8c25da9432c05efb3f9fd5da0a8e8fb632 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/enums/ModifierEnum.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/enums/ModifierEnum.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.common.enums;
+package com.gitee.spirit.common.enums;
import java.lang.reflect.Modifier;
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/enums/PrimitiveEnum.java b/spirit-common/src/main/java/com/gitee/spirit/common/enums/PrimitiveEnum.java
similarity index 98%
rename from spirit-common/src/main/java/com/sum/spirit/common/enums/PrimitiveEnum.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/enums/PrimitiveEnum.java
index b30fce8e873caf142250976b9bf648af53eb3180..680024730b02ac8955edc010b0e9aa6fd6a4252f 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/enums/PrimitiveEnum.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/enums/PrimitiveEnum.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.common.enums;
+package com.gitee.spirit.common.enums;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/enums/SymbolEnum.java b/spirit-common/src/main/java/com/gitee/spirit/common/enums/SymbolEnum.java
similarity index 99%
rename from spirit-common/src/main/java/com/sum/spirit/common/enums/SymbolEnum.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/enums/SymbolEnum.java
index ea37011f80a227156549fd5394693a33dd8710e2..4b6e943eb093e33970832b83009e21f7c10b757e 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/enums/SymbolEnum.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/enums/SymbolEnum.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.common.enums;
+package com.gitee.spirit.common.enums;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/enums/SyntaxEnum.java b/spirit-common/src/main/java/com/gitee/spirit/common/enums/SyntaxEnum.java
similarity index 91%
rename from spirit-common/src/main/java/com/sum/spirit/common/enums/SyntaxEnum.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/enums/SyntaxEnum.java
index 7524583a58ca3d56a336e11a974b40e5d9399c06..bab6881bf4e7fb9a1e4c74ce107dcfdb169afeea 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/enums/SyntaxEnum.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/enums/SyntaxEnum.java
@@ -1,7 +1,7 @@
-package com.sum.spirit.common.enums;
+package com.gitee.spirit.common.enums;
public enum SyntaxEnum {
- IMPORT, // import com.sum.spirit.example.Animal
+ IMPORT, // import com.gitee.spirit.example.Animal
ANNOTATION, // @Animal
INTERFACE, // interface Horse {
ABSTRACT, // abstract Horse {
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/enums/TokenTypeEnum.java b/spirit-common/src/main/java/com/gitee/spirit/common/enums/TokenTypeEnum.java
similarity index 87%
rename from spirit-common/src/main/java/com/sum/spirit/common/enums/TokenTypeEnum.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/enums/TokenTypeEnum.java
index a2d294b7b08038197152237f0b0c716ff781f294..dcfc68508d4d26e2d77b6a481a3268d1ca3a53d1 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/enums/TokenTypeEnum.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/enums/TokenTypeEnum.java
@@ -1,7 +1,7 @@
-package com.sum.spirit.common.enums;
+package com.gitee.spirit.common.enums;
public enum TokenTypeEnum {
- PATH, // com.sum.spirit.example.Animal
+ ACCESS_PATH, // com.gitee.spirit.example.Animal
ANNOTATION, // @Animal
KEYWORD, // class
OPERATOR, // =
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/pattern/AccessPattern.java b/spirit-common/src/main/java/com/gitee/spirit/common/pattern/AccessPattern.java
similarity index 56%
rename from spirit-common/src/main/java/com/sum/spirit/common/pattern/AccessPattern.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/pattern/AccessPattern.java
index c567511f2bceb9cb90310755942f33ba69a4e6a2..dc305f5d69d0732e2e9d3ab729d1c1456c926172 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/pattern/AccessPattern.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/pattern/AccessPattern.java
@@ -1,14 +1,21 @@
-package com.sum.spirit.common.pattern;
+package com.gitee.spirit.common.pattern;
import java.util.regex.Pattern;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+
public class AccessPattern {
+ public static final Pattern ACCESS_PATH_PATTERN = Pattern.compile("^(\\w+\\.)+[A-Z]+\\w+(\\.[a-z]+\\w*)?$");
public static final Pattern LOCAL_METHOD_PATTERN = Pattern.compile("^[a-z]+\\w*\\([\\s\\S]*\\)$");
public static final Pattern VISIT_FIELD_PATTERN = Pattern.compile("^\\.[a-z]+\\w*$");
public static final Pattern VISIT_METHOD_PATTERN = Pattern.compile("^\\.[a-z]+\\w*\\([\\s\\S]*\\)$");
public static final Pattern VISIT_INDEX_PATTERN = Pattern.compile("^\\[\\d+\\]$");
+ public static boolean isAccessPath(String word) {
+ return ACCESS_PATH_PATTERN.matcher(word).matches();
+ }
+
public static boolean isLocalMethod(String word) {
return LOCAL_METHOD_PATTERN.matcher(word).matches();
}
@@ -25,4 +32,20 @@ public class AccessPattern {
return VISIT_INDEX_PATTERN.matcher(word).matches();
}
+ public static TokenTypeEnum getTokenType(String word) {
+ if (isLocalMethod(word)) {
+ return TokenTypeEnum.LOCAL_METHOD;
+
+ } else if (isVisitField(word)) {
+ return TokenTypeEnum.VISIT_FIELD;
+
+ } else if (isVisitMethod(word)) {
+ return TokenTypeEnum.VISIT_METHOD;
+
+ } else if (isVisitIndex(word)) {
+ return TokenTypeEnum.VISIT_INDEX;
+ }
+ return null;
+ }
+
}
diff --git a/spirit-common/src/main/java/com/gitee/spirit/common/pattern/CommonPattern.java b/spirit-common/src/main/java/com/gitee/spirit/common/pattern/CommonPattern.java
new file mode 100644
index 0000000000000000000000000000000000000000..977f437df9b6779665b7d2c6905ae7b259d20044
--- /dev/null
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/pattern/CommonPattern.java
@@ -0,0 +1,62 @@
+package com.gitee.spirit.common.pattern;
+
+import java.util.regex.Pattern;
+
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+
+public class CommonPattern {
+
+ public static final Pattern ANNOTATION_PATTERN = Pattern.compile("^@[A-Z]+\\w+(\\([\\s\\S]+\\))?$");
+ public static final Pattern SUBEXPRESS_PATTERN = Pattern.compile("^\\([\\s\\S]+\\)$");
+ public static final Pattern VARIABLE_PATTERN = Pattern.compile("^[a-z]+\\w*$");
+ public static final Pattern PREFIX_PATTERN = Pattern.compile("^(\\.)?\\w+$");
+
+ public static boolean isAnnotation(String word) {
+ return ANNOTATION_PATTERN.matcher(word).matches();
+ }
+
+ public static boolean isSubexpress(String word) {
+ return SUBEXPRESS_PATTERN.matcher(word).matches();
+ }
+
+ public static boolean isVariable(String word) {
+ return VARIABLE_PATTERN.matcher(word).matches();
+ }
+
+ public static boolean isPrefix(String word) {
+ return PREFIX_PATTERN.matcher(word).matches();
+ }
+
+ public static TokenTypeEnum getSubexpressTokenType(String word) {
+ if (isSubexpress(word)) {
+ return TypePattern.isAnyType(CommonPattern.getSubexpressValue(word)) ? TokenTypeEnum.CAST : TokenTypeEnum.SUBEXPRESS;
+ }
+ return null;
+ }
+
+ public static String getAnnotationName(String word) {
+ if (word.contains("(")) {
+ word = word.substring(0, word.indexOf('('));
+ }
+ return word.substring(word.indexOf('@') + 1);
+ }
+
+ public static String getSubexpressValue(String word) {
+ return word.substring(1, word.length() - 1);
+ }
+
+ public static String getPrefix(String word) {
+ int start = word.startsWith(".") ? 1 : 0;
+ int end = word.length();
+ if (word.contains("[")) {
+ int index = word.indexOf("[");
+ end = index < end ? index : end;
+ }
+ if (word.contains("(")) {
+ int index = word.indexOf("(");
+ end = index < end ? index : end;
+ }
+ return word.substring(start, end);
+ }
+
+}
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/pattern/LiteralPattern.java b/spirit-common/src/main/java/com/gitee/spirit/common/pattern/LiteralPattern.java
similarity index 70%
rename from spirit-common/src/main/java/com/sum/spirit/common/pattern/LiteralPattern.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/pattern/LiteralPattern.java
index f09c8d33838e1a174468b084a3cd51531ae867ec..02ddefed283b7ce56e6aa86fbad1542e4be7dd7f 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/pattern/LiteralPattern.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/pattern/LiteralPattern.java
@@ -1,7 +1,9 @@
-package com.sum.spirit.common.pattern;
+package com.gitee.spirit.common.pattern;
import java.util.regex.Pattern;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+
public class LiteralPattern {
public static final Pattern NULL_PATTERN = Pattern.compile("^null$");
@@ -13,8 +15,8 @@ public class LiteralPattern {
public static final Pattern STRING_PATTERN = Pattern.compile("^\"[\\s\\S]*\"$");
public static final Pattern LIST_PATTERN = Pattern.compile("^\\[[\\s\\S]*\\]$");
public static final Pattern MAP_PATTERN = Pattern.compile("^\\{[\\s\\S]*\\}$");
-
- public static final Pattern CONST_VARIABLE_PATTERN = Pattern.compile("^[A-Z_]{2,}$");// 常量也被认为是字面值的一种
+ // 常量也被认为是字面值的一种
+ public static final Pattern CONST_VARIABLE_PATTERN = Pattern.compile("^[A-Z_]{2,}$");
public static boolean isNull(String word) {
return NULL_PATTERN.matcher(word).matches();
@@ -56,4 +58,35 @@ public class LiteralPattern {
return CONST_VARIABLE_PATTERN.matcher(word).matches();
}
+ public static TokenTypeEnum getTokenType(String word) {
+ if (isNull(word)) {
+ return TokenTypeEnum.NULL;
+
+ } else if (isBoolean(word)) {
+ return TokenTypeEnum.BOOLEAN;
+
+ } else if (isChar(word)) {
+ return TokenTypeEnum.CHAR;
+
+ } else if (isInt(word)) {
+ return TokenTypeEnum.INT;
+
+ } else if (isLong(word)) {
+ return TokenTypeEnum.LONG;
+
+ } else if (isDouble(word)) {
+ return TokenTypeEnum.DOUBLE;
+
+ } else if (isString(word)) {
+ return TokenTypeEnum.STRING;
+
+ } else if (isList(word)) {
+ return TokenTypeEnum.LIST;
+
+ } else if (isMap(word)) {
+ return TokenTypeEnum.MAP;
+ }
+ return null;
+ }
+
}
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/pattern/TypePattern.java b/spirit-common/src/main/java/com/gitee/spirit/common/pattern/TypePattern.java
similarity index 74%
rename from spirit-common/src/main/java/com/sum/spirit/common/pattern/TypePattern.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/pattern/TypePattern.java
index 7480b6785ddb4d3af539521d6efc9d110c656281..bb4b3d1f8ade0bb09ade1a358e8657281c2180d8 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/pattern/TypePattern.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/pattern/TypePattern.java
@@ -1,13 +1,12 @@
-package com.sum.spirit.common.pattern;
+package com.gitee.spirit.common.pattern;
import java.util.regex.Pattern;
-import com.sum.spirit.common.enums.PrimitiveEnum;
+import com.gitee.spirit.common.enums.PrimitiveEnum;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
public class TypePattern {
- public static final Pattern TYPE_END_PATTERN = Pattern.compile("^[\\s\\S]+\\.[A-Z]+\\w+(\\.[a-z]+\\w*)?$");
-
public static final Pattern TYPE_PATTERN = Pattern.compile("^[A-Z]+\\w*$");
public static final Pattern TYPE_ARRAY_PATTERN = Pattern.compile("^[A-Z]+\\w*\\[\\]$");
public static final Pattern GENERIC_TYPE_PATTERN = Pattern.compile("^[A-Z]+\\w*<[\\s\\S]+>$");
@@ -22,10 +21,6 @@ public class TypePattern {
return PrimitiveEnum.isPrimitiveBySimple(word) || isType(word);
}
- public static boolean isTypeEnd(String word) {
- return TYPE_END_PATTERN.matcher(word).matches();
- }
-
public static boolean isType(String word) {
return !LiteralPattern.isConstVariable(word) && TYPE_PATTERN.matcher(word).matches();
}
@@ -59,9 +54,21 @@ public class TypePattern {
}
public static boolean isAnyType(String word) {
- return !LiteralPattern.isConstVariable(word) && //
- (PrimitiveEnum.isPrimitiveBySimple(word) || PrimitiveEnum.isPrimitiveArrayBySimple(word) || //
- isType(word) || isTypeArray(word) || isGenericType(word));
+ return !LiteralPattern.isConstVariable(word) && (PrimitiveEnum.isPrimitiveBySimple(word) || PrimitiveEnum.isPrimitiveArrayBySimple(word) || isType(word)
+ || isTypeArray(word) || isGenericType(word));
+ }
+
+ public static TokenTypeEnum getTokenType(String word) {
+ if (isPrimitiveArraySizeInit(word) || isPrimitiveArrayLiteralInit(word)) {
+ return TokenTypeEnum.ARRAY_INIT;
+
+ } else if (isTypeArraySizeInit(word) || isTypeArrayLiteralInit(word)) {
+ return TokenTypeEnum.ARRAY_INIT;
+
+ } else if (isTypeInit(word)) {
+ return TokenTypeEnum.TYPE_INIT;
+ }
+ return null;
}
}
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/utils/ConfigUtils.java b/spirit-common/src/main/java/com/gitee/spirit/common/utils/ConfigUtils.java
similarity index 67%
rename from spirit-common/src/main/java/com/sum/spirit/common/utils/ConfigUtils.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/utils/ConfigUtils.java
index 54036e27bec79cefb9b7a96fa71bd43cb5f4c6d6..5d2c19ce0cdc0564106c2941057d1414c8430bf7 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/utils/ConfigUtils.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/utils/ConfigUtils.java
@@ -1,10 +1,11 @@
-package com.sum.spirit.common.utils;
+package com.gitee.spirit.common.utils;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.constants.AppConfig;
+import com.gitee.spirit.common.constants.AppConfig.Argument;
+import com.gitee.spirit.common.constants.AppConfig.DefaultValue;
@Component
public class ConfigUtils implements EnvironmentAware {
@@ -41,23 +42,31 @@ public class ConfigUtils implements EnvironmentAware {
}
public static String getInputPath() {
- return ConfigUtils.getProperty(AppConfig.INPUT_ARG_KEY);
+ return ConfigUtils.getProperty(Argument.INPUT);
}
public static String getOutputPath() {
- return ConfigUtils.getProperty(AppConfig.OUTPUT_ARG_KEY);
+ return ConfigUtils.getProperty(Argument.OUTPUT);
}
public static String getClasspaths() {
- return ConfigUtils.getProperty(AppConfig.CLASSPATHS_ARG_KEY);
+ return ConfigUtils.getProperty(Argument.CLASSPATHS);
+ }
+
+ public static String getLangPackage() {
+ return ConfigUtils.getProperty(Argument.LANG_PACKAGE);
+ }
+
+ public static String getUtilPackage() {
+ return ConfigUtils.getProperty(Argument.UTIL_PACKAGE);
}
public static String getFileExtension() {
- return ConfigUtils.getProperty(AppConfig.FILENAME_EXTENSION_KEY, AppConfig.DEFAULT_FILENAME_EXTENSION);
+ return ConfigUtils.getProperty(Argument.FILE_EXTENSION, DefaultValue.FILE_EXTENSION);
}
public static boolean isDebug() {
- return ConfigUtils.getProperty(AppConfig.DEBUG_KEY, AppConfig.DEFAULT_DEBUG);
+ return ConfigUtils.getProperty(Argument.DEBUG, DefaultValue.DEBUG);
}
}
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/utils/LineUtils.java b/spirit-common/src/main/java/com/gitee/spirit/common/utils/LineUtils.java
similarity index 82%
rename from spirit-common/src/main/java/com/sum/spirit/common/utils/LineUtils.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/utils/LineUtils.java
index 3c9e42846cbd2eb8873bdb0b3509e21539c05dac..f4c4df0e2f7848ea913aaec4e8a0cf0312c874e4 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/utils/LineUtils.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/utils/LineUtils.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.common.utils;
+package com.gitee.spirit.common.utils;
public class LineUtils {
@@ -6,14 +6,6 @@ public class LineUtils {
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || ch == '_';
}
- public static String mergeSpaces(String line) {
- line = line.trim();
- while (line.contains(" ")) {
- line = line.replaceAll(" ", " ");// 这里需要考虑一种情况,就是四个变两个,两个变一个
- }
- return line;
- }
-
public static String getSpaces(int number) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < number; i++) {
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/utils/ListUtils.java b/spirit-common/src/main/java/com/gitee/spirit/common/utils/ListUtils.java
similarity index 99%
rename from spirit-common/src/main/java/com/sum/spirit/common/utils/ListUtils.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/utils/ListUtils.java
index 92045f41f14e71bf583e4ee31fed18f54e464981..74b1c9bf4ca75855e5807e159036d7092462b393 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/utils/ListUtils.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/utils/ListUtils.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.common.utils;
+package com.gitee.spirit.common.utils;
import java.util.ArrayList;
import java.util.Iterator;
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/utils/ObjectUtils.java b/spirit-common/src/main/java/com/gitee/spirit/common/utils/ObjectUtils.java
similarity index 92%
rename from spirit-common/src/main/java/com/sum/spirit/common/utils/ObjectUtils.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/utils/ObjectUtils.java
index 3e26459bc25d2795798d27ae3e600ce06777f8be..a7a3bca140cf2b5426cf2a8d873e390b967d31d3 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/utils/ObjectUtils.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/utils/ObjectUtils.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.common.utils;
+package com.gitee.spirit.common.utils;
import java.util.Set;
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/utils/Splitter.java b/spirit-common/src/main/java/com/gitee/spirit/common/utils/Splitter.java
similarity index 96%
rename from spirit-common/src/main/java/com/sum/spirit/common/utils/Splitter.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/utils/Splitter.java
index a70f168473a1cc5810cd3742a4448781a559ab60..45c47e8aa80f2e3ba0258852c806d54fbd6dc176 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/utils/Splitter.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/utils/Splitter.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.common.utils;
+package com.gitee.spirit.common.utils;
import java.util.ArrayList;
import java.util.List;
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/utils/SpringUtils.java b/spirit-common/src/main/java/com/gitee/spirit/common/utils/SpringUtils.java
similarity index 55%
rename from spirit-common/src/main/java/com/sum/spirit/common/utils/SpringUtils.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/utils/SpringUtils.java
index eadea9c119a291d076d2d5d153a5ca2804230a84..f895f26bd863ae17af64a7006c828df979d03184 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/utils/SpringUtils.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/utils/SpringUtils.java
@@ -1,55 +1,42 @@
-package com.sum.spirit.common.utils;
-
-import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.core.annotation.AnnotationAwareOrderComparator;
-import org.springframework.stereotype.Component;
-
-@Component
-public class SpringUtils implements ApplicationContextAware {
-
- public static ApplicationContext context;
-
- @Override
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
- context = applicationContext;
- }
-
- public static T getBean(Class requiredType) {
- return context.getBean(requiredType);
- }
-
- public static T getBean(String name, Class requiredType) {
- return context.getBean(name, requiredType);
- }
-
- public static Map getBeansOfType(Class type) {
- return context.getBeansOfType(type);
- }
-
- public static List getBeansAndSort(Class type) {
- Map beanMap = getBeansOfType(type);
- List beans = new ArrayList<>(beanMap.values());
- beans.sort(new AnnotationAwareOrderComparator());
- return beans;
- }
-
- public static List getBeansByExcludedTypes(Class type, Class>... excludedTypes) {
- List beans = getBeansAndSort(type);
- List> list = Arrays.asList(excludedTypes);
- return beans.stream().filter((t) -> !list.contains(t.getClass())).collect(Collectors.toList());
- }
-
- public static List getBeansByAnnotation(Class type, Class extends Annotation> annotationClass) {
- List beans = getBeansAndSort(type);
- return beans.stream().filter(bean -> bean.getClass().isAnnotationPresent(annotationClass)).collect(Collectors.toList());
- }
+package com.gitee.spirit.common.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.core.annotation.AnnotationAwareOrderComparator;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SpringUtils implements ApplicationContextAware {
+
+ public static ApplicationContext context;
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ context = applicationContext;
+ }
+
+ public static T getBean(Class requiredType) {
+ return context.getBean(requiredType);
+ }
+
+ public static T getBean(String name, Class requiredType) {
+ return context.getBean(name, requiredType);
+ }
+
+ public static Map getBeansOfType(Class type) {
+ return context.getBeansOfType(type);
+ }
+
+ public static List getBeans(Class requiredType) {
+ Map beanMap = getBeansOfType(requiredType);
+ List beans = new ArrayList<>(beanMap.values());
+ beans.sort(new AnnotationAwareOrderComparator());
+ return beans;
+ }
+
}
\ No newline at end of file
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/utils/URLFileUtils.java b/spirit-common/src/main/java/com/gitee/spirit/common/utils/URLFileUtils.java
similarity index 97%
rename from spirit-common/src/main/java/com/sum/spirit/common/utils/URLFileUtils.java
rename to spirit-common/src/main/java/com/gitee/spirit/common/utils/URLFileUtils.java
index a98963ba2bbc10d17ed70e330018af28a0059b9e..e5e455b5508edf19c604b01537f102f755d7a175 100644
--- a/spirit-common/src/main/java/com/sum/spirit/common/utils/URLFileUtils.java
+++ b/spirit-common/src/main/java/com/gitee/spirit/common/utils/URLFileUtils.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.common.utils;
+package com.gitee.spirit.common.utils;
import java.io.File;
import java.io.FileInputStream;
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/annotation/App.java b/spirit-common/src/main/java/com/sum/spirit/common/annotation/App.java
deleted file mode 100644
index 8af618382c174cc804b55582dfafa0e9fee03887..0000000000000000000000000000000000000000
--- a/spirit-common/src/main/java/com/sum/spirit/common/annotation/App.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.sum.spirit.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Documented
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface App {
-
-}
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/annotation/Native.java b/spirit-common/src/main/java/com/sum/spirit/common/annotation/Native.java
deleted file mode 100644
index ac015a41de56e26dcf79d5fe3cb97c4f0112b9b1..0000000000000000000000000000000000000000
--- a/spirit-common/src/main/java/com/sum/spirit/common/annotation/Native.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.sum.spirit.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Documented
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Native {
-
-}
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/constants/AppConfig.java b/spirit-common/src/main/java/com/sum/spirit/common/constants/AppConfig.java
deleted file mode 100644
index ff25b5e5d200479f8b30ed856c4aa6e98a2dc72e..0000000000000000000000000000000000000000
--- a/spirit-common/src/main/java/com/sum/spirit/common/constants/AppConfig.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.sum.spirit.common.constants;
-
-public class AppConfig {
-
- public static final String DEFAULT_CHARSET = "UTF-8";
-
- public static final String INPUT_ARG_KEY = "input";
- public static final String OUTPUT_ARG_KEY = "output";
- public static final String CLASSPATHS_ARG_KEY = "classpaths";
-
- public static final String FILENAME_EXTENSION_KEY = "spirit.compile.file.extension";
- public static final String DEBUG_KEY = "spirit.compile.debug";
-
- public static final String DEFAULT_FILENAME_EXTENSION = "sp";
- public static final boolean DEFAULT_DEBUG = true;
-
-}
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/constants/Attribute.java b/spirit-common/src/main/java/com/sum/spirit/common/constants/Attribute.java
deleted file mode 100644
index f1fb1423a49d2ff36375284f9bbf694230a78060..0000000000000000000000000000000000000000
--- a/spirit-common/src/main/java/com/sum/spirit/common/constants/Attribute.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.sum.spirit.common.constants;
-
-public class Attribute {
-
- public static final String SIMPLE_NAME = "SIMPLE_NAME"; // 类名
- public static final String MEMBER_NAME = "MEMBER_NAME"; // 字段名或者方法名
-
- public static final String OPERAND = "OPERAND"; // 操作数
- public static final String TREE_ID = "TREE_ID"; // 树节点id
-
- public static final String POSITION = "POSITION"; // 在语句中的位置
- public static final String LENGTH = "LENGTH"; // 字符串的宽度
-
- public static final String TYPE = "TYPE"; // 类型
- public static final String DERIVED = "DERIVED"; // 是否声明
-
-}
diff --git a/spirit-common/src/main/java/com/sum/spirit/common/exception/UnhandledException.java b/spirit-common/src/main/java/com/sum/spirit/common/exception/UnhandledException.java
deleted file mode 100644
index b839a02b392411e1e95d207d684cd1aff6f7d06e..0000000000000000000000000000000000000000
--- a/spirit-common/src/main/java/com/sum/spirit/common/exception/UnhandledException.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.sum.spirit.common.exception;
-
-@SuppressWarnings("serial")
-public class UnhandledException extends RuntimeException {
-
- public UnhandledException() {
- super();
- }
-
- public UnhandledException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
-
- public UnhandledException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public UnhandledException(String message) {
- super(message);
- }
-
- public UnhandledException(Throwable cause) {
- super(cause);
- }
-
-}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ClassLoader.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/ClassLoader.java
similarity index 61%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ClassLoader.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/ClassLoader.java
index 8238fea9bb1a5a9e5616d8d7e2803685f5e8fd9f..2dee29a14215ffcc8d3be0f3b3027ca9f3979fdc 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ClassLoader.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/ClassLoader.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.net.URL;
import java.util.List;
public interface ClassLoader {
- List getResources();
+ List getResources(String name);
List getNames();
@@ -13,10 +13,6 @@ public interface ClassLoader {
T loadClass(String name);
- T findClass(String name);
-
- T findLoadedClass(String name);
-
List getAllClasses();
}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ClassResolver.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/ClassResolver.java
similarity index 48%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ClassResolver.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/ClassResolver.java
index cde127f6e1462399445c68e0583d548e4dad4f2a..9d7c1ac0cd934af0bb1d977f9ac8901a550360e3 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ClassResolver.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/ClassResolver.java
@@ -1,9 +1,9 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.util.Map;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.element.entity.Document;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.element.entity.Document;
public interface ClassResolver {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ImportSelector.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/ImportSelector.java
similarity index 37%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ImportSelector.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/ImportSelector.java
index 9e993f494a1e5654f2ea672377b45d92f246abcc..becba27be520fe42b43a521d4e067ca8f6f61a25 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ImportSelector.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/ImportSelector.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
public interface ImportSelector {
- String findClassName(String simpleName);
+ boolean canHandle(String className);
- boolean isHandle(String className);
+ String findClassName(String simpleName);
- boolean shouldImport(String selfName, String className);
+ boolean shouldImport(String selfClassName, String className);
}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/TypeFactory.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/TypeFactory.java
similarity index 65%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/TypeFactory.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/TypeFactory.java
index 8575984313bfd392a40dfb043816ffc7c4986c29..d643d828564b86e165d87d4ba10564863868492b 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/TypeFactory.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/api/TypeFactory.java
@@ -1,10 +1,10 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.util.List;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.element.entity.Token;
public interface TypeFactory {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractClassLoader.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractClassLoader.java
new file mode 100644
index 0000000000000000000000000000000000000000..942999bccb0887b621692ec2edd8ec3990a7cdeb
--- /dev/null
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractClassLoader.java
@@ -0,0 +1,19 @@
+package com.gitee.spirit.core.clazz;
+
+import java.net.URL;
+
+import com.gitee.spirit.core.api.ClassLoader;
+
+public abstract class AbstractClassLoader implements ClassLoader {
+
+ @Override
+ public T loadClass(String name) {
+ URL resource = getResource(name);
+ return defineClass(name, resource);
+ }
+
+ public abstract URL getResource(String name);
+
+ public abstract T defineClass(String name, URL resource);
+
+}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractImportSelector.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractImportSelector.java
new file mode 100644
index 0000000000000000000000000000000000000000..f565437c5ed62d353f3e920c581a396e6c5e9dac
--- /dev/null
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractImportSelector.java
@@ -0,0 +1,19 @@
+package com.gitee.spirit.core.clazz;
+
+import com.gitee.spirit.core.api.ImportSelector;
+import com.gitee.spirit.core.clazz.utils.TypeUtils;
+
+public abstract class AbstractImportSelector implements ImportSelector {
+
+ @Override
+ public boolean shouldImport(String selfClassName, String className) {
+ if (selfClassName.equals(className)) {
+ return false;
+ }
+ if (TypeUtils.isSamePackage(selfClassName, className)) {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/AbstractTypeFactory.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractTypeFactory.java
similarity index 66%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/AbstractTypeFactory.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractTypeFactory.java
index 9006e911d7436e66f648e1ab8d74458370c326e3..bd2e8ca7961c9d24402a49d24d69b8b47b4a06c5 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/AbstractTypeFactory.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractTypeFactory.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.clazz;
+package com.gitee.spirit.core.clazz;
import java.util.Arrays;
import java.util.Collections;
@@ -6,12 +6,11 @@ import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
-import com.sum.spirit.core.api.SemanticParser;
-import com.sum.spirit.core.api.TypeFactory;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.StaticTypes;
-import com.sum.spirit.core.element.entity.SemanticContext;
+import com.gitee.spirit.core.api.SemanticParser;
+import com.gitee.spirit.core.api.TypeFactory;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.utils.TypeRegistry;
import cn.hutool.core.lang.Assert;
@@ -34,7 +33,7 @@ public abstract class AbstractTypeFactory implements TypeFactory {
@Override
public IType createTypeVariable(String genericName) {// T or K
- IType type = create(StaticTypes.OBJECT.getClassName());
+ IType type = create(TypeRegistry.OBJECT.getClassName());
type.setGenericName(genericName);
return type;
}
@@ -42,7 +41,7 @@ public abstract class AbstractTypeFactory implements TypeFactory {
@Override
public IType create(IClass clazz, String text) {
Assert.isTrue(!text.contains("."), "Text cannot contains \".\". Please use the another create method!");
- return create(clazz, parser.getToken(new SemanticContext(), text));
+ return create(clazz, parser.getToken(text));
}
}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/AbstractURLClassLoader.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractURLClassLoader.java
similarity index 58%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/AbstractURLClassLoader.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractURLClassLoader.java
index bc6ef8e177625824b69910628f6e2dc2b45632de..833186b1fb42beec800d24e64fe8b7d4f4460d70 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/AbstractURLClassLoader.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/AbstractURLClassLoader.java
@@ -1,9 +1,10 @@
-package com.sum.spirit.core.clazz;
+package com.gitee.spirit.core.clazz;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
@@ -14,17 +15,15 @@ import java.util.stream.Collectors;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.InitializingBean;
-import com.sum.spirit.common.utils.ConfigUtils;
-import com.sum.spirit.common.utils.URLFileUtils;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.common.utils.ConfigUtils;
+import com.gitee.spirit.common.utils.URLFileUtils;
+import com.gitee.spirit.core.clazz.entity.IClass;
import cn.hutool.core.lang.Assert;
public abstract class AbstractURLClassLoader extends AbstractClassLoader implements InitializingBean {
- public List urls = new ArrayList<>();
- public Map nameUrlMapping = new LinkedHashMap<>();
+ public Map urls = new LinkedHashMap<>();
public Map classes = new LinkedHashMap<>();
@Override
@@ -32,28 +31,29 @@ public abstract class AbstractURLClassLoader extends AbstractClassLoader
String inputPath = ConfigUtils.getInputPath();
String extension = ConfigUtils.getFileExtension();
Collection files = FileUtils.listFiles(new File(inputPath), new String[] { extension }, true);
- files.forEach(file -> this.urls.add(URLFileUtils.toURL(file)));
+ List urlList = new ArrayList<>();
+ files.forEach(file -> urlList.add(URLFileUtils.toURL(file)));
File directory = new File(inputPath);
Assert.isTrue(directory.isDirectory(), "The input path must be a directory!");
URL inputUrl = URLFileUtils.toURL(directory);
- urls.forEach(url -> {
+ urlList.forEach(url -> {
String name = url.toString().replace(inputUrl.toString(), "").replaceAll("/", ".");
if (name.endsWith("." + extension)) {
name = name.substring(0, name.lastIndexOf('.'));
}
- nameUrlMapping.put(name, url);
+ urls.put(name, url);
classes.put(name, null);
});
}
@Override
- public List getResources() {
- return urls;
+ public List getResources(String name) {
+ return Arrays.asList(urls.get(name));
}
@Override
public List getNames() {
- return new ArrayList(classes.keySet());
+ return new ArrayList<>(classes.keySet());
}
@Override
@@ -62,17 +62,16 @@ public abstract class AbstractURLClassLoader extends AbstractClassLoader
}
@Override
- public IClass findClass(String name) {
- IClass clazz = findLoadedClass(name);
- if (clazz == null && contains(name)) {
- clazz = loadClass(name);
+ public IClass loadClass(String name) {
+ if (contains(name)) {
+ IClass clazz = classes.get(name);
+ if (clazz == null) {
+ clazz = classes.put(name, super.loadClass(name));
+ }
+ return clazz;
+ } else {
+ throw new RuntimeException("The class was not found!name:" + name);
}
- return clazz;
- }
-
- @Override
- public IClass findLoadedClass(String name) {
- return classes.get(name);
}
@Override
@@ -81,18 +80,13 @@ public abstract class AbstractURLClassLoader extends AbstractClassLoader
}
@Override
- public URL findResource(String name) {
- return nameUrlMapping.get(name);
- }
-
- @Override
- public String findClassName(String simpleName) {
- return ListUtils.findOne(classes.keySet(), className -> className.endsWith("." + simpleName));
+ public URL getResource(String name) {
+ return urls.get(name);
}
public void clear() {
classes.clear();
- nameUrlMapping.keySet().forEach(name -> classes.put(name, null));
+ urls.keySet().forEach(name -> classes.put(name, null));
}
}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/DefaultClassResolver.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/DefaultClassResolver.java
similarity index 77%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/DefaultClassResolver.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/DefaultClassResolver.java
index 9422ca963894d6f3255c634364cc9d4cf9290807..2a97973ae774cb94eb6bf2fb7e1c643c1d217299 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/DefaultClassResolver.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/DefaultClassResolver.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.clazz;
+package com.gitee.spirit.core.clazz;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -8,30 +8,23 @@ import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.core.api.ClassResolver;
-import com.sum.spirit.core.api.ResolverContext;
-import com.sum.spirit.core.api.ElementBuilder;
-import com.sum.spirit.core.api.ImportSelector;
-import com.sum.spirit.core.api.TypeFactory;
-import com.sum.spirit.core.clazz.entity.IAnnotation;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IField;
-import com.sum.spirit.core.clazz.entity.IMethod;
-import com.sum.spirit.core.clazz.entity.Import;
-import com.sum.spirit.core.clazz.utils.TypeUtils;
-import com.sum.spirit.core.element.entity.Document;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.core.api.ClassResolver;
+import com.gitee.spirit.core.api.ElementBuilder;
+import com.gitee.spirit.core.clazz.entity.IAnnotation;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IField;
+import com.gitee.spirit.core.clazz.entity.IMethod;
+import com.gitee.spirit.core.clazz.entity.Import;
+import com.gitee.spirit.core.clazz.utils.TypeUtils;
+import com.gitee.spirit.core.element.entity.Document;
+import com.gitee.spirit.core.element.entity.Element;
@Component
-public class DefaultClassResolver implements ClassResolver, ResolverContext {
+public class DefaultClassResolver implements ClassResolver {
@Autowired
public ElementBuilder builder;
- @Autowired
- public TypeFactory factory;
- @Autowired
- public List selectors;
@Override
public Map resolve(String packageStr, Document document) {
@@ -107,7 +100,6 @@ public class DefaultClassResolver implements ClassResolver, ResolverContext {
clazz.packageStr = packageStr;
clazz.fields = fields;
clazz.methods = methods;
- clazz.context = this;
}
public void readRootElement(IClass clazz) {
@@ -125,19 +117,4 @@ public class DefaultClassResolver implements ClassResolver, ResolverContext {
}
}
- @Override
- public ElementBuilder getElementBuilder() {
- return builder;
- }
-
- @Override
- public TypeFactory getTypeFactory() {
- return factory;
- }
-
- @Override
- public List getImportSelectors() {
- return selectors;
- }
-
}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IAnnotation.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IAnnotation.java
similarity index 41%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IAnnotation.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IAnnotation.java
index 23663826cf3de61e29266c6cce41e6b2f00b2c00..e88e16d768ab595f4abece49dce114dce0a7cfcc 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IAnnotation.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IAnnotation.java
@@ -1,7 +1,7 @@
-package com.sum.spirit.core.clazz.entity;
+package com.gitee.spirit.core.clazz.entity;
-import com.sum.spirit.core.clazz.frame.TokenEntity;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.clazz.frame.TokenEntity;
+import com.gitee.spirit.core.element.entity.Token;
public class IAnnotation extends TokenEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IClass.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IClass.java
similarity index 77%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IClass.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IClass.java
index 120c7804eb218c53f39c0e7a17fe90eddfb4cc44..86691861965429c0ff79552071f507dad9b69846 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IClass.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IClass.java
@@ -1,15 +1,17 @@
-package com.sum.spirit.core.clazz.entity;
+package com.gitee.spirit.core.clazz.entity;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.clazz.frame.ImportEntity;
-import com.sum.spirit.core.clazz.utils.TypeUtils;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.common.utils.SpringUtils;
+import com.gitee.spirit.core.api.TypeFactory;
+import com.gitee.spirit.core.clazz.frame.ImportEntity;
+import com.gitee.spirit.core.clazz.utils.TypeUtils;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Token;
import cn.hutool.core.lang.Assert;
@@ -72,15 +74,17 @@ public class IClass extends ImportEntity {
public IType getSuperType() {// 注意:这里返回的是Super
Token token = element.getKeywordParam(KeywordEnum.EXTENDS.value);// 这里返回的,可以是泛型格式,而不是className
if (token != null) {
- return context.getTypeFactory().create(this, token);
+ TypeFactory factory = SpringUtils.getBean(TypeFactory.class);
+ return factory.create(this, token);
}
return null;
}
public List getInterfaceTypes() {
List interfaces = new ArrayList<>();
+ TypeFactory factory = SpringUtils.getBean(TypeFactory.class);
for (Token token : element.getKeywordParams(KeywordEnum.IMPLS.value)) {
- interfaces.add(context.getTypeFactory().create(this, token));
+ interfaces.add(factory.create(this, token));
}
return interfaces;
}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IField.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IField.java
similarity index 74%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IField.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IField.java
index e627f6e3e67df28a0108452e693f8ade176b073b..e5b6bcefc253c52fee53792b5b7048e2efd81a68 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IField.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IField.java
@@ -1,9 +1,9 @@
-package com.sum.spirit.core.clazz.entity;
+package com.gitee.spirit.core.clazz.entity;
import java.util.List;
-import com.sum.spirit.core.clazz.frame.MemberEntity;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.clazz.frame.MemberEntity;
+import com.gitee.spirit.core.element.entity.Element;
public class IField extends MemberEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IMethod.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IMethod.java
similarity index 81%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IMethod.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IMethod.java
index 47d2100e4f16b1a6fb2aa725018898f8b94087f5..f730dd4bcd31bd315d8d3c485700582f136a0317 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IMethod.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IMethod.java
@@ -1,14 +1,14 @@
-package com.sum.spirit.core.clazz.entity;
+package com.gitee.spirit.core.clazz.entity;
import java.util.ArrayList;
import java.util.List;
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.core.clazz.frame.MemberEntity;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Token;
import com.google.common.base.Joiner;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.core.clazz.frame.MemberEntity;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Token;
public class IMethod extends MemberEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IParameter.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IParameter.java
similarity index 73%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IParameter.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IParameter.java
index 8c25dec5ed1472aaa1ccc8a992766f0532352640..a2645cb4c9f44b73dc3ef47bfde824e6206c6fd6 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IParameter.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IParameter.java
@@ -1,9 +1,9 @@
-package com.sum.spirit.core.clazz.entity;
+package com.gitee.spirit.core.clazz.entity;
import java.util.List;
-import com.sum.spirit.core.clazz.frame.AnnotationEntity;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.clazz.frame.AnnotationEntity;
+import com.gitee.spirit.core.element.entity.Element;
public class IParameter extends AnnotationEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IType.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IType.java
similarity index 70%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IType.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IType.java
index 0d7bc067e78ebf063bf921be66b5d2b57c19b822..d626d1d5074e259eb17e1511c4a502667a97fe37 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IType.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IType.java
@@ -1,11 +1,15 @@
-package com.sum.spirit.core.clazz.entity;
+package com.gitee.spirit.core.clazz.entity;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
-import com.sum.spirit.core.clazz.utils.TypeUtils;
+import com.gitee.spirit.common.enums.ModifierEnum;
+import com.gitee.spirit.common.utils.SpringUtils;
+import com.gitee.spirit.core.api.TypeFactory;
+import com.gitee.spirit.core.clazz.utils.TypeRegistry;
+import com.gitee.spirit.core.clazz.utils.TypeUtils;
import lombok.Getter;
import lombok.Setter;
@@ -44,10 +48,30 @@ public class IType {
return genericTypes != null && genericTypes.size() > 0;
}
+ public IType toBox() {
+ IType boxType = TypeRegistry.getBoxType(getClassName());
+ return boxType != null ? boxType : this;
+ }
+
public String getTargetName() {// 返回真正的className,包括数组中的
return TypeUtils.getTargetName(getClassName());
}
+ public IType toTarget() {
+ TypeFactory factory = SpringUtils.getBean(TypeFactory.class);
+ return factory.create(getTargetName());
+ }
+
+ public IType withSuperModifiers() {
+ this.setModifiers(ModifierEnum.SUPER.value);
+ return this;
+ }
+
+ public IType withThisModifiers() {
+ this.setModifiers(ModifierEnum.THIS.value);
+ return this;
+ }
+
@Override
public boolean equals(Object obj) {
if (!(obj instanceof IType)) {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IVariable.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IVariable.java
similarity index 62%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IVariable.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IVariable.java
index 6353aa452d972991d919edfe96415e063c1a2862..70c09e93f00bc18b4a7d82939f3934430c71af94 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/IVariable.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/IVariable.java
@@ -1,7 +1,7 @@
-package com.sum.spirit.core.clazz.entity;
+package com.gitee.spirit.core.clazz.entity;
-import com.sum.spirit.core.clazz.frame.TokenEntity;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.clazz.frame.TokenEntity;
+import com.gitee.spirit.core.element.entity.Token;
public class IVariable extends TokenEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/Import.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/Import.java
similarity index 78%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/Import.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/Import.java
index d9f776854da98d70941ec249bff35a820c432b10..1d162e52ecbce999fd5af72362a5f14dfd45cafd 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/entity/Import.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/entity/Import.java
@@ -1,8 +1,8 @@
-package com.sum.spirit.core.clazz.entity;
+package com.gitee.spirit.core.clazz.entity;
-import com.sum.spirit.core.clazz.frame.ElementEntity;
-import com.sum.spirit.core.clazz.utils.TypeUtils;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.clazz.frame.ElementEntity;
+import com.gitee.spirit.core.clazz.utils.TypeUtils;
+import com.gitee.spirit.core.element.entity.Element;
public class Import extends ElementEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/AnnotationEntity.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/AnnotationEntity.java
similarity index 77%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/AnnotationEntity.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/AnnotationEntity.java
index 5fbbcc93cd942eb1521c6df00953ef15af955922..29785e1ebeb7fadf2792adb58718c91f9a1dd7e6 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/AnnotationEntity.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/AnnotationEntity.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.core.clazz.frame;
+package com.gitee.spirit.core.clazz.frame;
import java.util.ArrayList;
import java.util.List;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.clazz.entity.IAnnotation;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.clazz.entity.IAnnotation;
+import com.gitee.spirit.core.element.entity.Element;
public abstract class AnnotationEntity extends ElementEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/ElementEntity.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/ElementEntity.java
similarity index 62%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/ElementEntity.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/ElementEntity.java
index d8198f827db7e4f84d0b0c351e4f13d80d74ff1d..3804745f57240ec70481f9c4788057eeb8c01891 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/ElementEntity.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/ElementEntity.java
@@ -1,6 +1,6 @@
-package com.sum.spirit.core.clazz.frame;
+package com.gitee.spirit.core.clazz.frame;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Element;
public abstract class ElementEntity extends TypeEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/ImportEntity.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/ImportEntity.java
similarity index 76%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/ImportEntity.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/ImportEntity.java
index 8e3e7e5c30047cf63ea5e3deff5d29564e8a4085..99b00f53a4cea2a3f65f79d21d425bccdb07243e 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/ImportEntity.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/ImportEntity.java
@@ -1,16 +1,18 @@
-package com.sum.spirit.core.clazz.frame;
+package com.gitee.spirit.core.clazz.frame;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
-import com.sum.spirit.common.enums.PrimitiveEnum;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.api.ElementBuilder;
-import com.sum.spirit.core.clazz.entity.IAnnotation;
-import com.sum.spirit.core.clazz.entity.Import;
-import com.sum.spirit.core.clazz.utils.TypeUtils;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.common.enums.PrimitiveEnum;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.common.utils.SpringUtils;
+import com.gitee.spirit.core.api.ElementBuilder;
+import com.gitee.spirit.core.api.ImportSelector;
+import com.gitee.spirit.core.clazz.entity.IAnnotation;
+import com.gitee.spirit.core.clazz.entity.Import;
+import com.gitee.spirit.core.clazz.utils.TypeUtils;
+import com.gitee.spirit.core.element.entity.Element;
import cn.hutool.core.lang.Assert;
@@ -105,7 +107,7 @@ public abstract class ImportEntity extends AnnotationEntity {
}
// 构建一个行元素
- ElementBuilder builder = context.getElementBuilder();
+ ElementBuilder builder = SpringUtils.getBean(ElementBuilder.class);
imports.add(new Import(builder.build("import " + targetName)));
return true;
}
@@ -117,18 +119,19 @@ public abstract class ImportEntity extends AnnotationEntity {
return true;
}
// 构建一个行元素
- ElementBuilder builder = context.getElementBuilder();
+ ElementBuilder builder = SpringUtils.getBean(ElementBuilder.class);
staticImports.add(new Import(builder.build("import static " + staticSourceName)));
return true;
}
public String findClassNameByLoader(String simpleName) {
- return ListUtils.collectOne(context.getImportSelectors(), importSelector -> importSelector.findClassName(simpleName));
+ List selectors = SpringUtils.getBeans(ImportSelector.class);
+ return ListUtils.collectOne(selectors, selector -> selector.findClassName(simpleName));
}
- public boolean shouldImport(String selfName, String className) {
- Boolean flag = ListUtils.collectOne(context.getImportSelectors(), importSelector -> importSelector.isHandle(className),
- importSelector -> importSelector.shouldImport(selfName, className));
+ public boolean shouldImport(String selfClassName, String className) {
+ List selectors = SpringUtils.getBeans(ImportSelector.class);
+ Boolean flag = ListUtils.collectOne(selectors, selector -> selector.canHandle(className), selector -> selector.shouldImport(selfClassName, className));
return flag == null ? true : flag;
}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/MemberEntity.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/MemberEntity.java
similarity index 58%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/MemberEntity.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/MemberEntity.java
index e5afa33e133838ab1a88fc655d0ae9aa436cc07b..248fc350e3df3bce758c8670fcdfa26e456433a6 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/MemberEntity.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/MemberEntity.java
@@ -1,10 +1,10 @@
-package com.sum.spirit.core.clazz.frame;
+package com.gitee.spirit.core.clazz.frame;
import java.util.List;
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.core.clazz.entity.IAnnotation;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.core.clazz.entity.IAnnotation;
+import com.gitee.spirit.core.element.entity.Element;
public abstract class MemberEntity extends AnnotationEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/TokenEntity.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/TokenEntity.java
similarity index 76%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/TokenEntity.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/TokenEntity.java
index fd8f96093269268f70de5a175aa6df20fc4f17b3..811d53048e694b789652f3f3558ce1fc0655cd39 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/TokenEntity.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/TokenEntity.java
@@ -1,7 +1,7 @@
-package com.sum.spirit.core.clazz.frame;
+package com.gitee.spirit.core.clazz.frame;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.core.element.entity.Token;
public abstract class TokenEntity extends TypeEntity {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/TypeEntity.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/TypeEntity.java
similarity index 45%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/TypeEntity.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/TypeEntity.java
index e922d9cec2e2e9bbc3864a3e2c2eb11a779f89ae..210978eb69e958dd12f658e0b41e56c7dcb9a77b 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/TypeEntity.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/frame/TypeEntity.java
@@ -1,6 +1,6 @@
-package com.sum.spirit.core.clazz.frame;
+package com.gitee.spirit.core.clazz.frame;
-import com.sum.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.entity.IType;
import lombok.Getter;
import lombok.NonNull;
@@ -8,7 +8,7 @@ import lombok.Setter;
@Getter
@Setter
-public abstract class TypeEntity extends ContextEntity {
+public abstract class TypeEntity {
@NonNull
private IType type;
}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/TypeBuilder.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeBuilder.java
similarity index 90%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/TypeBuilder.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeBuilder.java
index 52e83a733da7413e865403ee33f5332ac2ab3586..417d3b8c80d00a755ff32a0a3821b987b571fcb0 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/TypeBuilder.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeBuilder.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.core.clazz.utils;
+package com.gitee.spirit.core.clazz.utils;
import java.util.ArrayList;
import java.util.Collections;
-import com.sum.spirit.common.enums.ModifierEnum;
-import com.sum.spirit.common.enums.PrimitiveEnum;
-import com.sum.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.common.enums.ModifierEnum;
+import com.gitee.spirit.common.enums.PrimitiveEnum;
+import com.gitee.spirit.core.clazz.entity.IType;
public class TypeBuilder {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/StaticTypes.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeRegistry.java
similarity index 53%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/StaticTypes.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeRegistry.java
index 8bbe3d17d0920bbc29d668c5c53c8a7282c61f72..83c6285a22562af4cc4687d55e899ef4be58b7c2 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/StaticTypes.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeRegistry.java
@@ -1,15 +1,10 @@
-package com.sum.spirit.core.clazz.utils;
+package com.gitee.spirit.core.clazz.utils;
-import java.util.Map;
+import com.gitee.spirit.common.enums.PrimitiveEnum;
+import com.gitee.spirit.common.utils.ConfigUtils;
+import com.gitee.spirit.core.clazz.entity.IType;
-import com.sum.spirit.common.enums.PrimitiveEnum;
-import com.sum.spirit.common.utils.SpringUtils;
-import com.sum.spirit.core.api.StaticTypesCtor;
-import com.sum.spirit.core.clazz.entity.IType;
-
-import cn.hutool.core.lang.Assert;
-
-public class StaticTypes {
+public class TypeRegistry {
public static final IType VOID;
public static final IType BOOLEAN;
@@ -42,11 +37,11 @@ public class StaticTypes {
public static final IType OBJECT;
public static final IType STRING;
- public static final IType OBJECT_ARRAY;
- public static final IType STRING_ARRAY;
public static final IType CLASS;
public static final IType LIST;
public static final IType MAP;
+ public static final IType OBJECT_ARRAY;
+ public static final IType STRING_ARRAY;
public static final IType NULL;
public static final IType WILDCARD;
@@ -70,29 +65,27 @@ public class StaticTypes {
FLOAT_ARRAY = TypeBuilder.build(PrimitiveEnum.FLOAT_ARRAY);
DOUBLE_ARRAY = TypeBuilder.build(PrimitiveEnum.DOUBLE_ARRAY);
- StaticTypesCtor ctor = SpringUtils.getBean(StaticTypesCtor.class);
- Assert.notNull(ctor, "Static types ctor must be provided!");
- Map typeMap = ctor.prepareStaticTypes();
-
- VOID_BOX = typeMap.get("VOID_BOX");
- BOOLEAN_BOX = typeMap.get("BOOLEAN_BOX");
- CHAR_BOX = typeMap.get("CHAR_BOX");
- BYTE_BOX = typeMap.get("BYTE_BOX");
- SHORT_BOX = typeMap.get("SHORT_BOX");
- INT_BOX = typeMap.get("INT_BOX");
- LONG_BOX = typeMap.get("LONG_BOX");
- FLOAT_BOX = typeMap.get("FLOAT_BOX");
- DOUBLE_BOX = typeMap.get("DOUBLE_BOX");
-
- OBJECT = typeMap.get("OBJECT");
- STRING = typeMap.get("STRING");
- OBJECT_ARRAY = typeMap.get("OBJECT_ARRAY");
- STRING_ARRAY = typeMap.get("STRING_ARRAY");
- CLASS = typeMap.get("CLASS");
- LIST = typeMap.get("LIST");
- MAP = typeMap.get("MAP");
- NULL = typeMap.get("NULL");
- WILDCARD = typeMap.get("WILDCARD");
+ String langPackage = ConfigUtils.getLangPackage() + ".";
+ String utilPackage = ConfigUtils.getUtilPackage() + ".";
+ VOID_BOX = TypeBuilder.build(langPackage + "Void", "Void", langPackage + "Void", false, false, false, false, true);
+ BOOLEAN_BOX = TypeBuilder.build(langPackage + "Boolean", "Boolean", langPackage + "Boolean", false, false, false, false, true);
+ CHAR_BOX = TypeBuilder.build(langPackage + "Character", "Character", langPackage + "Character", false, false, false, false, true);
+ BYTE_BOX = TypeBuilder.build(langPackage + "Byte", "Byte", langPackage + "Byte", false, false, false, false, true);
+ SHORT_BOX = TypeBuilder.build(langPackage + "Short", "Short", langPackage + "Short", false, false, false, false, true);
+ INT_BOX = TypeBuilder.build(langPackage + "Integer", "Integer", langPackage + "Integer", false, false, false, false, true);
+ LONG_BOX = TypeBuilder.build(langPackage + "Long", "Long", langPackage + "Long", false, false, false, false, true);
+ FLOAT_BOX = TypeBuilder.build(langPackage + "Float", "Float", langPackage + "Float", false, false, false, false, true);
+ DOUBLE_BOX = TypeBuilder.build(langPackage + "Double", "Double", langPackage + "Double", false, false, false, false, true);
+ OBJECT = TypeBuilder.build(langPackage + "Object", "Object", langPackage + "Object", false, false, false, false, true);
+ STRING = TypeBuilder.build(langPackage + "String", "String", langPackage + "String", false, false, false, false, true);
+ CLASS = TypeBuilder.build(langPackage + "Class", "Class", langPackage + "Class", false, false, false, false, true);
+ LIST = TypeBuilder.build(utilPackage + "List", "List", utilPackage + "List", false, false, false, false, true);
+ MAP = TypeBuilder.build(utilPackage + "Map", "Map", utilPackage + "Map", false, false, false, false, true);
+
+ OBJECT_ARRAY = TypeBuilder.build("[L" + langPackage + "Object;", "Object[]", langPackage + "Object[]", false, true/* array */, false, false, true);
+ STRING_ARRAY = TypeBuilder.build("[L" + langPackage + "String;", "String[]", langPackage + "String[]", false, true/* array */, false, false, true);
+ NULL = TypeBuilder.build(langPackage + "Object", "Object", langPackage + "Object", false, false, true/* null */, false, true);
+ WILDCARD = TypeBuilder.build(langPackage + "Object", "Object", langPackage + "Object", false, false, false, true/* wildcard */, true);
}
public static IType getBoxType(String className) {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/TypeUtils.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeUtils.java
similarity index 96%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/TypeUtils.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeUtils.java
index a58f70892d7915e4cf778b43fe13faa470371598..9b901d351e402dbf37c952c7fd126375f1471e82 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/TypeUtils.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeUtils.java
@@ -1,13 +1,13 @@
-package com.sum.spirit.core.clazz.utils;
+package com.gitee.spirit.core.clazz.utils;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
+import com.gitee.spirit.common.enums.PrimitiveEnum;
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
-import com.sum.spirit.common.enums.PrimitiveEnum;
import cn.hutool.core.lang.Assert;
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/TypeVisiter.java b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeVisiter.java
similarity index 96%
rename from spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/TypeVisiter.java
rename to spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeVisiter.java
index fec5a22e3fee158edf1ae10eb728c0dd85a76868..4879d55bf6f4e2263567937a711b45696a67ff91 100644
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/utils/TypeVisiter.java
+++ b/spirit-core/spirit-core-class/src/main/java/com/gitee/spirit/core/clazz/utils/TypeVisiter.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.core.clazz.utils;
+package com.gitee.spirit.core.clazz.utils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import com.gitee.spirit.core.clazz.entity.IType;
import com.google.common.base.Joiner;
-import com.sum.spirit.core.clazz.entity.IType;
public class TypeVisiter {
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ResolverContext.java b/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ResolverContext.java
deleted file mode 100644
index dbd9b02724840a3e808d98e8221e9c1fcf4e8226..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/ResolverContext.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.sum.spirit.core.api;
-
-import java.util.List;
-
-public interface ResolverContext {
-
- ElementBuilder getElementBuilder();
-
- TypeFactory getTypeFactory();
-
- List getImportSelectors();
-
-}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/StaticTypesCtor.java b/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/StaticTypesCtor.java
deleted file mode 100644
index c6eab7cc93ccf349db651ed5aca598408b387cfb..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/api/StaticTypesCtor.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.sum.spirit.core.api;
-
-import java.util.Map;
-
-import com.sum.spirit.core.clazz.entity.IType;
-
-public interface StaticTypesCtor {
-
- public Map prepareStaticTypes();
-
-}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/AbstractClassLoader.java b/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/AbstractClassLoader.java
deleted file mode 100644
index 88605957aa2125458f367d334d45b0aaba314fd8..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/AbstractClassLoader.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.sum.spirit.core.clazz;
-
-import java.net.URL;
-
-import com.sum.spirit.core.api.ClassLoader;
-import com.sum.spirit.core.api.ImportSelector;
-import com.sum.spirit.core.clazz.utils.TypeUtils;
-
-public abstract class AbstractClassLoader implements ClassLoader, ImportSelector {
-
- @Override
- public T loadClass(String name) {
- URL resource = findResource(name);
- return defineClass(name, resource);
- }
-
- @Override
- public boolean isHandle(String className) {
- return contains(className);
- }
-
- @Override
- public boolean shouldImport(String selfName, String className) {
- if (selfName.equals(className)) {
- return false;
- }
- if (TypeUtils.isSamePackage(selfName, className)) {
- return false;
- }
- return true;
- }
-
- public abstract URL findResource(String name);
-
- public abstract T defineClass(String name, URL resource);
-
-}
diff --git a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/ContextEntity.java b/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/ContextEntity.java
deleted file mode 100644
index 078815b1cc7fd7945a528d3ec65e44b6ced466a9..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-class/src/main/java/com/sum/spirit/core/clazz/frame/ContextEntity.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.sum.spirit.core.clazz.frame;
-
-import com.sum.spirit.core.api.ResolverContext;
-
-public abstract class ContextEntity {
-
- public ResolverContext context;
-
-}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ClassLinker.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ClassLinker.java
similarity index 83%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ClassLinker.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ClassLinker.java
index 33075203c254cd0a4ed7f6f56b05fe23281d3eda..2b6b33c4e89b7ec3b47c2f86fad2209a7bb1c937 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ClassLinker.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ClassLinker.java
@@ -1,8 +1,8 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.util.List;
-import com.sum.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.entity.IType;
public interface ClassLinker {
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ClassVisiter.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ClassVisiter.java
similarity index 46%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ClassVisiter.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ClassVisiter.java
index 84731e0f9ea7eb1aa8a2fe973ef3c4fca4ec7e5a..33038f358f8c4832f5b5ddfeb20ed25ef19ae8cf 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ClassVisiter.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ClassVisiter.java
@@ -1,8 +1,8 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.frame.MemberEntity;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.frame.MemberEntity;
public interface ClassVisiter {
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/CodeBuilder.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/CodeBuilder.java
similarity index 43%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/CodeBuilder.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/CodeBuilder.java
index fbc83741478badd891c1ed2e663bf5e121a17ee4..8a8fcffcd3aa0468714f444ba37b7a0c8bbb0fac 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/CodeBuilder.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/CodeBuilder.java
@@ -1,6 +1,6 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
-import com.sum.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IClass;
public interface CodeBuilder {
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/Compiler.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/Compiler.java
similarity index 66%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/Compiler.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/Compiler.java
index 3fc698f70120012c02309dff704295c7b014cdc5..15b92c887f25bb9751ee69709087af2164441b07 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/Compiler.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/Compiler.java
@@ -1,9 +1,9 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.io.InputStream;
import java.util.Map;
-import com.sum.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IClass;
public interface Compiler {
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ElementAction.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ElementAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..38693d143a39ce00f09a8b13dd822a0168730d7b
--- /dev/null
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ElementAction.java
@@ -0,0 +1,10 @@
+package com.gitee.spirit.core.api;
+
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+
+public interface ElementAction {
+
+ void visitElement(VisitContext context, Element element);
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ElementVisiter.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ElementVisiter.java
new file mode 100644
index 0000000000000000000000000000000000000000..0a837a603b78b1b99c0613e78861c389df0ece26
--- /dev/null
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/ElementVisiter.java
@@ -0,0 +1,11 @@
+package com.gitee.spirit.core.api;
+
+import com.gitee.spirit.core.clazz.entity.IVariable;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+
+public interface ElementVisiter {
+
+ IVariable visitElement(VisitContext context, Element element);
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/TypeDerivator.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/TypeDerivator.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3d8028c4ece134b5dc211c15c536bedab3e4788
--- /dev/null
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/TypeDerivator.java
@@ -0,0 +1,13 @@
+package com.gitee.spirit.core.api;
+
+import com.gitee.spirit.core.clazz.entity.IType;
+
+public interface TypeDerivator {
+
+ IType populate(IType instanceType, IType targetType);
+
+ Integer getAbstractScore(IType abstractType, IType targetType);
+
+ boolean isMoreAbstract(IType abstractType, IType targetType);
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/VariableTracker.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/VariableTracker.java
new file mode 100644
index 0000000000000000000000000000000000000000..912f9956f3cc82e1a3b2a9d0fc68aa757bd2e2fe
--- /dev/null
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/api/VariableTracker.java
@@ -0,0 +1,10 @@
+package com.gitee.spirit.core.api;
+
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+
+public interface VariableTracker {
+
+ IType findVariableType(VisitContext context, String variableName);
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/AppClassLoader.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AppClassLoader.java
similarity index 78%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/AppClassLoader.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AppClassLoader.java
index 02415f996ddaeb3d552bef5475a7239ecb96d882..c44d4e0e4ae8ddecdc57e24d4dbfb98f81a492fe 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/AppClassLoader.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AppClassLoader.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.compile;
+package com.gitee.spirit.core.compile;
import java.net.URL;
import java.util.List;
@@ -9,11 +9,11 @@ import org.springframework.context.annotation.DependsOn;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.utils.URLFileUtils;
-import com.sum.spirit.core.api.ClassVisiter;
-import com.sum.spirit.core.api.Compiler;
-import com.sum.spirit.core.clazz.AbstractURLClassLoader;
-import com.sum.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.common.utils.URLFileUtils;
+import com.gitee.spirit.core.api.ClassVisiter;
+import com.gitee.spirit.core.api.Compiler;
+import com.gitee.spirit.core.clazz.AbstractURLClassLoader;
+import com.gitee.spirit.core.clazz.entity.IClass;
@Component
@Order(-100)
@@ -31,7 +31,7 @@ public class AppClassLoader extends AbstractURLClassLoader {
public List getAllClasses() {
if (super.getAllClasses().size() == 0) {
List names = getNames();
- names.forEach(name -> findClass(name));
+ names.forEach(name -> loadClass(name));
List classes = super.getAllClasses();
visitClasses(classes);
return classes;
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AppImportSelector.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AppImportSelector.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a4861d3f7c0c33ee38f78172fb91b07d27a9a79
--- /dev/null
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AppImportSelector.java
@@ -0,0 +1,27 @@
+package com.gitee.spirit.core.compile;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.clazz.AbstractImportSelector;
+
+@Component
+@Order(-100)
+public class AppImportSelector extends AbstractImportSelector {
+
+ @Autowired
+ public AppClassLoader loader;
+
+ @Override
+ public boolean canHandle(String className) {
+ return loader.contains(className);
+ }
+
+ @Override
+ public String findClassName(String simpleName) {
+ return ListUtils.findOne(loader.getNames(), className -> className.endsWith("." + simpleName));
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/AppTypeFactory.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AppTypeFactory.java
similarity index 74%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/AppTypeFactory.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AppTypeFactory.java
index 1cbe9348d9fd54bdb5964dbd130797f543cb967e..abfd7d3112f0f9521b1a8ab36b1146620cc798ab 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/AppTypeFactory.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AppTypeFactory.java
@@ -1,162 +1,162 @@
-package com.sum.spirit.core.compile;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.ModifierEnum;
-import com.sum.spirit.common.enums.PrimitiveEnum;
-import com.sum.spirit.core.clazz.AbstractTypeFactory;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.StaticTypes;
-import com.sum.spirit.core.clazz.utils.TypeUtils;
-import com.sum.spirit.core.compile.deduce.FragmentDeducer;
-import com.sum.spirit.core.compile.deduce.TypeDerivator;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-
-import cn.hutool.core.lang.Assert;
-
-@Primary
-@Component
-public class AppTypeFactory extends AbstractTypeFactory {
-
- @Autowired
- public AppClassLoader classLoader;
- @Autowired
- public FragmentDeducer deducer;
- @Autowired
- public TypeDerivator derivator;
-
- @Override
- public IType create(String className) {// 一般来说,className可以直接反应出大部分属性
- IType type = new IType();
- type.setClassName(className);
- type.setSimpleName(TypeUtils.getSimpleName(className));
- type.setTypeName(TypeUtils.getTypeName(className));
- type.setPrimitive(PrimitiveEnum.isPrimitive(className));
- type.setArray(TypeUtils.isArray(className));
- type.setNull(false);
- type.setWildcard(false);
- type.setNative(!classLoader.contains(TypeUtils.getTargetName(className)));
- type.setModifiers(ModifierEnum.PUBLIC.value);
- return type;
- }
-
- @Override
- public IType create(IClass clazz, Token token) {
- if (token.isType()) {
- return doCreate(clazz, token);
-
- } else if (token.isAnnotation() || token.isArrayInit() || token.isTypeInit() || token.isCast()) {
- return create(clazz, (String) token.attr(Attribute.SIMPLE_NAME));
-
- } else if (token.isLiteral()) {// 1, 1.1, "xxxx"
- return getValueType(clazz, token);
- }
- return null;
- }
-
- public IType doCreate(IClass clazz, Token token) {
- if (token.value instanceof String) {// String // String[] //? //T,K
- String simpleName = token.getValue();
- if ("?".equals(simpleName)) {
- return StaticTypes.WILDCARD;// ?
- }
- if (clazz.getTypeVariableIndex(simpleName) >= 0) {
- return createTypeVariable(simpleName);// T or K
- }
- return create(clazz.findClassName(simpleName));
-
- } else if (token.value instanceof Statement) {
- Statement statement = token.getValue(); // List // Class>
- String simpleName = statement.getStr(0);
- IType type = create(clazz.findClassName(simpleName));
- type.setGenericTypes(getGenericTypes(clazz, statement));
- return type;
- }
- throw new RuntimeException("Unknown token value type!");
- }
-
- public List getGenericTypes(IClass clazz, Statement statement) {
- List genericTypes = new ArrayList<>();
- for (int i = 1; i < statement.size(); i++) {
- Token token = statement.get(i);
- if (token.isType()) {
- genericTypes.add(create(clazz, token));
- }
- }
- return genericTypes;
- }
-
- public IType getValueType(IClass clazz, Token token) {
- if (token.isBoolean()) {
- return StaticTypes.BOOLEAN;
- } else if (token.isChar()) {
- return StaticTypes.CHAR;
- } else if (token.isInt()) {
- return StaticTypes.INT;
- } else if (token.isLong()) {
- return StaticTypes.LONG;
- } else if (token.isDouble()) {
- return StaticTypes.DOUBLE;
- } else if (token.isNull()) {
- return StaticTypes.NULL;
- } else if (token.isString()) {
- return StaticTypes.STRING;
- } else if (token.isList()) {
- return getListType(clazz, token);
- } else if (token.isMap()) {
- return getMapType(clazz, token);
- }
- return null;
- }
-
- public IType getListType(IClass clazz, Token token) {
- Statement statement = token.getValue();
- List statements = statement.subStmt(1, statement.size() - 1).splitStmt(",");
- return create(StaticTypes.LIST.getClassName(), getGenericType(clazz, statements));
- }
-
- public IType getMapType(IClass clazz, Token token) {
- Statement statement = token.getValue();
- List keyStatements = new ArrayList<>();
- List valueStatements = new ArrayList<>();
- for (Statement subStatement : statement.subStmt(1, statement.size() - 1).splitStmt(",")) {
- List subStatements = subStatement.splitStmt(":");
- keyStatements.add(subStatements.get(0));
- valueStatements.add(subStatements.get(1));
- }
- return create(StaticTypes.MAP.getClassName(), getGenericType(clazz, keyStatements), getGenericType(clazz, valueStatements));
- }
-
- public IType getGenericType(IClass clazz, List statements) {
- // 如果没有元素,则返回Object类型
- if (statements.size() == 0) {
- return StaticTypes.OBJECT;
- }
- IType genericType = null;
- for (Statement statement : statements) {
- IType boxType = derivator.toBox(deducer.derive(clazz, statement));
- if (genericType == null) {
- genericType = boxType;
- continue;
- }
- if (derivator.isMoreAbstract(boxType, genericType)) {// 更抽象则替换
- genericType = boxType;
-
- } else if (!derivator.isMoreAbstract(genericType, boxType)) {// 不同则使用Object
- genericType = StaticTypes.OBJECT;
- break;
- }
- }
- Assert.notNull(genericType, "Generic type cannot be null!");
- return genericType;
- }
-
-}
+package com.gitee.spirit.core.compile;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.ModifierEnum;
+import com.gitee.spirit.common.enums.PrimitiveEnum;
+import com.gitee.spirit.core.api.TypeDerivator;
+import com.gitee.spirit.core.clazz.AbstractTypeFactory;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.utils.TypeRegistry;
+import com.gitee.spirit.core.clazz.utils.TypeUtils;
+import com.gitee.spirit.core.compile.derivator.FragmentDeducer;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+
+import cn.hutool.core.lang.Assert;
+
+@Primary
+@Component
+public class AppTypeFactory extends AbstractTypeFactory {
+
+ @Autowired
+ public AppClassLoader classLoader;
+ @Autowired
+ public FragmentDeducer deducer;
+ @Autowired
+ public TypeDerivator derivator;
+
+ @Override
+ public IType create(String className) {// 一般来说,className可以直接反应出大部分属性
+ IType type = new IType();
+ type.setClassName(className);
+ type.setSimpleName(TypeUtils.getSimpleName(className));
+ type.setTypeName(TypeUtils.getTypeName(className));
+ type.setPrimitive(PrimitiveEnum.isPrimitive(className));
+ type.setArray(TypeUtils.isArray(className));
+ type.setNull(false);
+ type.setWildcard(false);
+ type.setNative(!classLoader.contains(TypeUtils.getTargetName(className)));
+ type.setModifiers(ModifierEnum.PUBLIC.value);
+ return type;
+ }
+
+ @Override
+ public IType create(IClass clazz, Token token) {
+ if (token.isType()) {
+ return doCreate(clazz, token);
+
+ } else if (token.isAnnotation() || token.isArrayInit() || token.isTypeInit() || token.isCast()) {
+ return create(clazz, (String) token.attr(Attribute.SIMPLE_NAME));
+
+ } else if (token.isLiteral()) {// 1, 1.1, "xxxx"
+ return getValueType(clazz, token);
+ }
+ return null;
+ }
+
+ public IType doCreate(IClass clazz, Token token) {
+ if (token.value instanceof String) {// String // String[] //? //T,K
+ String simpleName = token.getValue();
+ if ("?".equals(simpleName)) {
+ return TypeRegistry.WILDCARD;// ?
+ }
+ if (clazz.getTypeVariableIndex(simpleName) >= 0) {
+ return createTypeVariable(simpleName);// T or K
+ }
+ return create(clazz.findClassName(simpleName));
+
+ } else if (token.value instanceof Statement) {
+ Statement statement = token.getValue(); // List // Class>
+ String simpleName = statement.getStr(0);
+ IType type = create(clazz.findClassName(simpleName));
+ type.setGenericTypes(getGenericTypes(clazz, statement));
+ return type;
+ }
+ throw new RuntimeException("Unknown token value type!");
+ }
+
+ public List getGenericTypes(IClass clazz, Statement statement) {
+ List genericTypes = new ArrayList<>();
+ for (int i = 1; i < statement.size(); i++) {
+ Token token = statement.get(i);
+ if (token.isType()) {
+ genericTypes.add(create(clazz, token));
+ }
+ }
+ return genericTypes;
+ }
+
+ public IType getValueType(IClass clazz, Token token) {
+ if (token.isBoolean()) {
+ return TypeRegistry.BOOLEAN;
+ } else if (token.isChar()) {
+ return TypeRegistry.CHAR;
+ } else if (token.isInt()) {
+ return TypeRegistry.INT;
+ } else if (token.isLong()) {
+ return TypeRegistry.LONG;
+ } else if (token.isDouble()) {
+ return TypeRegistry.DOUBLE;
+ } else if (token.isNull()) {
+ return TypeRegistry.NULL;
+ } else if (token.isString()) {
+ return TypeRegistry.STRING;
+ } else if (token.isList()) {
+ return getListType(clazz, token);
+ } else if (token.isMap()) {
+ return getMapType(clazz, token);
+ }
+ return null;
+ }
+
+ public IType getListType(IClass clazz, Token token) {
+ Statement statement = token.getValue();
+ List statements = statement.subStmt(1, statement.size() - 1).splitStmt(",");
+ return create(TypeRegistry.LIST.getClassName(), getGenericType(clazz, statements));
+ }
+
+ public IType getMapType(IClass clazz, Token token) {
+ Statement statement = token.getValue();
+ List keyStatements = new ArrayList<>();
+ List valueStatements = new ArrayList<>();
+ for (Statement subStatement : statement.subStmt(1, statement.size() - 1).splitStmt(",")) {
+ List subStatements = subStatement.splitStmt(":");
+ keyStatements.add(subStatements.get(0));
+ valueStatements.add(subStatements.get(1));
+ }
+ return create(TypeRegistry.MAP.getClassName(), getGenericType(clazz, keyStatements), getGenericType(clazz, valueStatements));
+ }
+
+ public IType getGenericType(IClass clazz, List statements) {
+ // 如果没有元素,则返回Object类型
+ if (statements.size() == 0) {
+ return TypeRegistry.OBJECT;
+ }
+ IType genericType = null;
+ for (Statement statement : statements) {
+ IType boxType = deducer.derive(clazz, statement).toBox();
+ if (genericType == null) {
+ genericType = boxType;
+ continue;
+ }
+ if (derivator.isMoreAbstract(boxType, genericType)) {// 更抽象则替换
+ genericType = boxType;
+
+ } else if (!derivator.isMoreAbstract(genericType, boxType)) {// 不同则使用Object
+ genericType = TypeRegistry.OBJECT;
+ break;
+ }
+ }
+ Assert.notNull(genericType, "Generic type cannot be null!");
+ return genericType;
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/AutoImporter.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AutoImporter.java
similarity index 87%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/AutoImporter.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AutoImporter.java
index d4ef1a99a7a09adee641004b7ffdb0667e2764cd..6261b9c4a358a7df5e473284f2e9785469ec84bd 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/AutoImporter.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/AutoImporter.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.compile;
+package com.gitee.spirit.core.compile;
import java.util.ArrayList;
import java.util.Arrays;
@@ -11,12 +11,12 @@ import java.util.regex.Pattern;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import com.sum.spirit.core.api.ElementBuilder;
-import com.sum.spirit.core.api.SemanticParser;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.TypeVisiter;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.api.ElementBuilder;
+import com.gitee.spirit.core.api.SemanticParser;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.utils.TypeVisiter;
+import com.gitee.spirit.core.element.entity.Element;
@Component
public class AutoImporter {
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/CoreCompiler.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/CoreCompiler.java
similarity index 66%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/CoreCompiler.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/CoreCompiler.java
index 5a8fb927fa04afe416addf0221e32c13d422e532..595c0459d5a7f7924f2fde702b11fd0f2e4d583f 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/CoreCompiler.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/CoreCompiler.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.compile;
+package com.gitee.spirit.core.compile;
import java.io.InputStream;
import java.util.Map;
@@ -7,12 +7,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
-import com.sum.spirit.core.api.ClassResolver;
-import com.sum.spirit.core.api.Compiler;
-import com.sum.spirit.core.api.DocumentReader;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.utils.TypeUtils;
-import com.sum.spirit.core.element.entity.Document;
+import com.gitee.spirit.core.api.ClassResolver;
+import com.gitee.spirit.core.api.Compiler;
+import com.gitee.spirit.core.api.DocumentReader;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.utils.TypeUtils;
+import com.gitee.spirit.core.element.entity.Document;
@Primary
@Component
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/DefaultClassVisiter.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/DefaultClassVisiter.java
similarity index 71%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/DefaultClassVisiter.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/DefaultClassVisiter.java
index a20f9eae44bac66f615e6fb086629b4483c0de6b..0ce28f12ed742c92f3b33b06c9aad331da17f61f 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/DefaultClassVisiter.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/DefaultClassVisiter.java
@@ -1,181 +1,181 @@
-package com.sum.spirit.core.compile;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.common.utils.ObjectUtils;
-import com.sum.spirit.core.api.ClassVisiter;
-import com.sum.spirit.core.api.ElementBuilder;
-import com.sum.spirit.core.api.ElementVisiter;
-import com.sum.spirit.core.api.TypeFactory;
-import com.sum.spirit.core.clazz.entity.IAnnotation;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IField;
-import com.sum.spirit.core.clazz.entity.IMethod;
-import com.sum.spirit.core.clazz.entity.IParameter;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.entity.IVariable;
-import com.sum.spirit.core.clazz.frame.MemberEntity;
-import com.sum.spirit.core.clazz.utils.StaticTypes;
-import com.sum.spirit.core.compile.deduce.TypeDerivator;
-import com.sum.spirit.core.compile.entity.MethodContext;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-
-import cn.hutool.core.lang.Assert;
-
-@Component
-public class DefaultClassVisiter implements ClassVisiter {
-
- @Autowired
- public TypeFactory factory;
- @Autowired
- public ElementBuilder builder;
- @Autowired
- public ElementVisiter visiter;
- @Autowired
- public TypeDerivator derivator;
-
- @Override
- public void prepareForVisit(IClass clazz) {
- // 访问类型
- clazz.setType(factory.create(clazz, clazz.getTypeToken()));
- // 访问方法入参
- clazz.methods.forEach(method -> visitParameters(clazz, method));
- }
-
- @Override
- public void visitClass(IClass clazz) {
- Assert.notNull(clazz.getType(), "Please invoke the method [prepareForVisit] first!");
- // 访问注解
- visitAnnotations(clazz, clazz.annotations);
- clazz.fields.forEach(field -> visitAnnotations(clazz, field.annotations));
- clazz.methods.forEach(method -> visitAnnotations(clazz, method.annotations));
- // 访问成员
- clazz.fields.forEach(field -> visitMember(clazz, field));
- clazz.methods.forEach(method -> visitMember(clazz, method));
- }
-
- public void visitAnnotations(IClass clazz, List annotations) {
- annotations.forEach(annotation -> annotation.setType(factory.create(clazz, annotation.token)));
- }
-
- public void visitParameters(IClass clazz, IMethod method) {
- // User() // invoke()
- Token methodToken = method.element.findOneTokenOf(TokenTypeEnum.TYPE_INIT, TokenTypeEnum.LOCAL_METHOD);
- Statement statement = methodToken.getValue();
- List statements = statement.subStmt("(", ")").splitStmt(",");
- for (Statement parameterStmt : statements) {
- List annotations = ListUtils.filterStoppable(parameterStmt, token -> token.isAnnotation(), token -> new IAnnotation(token));
- IParameter parameter = new IParameter(annotations, builder.rebuild(parameterStmt));
- parameter.setType(factory.create(clazz, parameterStmt.get(0)));
- method.parameters.add(parameter);
- }
- }
-
- @Override
- public IType visitMember(IClass clazz, MemberEntity member) {
- ObjectUtils.lock(member); // 防止循环依赖
- IType type = member.getType();
- if (type == null) {
- if (member instanceof IField) {
- type = visitField(clazz, (IField) member);
-
- } else if (member instanceof IMethod) {
- type = visitMethod(clazz, (IMethod) member);
- }
- Assert.notNull(type, "Failed to derive member type!");
- member.setType(type);
- }
- ObjectUtils.unlock(member);
- return type;
- }
-
- public IType visitField(IClass clazz, IField field) {
- IVariable variable = visiter.visitElement(clazz, field.element);
- return variable.getType();
- }
-
- public IType visitMethod(IClass clazz, IMethod method) {
- // 方法上下文
- MethodContext context = new MethodContext(method);
- // 访问方法体内容
- visitChildElements(clazz, context, method.element);
- // 判断方法的语法
- if (method.element.isFunc()) {
- return context.returnType != null ? context.returnType : StaticTypes.VOID;
-
- } else if (method.element.isDeclareFunc()) {
- // 获取声明的类型
- IType declaredType = factory.create(clazz, method.element.get(0));
- // 如果这个方法有方法体
- if (method.element.hasChild()) {
- IType returnType = context.returnType != null ? context.returnType : StaticTypes.VOID;
- // 进行类型校验
- if (!derivator.isMoreAbstract(declaredType, returnType)) {
- throw new RuntimeException("The derived type does not match the declared type!");
- }
- }
- // 最终返回声明的类型
- return declaredType;
- }
- throw new RuntimeException("Unsupported syntax!");
- }
-
- public void visitChildElements(IClass clazz, MethodContext context, Element father) {
-
- // 遍历所有子元素
- List elements = father.children;
- if (elements == null || elements.size() == 0) {
- return;
- }
-
- for (int index = 0; index < elements.size(); index++) {
- Element element = elements.get(index);
- // 提前将深度加一,以获得正确的blockId
- if (element.children.size() > 0) {
- context.increaseDepth();
- }
- // 对该元素进行分析
- IVariable variable = visiter.visitElement(clazz, context, element);
- // 如果该元素不是return语句,并且变量不为空,则将变量添加到上下文中
- if (!element.isReturn() && variable != null) {
- variable.blockId = context.getBlockId();
- context.variables.add(variable);
-
- } else if (element.isReturn() && variable != null) {
- // 如果上下文中还没有返回类型,则将变量的类型,作为返回类型
- if (context.returnType == null) {
- context.returnType = variable.getType();
- } else {
- // 如果有多个返回类型,则使用最抽象的那个
- if (!variable.getType().isNull()) {
- // 注意:任何类型都是null的抽象,null不能是任何类型的抽象
- if (derivator.isMoreAbstract(variable.getType(), context.returnType)) {
- context.returnType = variable.getType();
- } else {
- context.returnType = StaticTypes.OBJECT;
- }
- }
- }
- }
-
- // 如果return语句后面还有语句,则抛出异常
- if (element.isReturn() && index != elements.size() - 1) {
- throw new RuntimeException("The method body does not end with a return statement!");
- }
-
- // 遍历子节点
- if (element.children.size() > 0) {
- visitChildElements(clazz, context, element);
- context.increaseCount();
- context.decreaseDepth();
- }
- }
- }
-}
+package com.gitee.spirit.core.compile;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.common.utils.ObjectUtils;
+import com.gitee.spirit.core.api.ClassVisiter;
+import com.gitee.spirit.core.api.ElementBuilder;
+import com.gitee.spirit.core.api.ElementVisiter;
+import com.gitee.spirit.core.api.TypeDerivator;
+import com.gitee.spirit.core.api.TypeFactory;
+import com.gitee.spirit.core.clazz.entity.IAnnotation;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IField;
+import com.gitee.spirit.core.clazz.entity.IMethod;
+import com.gitee.spirit.core.clazz.entity.IParameter;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.entity.IVariable;
+import com.gitee.spirit.core.clazz.frame.MemberEntity;
+import com.gitee.spirit.core.clazz.utils.TypeRegistry;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+
+import cn.hutool.core.lang.Assert;
+
+@Component
+public class DefaultClassVisiter implements ClassVisiter {
+
+ @Autowired
+ public TypeFactory factory;
+ @Autowired
+ public ElementBuilder builder;
+ @Autowired
+ public ElementVisiter visiter;
+ @Autowired
+ public TypeDerivator derivator;
+
+ @Override
+ public void prepareForVisit(IClass clazz) {
+ // 访问类型
+ clazz.setType(factory.create(clazz, clazz.getTypeToken()));
+ // 访问方法入参
+ clazz.methods.forEach(method -> visitParameters(clazz, method));
+ }
+
+ @Override
+ public void visitClass(IClass clazz) {
+ Assert.notNull(clazz.getType(), "Please invoke the method [prepareForVisit] first!");
+ // 访问注解
+ visitAnnotations(clazz, clazz.annotations);
+ clazz.fields.forEach(field -> visitAnnotations(clazz, field.annotations));
+ clazz.methods.forEach(method -> visitAnnotations(clazz, method.annotations));
+ // 访问成员
+ clazz.fields.forEach(field -> visitMember(clazz, field));
+ clazz.methods.forEach(method -> visitMember(clazz, method));
+ }
+
+ public void visitAnnotations(IClass clazz, List annotations) {
+ annotations.forEach(annotation -> annotation.setType(factory.create(clazz, annotation.token)));
+ }
+
+ public void visitParameters(IClass clazz, IMethod method) {
+ // User() // invoke()
+ Token methodToken = method.element.findOneTokenOf(TokenTypeEnum.TYPE_INIT, TokenTypeEnum.LOCAL_METHOD);
+ Statement statement = methodToken.getValue();
+ List statements = statement.subStmt("(", ")").splitStmt(",");
+ for (Statement parameterStmt : statements) {
+ List annotations = ListUtils.filterStoppable(parameterStmt, token -> token.isAnnotation(), token -> new IAnnotation(token));
+ IParameter parameter = new IParameter(annotations, builder.build(parameterStmt));
+ parameter.setType(factory.create(clazz, parameterStmt.get(0)));
+ method.parameters.add(parameter);
+ }
+ }
+
+ @Override
+ public IType visitMember(IClass clazz, MemberEntity member) {
+ ObjectUtils.lock(member); // 防止循环依赖
+ IType type = member.getType();
+ if (type == null) {
+ if (member instanceof IField) {
+ type = visitField(clazz, (IField) member);
+
+ } else if (member instanceof IMethod) {
+ type = visitMethod(clazz, (IMethod) member);
+ }
+ Assert.notNull(type, "Failed to derive member type!");
+ member.setType(type);
+ }
+ ObjectUtils.unlock(member);
+ return type;
+ }
+
+ public IType visitField(IClass clazz, IField field) {
+ IVariable variable = visiter.visitElement(new VisitContext(clazz, field), field.element);
+ return variable.getType();
+ }
+
+ public IType visitMethod(IClass clazz, IMethod method) {
+ // 方法上下文
+ VisitContext context = new VisitContext(clazz, method);
+ // 访问方法体内容
+ visitChildElements(context, method.element);
+ // 判断方法的语法
+ if (method.element.isFunc()) {
+ return context.returnType != null ? context.returnType : TypeRegistry.VOID;
+
+ } else if (method.element.isDeclareFunc()) {
+ // 获取声明的类型
+ IType declaredType = factory.create(clazz, method.element.get(0));
+ // 如果这个方法有方法体
+ if (method.element.hasChild()) {
+ IType returnType = context.returnType != null ? context.returnType : TypeRegistry.VOID;
+ // 进行类型校验
+ if (!derivator.isMoreAbstract(declaredType, returnType)) {
+ throw new RuntimeException("The derived type does not match the declared type!");
+ }
+ }
+ // 最终返回声明的类型
+ return declaredType;
+ }
+ throw new RuntimeException("Unsupported syntax!");
+ }
+
+ public void visitChildElements(VisitContext context, Element father) {
+
+ // 遍历所有子元素
+ List elements = father.children;
+ if (elements == null || elements.size() == 0) {
+ return;
+ }
+
+ for (int index = 0; index < elements.size(); index++) {
+ Element element = elements.get(index);
+ // 提前将深度加一,以获得正确的blockId
+ if (element.children.size() > 0) {
+ context.increaseDepth();
+ }
+ // 对该元素进行分析
+ IVariable variable = visiter.visitElement(context, element);
+ // 如果该元素不是return语句,并且变量不为空,则将变量添加到上下文中
+ if (!element.isReturn() && variable != null) {
+ variable.blockId = context.getBlockId();
+ context.variables.add(variable);
+
+ } else if (element.isReturn() && variable != null) {
+ // 如果上下文中还没有返回类型,则将变量的类型,作为返回类型
+ if (context.returnType == null) {
+ context.returnType = variable.getType();
+ } else {
+ // 如果有多个返回类型,则使用最抽象的那个
+ if (!variable.getType().isNull()) {
+ // 注意:任何类型都是null的抽象,null不能是任何类型的抽象
+ if (derivator.isMoreAbstract(variable.getType(), context.returnType)) {
+ context.returnType = variable.getType();
+ } else {
+ context.returnType = TypeRegistry.OBJECT;
+ }
+ }
+ }
+ }
+
+ // 如果return语句后面还有语句,则抛出异常
+ if (element.isReturn() && index != elements.size() - 1) {
+ throw new RuntimeException("The method body does not end with a return statement!");
+ }
+
+ // 遍历子节点
+ if (element.children.size() > 0) {
+ visitChildElements(context, element);
+ context.increaseCount();
+ context.decreaseDepth();
+ }
+ }
+ }
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/DefaultElementVisiter.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/DefaultElementVisiter.java
similarity index 38%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/DefaultElementVisiter.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/DefaultElementVisiter.java
index 0b84988bc340d50a4ec1ee599474efc334c4e27d..959a73a3956a56579657e20a17bedd42ff85e420 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/DefaultElementVisiter.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/DefaultElementVisiter.java
@@ -1,84 +1,66 @@
-package com.sum.spirit.core.compile;
-
-import java.util.List;
-
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.annotation.App;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.utils.SpringUtils;
-import com.sum.spirit.core.api.ElementAction;
-import com.sum.spirit.core.api.ElementVisiter;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IVariable;
-import com.sum.spirit.core.compile.deduce.FragmentDeducer;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-import com.sum.spirit.core.compile.entity.MethodContext;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-
-@Component
-@DependsOn("springUtils")
-public class DefaultElementVisiter implements ElementVisiter, InitializingBean {
-
- @Autowired
- public FragmentDeducer deducer;
- public List actions;
-
- @Override
- public void afterPropertiesSet() throws Exception {
- actions = SpringUtils.getBeansByAnnotation(ElementAction.class, App.class);
- }
-
- @Override
- public IVariable visitElement(IClass clazz, Element element) {
- return visitElement(clazz, null, element);
- }
-
- @Override
- public IVariable visitElement(IClass clazz, MethodContext context, Element element) {
- try {
- for (ElementAction action : actions) {
- ElementEvent event = new ElementEvent(clazz, context, element);
- if (action.isTrigger(event)) {
- action.handle(event);
- }
- }
- return getVariableIfPossible(clazz, element);
-
- } catch (Exception e) {
- element.debug();
- throw new RuntimeException("Failed to derive element!", e);
- }
- }
-
- public IVariable getVariableIfPossible(IClass clazz, Element element) {
- if (element.isAssign()) {
- return createVariable(element.get(0));
-
- } else if (element.isDeclare() || element.isDeclareAssign() || element.isForIn()) {
- return createVariable(element.get(1));
-
- } else if (element.isCatch()) {
- return createVariable(element.get(3));
-
- } else if (element.isReturn()) {
- Statement statement = element.subStmt(1, element.size());
- IVariable variable = new IVariable(null);
- variable.setType(deducer.derive(clazz, statement));
- return variable;
- }
- return null;
- }
-
- public IVariable createVariable(Token varToken) {
- IVariable variable = new IVariable(varToken);
- variable.setType(varToken.attr(Attribute.TYPE));
- return variable;
- }
-
-}
+package com.gitee.spirit.core.compile;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.core.api.ElementAction;
+import com.gitee.spirit.core.api.ElementVisiter;
+import com.gitee.spirit.core.clazz.entity.IVariable;
+import com.gitee.spirit.core.compile.action.AbstractAppElementAction;
+import com.gitee.spirit.core.compile.derivator.FragmentDeducer;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+
+@Component
+public class DefaultElementVisiter implements ElementVisiter {
+
+ @Autowired
+ public List actions;
+ @Autowired
+ public FragmentDeducer deducer;
+
+ @Override
+ public IVariable visitElement(VisitContext context, Element element) {
+ try {
+ for (ElementAction action : actions) {
+ action.visitElement(context, element);
+ }
+ return getVariableIfPossible(context, element);
+
+ } catch (Exception e) {
+ element.debug();
+ throw new RuntimeException("Failed to derive element!", e);
+ }
+ }
+
+ public IVariable getVariableIfPossible(VisitContext context, Element element) {
+ if (element.isAssign()) {
+ return createVariable(element.get(0));
+
+ } else if (element.isDeclare() || element.isDeclareAssign() || element.isForIn()) {
+ return createVariable(element.get(1));
+
+ } else if (element.isCatch()) {
+ return createVariable(element.get(3));
+
+ } else if (element.isReturn()) {
+ Statement statement = element.subStmt(1, element.size());
+ IVariable variable = new IVariable(null);
+ variable.setType(deducer.derive(context.clazz, statement));
+ return variable;
+ }
+ return null;
+ }
+
+ public IVariable createVariable(Token varToken) {
+ IVariable variable = new IVariable(varToken);
+ variable.setType(varToken.attr(Attribute.TYPE));
+ return variable;
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/AbstractAppElementAction.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/AbstractAppElementAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..75b9d58d2f1fe249a7ccda3cd7d7024a5768e38a
--- /dev/null
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/AbstractAppElementAction.java
@@ -0,0 +1,4 @@
+package com.gitee.spirit.core.compile.action;
+
+public abstract class AbstractAppElementAction extends AbstractElementAction {
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/AbstractElementAction.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/AbstractElementAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..7805b680e98f6ceeab3d5cd9ec3110a4e57ad87e
--- /dev/null
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/AbstractElementAction.java
@@ -0,0 +1,27 @@
+package com.gitee.spirit.core.compile.action;
+
+import com.gitee.spirit.core.api.ElementAction;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+
+public abstract class AbstractElementAction implements ElementAction {
+
+ @Override
+ public void visitElement(VisitContext context, Element element) {
+ if (context.isFieldScope()) {
+ visitFieldScope(context, element);
+
+ } else if (context.isMethodScope()) {
+ visitMethodScope(context, element);
+ }
+ }
+
+ public void visitFieldScope(VisitContext context, Element element) {
+ // ignore
+ }
+
+ public void visitMethodScope(VisitContext context, Element element) {
+ // ignore
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementExpressDeclarer.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/ExpressDeclareAction.java
similarity index 45%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementExpressDeclarer.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/ExpressDeclareAction.java
index 0e6cf76f61cf2d0cd6ffce1d17d4ef06e92619f5..96ebb0c245814367f834a6e7164321be2a9ce6d0 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementExpressDeclarer.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/ExpressDeclareAction.java
@@ -1,97 +1,90 @@
-package com.sum.spirit.core.compile.action;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.annotation.App;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.core.api.ElementBuilder;
-import com.sum.spirit.core.api.ElementVisiter;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.entity.IVariable;
-import com.sum.spirit.core.compile.deduce.FragmentDeducer;
-import com.sum.spirit.core.compile.deduce.InvocationVisiter;
-import com.sum.spirit.core.compile.deduce.TypeDerivator;
-import com.sum.spirit.core.compile.deduce.VariableTracker;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-import com.sum.spirit.core.compile.entity.MethodContext;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-
-@App
-@Component
-@Order(-80)
-public class ElementExpressDeclarer extends AbstractScopeElementAction {
-
- @Autowired
- public VariableTracker tracker;
- @Autowired
- public InvocationVisiter visiter;
- @Autowired
- public FragmentDeducer deducer;
- @Autowired
- public TypeDerivator derivator;
- @Autowired
- public ElementBuilder builder;
- @Autowired
- public ElementVisiter elementVisiter;
-
- @Override
- public void handle(ElementEvent event) {
- IClass clazz = event.clazz;
- MethodContext context = event.context;
- Element element = event.element;
- if (element.isAssign()) {// text = "abc"
- Token varToken = element.get(0);
- // 如果是字段声明,则不用进行上下文推导
- IType type = event.isMethodScope() ? tracker.findVariableType(clazz, context, varToken.toString()) : null;
- // 如果找不到,则必须通过推导获取类型
- if (type == null) {
- Statement statement = element.subStmt(2, element.size());
- tracker.visit(clazz, context, statement);
- visiter.visit(clazz, statement);
- type = deducer.derive(clazz, statement);
- // 标记类型是否经过推导而来
- varToken.setAttr(Attribute.DERIVED, true);
- }
- varToken.setAttr(Attribute.TYPE, type);
- }
- super.handle(event);
- }
-
- @Override
- public void visitMethodScope(ElementEvent event) {
- IClass clazz = event.clazz;
- MethodContext context = event.context;
- Element element = event.element;
- if (element.isForIn()) {// for item in list {
- Statement statement = element.subStmt(3, element.size() - 1);
- tracker.visit(clazz, context, statement);
- visiter.visit(clazz, statement);
- IType type = deducer.derive(clazz, statement);
- // 获取数组内部类型和泛型类型
- type = type.isArray() ? derivator.toTarget(type) : type.getGenericTypes().get(0);
- Token varToken = element.get(1);
- varToken.setAttr(Attribute.TYPE, type);
-
- } else if (element.isFor()) {// for (i=0; i<100; i++) {
- Token secondToken = element.get(1);
- if (secondToken.isSubexpress()) {
- Statement statement = secondToken.getValue();
- Statement subStatement = statement.subStmt(1, statement.indexOf(";"));
- if (subStatement.size() > 0) {
- Element subElement = builder.rebuild(subStatement);
- IVariable variable = elementVisiter.visitElement(clazz, context, subElement);
- if (variable != null) {
- variable.blockId = context.getBlockId();
- context.variables.add(variable);
- }
- }
- }
- }
- }
-
-}
+package com.gitee.spirit.core.compile.action;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.core.api.ElementBuilder;
+import com.gitee.spirit.core.api.ElementVisiter;
+import com.gitee.spirit.core.api.VariableTracker;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.entity.IVariable;
+import com.gitee.spirit.core.compile.derivator.FragmentDeducer;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+
+@Component
+@Order(-80)
+public class ExpressDeclareAction extends AbstractAppElementAction {
+
+ @Autowired
+ public VariableTracker tracker;
+ @Autowired
+ public VariableTrackAction variableAction;
+ @Autowired
+ public InvokeVisitAction invokeAction;
+ @Autowired
+ public FragmentDeducer deducer;
+ @Autowired
+ public ElementBuilder builder;
+ @Autowired
+ public ElementVisiter visiter;
+
+ @Override
+ public void visitElement(VisitContext context, Element element) {
+ IClass clazz = context.clazz;
+ if (element.isAssign()) {// text = "abc"
+ Token varToken = element.get(0);
+ // 如果是字段声明,则不用进行上下文推导
+ IType type = context.isMethodScope() ? tracker.findVariableType(context, varToken.toString()) : null;
+ // 如果找不到,则必须通过推导获取类型
+ if (type == null) {
+ Statement statement = element.subStmt(2, element.size());
+ Element subElement = new Element(statement);
+ variableAction.visitElement(context, subElement);
+ invokeAction.visitElement(context, subElement);
+ type = deducer.derive(clazz, statement);
+ // 标记类型是否经过推导而来
+ varToken.setAttr(Attribute.DERIVED, true);
+ }
+ varToken.setAttr(Attribute.TYPE, type);
+ }
+ super.visitElement(context, element);
+ }
+
+ @Override
+ public void visitMethodScope(VisitContext context, Element element) {
+ IClass clazz = context.clazz;
+ if (element.isForIn()) {// for item in list {
+ Statement statement = element.subStmt(3, element.size() - 1);
+ Element subElement = new Element(statement);
+ variableAction.visitElement(context, subElement);
+ invokeAction.visitElement(context, subElement);
+ IType type = deducer.derive(clazz, statement);
+ // 获取数组内部类型和泛型类型
+ type = type.isArray() ? type.toTarget() : type.getGenericTypes().get(0);
+ Token varToken = element.get(1);
+ varToken.setAttr(Attribute.TYPE, type);
+
+ } else if (element.isFor()) {// for (i=0; i<100; i++) {
+ Token secondToken = element.get(1);
+ if (secondToken.isSubexpress()) {
+ Statement statement = secondToken.getValue();
+ Statement subStatement = statement.subStmt(1, statement.indexOf(";"));
+ if (subStatement.size() > 0) {
+ Element subElement = builder.build(subStatement);
+ IVariable variable = visiter.visitElement(context, subElement);
+ if (variable != null) {
+ variable.blockId = context.getBlockId();
+ context.variables.add(variable);
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/InvocationVisiter.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/InvokeVisitAction.java
similarity index 67%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/InvocationVisiter.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/InvokeVisitAction.java
index 246d3632914653d2886114f0840955e6039479bf..57c59d8cb6747547182162658bc880c0de78bcdc 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/InvocationVisiter.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/InvokeVisitAction.java
@@ -1,89 +1,94 @@
-package com.sum.spirit.core.compile.deduce;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.core.api.ClassLinker;
-import com.sum.spirit.core.api.TypeFactory;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-import com.sum.spirit.core.element.utils.StmtVisiter;
-
-@Component
-public class InvocationVisiter {
-
- @Autowired
- public TypeFactory factory;
- @Autowired
- public FragmentDeducer deducer;
- @Autowired
- public ClassLinker linker;
- @Autowired
- public TypeDerivator derivator;
-
- public void visit(IClass clazz, Statement statement) {
- StmtVisiter.visit(statement, stmt -> {
- for (int index = 0; index < stmt.size(); index++) {
- try {
- Token token = stmt.get(index);
- if (token.attr(Attribute.TYPE) != null) {
- continue;
- }
- List parameterTypes = token.isInvoke() ? getParameterTypes(clazz, token) : null;
- if (token.isType() || token.isArrayInit() || token.isTypeInit() || token.isCast() || token.isLiteral()) {
- token.setAttr(Attribute.TYPE, factory.create(clazz, token));
-
- } else if (token.isSubexpress()) {
- Statement subStatement = token.getValue();
- token.setAttr(Attribute.TYPE, deducer.derive(clazz, subStatement.subStmt("(", ")")));
-
- } else if (token.isLocalMethod()) {
- String memberName = token.attr(Attribute.MEMBER_NAME);
- IType returnType = linker.visitMethod(derivator.withThisModifiers(clazz.getType()), memberName, parameterTypes);
- token.setAttr(Attribute.TYPE, returnType);
-
- } else if (token.isVisitField()) {
- IType type = stmt.get(index - 1).attr(Attribute.TYPE);
- String memberName = token.attr(Attribute.MEMBER_NAME);
- IType returnType = linker.visitField(type, memberName);
- token.setAttr(Attribute.TYPE, returnType);
-
- } else if (token.isVisitMethod()) {
- IType type = stmt.get(index - 1).attr(Attribute.TYPE);
- String memberName = token.attr(Attribute.MEMBER_NAME);
- IType returnType = linker.visitMethod(type, memberName, parameterTypes);
- token.setAttr(Attribute.TYPE, returnType);
-
- } else if (token.isVisitIndex()) {// what like "[0]"
- IType type = stmt.get(index - 1).attr(Attribute.TYPE);
- type = derivator.toTarget(type);// 转换数组类型为目标类型
- token.setAttr(Attribute.TYPE, type);
- }
-
- } catch (NoSuchFieldException | NoSuchMethodException e) {
- throw new RuntimeException("Link failed for class member!", e);
- }
- }
- });
- }
-
- public List getParameterTypes(IClass clazz, Token token) {
- List parameterTypes = new ArrayList<>();
- Statement statement = token.getValue();
- if (statement.size() > 3) {
- List subStatements = statement.subStmt(2, statement.size() - 1).splitStmt(",");
- for (Statement subStatement : subStatements) {
- IType parameterType = deducer.derive(clazz, subStatement);
- parameterTypes.add(parameterType);
- }
- }
- return parameterTypes;
- }
-
-}
+package com.gitee.spirit.core.compile.action;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.core.api.ClassLinker;
+import com.gitee.spirit.core.api.TypeFactory;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.compile.derivator.FragmentDeducer;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.element.utils.StmtVisiter;
+
+@Component
+@Order(-40)
+public class InvokeVisitAction extends AbstractAppElementAction {
+
+ @Autowired
+ public TypeFactory factory;
+ @Autowired
+ public FragmentDeducer deducer;
+ @Autowired
+ public ClassLinker linker;
+
+ @Override
+ public void visitElement(VisitContext context, Element element) {
+ IClass clazz = context.clazz;
+ StmtVisiter.visit(element, stmt -> {
+ for (int index = 0; index < stmt.size(); index++) {
+ try {
+ Token token = stmt.get(index);
+ if (token.attr(Attribute.TYPE) != null) {
+ continue;
+ }
+ List parameterTypes = token.isInvoke() ? getParameterTypes(clazz, token) : null;
+ if (token.isType() || token.isArrayInit() || token.isTypeInit() || token.isCast() || token.isLiteral()) {
+ token.setAttr(Attribute.TYPE, factory.create(clazz, token));
+
+ } else if (token.isSubexpress()) {
+ Statement subStatement = token.getValue();
+ token.setAttr(Attribute.TYPE, deducer.derive(clazz, subStatement.subStmt("(", ")")));
+
+ } else if (token.isLocalMethod()) {
+ String memberName = token.attr(Attribute.MEMBER_NAME);
+ IType returnType = linker.visitMethod(clazz.getType().withThisModifiers(), memberName, parameterTypes);
+ token.setAttr(Attribute.TYPE, returnType);
+
+ } else if (token.isVisitField()) {
+ IType type = stmt.get(index - 1).attr(Attribute.TYPE);
+ String memberName = token.attr(Attribute.MEMBER_NAME);
+ IType returnType = linker.visitField(type, memberName);
+ token.setAttr(Attribute.TYPE, returnType);
+
+ } else if (token.isVisitMethod()) {
+ IType type = stmt.get(index - 1).attr(Attribute.TYPE);
+ String memberName = token.attr(Attribute.MEMBER_NAME);
+ IType returnType = linker.visitMethod(type, memberName, parameterTypes);
+ token.setAttr(Attribute.TYPE, returnType);
+
+ } else if (token.isVisitIndex()) {// what like "[0]"
+ IType type = stmt.get(index - 1).attr(Attribute.TYPE);
+ type = type.toTarget();// 转换数组类型为目标类型
+ token.setAttr(Attribute.TYPE, type);
+ }
+
+ } catch (NoSuchFieldException | NoSuchMethodException e) {
+ throw new RuntimeException("Link failed for class member!", e);
+ }
+ }
+ });
+ }
+
+ public List getParameterTypes(IClass clazz, Token token) {
+ List parameterTypes = new ArrayList<>();
+ Statement statement = token.getValue();
+ if (statement.size() > 3) {
+ List subStatements = statement.subStmt(2, statement.size() - 1).splitStmt(",");
+ for (Statement subStatement : subStatements) {
+ IType parameterType = deducer.derive(clazz, subStatement);
+ parameterTypes.add(parameterType);
+ }
+ }
+ return parameterTypes;
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementTypeDeclarer.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/TypeDeclareAction.java
similarity index 41%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementTypeDeclarer.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/TypeDeclareAction.java
index 5597729346e1b27cfbedad7ca0283281b5092117..17a6623c7b417e25e24718f6c323d995fc02ef86 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementTypeDeclarer.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/TypeDeclareAction.java
@@ -1,44 +1,40 @@
-package com.sum.spirit.core.compile.action;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.annotation.App;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.core.api.TypeFactory;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Token;
-
-@App
-@Component
-@Order(-100)
-public class ElementTypeDeclarer extends AbstractScopeElementAction {
-
- @Autowired
- public TypeFactory factory;
-
- @Override
- public void handle(ElementEvent event) {
- Element element = event.element;
- if (element.isDeclare() || element.isDeclareAssign()) {// String text
- setTypeByTypeToken(event.clazz, element.get(0), element.get(1));
- }
- super.handle(event);
- }
-
- @Override
- public void visitMethodScope(ElementEvent event) {
- Element element = event.element;
- if (element.isCatch()) {// } catch Exception e {
- setTypeByTypeToken(event.clazz, element.get(2), element.get(3));
- }
- }
-
- public void setTypeByTypeToken(IClass clazz, Token typeToken, Token varToken) {
- varToken.setAttr(Attribute.TYPE, factory.create(clazz, typeToken));
- }
-
-}
+package com.gitee.spirit.core.compile.action;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.core.api.TypeFactory;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Token;
+
+@Component
+@Order(-100)
+public class TypeDeclareAction extends AbstractAppElementAction {
+
+ @Autowired
+ public TypeFactory factory;
+
+ @Override
+ public void visitElement(VisitContext context, Element element) {
+ if (element.isDeclare() || element.isDeclareAssign()) {// String text
+ setTypeByTypeToken(context.clazz, element.get(0), element.get(1));
+ }
+ super.visitElement(context, element);
+ }
+
+ @Override
+ public void visitMethodScope(VisitContext context, Element element) {
+ if (element.isCatch()) {// } catch Exception e {
+ setTypeByTypeToken(context.clazz, element.get(2), element.get(3));
+ }
+ }
+
+ public void setTypeByTypeToken(IClass clazz, Token typeToken, Token varToken) {
+ varToken.setAttr(Attribute.TYPE, factory.create(clazz, typeToken));
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/VariableTrackAction.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/VariableTrackAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..dc4f126b58cc973ca3ad94b6d9252445cf7ab162
--- /dev/null
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/action/VariableTrackAction.java
@@ -0,0 +1,41 @@
+package com.gitee.spirit.core.compile.action;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.core.api.VariableTracker;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.utils.StmtVisiter;
+
+import cn.hutool.core.lang.Assert;
+
+@Component
+@Order(-60)
+public class VariableTrackAction extends AbstractAppElementAction {
+
+ @Autowired
+ public VariableTracker tracker;
+
+ @Override
+ public void visitElement(VisitContext context, Element element) {
+ StmtVisiter.visit(element, stmt -> {
+ stmt.forEach(token -> {
+ if (token.attr(Attribute.TYPE) != null) {
+ return;
+ }
+ if (token.isVariable() || (token.isKeyword() && KeywordEnum.isKeywordVariable(token.getValue()))) {
+ String variableName = token.toString();
+ IType type = tracker.findVariableType(context, variableName);
+ Assert.notNull(type, "Variable must be declared!variableName:" + variableName);
+ token.setAttr(Attribute.TYPE, type);
+ }
+ });
+ });
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/TypeDerivator.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/derivator/AppTypeDerivator.java
similarity index 46%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/TypeDerivator.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/derivator/AppTypeDerivator.java
index 0f47931cfc4ea8064ddf1394c25148ff0d5be1bf..7f0a8eae362dc11c6040a435d1cb87f27695d970 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/TypeDerivator.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/derivator/AppTypeDerivator.java
@@ -1,87 +1,67 @@
-package com.sum.spirit.core.compile.deduce;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.enums.ModifierEnum;
-import com.sum.spirit.core.api.ClassLinker;
-import com.sum.spirit.core.api.TypeFactory;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.StaticTypes;
-import com.sum.spirit.core.clazz.utils.TypeBuilder;
-import com.sum.spirit.core.clazz.utils.TypeVisiter;
-
-import cn.hutool.core.lang.Assert;
-
-@Primary
-@Component
-public class TypeDerivator {
-
- @Autowired
- public TypeFactory factory;
- @Autowired
- public ClassLinker linker;
-
- public IType toBox(IType type) {
- IType boxType = StaticTypes.getBoxType(type.getClassName());
- return boxType != null ? boxType : type;
- }
-
- public IType toTarget(IType type) {
- return factory.create(type.getTargetName());
- }
-
- public IType withSuperModifiers(IType type) {
- type.setModifiers(ModifierEnum.SUPER.value);
- return type;
- }
-
- public IType withThisModifiers(IType type) {
- type.setModifiers(ModifierEnum.THIS.value);
- return type;
- }
-
- public IType populate(IType instanceType, IType targetType) {// 根据全局类型,进行填充
- return TypeVisiter.visit(targetType, eachType -> {
- if (eachType.isTypeVariable()) {
- int index = linker.getTypeVariableIndex(instanceType, eachType.getGenericName());
- Assert.isTrue(index >= 0, "Index of type variable less than 0!");
- Assert.isTrue(instanceType.isGenericType(), "Type must be a generic type!");
- return TypeBuilder.copy(instanceType.getGenericTypes().get(index));
- }
- return eachType;
- });
- }
-
- public Integer getAbstractScore(IType abstractType, IType type) {
- if (abstractType == null || type == null) {
- return null;
- }
- if (abstractType.isNull()) {// null类型不能比任何类型抽象
- return null;
- }
- if (type.isNull()) {// 任何类型都能比null抽象
- return 0;
- }
- if (type.equals(abstractType)) {// 这个方法还要判断泛型
- return 0;
- }
- Integer score = getAbstractScore(abstractType, linker.getSuperType(toBox(type)));// 这个方法中,还要考虑到自动拆组包
- if (score != null) {
- return score - 1;
- }
- for (IType interfaceType : linker.getInterfaceTypes(type)) {// 接口
- Integer score1 = getAbstractScore(abstractType, interfaceType);
- if (score1 != null) {
- return score1 - 1;
- }
- }
- return null;
- }
-
- public boolean isMoreAbstract(IType abstractType, IType type) {
- return getAbstractScore(abstractType, type) != null;
- }
-
-}
+package com.gitee.spirit.core.compile.derivator;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.core.api.ClassLinker;
+import com.gitee.spirit.core.api.TypeDerivator;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.utils.TypeBuilder;
+import com.gitee.spirit.core.clazz.utils.TypeVisiter;
+
+import cn.hutool.core.lang.Assert;
+
+@Primary
+@Component
+public class AppTypeDerivator implements TypeDerivator {
+
+ @Autowired
+ public ClassLinker linker;
+
+ @Override
+ public IType populate(IType instanceType, IType targetType) {// 根据全局类型,进行填充
+ return TypeVisiter.visit(targetType, eachType -> {
+ if (eachType.isTypeVariable()) {
+ int index = linker.getTypeVariableIndex(instanceType, eachType.getGenericName());
+ Assert.isTrue(index >= 0, "Index of type variable less than 0!");
+ Assert.isTrue(instanceType.isGenericType(), "Type must be a generic type!");
+ return TypeBuilder.copy(instanceType.getGenericTypes().get(index));
+ }
+ return eachType;
+ });
+ }
+
+ @Override
+ public Integer getAbstractScore(IType abstractType, IType targetType) {
+ if (abstractType == null || targetType == null) {
+ return null;
+ }
+ if (abstractType.isNull()) {// null类型不能比任何类型抽象
+ return null;
+ }
+ if (targetType.isNull()) {// 任何类型都能比null抽象
+ return 0;
+ }
+ if (targetType.equals(abstractType)) {// 这个方法还要判断泛型
+ return 0;
+ }
+ Integer score = getAbstractScore(abstractType, linker.getSuperType(targetType.toBox()));// 这个方法中,还要考虑到自动拆组包
+ if (score != null) {
+ return score - 1;
+ }
+ for (IType interfaceType : linker.getInterfaceTypes(targetType)) {// 接口
+ Integer score1 = getAbstractScore(abstractType, interfaceType);
+ if (score1 != null) {
+ return score1 - 1;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isMoreAbstract(IType abstractType, IType targetType) {
+ return getAbstractScore(abstractType, targetType) != null;
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/derivator/DefaultVariableTracker.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/derivator/DefaultVariableTracker.java
new file mode 100644
index 0000000000000000000000000000000000000000..b8e81a7c04f86a3d57fb7dd00ad868cd693d8be9
--- /dev/null
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/derivator/DefaultVariableTracker.java
@@ -0,0 +1,64 @@
+package com.gitee.spirit.core.compile.derivator;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.core.api.ClassLinker;
+import com.gitee.spirit.core.api.VariableTracker;
+import com.gitee.spirit.core.clazz.entity.IMethod;
+import com.gitee.spirit.core.clazz.entity.IParameter;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.entity.IVariable;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+
+@Component
+public class DefaultVariableTracker implements VariableTracker {
+
+ @Autowired
+ public ClassLinker linker;
+
+ @Override
+ public IType findVariableType(VisitContext context, String variableName) {
+ IType type = findTypeByKeyword(context, variableName);
+ type = type == null ? findTypeByContext(context, variableName) : type;
+ type = type == null ? findTypeByInherit(context, variableName) : type;
+ return type;
+ }
+
+ public IType findTypeByKeyword(VisitContext context, String variableName) {
+ if (KeywordEnum.isSuper(variableName)) {
+ return context.clazz.getSuperType().withSuperModifiers();
+ } else if (KeywordEnum.isThis(variableName)) {
+ return context.clazz.getType().withThisModifiers();
+ }
+ return null;
+ }
+
+ public IType findTypeByContext(VisitContext context, String variableName) {
+ if (!context.isMethodScope()) {
+ return null;
+ }
+ for (IVariable variable : context.variables) {
+ if (variable.getName().equals(variableName) && context.getBlockId().startsWith(variable.blockId)) {
+ return variable.getType();
+ }
+ }
+ IMethod method = (IMethod) context.member;
+ for (IParameter parameter : method.parameters) {
+ if (parameter.getName().equals(variableName)) {
+ return parameter.getType();
+ }
+ }
+ return null;
+ }
+
+ public IType findTypeByInherit(VisitContext context, String variableName) {
+ try {
+ return linker.visitField(context.clazz.getType().withThisModifiers(), variableName);// 从本身和父类里面寻找,父类可能是native的
+ } catch (NoSuchFieldException e) {
+ return null;
+ }
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/FragmentDeducer.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/derivator/FragmentDeducer.java
similarity index 64%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/FragmentDeducer.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/derivator/FragmentDeducer.java
index aa7a3840c0f7b6037e9ff51ed68721164c499dc7..31be8e53ed321f71ec622f2d625849fc88b33ba9 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/FragmentDeducer.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/derivator/FragmentDeducer.java
@@ -1,60 +1,59 @@
-package com.sum.spirit.core.compile.deduce;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.exception.UnhandledException;
-import com.sum.spirit.core.api.TreeBuilder;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.StaticTypes;
-import com.sum.spirit.core.element.entity.Node;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-
-@Component
-public class FragmentDeducer {
-
- @Autowired
- public TreeBuilder builder;
-
- public IType derive(IClass clazz, Statement statement) {
- List nodes = builder.buildNodes(statement);
- for (Node node : nodes) {
- IType type = getTypeByNode(clazz, node);
- if (type != null) {
- return type;
- }
- }
- throw new UnhandledException();
- }
-
- public static IType getTypeByNode(IClass clazz, Node node) {
- Token token = node.token;
-
- // 如果有类型直接返回
- if (token.attr(Attribute.TYPE) != null) {
- return token.attr(Attribute.TYPE);
- }
-
- // 如果是逻辑判断,或者类型判断关键字
- if (token.isLogical() || token.isRelation() || token.isInstanceof()) {
- return StaticTypes.BOOLEAN;
-
- } else if (token.isArithmetic() || token.isBitwise()) {
- // 先取左边的,再取右边的
- if (node.prev != null) {
- return getTypeByNode(clazz, node.prev);
-
- } else if (node.next != null) {
- return getTypeByNode(clazz, node.next);
- }
- }
-
- return null;
- }
-
-}
+package com.gitee.spirit.core.compile.derivator;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.core.api.TreeBuilder;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.utils.TypeRegistry;
+import com.gitee.spirit.core.element.entity.Node;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+
+@Component
+public class FragmentDeducer {
+
+ @Autowired
+ public TreeBuilder builder;
+
+ public IType derive(IClass clazz, Statement statement) {
+ List nodes = builder.buildNodes(statement);
+ for (Node node : nodes) {
+ IType type = getTypeByNode(clazz, node);
+ if (type != null) {
+ return type;
+ }
+ }
+ throw new RuntimeException("Unhandled branch!");
+ }
+
+ public static IType getTypeByNode(IClass clazz, Node node) {
+ Token token = node.token;
+
+ // 如果有类型直接返回
+ if (token.attr(Attribute.TYPE) != null) {
+ return token.attr(Attribute.TYPE);
+ }
+
+ // 如果是逻辑判断,或者类型判断关键字
+ if (token.isLogical() || token.isRelation() || token.isInstanceof()) {
+ return TypeRegistry.BOOLEAN;
+
+ } else if (token.isArithmetic() || token.isBitwise()) {
+ // 先取左边的,再取右边的
+ if (node.prev != null) {
+ return getTypeByNode(clazz, node.prev);
+
+ } else if (node.next != null) {
+ return getTypeByNode(clazz, node.next);
+ }
+ }
+
+ return null;
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/entity/MethodContext.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/entity/VisitContext.java
similarity index 46%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/entity/MethodContext.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/entity/VisitContext.java
index 2ff374dc5511599a7f5222addb2a39fb3a6e608f..026183c6915da630172e843972a639477432cc36 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/entity/MethodContext.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/entity/VisitContext.java
@@ -1,45 +1,58 @@
-package com.sum.spirit.core.compile.entity;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.google.common.base.Joiner;
-import com.sum.spirit.core.clazz.entity.IMethod;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.entity.IVariable;
-
-public class MethodContext {
-
- public IMethod method;
- public List variables = new ArrayList<>();
- public int depth = 0;
- public List counts = new ArrayList<>(16);
- public IType returnType;
-
- public MethodContext(IMethod method) {
- this.method = method;
- }
-
- public void increaseDepth() {
- depth = depth + 1;
- }
-
- public void decreaseDepth() {
- depth = depth - 1;
- }
-
- public void increaseCount() {
- while (depth >= counts.size()) {
- counts.add(0);
- }
- counts.set(depth, counts.get(depth) + 1);
- }
-
- public String getBlockId() {
- while (depth >= counts.size()) {
- counts.add(0);
- }
- return Joiner.on("-").join(counts.subList(0, depth + 1));
- }
-
-}
+package com.gitee.spirit.core.compile.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IField;
+import com.gitee.spirit.core.clazz.entity.IMethod;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.entity.IVariable;
+import com.gitee.spirit.core.clazz.frame.MemberEntity;
+import com.google.common.base.Joiner;
+
+public class VisitContext {
+
+ public IClass clazz;
+ public MemberEntity member;
+ public List variables = new ArrayList<>();
+ public int depth = 0;
+ public List counts = new ArrayList<>(16);
+ public IType returnType;
+
+ public VisitContext(IClass clazz, MemberEntity member) {
+ this.clazz = clazz;
+ this.member = member;
+ }
+
+ public boolean isFieldScope() {
+ return member instanceof IField;
+ }
+
+ public boolean isMethodScope() {
+ return member instanceof IMethod;
+ }
+
+ public void increaseDepth() {
+ depth = depth + 1;
+ }
+
+ public void decreaseDepth() {
+ depth = depth - 1;
+ }
+
+ public void increaseCount() {
+ while (depth >= counts.size()) {
+ counts.add(0);
+ }
+ counts.set(depth, counts.get(depth) + 1);
+ }
+
+ public String getBlockId() {
+ while (depth >= counts.size()) {
+ counts.add(0);
+ }
+ return Joiner.on("-").join(counts.subList(0, depth + 1));
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/linker/AdaptiveClassLinker.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/linker/AdaptiveClassLinker.java
similarity index 79%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/linker/AdaptiveClassLinker.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/linker/AdaptiveClassLinker.java
index 4663d6a16f10e843903238ecad1437b447e89884..29e85c32f67d364aec4d4b17877c63d649eac542 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/linker/AdaptiveClassLinker.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/linker/AdaptiveClassLinker.java
@@ -1,161 +1,158 @@
-package com.sum.spirit.core.compile.linker;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.common.enums.ModifierEnum;
-import com.sum.spirit.core.api.ClassLinker;
-import com.sum.spirit.core.api.TypeFactory;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.StaticTypes;
-import com.sum.spirit.core.compile.deduce.TypeDerivator;
-
-import cn.hutool.core.lang.Assert;
-
-@Primary
-@Component
-public class AdaptiveClassLinker implements ClassLinker {
-
- public static final String ARRAY_LENGTH = "length";
-
- @Autowired
- public TypeFactory factory;
- @Autowired
- public TypeDerivator derivator;
- @Autowired
- public Map linkers;
-
- public ClassLinker getLinker(IType type) {
- if (!type.isNative()) {
- return linkers.get("appClassLinker");
- } else {
- return linkers.get("nativeClassLinker");
- }
- }
-
- @Override
- public T toClass(IType type) {
- return getLinker(type).toClass(type);
- }
-
- @Override
- public int getTypeVariableIndex(IType type, String genericName) {
- return getLinker(type).getTypeVariableIndex(type, genericName);
- }
-
- @Override
- public IType getSuperType(IType type) {
- if (type.isPrimitive()) {
- return null;
- }
-
- if (type.isArray()) {
- return StaticTypes.OBJECT;
- }
-
- if (StaticTypes.OBJECT.equals(type)) {
- return null;
- }
-
- IType superType = getLinker(type).getSuperType(type);// 如果不存在父类,则返回Object
- if (superType == null) {
- return StaticTypes.OBJECT;
- }
-
- int modifiers = type.getModifiers();
- if (modifiers == ModifierEnum.THIS.value || modifiers == ModifierEnum.SUPER.value) {
- superType.setModifiers(ModifierEnum.SUPER.value);
-
- } else if (modifiers == ModifierEnum.PUBLIC.value) {
- superType.setModifiers(ModifierEnum.PUBLIC.value);
- }
-
- return superType;
- }
-
- @Override
- public List getInterfaceTypes(IType type) {
- if (type.isPrimitive()) {
- return new ArrayList<>();
- }
- if (type.isArray()) {
- return new ArrayList<>();
- }
- return getLinker(type).getInterfaceTypes(type);
- }
-
- @Override
- public IType visitField(IType type, String fieldName) throws NoSuchFieldException {
- Assert.notNull(type, "Type cannot be null!");
- Assert.notEmpty(fieldName, "Field name cannot be empty!");
-
- if (KeywordEnum.CLASS.value.equals(fieldName)) {// xxx.class class是关键字
- return factory.create(StaticTypes.CLASS.getClassName(), derivator.toBox(type));
- }
-
- if (type.isPrimitive()) {// 原始类型没有属性和方法
- throw new RuntimeException("The primitive type has no field!");
- }
-
- if (type.isArray() && ARRAY_LENGTH.equals(fieldName)) {// 访问数组length直接返回int类型
- return StaticTypes.INT;
- }
-
- IType returnType = getLinker(type).visitField(type, fieldName);// 向上遍历推导
- if (returnType == null) {
- IType superType = getSuperType(type);
- if (superType != null) {
- return visitField(superType, fieldName);
- }
- }
-
- if (returnType == null) {
- throw new NoSuchFieldException(String.format("No such field!className:%s, fieldName:%s", type.getClassName(), fieldName));
- }
-
- return returnType;
- }
-
- @Override
- public IType visitMethod(IType type, String methodName, List parameterTypes) throws NoSuchMethodException {
- Assert.notNull(type, "Type cannot be null!");
- Assert.notEmpty(methodName, "Method name cannot be empty!");
-
- if (KeywordEnum.SUPER.value.equals(methodName) || KeywordEnum.THIS.value.equals(methodName)) {// super()和this()指代父类或者本身的构造函数,返回这个类本身
- return type;
- }
-
- if (type.isPrimitive()) {// 原始类型没有属性和方法
- throw new RuntimeException("The primitive type has no method!");
- }
-
- if (type.isArray()) {// 原始类型没有属性和方法
- throw new RuntimeException("Array has no method!");
- }
-
- if (StaticTypes.OBJECT.equals(type) && KeywordEnum.EMPTY.value.equals(methodName)) {// 如果已经推导到Object,并且方法名是empty的话,则直接返回布尔类型
- return StaticTypes.BOOLEAN;
- }
-
- IType returnType = getLinker(type).visitMethod(type, methodName, parameterTypes);// 向上遍历推导
- if (returnType == null) {
- IType superType = getSuperType(type);
- if (superType != null) {
- return visitMethod(superType, methodName, parameterTypes);
- }
- }
-
- if (returnType == null) {
- throw new NoSuchMethodException(String.format("No such method!className:%s, methodName:%s", type.getClassName(), methodName));
- }
-
- return returnType;
- }
-
-}
+package com.gitee.spirit.core.compile.linker;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.common.enums.ModifierEnum;
+import com.gitee.spirit.core.api.ClassLinker;
+import com.gitee.spirit.core.api.TypeFactory;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.utils.TypeRegistry;
+
+import cn.hutool.core.lang.Assert;
+
+@Primary
+@Component
+public class AdaptiveClassLinker implements ClassLinker {
+
+ public static final String ARRAY_LENGTH = "length";
+
+ @Autowired
+ public TypeFactory factory;
+ @Autowired
+ public Map linkers;
+
+ public ClassLinker getLinker(IType type) {
+ if (!type.isNative()) {
+ return linkers.get("appClassLinker");
+ } else {
+ return linkers.get("extClassLinker");
+ }
+ }
+
+ @Override
+ public T toClass(IType type) {
+ return getLinker(type).toClass(type);
+ }
+
+ @Override
+ public int getTypeVariableIndex(IType type, String genericName) {
+ return getLinker(type).getTypeVariableIndex(type, genericName);
+ }
+
+ @Override
+ public IType getSuperType(IType type) {
+ if (type.isPrimitive()) {
+ return null;
+ }
+
+ if (type.isArray()) {
+ return TypeRegistry.OBJECT;
+ }
+
+ if (TypeRegistry.OBJECT.equals(type)) {
+ return null;
+ }
+
+ IType superType = getLinker(type).getSuperType(type);// 如果不存在父类,则返回Object
+ if (superType == null) {
+ return TypeRegistry.OBJECT;
+ }
+
+ int modifiers = type.getModifiers();
+ if (modifiers == ModifierEnum.THIS.value || modifiers == ModifierEnum.SUPER.value) {
+ superType.setModifiers(ModifierEnum.SUPER.value);
+
+ } else if (modifiers == ModifierEnum.PUBLIC.value) {
+ superType.setModifiers(ModifierEnum.PUBLIC.value);
+ }
+
+ return superType;
+ }
+
+ @Override
+ public List getInterfaceTypes(IType type) {
+ if (type.isPrimitive()) {
+ return new ArrayList<>();
+ }
+ if (type.isArray()) {
+ return new ArrayList<>();
+ }
+ return getLinker(type).getInterfaceTypes(type);
+ }
+
+ @Override
+ public IType visitField(IType type, String fieldName) throws NoSuchFieldException {
+ Assert.notNull(type, "Type cannot be null!");
+ Assert.notEmpty(fieldName, "Field name cannot be empty!");
+
+ if (KeywordEnum.CLASS.value.equals(fieldName)) {// xxx.class class是关键字
+ return factory.create(TypeRegistry.CLASS.getClassName(), type.toBox());
+ }
+
+ if (type.isPrimitive()) {// 原始类型没有属性和方法
+ throw new RuntimeException("The primitive type has no field!");
+ }
+
+ if (type.isArray() && ARRAY_LENGTH.equals(fieldName)) {// 访问数组length直接返回int类型
+ return TypeRegistry.INT;
+ }
+
+ IType returnType = getLinker(type).visitField(type, fieldName);// 向上遍历推导
+ if (returnType == null) {
+ IType superType = getSuperType(type);
+ if (superType != null) {
+ return visitField(superType, fieldName);
+ }
+ }
+
+ if (returnType == null) {
+ throw new NoSuchFieldException(String.format("No such field!className:%s, fieldName:%s", type.getClassName(), fieldName));
+ }
+
+ return returnType;
+ }
+
+ @Override
+ public IType visitMethod(IType type, String methodName, List parameterTypes) throws NoSuchMethodException {
+ Assert.notNull(type, "Type cannot be null!");
+ Assert.notEmpty(methodName, "Method name cannot be empty!");
+
+ if (KeywordEnum.SUPER.value.equals(methodName) || KeywordEnum.THIS.value.equals(methodName)) {// super()和this()指代父类或者本身的构造函数,返回这个类本身
+ return type;
+ }
+
+ if (type.isPrimitive()) {// 原始类型没有属性和方法
+ throw new RuntimeException("The primitive type has no method!");
+ }
+
+ if (type.isArray()) {// 原始类型没有属性和方法
+ throw new RuntimeException("Array has no method!");
+ }
+
+ if (TypeRegistry.OBJECT.equals(type) && KeywordEnum.EMPTY.value.equals(methodName)) {// 如果已经推导到Object,并且方法名是empty的话,则直接返回布尔类型
+ return TypeRegistry.BOOLEAN;
+ }
+
+ IType returnType = getLinker(type).visitMethod(type, methodName, parameterTypes);// 向上遍历推导
+ if (returnType == null) {
+ IType superType = getSuperType(type);
+ if (superType != null) {
+ return visitMethod(superType, methodName, parameterTypes);
+ }
+ }
+
+ if (returnType == null) {
+ throw new NoSuchMethodException(String.format("No such method!className:%s, methodName:%s", type.getClassName(), methodName));
+ }
+
+ return returnType;
+ }
+
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/linker/AppClassLinker.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/linker/AppClassLinker.java
similarity index 77%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/linker/AppClassLinker.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/linker/AppClassLinker.java
index 426c237315ec781ee1b8eae42b9d2b651728dfd9..b60a6f42cecf5939c914ba64b2da1a2f5ad018c2 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/linker/AppClassLinker.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/linker/AppClassLinker.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.compile.linker;
+package com.gitee.spirit.core.compile.linker;
import java.util.ArrayList;
import java.util.List;
@@ -7,15 +7,15 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.api.ClassLinker;
-import com.sum.spirit.core.api.ClassVisiter;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IField;
-import com.sum.spirit.core.clazz.entity.IMethod;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.compile.AppClassLoader;
-import com.sum.spirit.core.compile.deduce.TypeDerivator;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.api.ClassLinker;
+import com.gitee.spirit.core.api.ClassVisiter;
+import com.gitee.spirit.core.api.TypeDerivator;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IField;
+import com.gitee.spirit.core.clazz.entity.IMethod;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.compile.AppClassLoader;
import cn.hutool.core.lang.Assert;
@@ -30,13 +30,13 @@ public class AppClassLinker implements ClassLinker {
@Autowired
public TypeDerivator derivator;
@Autowired
- public MethodMatcher matcher;
+ public AppMethodMatcher matcher;
@Override
@SuppressWarnings("unchecked")
public T toClass(IType type) {
Assert.isTrue(!type.isArray(), "Array has no class!");// 这里认为数组没有class,也不应该有
- return (T) classLoader.findClass(type.getClassName());
+ return (T) classLoader.loadClass(type.getClassName());
}
@Override
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/linker/MethodMatcher.java b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/linker/AppMethodMatcher.java
similarity index 71%
rename from spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/linker/MethodMatcher.java
rename to spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/linker/AppMethodMatcher.java
index 740b377bdc82abd4399c21e86f4bbbf3a2df5cf6..2acc259f9b7534d11b907f4a77f9b80213c1d595 100644
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/linker/MethodMatcher.java
+++ b/spirit-core/spirit-core-compile/src/main/java/com/gitee/spirit/core/compile/linker/AppMethodMatcher.java
@@ -1,38 +1,38 @@
-package com.sum.spirit.core.compile.linker;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.core.clazz.entity.IMethod;
-import com.sum.spirit.core.clazz.entity.IParameter;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.compile.deduce.TypeDerivator;
-
-@Component
-public class MethodMatcher {
-
- @Autowired
- public TypeDerivator derivator;
-
- public Integer getMethodScore(IType type, IMethod method, List parameterTypes) {
- if (method.parameters.size() != parameterTypes.size()) {
- return null;
- }
- Integer finalScore = 0;
- int index = 0;
- for (IType parameterType : parameterTypes) {
- IParameter parameter = method.parameters.get(index++);
- IType methodParameterType = derivator.populate(type, parameter.getType());
- Integer scope = derivator.getAbstractScore(methodParameterType, parameterType);
- if (scope != null) {
- finalScore += scope;
- } else {
- finalScore = null;
- break;
- }
- }
- return finalScore;
- }
-}
+package com.gitee.spirit.core.compile.linker;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.core.api.TypeDerivator;
+import com.gitee.spirit.core.clazz.entity.IMethod;
+import com.gitee.spirit.core.clazz.entity.IParameter;
+import com.gitee.spirit.core.clazz.entity.IType;
+
+@Component
+public class AppMethodMatcher {
+
+ @Autowired
+ public TypeDerivator derivator;
+
+ public Integer getMethodScore(IType type, IMethod method, List parameterTypes) {
+ if (method.parameters.size() != parameterTypes.size()) {
+ return null;
+ }
+ Integer finalScore = 0;
+ int index = 0;
+ for (IType parameterType : parameterTypes) {
+ IParameter parameter = method.parameters.get(index++);
+ IType methodParameterType = derivator.populate(type, parameter.getType());
+ Integer scope = derivator.getAbstractScore(methodParameterType, parameterType);
+ if (scope != null) {
+ finalScore += scope;
+ } else {
+ finalScore = null;
+ break;
+ }
+ }
+ return finalScore;
+ }
+}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ElementAction.java b/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ElementAction.java
deleted file mode 100644
index db7faeadbbf2b66985c75fc01052c607c574831d..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ElementAction.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.sum.spirit.core.api;
-
-import com.sum.spirit.core.compile.entity.ElementEvent;
-
-public interface ElementAction {
-
- boolean isTrigger(ElementEvent event);
-
- void handle(ElementEvent event);
-
-}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ElementVisiter.java b/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ElementVisiter.java
deleted file mode 100644
index 6f762d0cea6668533e70ef801e2fa2a96c870d9f..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/api/ElementVisiter.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.sum.spirit.core.api;
-
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IVariable;
-import com.sum.spirit.core.compile.entity.MethodContext;
-import com.sum.spirit.core.element.entity.Element;
-
-public interface ElementVisiter {
-
- IVariable visitElement(IClass clazz, Element element);
-
- IVariable visitElement(IClass clazz, MethodContext context, Element element);
-
-}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/AbstractElementAction.java b/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/AbstractElementAction.java
deleted file mode 100644
index c33d575c6e06935df39e6fab39f36e2a430f3aca..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/AbstractElementAction.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.sum.spirit.core.compile.action;
-
-import com.sum.spirit.core.api.ElementAction;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-
-public abstract class AbstractElementAction implements ElementAction {
-
- @Override
- public boolean isTrigger(ElementEvent event) {
- return event.element != null;
- }
-
-}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/AbstractScopeElementAction.java b/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/AbstractScopeElementAction.java
deleted file mode 100644
index e8ea3688fa3665324b2e6aac5d898ea798004e75..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/AbstractScopeElementAction.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.sum.spirit.core.compile.action;
-
-import com.sum.spirit.core.compile.entity.ElementEvent;
-
-public abstract class AbstractScopeElementAction extends AbstractElementAction {
-
- @Override
- public void handle(ElementEvent event) {
- if (event.isFieldScope()) {
- visitFieldScope(event);
-
- } else if (event.isMethodScope()) {
- visitMethodScope(event);
- }
- }
-
- public void visitFieldScope(ElementEvent event) {
- // ignore
- }
-
- public void visitMethodScope(ElementEvent event) {
- // ignore
- }
-
-}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementInvokeVisiter.java b/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementInvokeVisiter.java
deleted file mode 100644
index f13b910b2200b791979aea70bb72565156b4fac1..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementInvokeVisiter.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.sum.spirit.core.compile.action;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.annotation.App;
-import com.sum.spirit.core.compile.deduce.InvocationVisiter;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-
-@App
-@Component
-@Order(-40)
-public class ElementInvokeVisiter extends AbstractElementAction {
-
- @Autowired
- public InvocationVisiter visiter;
-
- @Override
- public void handle(ElementEvent event) {
- visiter.visit(event.clazz, event.element);
- }
-
-}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementVariableTracker.java b/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementVariableTracker.java
deleted file mode 100644
index e1abadbc49e5a2341bd9a8c644e546dbb5fd5d26..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/action/ElementVariableTracker.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.sum.spirit.core.compile.action;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.annotation.App;
-import com.sum.spirit.core.compile.deduce.VariableTracker;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-
-@App
-@Component
-@Order(-60)
-public class ElementVariableTracker extends AbstractElementAction {
-
- @Autowired
- public VariableTracker tracker;
-
- @Override
- public void handle(ElementEvent event) {
- tracker.visit(event.clazz, event.context, event.element);
- }
-
-}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/VariableTracker.java b/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/VariableTracker.java
deleted file mode 100644
index 8b6b9a643991b4959a61272cc95b69a2861b1480..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/deduce/VariableTracker.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.sum.spirit.core.compile.deduce;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.core.api.ClassLinker;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IParameter;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.entity.IVariable;
-import com.sum.spirit.core.compile.entity.MethodContext;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.utils.StmtVisiter;
-
-import cn.hutool.core.lang.Assert;
-
-@Component
-public class VariableTracker {
-
- @Autowired
- public TypeDerivator derivator;
- @Autowired
- public ClassLinker linker;
-
- public void visit(IClass clazz, MethodContext context, Statement statement) {
- StmtVisiter.visit(statement, stmt -> {
- stmt.forEach(token -> {
- if (token.attr(Attribute.TYPE) != null) {
- return;
- }
- if (token.isVariable()) {// variable
- String variableName = token.toString();
- IType type = getVariableType(clazz, context, variableName);
- token.setAttr(Attribute.TYPE, type);
-
- } else if (token.isKeyword() && KeywordEnum.isKeywordVariable(token.getValue())) {
- String variableName = token.toString();
- IType type = findTypeByKeyword(clazz, variableName);
- token.setAttr(Attribute.TYPE, type);
- }
- });
- });
- }
-
- public IType findTypeByKeyword(IClass clazz, String variableName) {
- if (KeywordEnum.isSuper(variableName)) {// super
- return derivator.withSuperModifiers(clazz.getSuperType());
-
- } else if (KeywordEnum.isThis(variableName)) {// this
- return derivator.withThisModifiers(clazz.getType());
- }
- throw new RuntimeException("Variable must be declared!variableName:" + variableName);
- }
-
- public IType findTypeByContext(MethodContext context, String variableName) {
- if (context != null) {
- for (IVariable variable : context.variables) {// 变量
- if (variable.getName().equals(variableName) && context.getBlockId().startsWith(variable.blockId)) {
- return variable.getType();
- }
- }
- for (IParameter parameter : context.method.parameters) {// 方法入参
- if (parameter.getName().equals(variableName)) {
- return parameter.getType();
- }
- }
- }
- return null;
- }
-
- public IType findTypeByInherit(IClass clazz, String variableName) {
- try {
- // 从本身和父类里面寻找,父类可能是native的
- return linker.visitField(derivator.withThisModifiers(clazz.getType()), variableName);
-
- } catch (NoSuchFieldException e) {
- return null;
- }
- }
-
- public IType findVariableType(IClass clazz, MethodContext context, String variableName) {
- IType type = findTypeByContext(context, variableName);
- if (type == null) {
- type = findTypeByInherit(clazz, variableName);
- }
- return type;
- }
-
- public IType getVariableType(IClass clazz, MethodContext context, String variableName) {
- IType type = findVariableType(clazz, context, variableName);
- Assert.notNull(type, "Variable must be declared!variableName:" + variableName);
- return type;
- }
-
-}
diff --git a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/entity/ElementEvent.java b/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/entity/ElementEvent.java
deleted file mode 100644
index 079c2f6d450bc517e42a4170f3427dcd2f0cd811..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-compile/src/main/java/com/sum/spirit/core/compile/entity/ElementEvent.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.sum.spirit.core.compile.entity;
-
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.element.entity.Element;
-
-public class ElementEvent {
-
- public IClass clazz;
- public MethodContext context;
- public Element element;
-
- public ElementEvent(IClass clazz, Element element) {
- this.clazz = clazz;
- this.element = element;
- }
-
- public ElementEvent(IClass clazz, MethodContext context, Element element) {
- this.clazz = clazz;
- this.element = element;
- this.context = context;
- }
-
- public boolean isFieldScope() {
- return context == null;
- }
-
- public boolean isMethodScope() {
- return context != null;
- }
-
-}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/DocumentReader.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/DocumentReader.java
similarity index 57%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/DocumentReader.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/DocumentReader.java
index 1133b2123b326dcf72cd3be733a54c0156d35653..9bb9d23c99b0ea3c4e129ec6f5d77b1e3f716dbe 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/DocumentReader.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/DocumentReader.java
@@ -1,8 +1,8 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.io.InputStream;
-import com.sum.spirit.core.element.entity.Document;
+import com.gitee.spirit.core.element.entity.Document;
public interface DocumentReader {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/ElementBuilder.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/ElementBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..e70eb07927d9aa2a577495467eb1415801dc70ea
--- /dev/null
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/ElementBuilder.java
@@ -0,0 +1,15 @@
+package com.gitee.spirit.core.api;
+
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Line;
+import com.gitee.spirit.core.element.entity.Statement;
+
+public interface ElementBuilder {
+
+ Element build(String text);
+
+ Element build(Line line);
+
+ Element build(Statement statement);
+
+}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/SemanticParser.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/SemanticParser.java
similarity index 38%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/SemanticParser.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/SemanticParser.java
index 6b0b4593c561540c35b94947518e2cf715bd7611..8f64ce68e4bf440595088ea5199453d246fc1852 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/SemanticParser.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/SemanticParser.java
@@ -1,16 +1,24 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.util.List;
-import com.sum.spirit.core.element.entity.SemanticContext;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.element.entity.SemanticContext;
+import com.gitee.spirit.core.element.entity.Token;
public interface SemanticParser {
List getTokens(SemanticContext context, List words);
+ default List getTokens(List words) {
+ return getTokens(new SemanticContext(), words);
+ }
+
Token getToken(SemanticContext context, String word);
+ default Token getToken(String word) {
+ return getToken(new SemanticContext(), word);
+ }
+
boolean isType(String word);
}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/SyntaxParser.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/SyntaxParser.java
similarity index 48%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/SyntaxParser.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/SyntaxParser.java
index 0897d4c669e85be468d1f40b2814b9741b2efbfd..de8e4edf011fe82a8f5bff757dc08d03b8687c06 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/SyntaxParser.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/SyntaxParser.java
@@ -1,12 +1,12 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.util.List;
-import com.sum.spirit.common.enums.SyntaxEnum;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.SyntaxResult;
-import com.sum.spirit.core.element.entity.SyntaxTree;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.common.enums.SyntaxEnum;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.SyntaxResult;
+import com.gitee.spirit.core.element.entity.SyntaxTree;
+import com.gitee.spirit.core.element.entity.Token;
public interface SyntaxParser {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/TreeBuilder.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/TreeBuilder.java
similarity index 37%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/TreeBuilder.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/TreeBuilder.java
index 9641a3ccb239f24766630161dfba784f8f8da69d..581c18ac9b7d73720603a5d1e3330e0cd30d6bba 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/TreeBuilder.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/api/TreeBuilder.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.util.List;
-import com.sum.spirit.core.element.entity.Node;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.SyntaxTree;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.element.entity.Node;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.SyntaxTree;
+import com.gitee.spirit.core.element.entity.Token;
public interface TreeBuilder {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/DefaultDocumentReader.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/DefaultDocumentReader.java
similarity index 80%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/DefaultDocumentReader.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/DefaultDocumentReader.java
index 731d993b4b8f5b7c62b2db166581ffdbc8f6d4d8..664ad9ecdefdd48778dd9f3604c79e351538c10a 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/DefaultDocumentReader.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/DefaultDocumentReader.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.element;
+package com.gitee.spirit.core.element;
import java.io.InputStream;
import java.util.ArrayList;
@@ -8,16 +8,16 @@ import java.util.Stack;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.constants.AppConfig;
-import com.sum.spirit.common.utils.ConfigUtils;
-import com.sum.spirit.common.utils.LineUtils;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.api.DocumentReader;
-import com.sum.spirit.core.api.ElementBuilder;
-import com.sum.spirit.core.element.entity.Document;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Line;
-import com.sum.spirit.core.element.entity.Statement;
+import com.gitee.spirit.common.constants.AppConfig.DefaultValue;
+import com.gitee.spirit.common.utils.ConfigUtils;
+import com.gitee.spirit.common.utils.LineUtils;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.api.DocumentReader;
+import com.gitee.spirit.core.api.ElementBuilder;
+import com.gitee.spirit.core.element.entity.Document;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Line;
+import com.gitee.spirit.core.element.entity.Statement;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
@@ -31,7 +31,7 @@ public class DefaultDocumentReader implements DocumentReader {
@Override
public Document read(String fileName, InputStream input) {
Document document = new Document(fileName);
- List lines = IoUtil.readLines(input, AppConfig.DEFAULT_CHARSET, new ArrayList());
+ List lines = IoUtil.readLines(input, DefaultValue.CHARSET, new ArrayList());
doReadLines(document, lines);
if (ConfigUtils.isDebug()) {
document.debug();
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/DefaultElementBuilder.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/DefaultElementBuilder.java
similarity index 38%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/DefaultElementBuilder.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/DefaultElementBuilder.java
index d7db82c10a9c550b19a86948ab1f81624067ad40..787b5a6c1520a4071806af31f95d40cbcbb6cd8e 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/DefaultElementBuilder.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/DefaultElementBuilder.java
@@ -1,22 +1,21 @@
-package com.sum.spirit.core.element;
+package com.gitee.spirit.core.element;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import com.sum.spirit.core.api.ElementBuilder;
-import com.sum.spirit.core.api.Lexer;
-import com.sum.spirit.core.api.SemanticParser;
-import com.sum.spirit.core.api.SyntaxParser;
-import com.sum.spirit.core.element.action.LineChecker;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Line;
-import com.sum.spirit.core.element.entity.Modifiers;
-import com.sum.spirit.core.element.entity.SemanticContext;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.SyntaxResult;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.api.ElementBuilder;
+import com.gitee.spirit.core.api.Lexer;
+import com.gitee.spirit.core.api.SemanticParser;
+import com.gitee.spirit.core.api.SyntaxParser;
+import com.gitee.spirit.core.element.action.LineChecker;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Line;
+import com.gitee.spirit.core.element.entity.Modifiers;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.SyntaxResult;
+import com.gitee.spirit.core.element.entity.Token;
import cn.hutool.core.lang.Assert;
@@ -28,7 +27,7 @@ public class DefaultElementBuilder implements ElementBuilder {
@Autowired
public Lexer lexer;
@Autowired
- public SemanticParser parser;
+ public SemanticParser semanticParser;
@Autowired
public SyntaxParser syntaxParser;
@@ -40,13 +39,13 @@ public class DefaultElementBuilder implements ElementBuilder {
@Override
public Element build(Line line) {
try {
- checker.check(line); // 语法校验
- List words = lexer.getWords(line.text);// 1.词法分析
- List tokens = parser.getTokens(new SemanticContext(), words);// 2.语义分析
- Modifiers modifiers = new Modifiers(tokens);// 3.修饰词
- Statement statement = new Statement(tokens);// 4.语句
- SyntaxResult result = syntaxParser.parseSyntax(tokens, statement);// 5.分析语法
- Element element = new Element(line, modifiers, statement, result.syntax, result.syntaxTree);// 6.创建元素
+ checker.check(line);
+ List words = lexer.getWords(line.text);
+ List tokens = semanticParser.getTokens(words);
+ Modifiers modifiers = new Modifiers(tokens);
+ Statement statement = new Statement(tokens);
+ SyntaxResult result = syntaxParser.parseSyntax(tokens, statement);
+ Element element = new Element(line, modifiers, statement, result.syntax, result.syntaxTree);
return element;
} catch (Exception e) {
@@ -56,10 +55,10 @@ public class DefaultElementBuilder implements ElementBuilder {
}
@Override
- public Element rebuild(Statement statement) {
- Assert.notEmpty(statement, "statement cannot be empty!");
- Element element = build(statement.toString());
- element.list = statement;// 注意:新建一个element是为了得到分析的语法,赋值是为了复用token
+ public Element build(Statement statement) {
+ Assert.notEmpty(statement, "Statement cannot be empty!");
+ SyntaxResult result = syntaxParser.parseSyntax(statement.list, statement);
+ Element element = new Element(null, null, statement, result.syntax, result.syntaxTree);
return element;
}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/AbstractSemanticParser.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/AbstractSemanticParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..0828e53f4fd66c53bd8610ded5e611c0d3d81fb6
--- /dev/null
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/AbstractSemanticParser.java
@@ -0,0 +1,42 @@
+package com.gitee.spirit.core.element.action;
+
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.common.enums.SymbolEnum;
+import com.gitee.spirit.common.pattern.AccessPattern;
+import com.gitee.spirit.common.pattern.CommonPattern;
+import com.gitee.spirit.common.pattern.LiteralPattern;
+import com.gitee.spirit.common.pattern.TypePattern;
+import com.gitee.spirit.core.api.SemanticParser;
+
+public abstract class AbstractSemanticParser implements SemanticParser {
+
+ public boolean isAccessPath(String word) {
+ return !LiteralPattern.isDouble(word) && AccessPattern.isAccessPath(word);
+ }
+
+ public boolean isAnnotation(String word) {
+ return CommonPattern.isAnnotation(word);
+ }
+
+ public boolean isKeyword(String word) {
+ return KeywordEnum.isKeyword(word);
+ }
+
+ public boolean isOperator(String word) {
+ return SymbolEnum.isOperator(word);
+ }
+
+ public boolean isSeparator(String word) {
+ return SymbolEnum.isSeparator(word);
+ }
+
+ @Override
+ public boolean isType(String word) {
+ return TypePattern.isAnyType(word);
+ }
+
+ public boolean isVariable(String word) {
+ return LiteralPattern.isConstVariable(word) || CommonPattern.isVariable(word);
+ }
+
+}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/AbstractTreeBuilder.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/AbstractTreeBuilder.java
similarity index 73%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/AbstractTreeBuilder.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/AbstractTreeBuilder.java
index 83f2434e25a9e9adf1376063356c39b7422f7c67..7de8c45aa978c467fb47d00aa3015bd79aa2d4b2 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/AbstractTreeBuilder.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/AbstractTreeBuilder.java
@@ -1,14 +1,14 @@
-package com.sum.spirit.core.element.action;
+package com.gitee.spirit.core.element.action;
import java.util.List;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.core.api.TreeBuilder;
-import com.sum.spirit.core.element.entity.Node;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.SyntaxTree;
-import com.sum.spirit.core.element.entity.Token;
-import com.sum.spirit.core.element.utils.StmtFormat;
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.core.api.TreeBuilder;
+import com.gitee.spirit.core.element.entity.Node;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.SyntaxTree;
+import com.gitee.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.element.utils.StmtFormat;
public abstract class AbstractTreeBuilder implements TreeBuilder {
@@ -35,7 +35,7 @@ public abstract class AbstractTreeBuilder implements TreeBuilder {
if (node.next != null) {
markTreeId(treeId + "-" + "1", node.next);
}
- if (node.canSplit()) {
+ if (node.hasSubTree()) {
SyntaxTree syntaxTree = node.token.getValue();
markTreeId(syntaxTree.nodes);
}
@@ -46,7 +46,7 @@ public abstract class AbstractTreeBuilder implements TreeBuilder {
for (int i = 0; i < tokens.size(); i++) {
Token token = tokens.get(i);
token.setAttr(Attribute.POSITION, position);
- if (token.canSplit()) {
+ if (token.hasSubStmt()) {
markPositionAndLength(position, token.getValue());
}
int length = token.toString().length();
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/DefaultSemanticParser.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/DefaultSemanticParser.java
similarity index 40%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/DefaultSemanticParser.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/DefaultSemanticParser.java
index bd3e88198192ade8cc47dbe66d4ee8ac171a956c..df9d47f2c60887d4014ef2dc1df2ec65f3d1e652 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/DefaultSemanticParser.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/DefaultSemanticParser.java
@@ -1,158 +1,155 @@
-package com.sum.spirit.core.element.action;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.core.api.Lexer;
-import com.sum.spirit.core.element.entity.SemanticContext;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-
-import cn.hutool.core.lang.Assert;
-
-@Component
-public class DefaultSemanticParser extends AbstractSemanticParser {
-
- @Autowired
- public Lexer lexer;
-
- @Override
- public Token getToken(SemanticContext context, String word) {
- Token token = new Token();
-
- token.tokenType = getTokenType(word, context.insideType);
- Assert.notNull(token.tokenType, "Token type cannot be null!word:[" + word + "]");
-
- token.value = getTokenValue(token, word);
- Assert.notNull(token.value, "Token value cannot be null!word:[" + word + "]");
-
- setTokenAttributes(token, word);
-
- return token;
- }
-
- public TokenTypeEnum getTokenType(String word, boolean insideType) {
- if (isPath(word)) {
- return TokenTypeEnum.PATH;
-
- } else if (isAnnotation(word)) {
- return TokenTypeEnum.ANNOTATION;
-
- } else if (isKeyword(word)) {
- return TokenTypeEnum.KEYWORD;
-
- } else if (isOperator(word) && !insideType) {// 类型声明中,一般不包含操作符
- return TokenTypeEnum.OPERATOR;
-
- } else if (isSeparator(word)) {
- return TokenTypeEnum.SEPARATOR;
-
- } else if (isType(word) || (insideType && "?".equals(word))) {
- return TokenTypeEnum.TYPE;
- }
-
- TokenTypeEnum tokenType = getInitTokenType(word);
- if (tokenType != null) {
- return tokenType;
- }
-
- tokenType = getLiteralTokenType(word);
- if (tokenType != null) {
- return tokenType;
- }
-
- tokenType = getSubexpressTokenType(word);
- if (tokenType != null) {
- return tokenType;
- }
-
- if (isVariable(word)) {
- return TokenTypeEnum.VARIABLE;
- }
-
- tokenType = getAccessTokenType(word);
- if (tokenType != null) {
- return tokenType;
- }
-
- return null;
- }
-
- public Object getTokenValue(Token token, String word) {
- if (token.isType()) {
- return getStatement(word, true);
-
- } else if (token.isArrayInit() || token.isList() || token.isMap() || token.isSubexpress() || token.isInvoke()) {
- return getStatement(word, false);// 拆分数组是为了更好的添加new这个关键字
- }
- return word;
- }
-
- public Object getStatement(String word, boolean insideType) {
- if (insideType && (!word.contains("<") && !word.contains(">"))) {
- return word;
- }
-
- // 如果是类型,则直接用尖括号进行拆分,如果是其他,则不使用尖括号进行拆分
- List words = insideType ? lexer.getSubWords(word, '<', '>') : lexer.getSubWords(word, '(', ')', '[', ']', '{', '}');
- List tokens = null;
-
- String first = words.get(0);
- // 如果第一个单词是一个前缀的话,则添加前缀
- if (PREFIX_PATTERN.matcher(first).matches()) {
- List subWords = words.subList(1, words.size());
- tokens = getTokens(new SemanticContext(insideType), subWords);
- tokens.add(0, new Token(TokenTypeEnum.PREFIX, first));
-
- } else {
- tokens = getTokens(new SemanticContext(insideType), words);
- }
-
- Assert.notNull(tokens, "Tokens cannot be null!");
- return new Statement(tokens);
- }
-
- public void setTokenAttributes(Token token, String word) {
- if (token.isAnnotation()) {
- token.setAttr(Attribute.SIMPLE_NAME, getAnnotationName(word));
-
- } else if (token.isArrayInit()) {
- token.setAttr(Attribute.SIMPLE_NAME, getPrefix(word) + "[]");
-
- } else if (token.isTypeInit()) {
- token.setAttr(Attribute.SIMPLE_NAME, getPrefix(word));
-
- } else if (token.isCast()) {
- token.setAttr(Attribute.SIMPLE_NAME, getCastType(word));
-
- } else if (token.isAccess()) {
- token.setAttr(Attribute.MEMBER_NAME, getPrefix(word));
- }
- }
-
- public String getAnnotationName(String word) {
- if (word.contains("(")) {
- word = word.substring(0, word.indexOf('('));
- }
- return word.substring(word.indexOf('@') + 1);
- }
-
- public String getPrefix(String word) {
- int start = word.startsWith(".") ? 1 : 0;
- int end = word.length();
- if (word.contains("[")) {
- int index = word.indexOf("[");
- end = index < end ? index : end;
- }
- if (word.contains("(")) {
- int index = word.indexOf("(");
- end = index < end ? index : end;
- }
- return word.substring(start, end);
- }
-
-}
+package com.gitee.spirit.core.element.action;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.common.pattern.AccessPattern;
+import com.gitee.spirit.common.pattern.CommonPattern;
+import com.gitee.spirit.common.pattern.LiteralPattern;
+import com.gitee.spirit.common.pattern.TypePattern;
+import com.gitee.spirit.core.api.Lexer;
+import com.gitee.spirit.core.element.entity.SemanticContext;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+
+import cn.hutool.core.lang.Assert;
+
+@Component
+public class DefaultSemanticParser extends AbstractSemanticParser {
+
+ @Autowired
+ public Lexer lexer;
+
+ @Override
+ public List getTokens(SemanticContext context, List words) {
+ context.words = words;
+ List tokens = new ArrayList<>();
+ for (context.index = 0; context.index < words.size(); context.index++) {
+ Token token = getToken(context, words.get(context.index));
+ tokens.add(token);
+ }
+ return tokens;
+ }
+
+ @Override
+ public Token getToken(SemanticContext context, String word) {
+ Token token = new Token();
+
+ token.tokenType = getTokenType(context, word);
+ Assert.notNull(token.tokenType, "Token type cannot be null!word:[" + word + "]");
+
+ token.value = getTokenValue(token, word);
+ Assert.notNull(token.value, "Token value cannot be null!word:[" + word + "]");
+
+ setTokenAttributes(token, word);
+ return token;
+ }
+
+ public TokenTypeEnum getTokenType(SemanticContext context, String word) {
+ if (!context.subStatement) {
+ return getCommonTokenType(context, word);
+ } else {
+ if (context.insideType) {
+ if ("<".equals(word) || ">".equals(word)) {
+ return TokenTypeEnum.SEPARATOR;
+
+ } else if ("?".equals(word)) {
+ return TokenTypeEnum.TYPE;
+ }
+ }
+ if (context.index == 0 && CommonPattern.isPrefix(word)) {
+ return TokenTypeEnum.PREFIX;
+ }
+ return getCommonTokenType(context, word);
+ }
+ }
+
+ public TokenTypeEnum getCommonTokenType(SemanticContext context, String word) {
+ if (isAccessPath(word)) {
+ return TokenTypeEnum.ACCESS_PATH;
+
+ } else if (isAnnotation(word)) {
+ return TokenTypeEnum.ANNOTATION;
+
+ } else if (isKeyword(word)) {
+ return TokenTypeEnum.KEYWORD;
+
+ } else if (isOperator(word)) {
+ return TokenTypeEnum.OPERATOR;
+
+ } else if (isSeparator(word)) {
+ return TokenTypeEnum.SEPARATOR;
+
+ } else if (isType(word)) {
+ return TokenTypeEnum.TYPE;
+ }
+
+ TokenTypeEnum tokenType = TypePattern.getTokenType(word);
+ if (tokenType != null) {
+ return tokenType;
+ }
+
+ tokenType = LiteralPattern.getTokenType(word);
+ if (tokenType != null) {
+ return tokenType;
+ }
+
+ tokenType = CommonPattern.getSubexpressTokenType(word);
+ if (tokenType != null) {
+ return tokenType;
+ }
+
+ if (isVariable(word)) {
+ return TokenTypeEnum.VARIABLE;
+ }
+
+ tokenType = AccessPattern.getTokenType(word);
+ if (tokenType != null) {
+ return tokenType;
+ }
+
+ return null;
+ }
+
+ public Object getTokenValue(Token token, String word) {
+ if (token.isType()) {
+ return word.contains("<") || word.contains(">") ? getStatement(true, word) : word;
+
+ } else if (token.isArrayInit() || token.isList() || token.isMap() || token.isSubexpress() || token.isInvoke()) {
+ return getStatement(false, word);// 拆分数组是为了更好的添加new这个关键字
+ }
+ return word;
+ }
+
+ public Statement getStatement(boolean insideType, String word) {
+ List words = insideType ? lexer.getSubWords(word, '<', '>')
+ : lexer.getSubWords(word, '(', ')', '[', ']', '{', '}');
+ List tokens = getTokens(new SemanticContext(true, insideType), words);
+ Assert.notNull(tokens, "Tokens cannot be null!");
+ return new Statement(tokens);
+ }
+
+ public void setTokenAttributes(Token token, String word) {
+ if (token.isAnnotation()) {
+ token.setAttr(Attribute.SIMPLE_NAME, CommonPattern.getAnnotationName(word));
+
+ } else if (token.isArrayInit()) {
+ token.setAttr(Attribute.SIMPLE_NAME, CommonPattern.getPrefix(word) + "[]");
+
+ } else if (token.isTypeInit()) {
+ token.setAttr(Attribute.SIMPLE_NAME, CommonPattern.getPrefix(word));
+
+ } else if (token.isCast()) {
+ token.setAttr(Attribute.SIMPLE_NAME, CommonPattern.getSubexpressValue(word));
+
+ } else if (token.isAccess()) {
+ token.setAttr(Attribute.MEMBER_NAME, CommonPattern.getPrefix(word));
+ }
+ }
+
+}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/DefaultSyntaxParser.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/DefaultSyntaxParser.java
similarity index 65%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/DefaultSyntaxParser.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/DefaultSyntaxParser.java
index 9ae50a30d6df01686d42e83629d88e76120ff302..97370d1cda52dc4f4906b02dc4544d6d214aa328 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/DefaultSyntaxParser.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/DefaultSyntaxParser.java
@@ -1,21 +1,20 @@
-package com.sum.spirit.core.element.action;
+package com.gitee.spirit.core.element.action;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.common.enums.SymbolEnum;
-import com.sum.spirit.common.enums.SyntaxEnum;
-import com.sum.spirit.core.api.SyntaxParser;
-import com.sum.spirit.core.api.TreeBuilder;
-import com.sum.spirit.core.element.entity.Node;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.SyntaxResult;
-import com.sum.spirit.core.element.entity.SyntaxTree;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.common.enums.SyntaxEnum;
+import com.gitee.spirit.core.api.SyntaxParser;
+import com.gitee.spirit.core.api.TreeBuilder;
+import com.gitee.spirit.core.element.entity.Node;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.SyntaxResult;
+import com.gitee.spirit.core.element.entity.SyntaxTree;
+import com.gitee.spirit.core.element.entity.Token;
import cn.hutool.core.lang.Assert;
@@ -29,20 +28,24 @@ public class DefaultSyntaxParser implements SyntaxParser {
public SyntaxResult parseSyntax(List tokens, Statement statement) {
Assert.notEmpty(tokens, "The tokens cannot be empty!");
- SyntaxEnum syntax = getSyntaxWithoutTree(tokens);// 1.能够不通过语法树获取语法,且后续功能不需要语法树
+ // 1.能够不通过语法树获取语法,且后续功能不需要语法树
+ SyntaxEnum syntax = getSyntaxWithoutTree(tokens);
if (syntax != null) {
return new SyntaxResult(syntax, null);
}
- syntax = getSyntaxWithTree(tokens);// 2.能够不通过语法树获取语法,但后续功能需要语法树
+ // 2.能够不通过语法树获取语法,但后续功能需要语法树
+ syntax = getSyntaxWithTree(tokens);
if (syntax != null) {
SyntaxTree syntaxTree = builder.buildTree(statement);
return new SyntaxResult(syntax, syntaxTree);
}
- SyntaxTree syntaxTree = builder.buildTree(statement);// 3.必须通过语法树获取语法
+ // 3.必须通过语法树获取语法
+ SyntaxTree syntaxTree = builder.buildTree(statement);
syntax = getSyntaxByTree(syntaxTree);
Assert.notNull(syntax, "The syntax cannot be null!");
+
return new SyntaxResult(syntax, syntaxTree);
}
@@ -70,16 +73,16 @@ public class DefaultSyntaxParser implements SyntaxParser {
}
}
// ELSE / CATCH / FINALLY
- if (SymbolEnum.RIGHT_CURLY_BRACKET.value.equals(firstToken.toString())) {
- if (KeywordEnum.ELSE.value.equals(secondToken.toString())) {// } else {
- if (SymbolEnum.LEFT_CURLY_BRACKET.value.equals(thirdToken.toString())) {
+ if ("}".equals(firstToken.toString())) {
+ if ("else".equals(secondToken.toString())) {// } else {
+ if ("{".equals(thirdToken.toString())) {
return SyntaxEnum.ELSE;
}
- } else if (KeywordEnum.CATCH.value.equals(secondToken.toString())) {// } catch Exception x {
+ } else if ("catch".equals(secondToken.toString())) {// } catch Exception x {
return SyntaxEnum.CATCH;
- } else if (KeywordEnum.FINALLY.value.equals(secondToken.toString())) {// } finally {
+ } else if ("finally".equals(secondToken.toString())) {// } finally {
return SyntaxEnum.FINALLY;
}
}
@@ -98,27 +101,27 @@ public class DefaultSyntaxParser implements SyntaxParser {
// SUPER / THIS
if (firstToken.isLocalMethod()) {
String memberName = firstToken.attr(Attribute.MEMBER_NAME);
- if (KeywordEnum.SUPER.value.equals(memberName)) {
+ if ("super".equals(memberName)) {
return SyntaxEnum.SUPER;
- } else if (KeywordEnum.THIS.value.equals(memberName)) {
+ } else if ("this".equals(memberName)) {
return SyntaxEnum.THIS;
}
}
// FOR / FOR_IN
- if (KeywordEnum.FOR.value.equals(firstToken.toString())) {
+ if ("for".equals(firstToken.toString())) {
if (secondToken.isSubexpress()) {// for (i=0; i<10; i++) {
return SyntaxEnum.FOR;
}
- if (KeywordEnum.IN.value.equals(thirdToken.toString())) {// for ? in ? {
+ if ("in".equals(thirdToken.toString())) {// for ? in ? {
return SyntaxEnum.FOR_IN;
}
throw new RuntimeException("Unknown syntax!");
}
// ELSE_IF
- if (SymbolEnum.RIGHT_CURLY_BRACKET.value.equals(firstToken.toString())) {
- if (KeywordEnum.ELSE.value.equals(secondToken.toString())) {
- if (KeywordEnum.IF.value.equals(thirdToken.toString())) {// } else if ? {
+ if ("}".equals(firstToken.toString())) {
+ if ("else".equals(secondToken.toString())) {
+ if ("if".equals(thirdToken.toString())) {// } else if ? {
return SyntaxEnum.ELSE_IF;
}
}
@@ -146,7 +149,7 @@ public class DefaultSyntaxParser implements SyntaxParser {
} else if (firstToken.isAssign()) {
Token prevToken = firstNode.prev.token;
Token nextToken = firstNode.next.token;
- if (nextToken.isSeparator() && SymbolEnum.LEFT_CURLY_BRACKET.value.equals(nextToken.toString())) {// var = {
+ if (nextToken.isSeparator() && "{".equals(nextToken.toString())) {// var = {
return SyntaxEnum.STRUCT_ASSIGN;
} else if (prevToken.isType()) {// String text = "abc"
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/DefaultTreeBuilder.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/DefaultTreeBuilder.java
similarity index 87%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/DefaultTreeBuilder.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/DefaultTreeBuilder.java
index b6423225edb02b7ae52d27cdf8ce9b120851fd3a..41afc7378138da8622cfdf8a47e3f99f99148926 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/DefaultTreeBuilder.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/DefaultTreeBuilder.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.element.action;
+package com.gitee.spirit.core.element.action;
import java.util.ArrayList;
import java.util.List;
@@ -9,15 +9,15 @@ import java.util.stream.Collectors;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.SymbolEnum;
-import com.sum.spirit.common.enums.SymbolEnum.OperandEnum;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.element.entity.Node;
-import com.sum.spirit.core.element.entity.SyntaxTree;
-import com.sum.spirit.core.element.entity.Token;
-import com.sum.spirit.core.element.utils.PriorityNode;
-import com.sum.spirit.core.element.utils.PriorityNode.PriorityComparator;
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.SymbolEnum;
+import com.gitee.spirit.common.enums.SymbolEnum.OperandEnum;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.element.entity.Node;
+import com.gitee.spirit.core.element.entity.SyntaxTree;
+import com.gitee.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.element.utils.PriorityNode;
+import com.gitee.spirit.core.element.utils.PriorityNode.PriorityComparator;
@Component
public class DefaultTreeBuilder extends AbstractTreeBuilder {
@@ -26,7 +26,7 @@ public class DefaultTreeBuilder extends AbstractTreeBuilder {
public List buildNodes(List tokens) {
final List nodes = new ArrayList<>();
ListUtils.visit(tokens, (index, token) -> {
- if (token.canSplit()) {// 嵌套语法树
+ if (token.hasSubStmt()) {// 嵌套语法树
SyntaxTree syntaxTree = buildTree(token.getValue());
token = new Token(token.tokenType, syntaxTree, token.attributes);
}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/LineChecker.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/LineChecker.java
similarity index 70%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/LineChecker.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/LineChecker.java
index 270202e58c82470db840f65c1baccc70a4f4529c..09383092a2777d6f9af2e09c55509eb54f3b97e4 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/LineChecker.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/action/LineChecker.java
@@ -1,8 +1,8 @@
-package com.sum.spirit.core.element.action;
+package com.gitee.spirit.core.element.action;
import org.springframework.stereotype.Component;
-import com.sum.spirit.core.element.entity.Line;
+import com.gitee.spirit.core.element.entity.Line;
@Component
public class LineChecker {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Document.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Document.java
similarity index 87%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Document.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Document.java
index d442bbff5ed41e899da964f89ca6832371e81212..7f74795a0542027289cd5c34b2cc13e607ef4092 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Document.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Document.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.element.entity;
+package com.gitee.spirit.core.element.entity;
import java.util.ArrayList;
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Element.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Element.java
similarity index 78%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Element.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Element.java
index 7f8856ec8c072f81b7bb4f7ddf866f616828bbb9..bd4a80e07289af39e9d1e59984c84eb5a0dd2c30 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Element.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Element.java
@@ -1,65 +1,70 @@
-package com.sum.spirit.core.element.entity;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.sum.spirit.common.enums.SyntaxEnum;
-import com.sum.spirit.common.utils.LineUtils;
-import com.sum.spirit.core.element.frame.Syntactic;
-
-public class Element extends Syntactic {
-
- public Line line;
- public Modifiers modifiers;
- public SyntaxTree syntaxTree;
- public List children = new ArrayList<>();
-
- public Element(Line line, Modifiers modifiers, Statement statement, SyntaxEnum syntax, SyntaxTree syntaxTree) {
- super(syntax, statement);
- this.line = line;
- this.modifiers = modifiers;
- this.syntaxTree = syntaxTree;
- }
-
- public String getIndent() {
- return line.getIndent();
- }
-
- public boolean hasChild() {
- return line.hasChild() || children.size() > 0;
- }
-
- public boolean isModified(String keyword) {
- return modifiers.containsKeyword(keyword);
- }
-
- public Element addModifiers(String... keywords) {
- for (int i = keywords.length - 1; i >= 0; i--) {
- modifiers.addKeywordAtFirst(keywords[i]);
- }
- return this;
- }
-
- public Element replaceModifier(String keyword, String newKeyword) {
- modifiers.replaceKeyword(keyword, newKeyword);
- return this;
- }
-
- public Element insertModifier(String keyword, String newKeyword) {
- modifiers.insertKeywordAfter(keyword, newKeyword);
- return this;
- }
-
- @Override
- public String toString() {
- return modifiers == null || modifiers.size() == 0 ? super.toString() : modifiers + " " + super.toString();
- }
-
- public void debug() {
- System.out.println(line.text + LineUtils.getSpaces(100 - line.text.length()) + ">>> " + syntax + " " + super.debugTokens());
- for (Element element : children) {
- element.debug();
- }
- }
-
-}
+package com.gitee.spirit.core.element.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.gitee.spirit.common.enums.SyntaxEnum;
+import com.gitee.spirit.common.utils.LineUtils;
+import com.gitee.spirit.core.element.frame.Syntactic;
+
+public class Element extends Syntactic {
+
+ public Line line;
+ public Modifiers modifiers;
+ public SyntaxTree syntaxTree;
+ public List children = new ArrayList<>();
+
+ public Element(Line line, Modifiers modifiers, Statement statement, SyntaxEnum syntax, SyntaxTree syntaxTree) {
+ super(syntax, statement);
+ this.line = line;
+ this.modifiers = modifiers;
+ this.syntaxTree = syntaxTree;
+ }
+
+ public Element(Statement statement) {
+ super(null, statement);
+ }
+
+ public String getIndent() {
+ return line.getIndent();
+ }
+
+ public boolean hasChild() {
+ return line.hasChild() || children.size() > 0;
+ }
+
+ public boolean isModified(String keyword) {
+ return modifiers.containsKeyword(keyword);
+ }
+
+ public Element addModifiers(String... keywords) {
+ for (int i = keywords.length - 1; i >= 0; i--) {
+ modifiers.addKeywordAtFirst(keywords[i]);
+ }
+ return this;
+ }
+
+ public Element replaceModifier(String keyword, String newKeyword) {
+ modifiers.replaceKeyword(keyword, newKeyword);
+ return this;
+ }
+
+ public Element insertModifier(String keyword, String newKeyword) {
+ modifiers.insertKeywordAfter(keyword, newKeyword);
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ return modifiers == null || modifiers.size() == 0 ? super.toString() : modifiers + " " + super.toString();
+ }
+
+ public void debug() {
+ System.out.println(line.text + LineUtils.getSpaces(100 - line.text.length()) + ">>> " + syntax + " "
+ + super.debugTokens());
+ for (Element element : children) {
+ element.debug();
+ }
+ }
+
+}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Line.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Line.java
similarity index 88%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Line.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Line.java
index 55e59ec5ff68e78670292c8c358e1d8b1d9bdcf7..5e62e1833ad768c95a5c95441bd699ba34423c38 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Line.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Line.java
@@ -1,6 +1,6 @@
-package com.sum.spirit.core.element.entity;
+package com.gitee.spirit.core.element.entity;
-import com.sum.spirit.common.utils.LineUtils;
+import com.gitee.spirit.common.utils.LineUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Modifiers.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Modifiers.java
similarity index 66%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Modifiers.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Modifiers.java
index be2fd3e9ba74959e5efb2bfcce97f1f53458c56d..6b17d57dc374853eef910239d3ba3b099f200db0 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Modifiers.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Modifiers.java
@@ -1,10 +1,10 @@
-package com.sum.spirit.core.element.entity;
+package com.gitee.spirit.core.element.entity;
import java.util.List;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.element.frame.KeywordTokenBox;
import com.google.common.base.Joiner;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.element.frame.KeywordTokenBox;
public class Modifiers extends KeywordTokenBox {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Node.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Node.java
similarity index 84%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Node.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Node.java
index 85bd2a446dd20cad5d71bde29f68cbda7e7c07a5..177b5fd1c664f12c29bff738e606920cf199dba5 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Node.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Node.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.element.entity;
+package com.gitee.spirit.core.element.entity;
public class Node {
@@ -16,7 +16,7 @@ public class Node {
return prev != null || next != null;
}
- public boolean canSplit() {
+ public boolean hasSubTree() {
return token != null && token.value != null && token.value instanceof SyntaxTree;
}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/SemanticContext.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/SemanticContext.java
similarity index 31%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/SemanticContext.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/SemanticContext.java
index 44076cf3b6d53d1e51a67d3c09e74e6392874595..11fd30d4261d51e690ede6c242b444d8c4143c48 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/SemanticContext.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/SemanticContext.java
@@ -1,12 +1,24 @@
-package com.sum.spirit.core.element.entity;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class SemanticContext {
- public boolean insideType;
-}
+package com.gitee.spirit.core.element.entity;
+
+import java.util.List;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SemanticContext {
+
+ public List words;
+ public int index = -1;
+ public boolean subStatement = false;
+ public boolean insideType = false;
+
+ public SemanticContext(boolean subStatement, boolean insideType) {
+ this.subStatement = subStatement;
+ this.insideType = insideType;
+ }
+
+}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Statement.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Statement.java
similarity index 81%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Statement.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Statement.java
index 3c80a931ae14038dc0a8846e83eb64f672755efb..72f5e5094a7af996904d7d62c164183b9b7ab7f4 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Statement.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Statement.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.core.element.entity;
+package com.gitee.spirit.core.element.entity;
import java.util.List;
+import com.gitee.spirit.common.utils.Splitter;
+import com.gitee.spirit.core.element.frame.KeywordTokenBox;
+import com.gitee.spirit.core.element.utils.StmtFormat;
import com.google.common.base.Joiner;
-import com.sum.spirit.common.utils.Splitter;
-import com.sum.spirit.core.element.frame.KeywordTokenBox;
-import com.sum.spirit.core.element.utils.StmtFormat;
public class Statement extends KeywordTokenBox {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/SyntaxResult.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/SyntaxResult.java
similarity index 70%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/SyntaxResult.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/SyntaxResult.java
index 13ff6fa152717a61e025945eb89ff5412e3d02d7..ce93b00e4049b67c2354cbfda37eafeca06a156f 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/SyntaxResult.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/SyntaxResult.java
@@ -1,6 +1,6 @@
-package com.sum.spirit.core.element.entity;
+package com.gitee.spirit.core.element.entity;
-import com.sum.spirit.common.enums.SyntaxEnum;
+import com.gitee.spirit.common.enums.SyntaxEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/SyntaxTree.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/SyntaxTree.java
similarity index 76%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/SyntaxTree.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/SyntaxTree.java
index c6a78eac0dd97aa307c47cb5b6279d10b5ff48bc..114f1f54a579bd129cb0e8bb04d2f2164cf57780 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/SyntaxTree.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/SyntaxTree.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.element.entity;
+package com.gitee.spirit.core.element.entity;
import java.util.List;
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Token.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Token.java
similarity index 81%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Token.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Token.java
index b5df7203f08aa7e04555fd77e3cb17d04ea28792..c0a10b4482c7fbb881428a242bfa1558bc8faae6 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/entity/Token.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/entity/Token.java
@@ -1,10 +1,10 @@
-package com.sum.spirit.core.element.entity;
+package com.gitee.spirit.core.element.entity;
import java.util.HashMap;
import java.util.Map;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.core.element.frame.Semantic;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.core.element.frame.Semantic;
public class Token extends Semantic {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/Attributes.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/Attributes.java
similarity index 92%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/Attributes.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/Attributes.java
index 121cd8a62bd521c25a6b572dbb9439ed2b76f692..cd5e17cefb5e5fa53e407fe2981438ea7f2ef9de 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/Attributes.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/Attributes.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.element.frame;
+package com.gitee.spirit.core.element.frame;
import java.util.Map;
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/KeywordTokenBox.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/KeywordTokenBox.java
similarity index 91%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/KeywordTokenBox.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/KeywordTokenBox.java
index 28dba2ac7be195122703dcc48fe42266cf42bcbc..a1697af68516a8e3d63ba066b4b888b2be9f77a6 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/KeywordTokenBox.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/KeywordTokenBox.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.core.element.frame;
+package com.gitee.spirit.core.element.frame;
import java.util.ArrayList;
import java.util.List;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.element.entity.Token;
import cn.hutool.core.lang.Assert;
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/Semantic.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/Semantic.java
similarity index 93%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/Semantic.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/Semantic.java
index f0d3fef21681e3e29d3cb13ff8c7f604f21427ed..283b48e845618e25ec83cc836762c6bc34bddf38 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/Semantic.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/Semantic.java
@@ -1,10 +1,10 @@
-package com.sum.spirit.core.element.frame;
+package com.gitee.spirit.core.element.frame;
import java.util.Map;
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.common.enums.SymbolEnum;
-import com.sum.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.common.enums.SymbolEnum;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
public abstract class Semantic extends Attributes {
@@ -15,8 +15,8 @@ public abstract class Semantic extends Attributes {
this.tokenType = tokenType;
}
- public boolean isPath() {
- return tokenType == TokenTypeEnum.PATH;
+ public boolean isAccessPath() {
+ return tokenType == TokenTypeEnum.ACCESS_PATH;
}
public boolean isAnnotation() {
@@ -151,7 +151,7 @@ public abstract class Semantic extends Attributes {
return isVisitField() || isVisitMethod() || isVisitIndex();
}
- public boolean canSplit() {
+ public boolean hasSubStmt() {
return isList() || isMap() || isSubexpress() || isInvoke();
}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/Syntactic.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/Syntactic.java
similarity index 92%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/Syntactic.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/Syntactic.java
index 891de7db2a64c9a2790a1105e8bfd068069220a3..5ea06bc093c56e24322c5324368f4712b29f4a4d 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/Syntactic.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/Syntactic.java
@@ -1,10 +1,10 @@
-package com.sum.spirit.core.element.frame;
+package com.gitee.spirit.core.element.frame;
import java.util.List;
-import com.sum.spirit.common.enums.SyntaxEnum;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.common.enums.SyntaxEnum;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
public abstract class Syntactic extends Statement {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/TokenBox.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/TokenBox.java
similarity index 85%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/TokenBox.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/TokenBox.java
index 12dd10902c39fdea3f65f79e6332b6f16572f51b..847d1b5add1b24f53081a2db4dd6ad78a8afe064 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/frame/TokenBox.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/frame/TokenBox.java
@@ -1,13 +1,13 @@
-package com.sum.spirit.core.element.frame;
+package com.gitee.spirit.core.element.frame;
import java.util.ArrayList;
import java.util.List;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.common.utils.Splitter;
-import com.sum.spirit.core.element.entity.Token;
-import com.sum.spirit.core.element.utils.MappableList;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.common.utils.Splitter;
+import com.gitee.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.element.utils.MappableList;
import cn.hutool.core.util.ArrayUtil;
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/MappableList.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/MappableList.java
similarity index 97%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/MappableList.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/MappableList.java
index d941dc93429c5fbbcb1907f60d2fdfcd2dbca967..9f4b7b32b8d65fd0927e0265094e0c4c7be0cf1a 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/MappableList.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/MappableList.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.element.utils;
+package com.gitee.spirit.core.element.utils;
import java.util.Collection;
import java.util.Iterator;
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/PriorityNode.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/PriorityNode.java
similarity index 96%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/PriorityNode.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/PriorityNode.java
index 268757c6609c5a1fcc53e4c543d3292398b06d25..b6996329c2fa8309952e91adebd33e6961710614 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/PriorityNode.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/PriorityNode.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.element.utils;
+package com.gitee.spirit.core.element.utils;
import java.util.Comparator;
import java.util.PriorityQueue;
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/StmtFormat.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/StmtFormat.java
similarity index 88%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/StmtFormat.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/StmtFormat.java
index 2d5f1f484d288c9cabae9ed067f0096fff00774c..581a846e5061f2cb2bfe0ba19e8069a6cd6af43c 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/StmtFormat.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/StmtFormat.java
@@ -1,12 +1,12 @@
-package com.sum.spirit.core.element.utils;
+package com.gitee.spirit.core.element.utils;
import java.util.List;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.common.enums.SymbolEnum.OperandEnum;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.common.enums.SymbolEnum.OperandEnum;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
public class StmtFormat {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/StmtVisiter.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/StmtVisiter.java
similarity index 61%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/StmtVisiter.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/StmtVisiter.java
index 7ea7edbc6649adb97c6b05dd8c9d131ecdfd135e..aa0808a5e2fc22bbe5409f0b2bc83bc185f8310b 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/StmtVisiter.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/StmtVisiter.java
@@ -1,13 +1,13 @@
-package com.sum.spirit.core.element.utils;
+package com.gitee.spirit.core.element.utils;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
public class StmtVisiter {
public static void visit(Statement statement, Consumer consumer) {
for (Token token : statement) {
- if (token.canSplit()) {
+ if (token.hasSubStmt()) {
visit(token.getValue(), consumer);
}
}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/TreeFormat.java b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/TreeFormat.java
similarity index 84%
rename from spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/TreeFormat.java
rename to spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/TreeFormat.java
index 07323f1cc55291207582b3e2fd5fbee80de41a89..b405e493c5d6ac0285c0ee48d2d7b43f58688459 100644
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/utils/TreeFormat.java
+++ b/spirit-core/spirit-core-element/src/main/java/com/gitee/spirit/core/element/utils/TreeFormat.java
@@ -1,16 +1,16 @@
-package com.sum.spirit.core.element.utils;
+package com.gitee.spirit.core.element.utils;
//import java.util.ArrayList;
//import java.util.List;
//
//import org.apache.commons.lang3.StringUtils;
//
-//import com.sum.spirit.common.enums.AttributeEnum;
-//import com.sum.spirit.common.utils.LineUtils;
-//import com.sum.spirit.core.element.entity.Line;
-//import com.sum.spirit.core.element.entity.Node;
-//import com.sum.spirit.core.element.entity.SyntaxTree;
-//import com.sum.spirit.core.element.entity.Token;
+//import com.gitee.spirit.common.enums.AttributeEnum;
+//import com.gitee.spirit.common.utils.LineUtils;
+//import com.gitee.spirit.core.element.entity.Line;
+//import com.gitee.spirit.core.element.entity.Node;
+//import com.gitee.spirit.core.element.entity.SyntaxTree;
+//import com.gitee.spirit.core.element.entity.Token;
public class TreeFormat {
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/ElementBuilder.java b/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/ElementBuilder.java
deleted file mode 100644
index 0c241acfbbaa34a618fe509d2674e250ed68bd18..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/api/ElementBuilder.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.sum.spirit.core.api;
-
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Line;
-import com.sum.spirit.core.element.entity.Statement;
-
-public interface ElementBuilder {
-
- Element build(String text);
-
- Element build(Line line);
-
- Element rebuild(Statement statement);
-
-}
diff --git a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/AbstractSemanticParser.java b/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/AbstractSemanticParser.java
deleted file mode 100644
index 255f3e78f256d4b86a6a3222998ac327920dc119..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-element/src/main/java/com/sum/spirit/core/element/action/AbstractSemanticParser.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.sum.spirit.core.element.action;
-
-import java.util.List;
-import java.util.regex.Pattern;
-
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.common.enums.SymbolEnum;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.common.pattern.LiteralPattern;
-import com.sum.spirit.common.pattern.TypePattern;
-import com.sum.spirit.common.pattern.AccessPattern;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.api.SemanticParser;
-import com.sum.spirit.core.element.entity.SemanticContext;
-import com.sum.spirit.core.element.entity.Token;
-
-public abstract class AbstractSemanticParser implements SemanticParser {
-
- public static final Pattern PATH_PATTERN = Pattern.compile("^(\\w+\\.)+\\w+$");
- public static final Pattern ANNOTATION_PATTERN = Pattern.compile("^@[A-Z]+\\w+(\\([\\s\\S]+\\))?$");
- public static final Pattern SUBEXPRESS_PATTERN = Pattern.compile("^\\([\\s\\S]+\\)$");
- public static final Pattern VAR_PATTERN = Pattern.compile("^[a-z]+\\w*$");
- public static final Pattern PREFIX_PATTERN = Pattern.compile("^(\\.)?\\w+$");
-
- @Override
- public List getTokens(SemanticContext context, List words) {
- return ListUtils.collectAll(words, word -> true, word -> getToken(context, word));
- }
-
- public boolean isPath(String word) {
- return !LiteralPattern.isDouble(word) && PATH_PATTERN.matcher(word).matches();
- }
-
- public boolean isAnnotation(String word) {
- return ANNOTATION_PATTERN.matcher(word).matches();
- }
-
- public boolean isKeyword(String word) {
- return KeywordEnum.isKeyword(word);
- }
-
- public boolean isOperator(String word) {
- return SymbolEnum.getOperator(word) != null;
- }
-
- public boolean isSeparator(String word) {
- return SymbolEnum.getSeparator(word) != null;
- }
-
- @Override
- public boolean isType(String word) {
- return TypePattern.isAnyType(word);
- }
-
- public boolean isVariable(String word) {
- return LiteralPattern.isConstVariable(word) || VAR_PATTERN.matcher(word).matches();
- }
-
- public TokenTypeEnum getInitTokenType(String word) {
- if (TypePattern.isPrimitiveArraySizeInit(word) || TypePattern.isPrimitiveArrayLiteralInit(word)) {
- return TokenTypeEnum.ARRAY_INIT;
-
- } else if (TypePattern.isTypeArraySizeInit(word) || TypePattern.isTypeArrayLiteralInit(word)) {
- return TokenTypeEnum.ARRAY_INIT;
-
- } else if (TypePattern.isTypeInit(word)) {
- return TokenTypeEnum.TYPE_INIT;
- }
- return null;
- }
-
- public TokenTypeEnum getLiteralTokenType(String word) {
- if (LiteralPattern.isNull(word)) {
- return TokenTypeEnum.NULL;
-
- } else if (LiteralPattern.isBoolean(word)) {
- return TokenTypeEnum.BOOLEAN;
-
- } else if (LiteralPattern.isChar(word)) {
- return TokenTypeEnum.CHAR;
-
- } else if (LiteralPattern.isInt(word)) {
- return TokenTypeEnum.INT;
-
- } else if (LiteralPattern.isLong(word)) {
- return TokenTypeEnum.LONG;
-
- } else if (LiteralPattern.isDouble(word)) {
- return TokenTypeEnum.DOUBLE;
-
- } else if (LiteralPattern.isString(word)) {
- return TokenTypeEnum.STRING;
-
- } else if (LiteralPattern.isList(word)) {
- return TokenTypeEnum.LIST;
-
- } else if (LiteralPattern.isMap(word)) {
- return TokenTypeEnum.MAP;
- }
- return null;
- }
-
- public TokenTypeEnum getSubexpressTokenType(String word) {
- if (SUBEXPRESS_PATTERN.matcher(word).matches()) {
- if (isType(getCastType(word))) {
- return TokenTypeEnum.CAST;
- } else {
- return TokenTypeEnum.SUBEXPRESS;
- }
- }
- return null;
- }
-
- public TokenTypeEnum getAccessTokenType(String word) {
- if (AccessPattern.isLocalMethod(word)) {
- return TokenTypeEnum.LOCAL_METHOD;
-
- } else if (AccessPattern.isVisitField(word)) {
- return TokenTypeEnum.VISIT_FIELD;
-
- } else if (AccessPattern.isVisitMethod(word)) {
- return TokenTypeEnum.VISIT_METHOD;
-
- } else if (AccessPattern.isVisitIndex(word)) {
- return TokenTypeEnum.VISIT_INDEX;
- }
- return null;
- }
-
- public String getCastType(String word) {
- return word.substring(1, word.length() - 1);
- }
-
-}
diff --git a/spirit-core/spirit-core-element/src/test/java/com/sum/spirit/core/lexer/test/ElementStarter.java b/spirit-core/spirit-core-element/src/test/java/com/gitee/spirit/core/lexer/test/ElementStarter.java
similarity index 70%
rename from spirit-core/spirit-core-element/src/test/java/com/sum/spirit/core/lexer/test/ElementStarter.java
rename to spirit-core/spirit-core-element/src/test/java/com/gitee/spirit/core/lexer/test/ElementStarter.java
index 21e965045688fc971135bcf8d2ab213b992e785c..ed9aa1447551531a18861abaa438904c7aadf6ac 100644
--- a/spirit-core/spirit-core-element/src/test/java/com/sum/spirit/core/lexer/test/ElementStarter.java
+++ b/spirit-core/spirit-core-element/src/test/java/com/gitee/spirit/core/lexer/test/ElementStarter.java
@@ -1,9 +1,9 @@
-package com.sum.spirit.core.lexer.test;
+package com.gitee.spirit.core.lexer.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-@SpringBootApplication(scanBasePackages = "com.sum.spirit")
+@SpringBootApplication(scanBasePackages = "com.gitee.spirit")
public class ElementStarter {
public static void main(String[] args) {
SpringApplication.run(ElementStarter.class, args);
diff --git a/spirit-core/spirit-core-element/src/test/java/com/sum/spirit/core/lexer/test/SemanticTest.java b/spirit-core/spirit-core-element/src/test/java/com/gitee/spirit/core/lexer/test/SemanticTest.java
similarity index 93%
rename from spirit-core/spirit-core-element/src/test/java/com/sum/spirit/core/lexer/test/SemanticTest.java
rename to spirit-core/spirit-core-element/src/test/java/com/gitee/spirit/core/lexer/test/SemanticTest.java
index 8514071acaa50f493fcbecbac0a910dafe891f12..42a94fc043630d93e3e67990fe6055e17b0f863d 100644
--- a/spirit-core/spirit-core-element/src/test/java/com/sum/spirit/core/lexer/test/SemanticTest.java
+++ b/spirit-core/spirit-core-element/src/test/java/com/gitee/spirit/core/lexer/test/SemanticTest.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.lexer.test;
+package com.gitee.spirit.core.lexer.test;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -7,10 +7,10 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
-import com.sum.spirit.core.api.SemanticParser;
-import com.sum.spirit.core.element.entity.SemanticContext;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.api.SemanticParser;
+import com.gitee.spirit.core.element.entity.SemanticContext;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
@SpringBootTest
@DisplayName("语义测试")
@@ -22,9 +22,9 @@ public class SemanticTest {
@Test
@DisplayName("PATH")
public void test0000() {
- String text = "com.sum.spirit.example.Animal";
+ String text = "com.gitee.spirit.example.Animal";
Token token = parser.getToken(new SemanticContext(), text);
- assertTrue(token.isPath());
+ assertTrue(token.isAccessPath());
}
@Test
diff --git a/spirit-core/spirit-core-element/src/test/java/com/sum/spirit/core/lexer/test/SyntaxTest.java b/spirit-core/spirit-core-element/src/test/java/com/gitee/spirit/core/lexer/test/SyntaxTest.java
similarity index 97%
rename from spirit-core/spirit-core-element/src/test/java/com/sum/spirit/core/lexer/test/SyntaxTest.java
rename to spirit-core/spirit-core-element/src/test/java/com/gitee/spirit/core/lexer/test/SyntaxTest.java
index 9226a1bfc3ed9046279397430b5791151c048339..32a757661a347d3c260e500faebb832698935e5f 100644
--- a/spirit-core/spirit-core-element/src/test/java/com/sum/spirit/core/lexer/test/SyntaxTest.java
+++ b/spirit-core/spirit-core-element/src/test/java/com/gitee/spirit/core/lexer/test/SyntaxTest.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.lexer.test;
+package com.gitee.spirit.core.lexer.test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -8,10 +8,10 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.core.api.ElementBuilder;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.core.api.ElementBuilder;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Token;
@SpringBootTest
@DisplayName("语法测试")
@@ -28,13 +28,13 @@ public class SyntaxTest {
@Test
@DisplayName("IMPORT")
public void test0000() {
- String text = "import com.sum.spirit.example.Animal";
+ String text = "import com.gitee.spirit.example.Animal";
Element element = builder.build(text);
assertTrue(element.isImport());
assertTrue(element.size() == 2);
int count = 0;
assertTypeAndValue(element.get(count++), TokenTypeEnum.KEYWORD, "import");
- assertTypeAndValue(element.get(count++), TokenTypeEnum.PATH, "com.sum.spirit.example.Animal");
+ assertTypeAndValue(element.get(count++), TokenTypeEnum.ACCESS_PATH, "com.gitee.spirit.example.Animal");
}
@Test
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/CharAction.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/CharAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..4bf2339949d50730d914f9d0427d915517f06ace
--- /dev/null
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/CharAction.java
@@ -0,0 +1,12 @@
+package com.gitee.spirit.core.api;
+
+import com.gitee.spirit.core.lexer.entity.CharEvent;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+
+public interface CharAction {
+
+ boolean isTrigger(CharEvent event);
+
+ CommonResult handle(CharEvent event);
+
+}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/CharsHandler.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/CharsHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..61d5e3f27f50e7714764cdc762a48f888731b1ef
--- /dev/null
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/CharsHandler.java
@@ -0,0 +1,10 @@
+package com.gitee.spirit.core.api;
+
+import com.gitee.spirit.core.lexer.entity.CharsContext;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+
+public interface CharsHandler {
+
+ CommonResult handle(CharsContext context, StringBuilder builder);
+
+}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/Lexer.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/Lexer.java
similarity index 81%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/Lexer.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/Lexer.java
index edb2e6189ed13f8666ff524e670d306d2da87c79..f2a5213e34b373d7abbfa3b8298e75ed6675ef2c 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/Lexer.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/Lexer.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.api;
+package com.gitee.spirit.core.api;
import java.util.List;
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/LexerAction.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/LexerAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..9842154cc52c0cd1715822f5ca8c82334aacc04a
--- /dev/null
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/api/LexerAction.java
@@ -0,0 +1,4 @@
+package com.gitee.spirit.core.api;
+
+public interface LexerAction extends CharAction {
+}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AbstractCharsHandler.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AbstractCharsHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b80d6a4ae82a343c9486e5ec0364f20c26034a9
--- /dev/null
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AbstractCharsHandler.java
@@ -0,0 +1,34 @@
+package com.gitee.spirit.core.lexer;
+
+import com.gitee.spirit.core.api.CharAction;
+import com.gitee.spirit.core.api.CharsHandler;
+import com.gitee.spirit.core.lexer.entity.CharEvent;
+import com.gitee.spirit.core.lexer.entity.CharsContext;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+import com.gitee.spirit.core.lexer.entity.CommonState;
+
+public abstract class AbstractCharsHandler implements CharsHandler, CharAction {
+
+ @Override
+ public CommonResult handle(CharsContext context, StringBuilder builder) {
+ for (context.index = 0; context.index < builder.length(); context.index++) {
+ CharEvent event = new CharEvent(context, builder.charAt(context.index));
+ if (this.isTrigger(event)) {
+ CommonResult result = this.handle(event);
+ if (result != null) {
+ if (result.state == CommonState.RESET) {
+ context.index = 0;
+ } else if (result.state == CommonState.BREAK) {
+ break;
+ }
+ }
+ }
+ }
+ return buildResult(context, builder);
+ }
+
+ public CommonResult buildResult(CharsContext context, StringBuilder builder) {
+ return new CommonResult(builder);
+ }
+
+}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AbstractCursorLexer.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AbstractCursorLexer.java
similarity index 58%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AbstractCursorLexer.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AbstractCursorLexer.java
index b7bb00f44c63273eaa4a696528d77571d4d57175..84deb6f455b9be1f14faa80822dbe2d385634264 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AbstractCursorLexer.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AbstractCursorLexer.java
@@ -1,22 +1,24 @@
-package com.sum.spirit.core.lexer;
+package com.gitee.spirit.core.lexer;
-import com.sum.spirit.common.utils.LineUtils;
-import com.sum.spirit.core.lexer.entity.CharEvent;
-import com.sum.spirit.core.lexer.entity.LexerContext;
+import com.gitee.spirit.common.utils.LineUtils;
+import com.gitee.spirit.core.lexer.entity.CharEvent;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+import com.gitee.spirit.core.lexer.entity.LexerContext;
public abstract class AbstractCursorLexer extends AbstractLexer {
@Override
- public void handle(CharEvent event) {
+ public CommonResult handle(CharEvent event) {
LexerContext context = (LexerContext) event.context;
char ch = event.ch;
if ((context.startIndex < 0 && isContinuous(ch)) || isRefreshed(ch)) {
context.startIndex = context.index;
}
- super.handle(event);
+ CommonResult result = super.handle(event);
if (!isContinuous(ch)) {
context.startIndex = -1;
}
+ return result;
}
public boolean isContinuous(char ch) {
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AbstractLexer.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AbstractLexer.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c7f1f7f2582c827b4071ae970f39dbb702a9c38
--- /dev/null
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AbstractLexer.java
@@ -0,0 +1,108 @@
+package com.gitee.spirit.core.lexer;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.gitee.spirit.common.pattern.AccessPattern;
+import com.gitee.spirit.common.pattern.LiteralPattern;
+import com.gitee.spirit.core.api.Lexer;
+import com.gitee.spirit.core.api.LexerAction;
+import com.gitee.spirit.core.lexer.entity.CharEvent;
+import com.gitee.spirit.core.lexer.entity.CharsContext;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+import com.gitee.spirit.core.lexer.entity.CommonState;
+import com.gitee.spirit.core.lexer.entity.LexerContext;
+import com.gitee.spirit.core.lexer.entity.Region;
+import com.gitee.spirit.core.lexer.utils.RegionUtils;
+import com.gitee.spirit.core.lexer.utils.RegionUtils.completedRegion;
+
+public abstract class AbstractLexer extends AbstractCharsHandler implements Lexer {
+
+ @Autowired
+ public List actions;
+
+ @Override
+ public boolean isTrigger(CharEvent event) {
+ LexerContext context = (LexerContext) event.context;
+ List regions = context.regions;
+ if (regions != null && !regions.isEmpty()) {
+ for (int index = regions.size() - 1; index >= 0; index--) {
+ Region existRegion = regions.get(index);
+ if (existRegion.contains(context.index)) {
+ return false;
+ } else if (context.index >= existRegion.endIndex) {
+ return true;
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public CommonResult handle(CharEvent event) {
+ LexerContext context = (LexerContext) event.context;
+ for (LexerAction action : actions) {
+ if (action.isTrigger(event)) {
+ CommonResult result = action.handle(event);
+ if (result != null) {
+ if (result.value != null) {
+ if (result.value instanceof Region) {
+ appendRegion(context, result.get());
+
+ } else if (result.value instanceof List) {
+ List regions = result.get();
+ regions.forEach(region -> appendRegion(context, region));
+ }
+ }
+ if (result.state == CommonState.SKIP) {
+ break;
+ } else if (result.state == CommonState.RESET || result.state == CommonState.BREAK) {
+ return result;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ public void appendRegion(LexerContext context, Region region) {
+ List regions = context.regions;
+ if (regions.isEmpty()) {
+ regions.add(region);
+ } else {
+ for (int index = regions.size() - 1; index >= 0; index--) {
+ Region existRegion = regions.get(index);
+ if (region.isOverlap(existRegion)) {
+ throw new RuntimeException("There are overlapping regions!");
+ }
+ if (region.isAfter(existRegion)) {
+ regions.add(index + 1, region);
+ break;
+ }
+ }
+ }
+ }
+
+ @Override
+ public CommonResult buildResult(CharsContext context, StringBuilder builder) {
+ LexerContext lexerContext = (LexerContext) context;
+ // 使用标记收集算法后,补全未标记的部分
+ List regions = RegionUtils.completeRegions(builder, lexerContext.regions);
+ List words = RegionUtils.subRegions(builder, regions, this::addToWords);
+ return new CommonResult(words);
+ }
+
+ public void addToWords(List words, Region region, String text) {
+ if (region instanceof completedRegion) {
+ if (text.indexOf(".") > 0 && !LiteralPattern.isDouble(text) && !AccessPattern.isAccessPath(text)) {
+ List subWords = Arrays.asList(text.replaceAll("\\.", " .").split(" "));
+ words.addAll(subWords);
+ return;
+ }
+ }
+ words.add(text);
+ }
+
+}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AliasCharsHandler.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AliasCharsHandler.java
similarity index 79%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AliasCharsHandler.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AliasCharsHandler.java
index 1d02911c8e569d93f0a2e50d8a45e9cdb90b90e5..705c55cb5b4c5dc958c2b9990d132db64fe8ce43 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AliasCharsHandler.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/AliasCharsHandler.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.core.lexer;
+package com.gitee.spirit.core.lexer;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.utils.LineUtils;
-import com.sum.spirit.core.lexer.entity.CharEvent;
-import com.sum.spirit.core.lexer.entity.CharsContext;
-import com.sum.spirit.core.lexer.entity.CharsResult;
+import com.gitee.spirit.common.utils.LineUtils;
+import com.gitee.spirit.core.lexer.entity.CharEvent;
+import com.gitee.spirit.core.lexer.entity.CharsContext;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
@Component
public class AliasCharsHandler extends AbstractCharsHandler {
@@ -16,8 +16,8 @@ public class AliasCharsHandler extends AbstractCharsHandler {
context.builder = builder;
context.alias = alias;
context.className = className;
- CharsResult result = handle(context, builder);
- builder = (StringBuilder) result.payload;
+ CommonResult result = handle(context, builder);
+ builder = (StringBuilder) result.value;
return builder.toString();
}
@@ -36,7 +36,7 @@ public class AliasCharsHandler extends AbstractCharsHandler {
}
@Override
- public void handle(CharEvent event) {
+ public CommonResult handle(CharEvent event) {
AliasCharsContext context = (AliasCharsContext) event.context;
StringBuilder builder = context.builder;
String alias = context.alias;
@@ -50,6 +50,7 @@ public class AliasCharsHandler extends AbstractCharsHandler {
}
}
}
+ return null;
}
public static class AliasCharsContext extends CharsContext {
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/CoreLexer.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/CoreLexer.java
similarity index 47%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/CoreLexer.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/CoreLexer.java
index 3870b8716310c7f0a905977b66c229a2f179e773..856e79e7786fa616aa6adacc80e3074a776a7945 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/CoreLexer.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/CoreLexer.java
@@ -1,13 +1,12 @@
-package com.sum.spirit.core.lexer;
+package com.gitee.spirit.core.lexer;
-import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
-import com.sum.spirit.core.lexer.action.BorderAction;
-import com.sum.spirit.core.lexer.entity.CharsResult;
-import com.sum.spirit.core.lexer.entity.LexerContext;
+import com.gitee.spirit.core.lexer.action.BorderAction;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+import com.gitee.spirit.core.lexer.entity.LexerContext;
import cn.hutool.core.lang.Assert;
@@ -15,32 +14,21 @@ import cn.hutool.core.lang.Assert;
public class CoreLexer extends AbstractCursorLexer {
@Override
- @SuppressWarnings("unchecked")
public List getWords(String text) {
Assert.notBlank(text, "Text cannot be blank!");
StringBuilder builder = new StringBuilder(text.trim());
LexerContext context = new LexerContext(builder);
- CharsResult result = handle(context, builder);
- return (List) result.payload;
+ CommonResult result = handle(context, builder);
+ return result.get();
}
@Override
- @SuppressWarnings("unchecked")
public List getSubWords(String text, Character... splitChars) {
Assert.notBlank(text, "Text cannot be blank!");
StringBuilder builder = new StringBuilder(text.trim());
- LexerContext context = new LexerContext(builder, BorderAction.PROFILE, splitChars);
- CharsResult result = handle(context, builder);
- Assert.notNull(result.payload, "Payload of result cannot be null!");
- List words = new ArrayList<>();
- for (String word : (List) result.payload) {
- if (word.length() == 1) {
- words.add(word);
- } else {
- words.addAll(getWords(word));
- }
- }
- return words;
+ LexerContext context = new LexerContext(builder, BorderAction.BORDER_PROFILE, splitChars);
+ CommonResult result = handle(context, builder);
+ return result.get();
}
}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/BorderAction.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/BorderAction.java
similarity index 42%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/BorderAction.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/BorderAction.java
index 05031f0ab4e13adb47b3f5daba4b7afbc2e2d5a0..fc428be5492c7387a940a2850cd58dbbce403863 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/BorderAction.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/BorderAction.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.lexer.action;
+package com.gitee.spirit.core.lexer.action;
import java.util.ArrayList;
import java.util.List;
@@ -6,44 +6,49 @@ import java.util.List;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.core.lexer.entity.CharEvent;
-import com.sum.spirit.core.lexer.entity.LexerContext;
-import com.sum.spirit.core.lexer.entity.LexerResult;
-import com.sum.spirit.core.lexer.entity.Region;
-import com.sum.spirit.core.lexer.utils.RegionUtils;
-import com.sum.spirit.core.lexer.entity.LexerResult.State;
+import com.gitee.spirit.core.lexer.entity.CharEvent;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+import com.gitee.spirit.core.lexer.entity.CommonState;
+import com.gitee.spirit.core.lexer.entity.LexerContext;
+import com.gitee.spirit.core.lexer.entity.Region;
@Component
@Order(-100)
public class BorderAction extends RegionAction {
- public static final String PROFILE = "BORDER_ACTION";
+ public static final String BORDER_PROFILE = "BORDER_PROFILE";
@Override
public boolean isTrigger(CharEvent event) {
LexerContext context = (LexerContext) event.context;
- return PROFILE.equals(context.profile) && super.isTrigger(event);
+ return BORDER_PROFILE.equals(context.profile) && super.isTrigger(event);
}
@Override
- public LexerResult pushStack(CharEvent event, List regions) {
+ public CommonResult pushStack(CharEvent event, List regions) {
LexerContext context = (LexerContext) event.context;
StringBuilder builder = context.builder;
List splitChars = context.splitChars;
- List newRegions = new ArrayList<>();
+ List borderRegions = new ArrayList<>();
for (Region region : regions) {
char startChar = builder.charAt(region.startIndex);
char endChar = builder.charAt(region.endIndex - 1);
if (splitChars.contains(startChar) && splitChars.contains(endChar)) {
- newRegions.add(new Region(region.startIndex, region.startIndex + 1));
- newRegions.add(new Region(region.endIndex - 1, region.endIndex));
+ borderRegions.add(new Region(region.startIndex, region.startIndex + 1));
+ borderRegions.add(new Region(region.endIndex - 1, region.endIndex));
}
}
- context.regions = RegionUtils.completeRegions(builder, newRegions, (startIndex, endIndex) -> new Region(startIndex, endIndex));
- context.index = builder.length();
- return new LexerResult(State.BREAK, null);
+ context.profile = null;
+ if (!borderRegions.isEmpty()) {
+ int borderIndex = borderRegions.get(0).startIndex;
+ context.index = borderIndex;
+ if (borderIndex > 0) {
+ borderRegions.add(0, new Region(0, borderIndex));
+ }
+ }
+ return new CommonResult(CommonState.SKIP, borderRegions);
}
}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/RegionAction.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/RegionAction.java
similarity index 77%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/RegionAction.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/RegionAction.java
index 813cf9415ad947e34bc7a7cbd6464f74d6f6fc58..b7d15fd54d8ba8d804865b9d22fe0b223f62886c 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/RegionAction.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/RegionAction.java
@@ -1,20 +1,19 @@
-package com.sum.spirit.core.lexer.action;
+package com.gitee.spirit.core.lexer.action;
import java.util.List;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.exception.UnhandledException;
-import com.sum.spirit.common.pattern.TypePattern;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.api.LexerAction;
-import com.sum.spirit.core.lexer.entity.CharEvent;
-import com.sum.spirit.core.lexer.entity.LexerContext;
-import com.sum.spirit.core.lexer.entity.LexerResult;
-import com.sum.spirit.core.lexer.entity.LexerResult.State;
-import com.sum.spirit.core.lexer.entity.Region;
-import com.sum.spirit.core.lexer.utils.RegionUtils;
+import com.gitee.spirit.common.pattern.TypePattern;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.api.LexerAction;
+import com.gitee.spirit.core.lexer.entity.CharEvent;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+import com.gitee.spirit.core.lexer.entity.CommonState;
+import com.gitee.spirit.core.lexer.entity.LexerContext;
+import com.gitee.spirit.core.lexer.entity.Region;
+import com.gitee.spirit.core.lexer.utils.RegionUtils;
@Component
@Order(-80)
@@ -45,7 +44,7 @@ public class RegionAction implements LexerAction {
}
@Override
- public LexerResult handle(CharEvent event) {
+ public CommonResult handle(CharEvent event) {
LexerContext context = (LexerContext) event.context;
StringBuilder builder = context.builder;
char ch = event.ch;
@@ -91,14 +90,12 @@ public class RegionAction implements LexerAction {
return pushStack(event, ListUtils.toListNonNull(region0, region1, region2));
}
- throw new UnhandledException();
+ throw new RuntimeException("Unhandled branch!");
}
- public LexerResult pushStack(CharEvent event, List regions) {
- LexerContext context = (LexerContext) event.context;
+ public CommonResult pushStack(CharEvent event, List regions) {
Region mergedRegion = RegionUtils.mergeRegions(regions);
- context.index = mergedRegion.endIndex - 1;
- return new LexerResult(State.BREAK, mergedRegion);
+ return new CommonResult(CommonState.SKIP, mergedRegion);
}
public boolean isCharAt(StringBuilder builder, int index, char ch) {
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/SpaceAction.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/SpaceAction.java
similarity index 40%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/SpaceAction.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/SpaceAction.java
index 4a68a104bcdff510c00ec462d44940411a8db576..4ec74c1448f26287c507988e21a584090426f846 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/SpaceAction.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/SpaceAction.java
@@ -1,14 +1,14 @@
-package com.sum.spirit.core.lexer.action;
+package com.gitee.spirit.core.lexer.action;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.core.api.LexerAction;
-import com.sum.spirit.core.lexer.entity.CharEvent;
-import com.sum.spirit.core.lexer.entity.LexerContext;
-import com.sum.spirit.core.lexer.entity.LexerResult;
-import com.sum.spirit.core.lexer.entity.Region;
-import com.sum.spirit.core.lexer.entity.LexerResult.State;
+import com.gitee.spirit.core.api.LexerAction;
+import com.gitee.spirit.core.lexer.entity.CharEvent;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+import com.gitee.spirit.core.lexer.entity.CommonState;
+import com.gitee.spirit.core.lexer.entity.LexerContext;
+import com.gitee.spirit.core.lexer.entity.Region;
@Component
@Order(-40)
@@ -20,9 +20,9 @@ public class SpaceAction implements LexerAction {
}
@Override
- public LexerResult handle(CharEvent event) {
+ public CommonResult handle(CharEvent event) {
LexerContext context = (LexerContext) event.context;
- return new LexerResult(State.BREAK, new Region(context.index, context.index + 1));
+ return new CommonResult(CommonState.SKIP, new Region(context.index, context.index + 1));
}
}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/SymbolAction.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/SymbolAction.java
similarity index 53%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/SymbolAction.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/SymbolAction.java
index 9818575a62e8ddb145c5d31fb0cbc2634e2e566d..943352f1a10446a04e2b8bfa56f09e60a16c856c 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/action/SymbolAction.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/action/SymbolAction.java
@@ -1,16 +1,15 @@
-package com.sum.spirit.core.lexer.action;
+package com.gitee.spirit.core.lexer.action;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.enums.SymbolEnum;
-import com.sum.spirit.common.exception.UnhandledException;
-import com.sum.spirit.core.api.LexerAction;
-import com.sum.spirit.core.lexer.entity.CharEvent;
-import com.sum.spirit.core.lexer.entity.LexerContext;
-import com.sum.spirit.core.lexer.entity.LexerResult;
-import com.sum.spirit.core.lexer.entity.Region;
-import com.sum.spirit.core.lexer.entity.LexerResult.State;
+import com.gitee.spirit.common.enums.SymbolEnum;
+import com.gitee.spirit.core.api.LexerAction;
+import com.gitee.spirit.core.lexer.entity.CharEvent;
+import com.gitee.spirit.core.lexer.entity.CommonResult;
+import com.gitee.spirit.core.lexer.entity.CommonState;
+import com.gitee.spirit.core.lexer.entity.LexerContext;
+import com.gitee.spirit.core.lexer.entity.Region;
@Component
@Order(-60)
@@ -22,7 +21,7 @@ public class SymbolAction implements LexerAction {
}
@Override
- public LexerResult handle(CharEvent event) {
+ public CommonResult handle(CharEvent event) {
LexerContext context = (LexerContext) event.context;
StringBuilder builder = context.builder;
@@ -30,18 +29,17 @@ public class SymbolAction implements LexerAction {
String str = builder.substring(context.index, context.index + 2);
if (SymbolEnum.isDoubleSymbol(str)) {
Region region = new Region(context.index, context.index + 2);
- context.index++;// 符合条件,则跳过一个单位
- return new LexerResult(State.BREAK, region);
+ return new CommonResult(CommonState.SKIP, region);
}
}
String str = builder.substring(context.index, context.index + 1);
if (SymbolEnum.isSingleSymbol(str)) {
Region region = new Region(context.index, context.index + 1);
- return new LexerResult(State.BREAK, region);
+ return new CommonResult(CommonState.SKIP, region);
}
- throw new UnhandledException();
+ throw new RuntimeException("Unhandled branch!");
}
}
\ No newline at end of file
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/CharEvent.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CharEvent.java
similarity index 82%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/CharEvent.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CharEvent.java
index 48a1ce142abe06d6d9870de34bbfcfe9eaa4e439..15697f4c1c887b1d4e79349841c01d9671ad9a78 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/CharEvent.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CharEvent.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.lexer.entity;
+package com.gitee.spirit.core.lexer.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/CharsContext.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CharsContext.java
similarity index 74%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/CharsContext.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CharsContext.java
index 079956be8dc4e4b0f1897883b471c0b37091aebd..c5fce605dbd1f57a563debd943dd48d274b13ca2 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/CharsContext.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CharsContext.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.lexer.entity;
+package com.gitee.spirit.core.lexer.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -9,5 +9,5 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
public class CharsContext {
public StringBuilder builder;
- public int index;
+ public int index = -1;
}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/LexerResult.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CommonResult.java
similarity index 35%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/LexerResult.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CommonResult.java
index 76ad3d79aa671be8aaff58700a2bfca52d92f554..6e5f757200399ef601d8e9012d850c573583a115 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/LexerResult.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CommonResult.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.lexer.entity;
+package com.gitee.spirit.core.lexer.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -7,13 +7,18 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
-public class LexerResult {
+public class CommonResult {
- public enum State {
- CONTINUE, BREAK
+ public CommonState state;
+ public Object value;
+
+ public CommonResult(Object value) {
+ this.value = value;
}
- public State state;
- public Region region;
+ @SuppressWarnings("unchecked")
+ public T get() {
+ return (T) value;
+ }
}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CommonState.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CommonState.java
new file mode 100644
index 0000000000000000000000000000000000000000..60d2103d6127a4579328639a93e717d11a1d1e99
--- /dev/null
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/CommonState.java
@@ -0,0 +1,5 @@
+package com.gitee.spirit.core.lexer.entity;
+
+public enum CommonState {
+ CONTINUE, SKIP, RESET, BREAK
+}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/LexerContext.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/LexerContext.java
similarity index 93%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/LexerContext.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/LexerContext.java
index d81588eb12e728b4de8e3e380d6dac0bcca6df30..93fef8c0a029ef5409bb4283bbdac4ec4c2676b8 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/LexerContext.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/LexerContext.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.lexer.entity;
+package com.gitee.spirit.core.lexer.entity;
import java.util.ArrayList;
import java.util.Arrays;
@@ -11,10 +11,10 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
public class LexerContext extends CharsContext {
- public int startIndex = -1;
- public List regions = new ArrayList<>();
public String profile;
public List splitChars;
+ public int startIndex = -1;
+ public List regions = new ArrayList<>();
public LexerContext(StringBuilder builder) {
this.builder = builder;
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/Region.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/Region.java
similarity index 58%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/Region.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/Region.java
index 8b95018fe8e7467bfff6a31f638b1892e92a6ba1..f553a5c94b0d46c4aca78f8ccd83d373888cfa70 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/Region.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/entity/Region.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.lexer.entity;
+package com.gitee.spirit.core.lexer.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -20,4 +20,12 @@ public class Region {
return startIndex <= index && index < endIndex;
}
+ public boolean isAfter(Region region) {
+ return startIndex >= region.endIndex;
+ }
+
+ public boolean isOverlap(Region region) {
+ return contains(region.startIndex) || contains(region.endIndex - 1);
+ }
+
}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/utils/RegionUtils.java b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/utils/RegionUtils.java
similarity index 75%
rename from spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/utils/RegionUtils.java
rename to spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/utils/RegionUtils.java
index fecd72ba1fc55787d9905334f9f584945f206fe4..a66e023cfc51d467139eddc3fbd5f17afada12c8 100644
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/utils/RegionUtils.java
+++ b/spirit-core/spirit-core-lexer/src/main/java/com/gitee/spirit/core/lexer/utils/RegionUtils.java
@@ -1,13 +1,13 @@
-package com.sum.spirit.core.lexer.utils;
+package com.gitee.spirit.core.lexer.utils;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
-import com.sum.spirit.common.utils.LineUtils;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.lexer.entity.Region;
+import com.gitee.spirit.common.utils.LineUtils;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.lexer.entity.Region;
import cn.hutool.core.lang.Assert;
@@ -29,28 +29,24 @@ public class RegionUtils {
return new Region(startRegion.startIndex, endRegion.endIndex);
}
- public static List completeRegions(StringBuilder builder, List regions, Factory factory) {
+ public static List completeRegions(StringBuilder builder, List regions) {
List completedRegions = new ArrayList<>();
int lastIndex = 0;
for (Region region : regions) {
if (region.startIndex > lastIndex) {
- Region newRegion = factory.newRegion(lastIndex, region.startIndex);
+ Region newRegion = new completedRegion(lastIndex, region.startIndex);
completedRegions.add(newRegion);
}
completedRegions.add(region);
lastIndex = region.endIndex;
}
if (lastIndex < builder.length()) {
- Region newRegion = factory.newRegion(lastIndex, builder.length());
+ Region newRegion = new completedRegion(lastIndex, builder.length());
completedRegions.add(newRegion);
}
return completedRegions;
}
- public static List completeRegions(StringBuilder builder, List regions) {
- return completeRegions(builder, regions, (startIndex, endIndex) -> new completedRegion(startIndex, endIndex));
- }
-
public static List subRegions(StringBuilder builder, List regions, Consumer consumer) {
List words = new ArrayList<>();
for (Region region : regions) {
@@ -62,10 +58,6 @@ public class RegionUtils {
return words;
}
- public static interface Factory {
- Region newRegion(int startIndex, int endIndex);
- }
-
public static interface Consumer {
void accept(List words, Region region, String text);
}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/CharAction.java b/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/CharAction.java
deleted file mode 100644
index 83047a91eb1906145ed5e46eee8e1273100bb288..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/CharAction.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.sum.spirit.core.api;
-
-import com.sum.spirit.core.lexer.entity.CharEvent;
-
-public interface CharAction {
-
- boolean isTrigger(CharEvent event);
-
- void handle(CharEvent event);
-
-}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/CharsHandler.java b/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/CharsHandler.java
deleted file mode 100644
index 92ce39d9cdb29d977437dca9d44a17fef2d3b809..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/CharsHandler.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.sum.spirit.core.api;
-
-import com.sum.spirit.core.lexer.entity.CharsContext;
-import com.sum.spirit.core.lexer.entity.CharsResult;
-
-public interface CharsHandler {
-
- CharsResult handle(CharsContext context, StringBuilder builder);
-
-}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/LexerAction.java b/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/LexerAction.java
deleted file mode 100644
index 59c84cb6fdf2b6576fb67bd593ee428e6d896806..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/api/LexerAction.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.sum.spirit.core.api;
-
-import com.sum.spirit.core.lexer.entity.CharEvent;
-import com.sum.spirit.core.lexer.entity.LexerResult;
-
-public interface LexerAction {
-
- boolean isTrigger(CharEvent event);
-
- LexerResult handle(CharEvent event);
-
-}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AbstractCharsHandler.java b/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AbstractCharsHandler.java
deleted file mode 100644
index 890b1aedbc4d8cc0dd29ed6d47b7fe3b859ff33d..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AbstractCharsHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.sum.spirit.core.lexer;
-
-import com.sum.spirit.core.api.CharAction;
-import com.sum.spirit.core.api.CharsHandler;
-import com.sum.spirit.core.lexer.entity.CharEvent;
-import com.sum.spirit.core.lexer.entity.CharsContext;
-import com.sum.spirit.core.lexer.entity.CharsResult;
-
-public abstract class AbstractCharsHandler implements CharsHandler, CharAction {
-
- @Override
- public CharsResult handle(CharsContext context, StringBuilder builder) {
- for (; context.index < builder.length(); context.index++) {
- char ch = builder.charAt(context.index);
- CharEvent event = new CharEvent(context, ch);
- if (this.isTrigger(event)) {
- this.handle(event);
- }
- }
- return buildResult(context, builder);
-
- }
-
- public CharsResult buildResult(CharsContext context, StringBuilder builder) {
- return new CharsResult(builder);
- }
-
-}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AbstractLexer.java b/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AbstractLexer.java
deleted file mode 100644
index 73200dac8055a2ef02a30c21d2300eb07e00fdc8..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/AbstractLexer.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.sum.spirit.core.lexer;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-import com.sum.spirit.common.pattern.LiteralPattern;
-import com.sum.spirit.common.pattern.TypePattern;
-import com.sum.spirit.core.api.Lexer;
-import com.sum.spirit.core.api.LexerAction;
-import com.sum.spirit.core.lexer.entity.CharEvent;
-import com.sum.spirit.core.lexer.entity.CharsContext;
-import com.sum.spirit.core.lexer.entity.CharsResult;
-import com.sum.spirit.core.lexer.entity.LexerContext;
-import com.sum.spirit.core.lexer.entity.LexerResult;
-import com.sum.spirit.core.lexer.entity.Region;
-import com.sum.spirit.core.lexer.utils.RegionUtils;
-import com.sum.spirit.core.lexer.utils.RegionUtils.completedRegion;
-import com.sum.spirit.core.lexer.entity.LexerResult.State;
-
-public abstract class AbstractLexer extends AbstractCharsHandler implements Lexer {
-
- @Autowired
- public List actions;
-
- @Override
- public CharsResult buildResult(CharsContext context, StringBuilder builder) {
- LexerContext lexerContext = (LexerContext) context;
- List regions = RegionUtils.completeRegions(builder, lexerContext.regions);// 使用标记收集算法后,补全未标记的部分
- List words = RegionUtils.subRegions(builder, regions, this::addToWords);
- return new CharsResult(words);
- }
-
- public void addToWords(List words, Region region, String text) {
- if (region instanceof completedRegion) {
- if (text.indexOf(".") > 0 && !LiteralPattern.isDouble(text) && !TypePattern.isTypeEnd(text)) {
- List subWords = Arrays.asList(text.replaceAll("\\.", " .").split(" "));
- words.addAll(subWords);
- return;
- }
- }
- words.add(text);
- }
-
- @Override
- public boolean isTrigger(CharEvent event) {
- return true;
- }
-
- @Override
- public void handle(CharEvent event) {
- for (LexerAction action : actions) {
- if (action.isTrigger(event)) {
- LexerResult result = action.handle(event);
- if (result.region != null) {
- LexerContext context = (LexerContext) event.context;
- context.regions.add(result.region);
- }
- if (result.state == State.CONTINUE) {
- continue;
- } else if (result.state == State.BREAK) {
- break;
- }
- }
- }
- }
-
-}
diff --git a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/CharsResult.java b/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/CharsResult.java
deleted file mode 100644
index 99405d86af8efcfe2347f957567187b81de14f29..0000000000000000000000000000000000000000
--- a/spirit-core/spirit-core-lexer/src/main/java/com/sum/spirit/core/lexer/entity/CharsResult.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.sum.spirit.core.lexer.entity;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class CharsResult {
- public Object payload;
-}
diff --git a/spirit-core/spirit-core-lexer/src/test/java/com/sum/spirit/core/lexer/test/LexerStarter.java b/spirit-core/spirit-core-lexer/src/test/java/com/gitee/spirit/core/lexer/test/LexerStarter.java
similarity index 70%
rename from spirit-core/spirit-core-lexer/src/test/java/com/sum/spirit/core/lexer/test/LexerStarter.java
rename to spirit-core/spirit-core-lexer/src/test/java/com/gitee/spirit/core/lexer/test/LexerStarter.java
index 462ffdf4f2edab5af8f30eb0972b7639bf9b83bf..c59a504cfcc5d6979de9ffca0469f896f56b8ff8 100644
--- a/spirit-core/spirit-core-lexer/src/test/java/com/sum/spirit/core/lexer/test/LexerStarter.java
+++ b/spirit-core/spirit-core-lexer/src/test/java/com/gitee/spirit/core/lexer/test/LexerStarter.java
@@ -1,9 +1,9 @@
-package com.sum.spirit.core.lexer.test;
+package com.gitee.spirit.core.lexer.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-@SpringBootApplication(scanBasePackages = "com.sum.spirit")
+@SpringBootApplication(scanBasePackages = "com.gitee.spirit")
public class LexerStarter {
public static void main(String[] args) {
SpringApplication.run(LexerStarter.class, args);
diff --git a/spirit-core/spirit-core-lexer/src/test/java/com/sum/spirit/core/lexer/test/LexerTest.java b/spirit-core/spirit-core-lexer/src/test/java/com/gitee/spirit/core/lexer/test/LexerTest.java
similarity index 99%
rename from spirit-core/spirit-core-lexer/src/test/java/com/sum/spirit/core/lexer/test/LexerTest.java
rename to spirit-core/spirit-core-lexer/src/test/java/com/gitee/spirit/core/lexer/test/LexerTest.java
index 206b46d1de151622f8a4cf6969ae7c7e3cd416ea..0e5469a418af137f4c3986b62751046a1c55496a 100644
--- a/spirit-core/spirit-core-lexer/src/test/java/com/sum/spirit/core/lexer/test/LexerTest.java
+++ b/spirit-core/spirit-core-lexer/src/test/java/com/gitee/spirit/core/lexer/test/LexerTest.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.core.lexer.test;
+package com.gitee.spirit.core.lexer.test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -10,7 +10,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
-import com.sum.spirit.core.api.Lexer;
+import com.gitee.spirit.core.api.Lexer;
import lombok.extern.slf4j.Slf4j;
diff --git a/spirit-core/target/spirit-core-2.1.30.pom b/spirit-core/target/spirit-core-2.1.30.pom
deleted file mode 100644
index 8a75fef9ce14f48f7ec118faa806a0bcdb15eaa2..0000000000000000000000000000000000000000
--- a/spirit-core/target/spirit-core-2.1.30.pom
+++ /dev/null
@@ -1,18 +0,0 @@
-
- 4.0.0
-
- com.gitee.chentaoah
- spirit-parent
- 2.1.30
-
- spirit-core
- pom
-
- spirit-core-lexer
- spirit-core-element
- spirit-core-class
- spirit-core-compile
-
-
\ No newline at end of file
diff --git a/spirit-core/target/spirit-core-2.1.30.pom.asc b/spirit-core/target/spirit-core-2.1.30.pom.asc
deleted file mode 100644
index c05aab4c894d15af4389086874e2f928f2512e00..0000000000000000000000000000000000000000
--- a/spirit-core/target/spirit-core-2.1.30.pom.asc
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN PGP SIGNATURE-----
-
-iQGzBAABCAAdFiEEqOc4k/2bIzSwX8nzS1qmeLEMVg4FAmClx2IACgkQS1qmeLEM
-Vg4kzgv8DWJJ9PktdD8eRvsApdiFlaQhLfASStmgNfR6HWxypijldrptGu6MswZw
-Se+ONTbbCRW9Fcot4P6tcCrWyMy1adDBRmSN6Hkz5RccMSa9iJaCW++dq2pebt2a
-q0A3mLrXeInay3r+IYOTVjuA2dqBMXLfGjJ54DQVoT67vGrtgF4qHq5/tJZbS/Ga
-ZXTpc6XJ23Fs6LW4+Td+lzMJY2jyy/5w5ROTgI77MgiDXIeX3gOXBiuvOuRaKycr
-I1AROTh8F2av5oupMqj/lQpqIoyMqizFgLhp9iBAEJnAlNlmKbSAttZ/h9MAAjsz
-sYcwEpQUVb1C1brbtQZUOb9kUr4A8eehxPFYivMoyHB63EOYXSILrJQBbv5LwCEy
-i/zxPMcUcXCw6hixgmTwgrpHSm9MDZBc6CbICE4KZ0Os8dE2vRebkDsb4PtC5DkS
-6A1wkiAlWHWn/ouGrh3NCWacFjObz6JrAzVRDCJUgy11hIEaZQ8k1OBGaU2Jdrwm
-yD2CcZEL
-=UXdc
------END PGP SIGNATURE-----
diff --git a/spirit-example/spirit-example-common/src/main/java/com/sum/spirit/example/ClassGenericTest.java b/spirit-example/spirit-example-common/src/main/java/com/gitee/spirit/example/ClassGenericTest.java
similarity index 86%
rename from spirit-example/spirit-example-common/src/main/java/com/sum/spirit/example/ClassGenericTest.java
rename to spirit-example/spirit-example-common/src/main/java/com/gitee/spirit/example/ClassGenericTest.java
index 24f1744c55cd83d01f1887ca5e01b8cfae24cb3b..dbb67d612b3f336c056d3134edd2a25d037fbe15 100644
--- a/spirit-example/spirit-example-common/src/main/java/com/sum/spirit/example/ClassGenericTest.java
+++ b/spirit-example/spirit-example-common/src/main/java/com/gitee/spirit/example/ClassGenericTest.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example;
+package com.gitee.spirit.example;
@MyTest
public class ClassGenericTest {
diff --git a/spirit-example/spirit-example-common/src/main/java/com/sum/spirit/example/GenericType.java b/spirit-example/spirit-example-common/src/main/java/com/gitee/spirit/example/GenericType.java
similarity index 91%
rename from spirit-example/spirit-example-common/src/main/java/com/sum/spirit/example/GenericType.java
rename to spirit-example/spirit-example-common/src/main/java/com/gitee/spirit/example/GenericType.java
index c44c34e99d0517e5ab94ef34a1a81ba648f1657a..d0384afc3e8cd593cc9de410f30347f85fd5746e 100644
--- a/spirit-example/spirit-example-common/src/main/java/com/sum/spirit/example/GenericType.java
+++ b/spirit-example/spirit-example-common/src/main/java/com/gitee/spirit/example/GenericType.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example;
+package com.gitee.spirit.example;
import java.util.HashMap;
import java.util.Map;
diff --git a/spirit-example/spirit-example-common/src/main/java/com/sum/spirit/example/MyTest.java b/spirit-example/spirit-example-common/src/main/java/com/gitee/spirit/example/MyTest.java
similarity index 90%
rename from spirit-example/spirit-example-common/src/main/java/com/sum/spirit/example/MyTest.java
rename to spirit-example/spirit-example-common/src/main/java/com/gitee/spirit/example/MyTest.java
index d42a7fb43b497f8e3f7157c783e7746b3f402da1..f6ae44c2f63a597431c2784a9fbddb30afb41066 100644
--- a/spirit-example/spirit-example-common/src/main/java/com/sum/spirit/example/MyTest.java
+++ b/spirit-example/spirit-example-common/src/main/java/com/gitee/spirit/example/MyTest.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example;
+package com.gitee.spirit.example;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/auto/Alias.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/auto/Alias.java
similarity index 66%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/auto/Alias.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/auto/Alias.java
index d02164857d89b7ac02f1049805b0ccf329a20119..2a352c7564bba70041a5809e975d5c06cc3ab065 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/auto/Alias.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/auto/Alias.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.auto;
+package com.gitee.spirit.example.auto;
public class Alias {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/auto/Friend.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/auto/Friend.java
similarity index 86%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/auto/Friend.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/auto/Friend.java
index 1cfc5ddd2fe2f5667bbc302932a242b5ba97d589..87884fd42abc82f248274a3375869f401dac9fae 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/auto/Friend.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/auto/Friend.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.auto;
+package com.gitee.spirit.example.auto;
public class Friend {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/auto/Import.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/auto/Import.java
similarity index 78%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/auto/Import.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/auto/Import.java
index 37fd186e35df35a8b34af8210a206647aae036f3..75ef2bfc1f25385bf1edb8ab17815e4c7d5f70cb 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/auto/Import.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/auto/Import.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.auto;
+package com.gitee.spirit.example.auto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -7,7 +7,7 @@ public class Import {
public static final Logger logger = LoggerFactory.getLogger(Import.class);
public Friend f = new Friend();
- public com.sum.spirit.example.auto.Alias a = new com.sum.spirit.example.auto.Alias();
+ public com.gitee.spirit.example.auto.Alias a = new com.gitee.spirit.example.auto.Alias();
public String xxxxG_Alias = "Clock moved backwards.G_Alias to generate id for %d milliseconds";
public String testFriend(String text, Integer number) {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/block/Block.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/block/Block.java
similarity index 92%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/block/Block.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/block/Block.java
index a5c9839f2f5dc27620b52b689c855aa554465855..ddc2e8a2da9f376fde11dfb8afd25375545f2899 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/block/Block.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/block/Block.java
@@ -1,14 +1,14 @@
-package com.sum.spirit.example.block;
+package com.gitee.spirit.example.block;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.sum.spirit.stdlib.Maps;
+import com.gitee.spirit.stdlib.Maps;
import java.util.Map;
import java.util.Map.Entry;
-import com.sum.spirit.stdlib.Lists;
+import com.gitee.spirit.stdlib.Lists;
import java.util.List;
-import static com.sum.spirit.stdlib.Emptys.empty;
+import static com.gitee.spirit.stdlib.Emptys.empty;
public class Block {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/clazz/AbsService.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/clazz/AbsService.java
similarity index 73%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/clazz/AbsService.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/clazz/AbsService.java
index 7a0be296a409db346a8f32aacd7dcfc7c1e00b4a..af4ca1ced832f50fc49e0b1d0fe6245f1d667788 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/clazz/AbsService.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/clazz/AbsService.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.clazz;
+package com.gitee.spirit.example.clazz;
public abstract class AbsService implements Service {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/clazz/Service.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/clazz/Service.java
similarity index 90%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/clazz/Service.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/clazz/Service.java
index b1a671eb8f43ba6e35e89e2fa0a2547c83d917b2..a13eb22c418ec48c47dc7262e39879ff47ae7c0e 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/clazz/Service.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/clazz/Service.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.clazz;
+package com.gitee.spirit.example.clazz;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/clazz/ServiceImpl.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/clazz/ServiceImpl.java
similarity index 93%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/clazz/ServiceImpl.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/clazz/ServiceImpl.java
index 2984d71bd19d06c5f836b455a79f28b9027f8c0b..ecf2046f4882d3cf512921fdf99bd3754a8f5f59 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/clazz/ServiceImpl.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/clazz/ServiceImpl.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.clazz;
+package com.gitee.spirit.example.clazz;
public class ServiceImpl extends AbsService {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/deduce/Child.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/deduce/Child.java
similarity index 88%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/deduce/Child.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/deduce/Child.java
index 3b8f6aa319f04ca44026ba20279c87ba4dcdfe05..5d14e6bc18ae153327c38bcf22792291134c6a64 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/deduce/Child.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/deduce/Child.java
@@ -1,6 +1,6 @@
-package com.sum.spirit.example.deduce;
+package com.gitee.spirit.example.deduce;
-import com.sum.spirit.example.ClassGenericTest;
+import com.gitee.spirit.example.ClassGenericTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/deduce/Father.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/deduce/Father.java
similarity index 82%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/deduce/Father.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/deduce/Father.java
index a4bd919f172f23ad827bfe53aa42e84730949b9d..0e8685ffd2ad47b15be56c6c08706e52e170fd26 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/deduce/Father.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/deduce/Father.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.deduce;
+package com.gitee.spirit.example.deduce;
public class Father {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/inner/Inner.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/inner/Inner.java
similarity index 79%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/inner/Inner.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/inner/Inner.java
index c0b8be9349ebc859f8f06fe16b9fb5d08f2b4b64..9c9b479740f1ae8bce5109710d44fefab1f15a45 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/inner/Inner.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/inner/Inner.java
@@ -1,6 +1,6 @@
-package com.sum.spirit.example.inner;
+package com.gitee.spirit.example.inner;
-import com.sum.spirit.example.deduce.Father;
+import com.gitee.spirit.example.deduce.Father;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/inner/Outside.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/inner/Outside.java
similarity index 86%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/inner/Outside.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/inner/Outside.java
index b8d9607effc7bf025e5cdad4428dd7e1664b3fa8..36eab30bf227d3945b2c91a8197243ff5464b91f 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/inner/Outside.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/inner/Outside.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.inner;
+package com.gitee.spirit.example.inner;
public class Outside {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/process/Main.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/process/Main.java
similarity index 92%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/process/Main.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/process/Main.java
index 05f4217052d03b242c72481ed364160a84010c5c..7425c4690573988d8dcc985eae5d123ee8eb84c4 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/process/Main.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/process/Main.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.process;
+package com.gitee.spirit.example.process;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/snow/IdWorker.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/snow/IdWorker.java
similarity index 98%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/snow/IdWorker.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/snow/IdWorker.java
index 1eaf9f6d55ffd65fea78b89f3baf2fe55f4a9a0e..957f23f23a0a4af182815615579b7725d0386ec6 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/snow/IdWorker.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/snow/IdWorker.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.snow;
+package com.gitee.spirit.example.snow;
public class IdWorker {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/subexpress/Express.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/subexpress/Express.java
similarity index 92%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/subexpress/Express.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/subexpress/Express.java
index 377482361c58fe4b649562e2b0fab9368f5bc4e2..49a552ef76844008471bad08fc5008c065d8f692 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/subexpress/Express.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/subexpress/Express.java
@@ -1,11 +1,11 @@
-package com.sum.spirit.example.subexpress;
+package com.gitee.spirit.example.subexpress;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.sum.spirit.stdlib.Lists;
+import com.gitee.spirit.stdlib.Lists;
import java.util.List;
-import static com.sum.spirit.stdlib.Emptys.empty;
+import static com.gitee.spirit.stdlib.Emptys.empty;
public class Express {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/syntax/Syntax.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/syntax/Syntax.java
similarity index 87%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/syntax/Syntax.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/syntax/Syntax.java
index a11d71b5631440ffd4ef6cc54c5b20c8e75f1ce5..91c00a3fa389711bcb66d290d24919705bba750d 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/syntax/Syntax.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/syntax/Syntax.java
@@ -1,10 +1,10 @@
-package com.sum.spirit.example.syntax;
+package com.gitee.spirit.example.syntax;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.sum.spirit.stdlib.Lists;
+import com.gitee.spirit.stdlib.Lists;
import java.util.List;
-import com.sum.spirit.stdlib.Maps;
+import com.gitee.spirit.stdlib.Maps;
import java.util.Map;
public class Syntax {
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/type/GenericType.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/type/GenericType.java
similarity index 94%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/type/GenericType.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/type/GenericType.java
index 608abef21b112d47cdb42d01faf0a36cf6fbc8ba..4f8c51f47409c1cdfa9a4d4d18d5c6eb9e36138a 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/type/GenericType.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/type/GenericType.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.type;
+package com.gitee.spirit.example.type;
import java.util.HashMap;
import org.slf4j.Logger;
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/type/People.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/type/People.java
similarity index 90%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/type/People.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/type/People.java
index 515cb618e5fb68d5fc880f77a02fc620228f4a0b..bef79bd625cb58e6a62297c2af2ffb7d8e0f360e 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/type/People.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/type/People.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.example.type;
+package com.gitee.spirit.example.type;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/type/Type.java b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/type/Type.java
similarity index 91%
rename from spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/type/Type.java
rename to spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/type/Type.java
index e841ce90ecb065ca816501026ec52b7dd7a994ed..cfb508de25e5b3b37c5e1ef90ba1e5e3feaece25 100644
--- a/spirit-example/spirit-example-plugin/src/main/java/com/sum/spirit/example/type/Type.java
+++ b/spirit-example/spirit-example-plugin/src/main/java/com/gitee/spirit/example/type/Type.java
@@ -1,16 +1,16 @@
-package com.sum.spirit.example.type;
+package com.gitee.spirit.example.type;
import java.util.HashMap;
-import com.sum.spirit.example.ClassGenericTest;
-import com.sum.spirit.example.MyTest;
-import com.sum.spirit.example.GenericType;
-import com.sum.spirit.example.clazz.ServiceImpl;
-import com.sum.spirit.example.process.Main;
+import com.gitee.spirit.example.ClassGenericTest;
+import com.gitee.spirit.example.MyTest;
+import com.gitee.spirit.example.GenericType;
+import com.gitee.spirit.example.clazz.ServiceImpl;
+import com.gitee.spirit.example.process.Main;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.sum.spirit.stdlib.Lists;
+import com.gitee.spirit.stdlib.Lists;
import java.util.List;
-import com.sum.spirit.stdlib.Maps;
+import com.gitee.spirit.stdlib.Maps;
import java.util.Map;
@Deprecated
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/auto/Alias.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/auto/Alias.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/auto/Alias.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/auto/Alias.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/auto/Friend.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/auto/Friend.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/auto/Friend.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/auto/Friend.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/auto/Import.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/auto/Import.sp
similarity index 85%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/auto/Import.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/auto/Import.sp
index 5e7f37f80c9fae13903f5ea92f26d3f4a1728907..2ec8112ae51902cd2cee232e342e278a8359de46 100644
--- a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/auto/Import.sp
+++ b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/auto/Import.sp
@@ -1,6 +1,6 @@
//别名
-import com.sum.spirit.example.auto.Alias G_Alias
+import com.gitee.spirit.example.auto.Alias G_Alias
class Import {
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/block/Block.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/block/Block.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/block/Block.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/block/Block.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/clazz/AbsService.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/clazz/AbsService.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/clazz/AbsService.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/clazz/AbsService.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/clazz/Service.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/clazz/Service.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/clazz/Service.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/clazz/Service.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/clazz/ServiceImpl.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/clazz/ServiceImpl.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/clazz/ServiceImpl.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/clazz/ServiceImpl.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/deduce/Child.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/deduce/Child.sp
similarity index 89%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/deduce/Child.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/deduce/Child.sp
index adaa6caec1ce19566efa926a4bc8e5e0b770a03c..51a5b2710d91c9f7850e219425244516bebc9b34 100644
--- a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/deduce/Child.sp
+++ b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/deduce/Child.sp
@@ -1,5 +1,5 @@
-import com.sum.spirit.example.ClassGenericTest
+import com.gitee.spirit.example.ClassGenericTest
class Child extends Father{
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/deduce/Father.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/deduce/Father.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/deduce/Father.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/deduce/Father.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/inner/Outside.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/inner/Outside.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/inner/Outside.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/inner/Outside.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/process/Main.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/process/Main.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/process/Main.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/process/Main.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/snow/IdWorker.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/snow/IdWorker.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/snow/IdWorker.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/snow/IdWorker.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/subexpress/Express.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/subexpress/Express.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/subexpress/Express.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/subexpress/Express.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/syntax/Syntax.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/syntax/Syntax.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/syntax/Syntax.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/syntax/Syntax.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/type/GenericType.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/type/GenericType.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/type/GenericType.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/type/GenericType.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/type/People.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/type/People.sp
similarity index 100%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/type/People.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/type/People.sp
diff --git a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/type/Type.sp b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/type/Type.sp
similarity index 95%
rename from spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/type/Type.sp
rename to spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/type/Type.sp
index 813e7d85890a82730b9be4c89c6117fe60984167..c6e11fed3a90ee321ed3432d5da682c7ce7a356c 100644
--- a/spirit-example/spirit-example-plugin/src/main/resources/sources/com.sum.spirit.example/type/Type.sp
+++ b/spirit-example/spirit-example-plugin/src/main/resources/sources/com.gitee.spirit.example/type/Type.sp
@@ -1,8 +1,8 @@
import java.util.HashMap
-import com.sum.spirit.example.ClassGenericTest
-import com.sum.spirit.example.MyTest
-import com.sum.spirit.example.GenericType
+import com.gitee.spirit.example.ClassGenericTest
+import com.gitee.spirit.example.MyTest
+import com.gitee.spirit.example.GenericType
const NUMBER = 100.0
const NAME = "chentao"
diff --git a/spirit-example/target/spirit-example-2.1.30.pom b/spirit-example/target/spirit-example-2.1.30.pom
deleted file mode 100644
index 156d0a35edd833829a670a97aa0aaa4d7ed9c48d..0000000000000000000000000000000000000000
--- a/spirit-example/target/spirit-example-2.1.30.pom
+++ /dev/null
@@ -1,16 +0,0 @@
-
- 4.0.0
-
- com.gitee.chentaoah
- spirit-parent
- 2.1.30
-
- spirit-example
- pom
-
- spirit-example-common
- spirit-example-plugin
-
-
\ No newline at end of file
diff --git a/spirit-example/target/spirit-example-2.1.30.pom.asc b/spirit-example/target/spirit-example-2.1.30.pom.asc
deleted file mode 100644
index 89b83698825427955c892629c859fe9e1a14e5c8..0000000000000000000000000000000000000000
--- a/spirit-example/target/spirit-example-2.1.30.pom.asc
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN PGP SIGNATURE-----
-
-iQGzBAABCAAdFiEEqOc4k/2bIzSwX8nzS1qmeLEMVg4FAmClx7EACgkQS1qmeLEM
-Vg7CLgwAoReQ1YclT6ca3PCJgCENn227+VBwy7HgIgh1Bi71EmbZ0MslIR/cL2I+
-LMMf3/7gBsUpfJ6ql05vtd+C1x6CfFc/NnJcjr3TA07hr8QA3BN10bNeP6zBW0ka
-xaMVdUkaScr3NP9ydKGK0ZC/F9dNo09qnmmBE8WEARE+IMnIZOX+60Yn2D5KqUCA
-vxo2S69Z0aPNmjy6iQCXXxbJpX2g35Fia3tdZm1u+ErEW6ug0ReFLtS0u4PuVbIh
-LUOYcd/f9Dyyls/lswfv9iLHCZ9P2pBFAW/DOavk0crj4ICDHhI7SYFVnFhIFPdJ
-s9486CI7EiLYkuRsps4gLy+lUvOX1hSrGoGVNvpmQLe6UIkDv7PqFQS/tMyPV3gC
-TZI4o8q65yal0T6HFPPWO52iyaSdAHFuwlyxucs3UT4rW5+tfSLpo4gbrzgChavC
-MVS4txoNvk5HqHJ+P10KSyxbb60SEr/YfxUTrB93hdxRK/Gm0yn8J2gpoUSRZiUG
-4J0R0Eci
-=Vfrt
------END PGP SIGNATURE-----
diff --git a/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtClassLoader.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtClassLoader.java
new file mode 100644
index 0000000000000000000000000000000000000000..ceecadcf7eb98d8a83737d87235183d6e6d36149
--- /dev/null
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtClassLoader.java
@@ -0,0 +1,91 @@
+package com.gitee.spirit.output.java;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.annotation.DependsOn;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.utils.ConfigUtils;
+import com.gitee.spirit.core.clazz.AbstractClassLoader;
+import com.gitee.spirit.output.java.utils.ReflectUtils;
+import com.google.common.base.Splitter;
+
+@Component
+@Order(-80)
+@DependsOn("configUtils")
+public class ExtClassLoader extends AbstractClassLoader> implements InitializingBean {
+
+ public ClassLoader loader;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ String classpathsStr = ConfigUtils.getClasspaths();
+ if (StringUtils.isNotBlank(classpathsStr)) {
+ List classpaths = Splitter.on(",").trimResults().splitToList(classpathsStr);
+ loader = ReflectUtils.getClassLoader(classpaths);
+ } else {
+ loader = this.getClass().getClassLoader();
+ }
+ }
+
+ @Override
+ public List getResources(String name) {
+ try {
+ List urls = new ArrayList<>();
+ Enumeration enumeration = loader.getResources(name);
+ while (enumeration.hasMoreElements()) {
+ URL url = (URL) enumeration.nextElement();
+ urls.add(url);
+ }
+ return urls;
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public List getNames() {
+ throw new RuntimeException("This method is not supported!");
+ }
+
+ @Override
+ public boolean contains(String name) {
+ try {
+ return loadClass(name) != null;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ @Override
+ public Class> loadClass(String name) {
+ try {
+ return loader.loadClass(name);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public List> getAllClasses() {
+ throw new RuntimeException("This method is not supported!");
+ }
+
+ @Override
+ public URL getResource(String name) {
+ return loader.getResource(name);
+ }
+
+ @Override
+ public Class> defineClass(String name, URL resource) {
+ throw new RuntimeException("This method is not supported!");
+ }
+
+}
diff --git a/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtImportSelector.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtImportSelector.java
new file mode 100644
index 0000000000000000000000000000000000000000..a02ec925cd494d117dc5c6e87b915677afaac03c
--- /dev/null
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtImportSelector.java
@@ -0,0 +1,36 @@
+package com.gitee.spirit.output.java;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.core.clazz.AbstractImportSelector;
+import com.gitee.spirit.core.clazz.utils.TypeUtils;
+import com.gitee.spirit.output.java.utils.ReflectUtils;
+
+@Component
+@Order(-80)
+public class ExtImportSelector extends AbstractImportSelector {
+
+ @Autowired
+ public ExtClassLoader loader;
+
+ @Override
+ public boolean canHandle(String className) {
+ return loader.contains(className);
+ }
+
+ @Override
+ public String findClassName(String simpleName) {
+ return ReflectUtils.getClassName(TypeUtils.getTargetName(simpleName), TypeUtils.isArray(simpleName));
+ }
+
+ @Override
+ public boolean shouldImport(String selfClassName, String className) {
+ if (super.shouldImport(selfClassName, className)) {
+ return !className.startsWith("java.lang.");
+ }
+ return false;
+ }
+
+}
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/deduce/NativeTypeDerivator.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtTypeDerivator.java
similarity index 84%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/deduce/NativeTypeDerivator.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtTypeDerivator.java
index 2049c508663bc92a5811907839241b6bd92d297c..0e266bf28268d5cae6c6d6cf5ad3b6e6204c0f0c 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/deduce/NativeTypeDerivator.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtTypeDerivator.java
@@ -1,85 +1,85 @@
-package com.sum.spirit.output.java.deduce;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.core.api.ClassLinker;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.TypeBuilder;
-import com.sum.spirit.core.clazz.utils.TypeVisiter;
-import com.sum.spirit.core.compile.deduce.TypeDerivator;
-
-@Component
-public class NativeTypeDerivator extends TypeDerivator {
-
- @Autowired
- public ClassLinker linker;
-
- @Override
- public IType populate(IType type, IType targetType) {// 根据全局类型,进行填充
- return TypeVisiter.visit(targetType, eachType -> {
- if (eachType.isTypeVariable()) {
- int index = linker.getTypeVariableIndex(type, eachType.getGenericName());
- if (index >= 0) {
- return TypeBuilder.copy(type.getGenericTypes().get(index));
- }
- }
- return eachType;
- });
- }
-
- public IType populateParameter(IType type, IType parameterType, IType targetType) {
- return populateQualifying(type, parameterType, targetType, new HashMap<>());
- }
-
- public IType populateQualifying(IType type, IType parameterType, IType targetType, Map qualifyingTypes) {
- // 先使用类型填充
- targetType = populate(type, targetType);
- // 然后使用参数类型填充
- targetType = populateQualifying(parameterType, targetType, qualifyingTypes);
- // 返回类型
- return targetType;
- }
-
- public IType populateQualifying(IType parameterType, IType targetType, Map qualifyingTypes) {
- return TypeVisiter.visit(parameterType, targetType, (referType, eachType) -> {
- if (eachType.isTypeVariable()) {
- String genericName = eachType.getGenericName();
- if (qualifyingTypes.containsKey(genericName)) {// 如果已经存在了,则必须统一
- IType existType = qualifyingTypes.get(genericName);
- if (!existType.equals(referType)) {
- throw new RuntimeException("Parameter qualification types are not uniform!");
- }
- return TypeBuilder.copy(referType);
-
- } else {
- referType = TypeBuilder.copy(referType);
- qualifyingTypes.put(genericName, referType);
- return referType;
- }
- }
- return eachType;
- });
- }
-
- public IType populateReturnType(IType type, Map qualifyingTypes, IType targetType) {
- // 先使用类型填充
- targetType = populate(type, targetType);
- // 再用限定类型填充
- targetType = populateReturnType(qualifyingTypes, targetType);
- // 返回类型
- return targetType;
- }
-
- public IType populateReturnType(Map qualifyingTypes, IType targetType) {
- return TypeVisiter.visit(targetType, eachType -> {
- if (eachType.isTypeVariable()) {
- return qualifyingTypes.get(targetType.getGenericName());
- }
- return eachType;
- });
- }
-}
+package com.gitee.spirit.output.java;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.core.api.ClassLinker;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.utils.TypeBuilder;
+import com.gitee.spirit.core.clazz.utils.TypeVisiter;
+import com.gitee.spirit.core.compile.derivator.AppTypeDerivator;
+
+@Component
+public class ExtTypeDerivator extends AppTypeDerivator {
+
+ @Autowired
+ public ClassLinker linker;
+
+ @Override
+ public IType populate(IType type, IType targetType) {// 根据全局类型,进行填充
+ return TypeVisiter.visit(targetType, eachType -> {
+ if (eachType.isTypeVariable()) {
+ int index = linker.getTypeVariableIndex(type, eachType.getGenericName());
+ if (index >= 0) {
+ return TypeBuilder.copy(type.getGenericTypes().get(index));
+ }
+ }
+ return eachType;
+ });
+ }
+
+ public IType populateParameter(IType type, IType parameterType, IType targetType) {
+ return populateQualifying(type, parameterType, targetType, new HashMap<>());
+ }
+
+ public IType populateQualifying(IType type, IType parameterType, IType targetType, Map qualifyingTypes) {
+ // 先使用类型填充
+ targetType = populate(type, targetType);
+ // 然后使用参数类型填充
+ targetType = populateQualifying(parameterType, targetType, qualifyingTypes);
+ // 返回类型
+ return targetType;
+ }
+
+ public IType populateQualifying(IType parameterType, IType targetType, Map qualifyingTypes) {
+ return TypeVisiter.visit(parameterType, targetType, (referType, eachType) -> {
+ if (eachType.isTypeVariable()) {
+ String genericName = eachType.getGenericName();
+ if (qualifyingTypes.containsKey(genericName)) {// 如果已经存在了,则必须统一
+ IType existType = qualifyingTypes.get(genericName);
+ if (!existType.equals(referType)) {
+ throw new RuntimeException("Parameter qualification types are not uniform!");
+ }
+ return TypeBuilder.copy(referType);
+
+ } else {
+ referType = TypeBuilder.copy(referType);
+ qualifyingTypes.put(genericName, referType);
+ return referType;
+ }
+ }
+ return eachType;
+ });
+ }
+
+ public IType populateReturnType(IType type, Map qualifyingTypes, IType targetType) {
+ // 先使用类型填充
+ targetType = populate(type, targetType);
+ // 再用限定类型填充
+ targetType = populateReturnType(qualifyingTypes, targetType);
+ // 返回类型
+ return targetType;
+ }
+
+ public IType populateReturnType(Map qualifyingTypes, IType targetType) {
+ return TypeVisiter.visit(targetType, eachType -> {
+ if (eachType.isTypeVariable()) {
+ return qualifyingTypes.get(targetType.getGenericName());
+ }
+ return eachType;
+ });
+ }
+}
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/deduce/NativeTypeFactory.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtTypeFactory.java
similarity index 82%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/deduce/NativeTypeFactory.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtTypeFactory.java
index 9cf8de684bdc65b0435575176f3575999e5ddeb0..7ee2b860707bd18f85fc641524fd860527414be9 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/deduce/NativeTypeFactory.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/ExtTypeFactory.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.output.java.deduce;
+package com.gitee.spirit.output.java;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
@@ -10,12 +10,12 @@ import java.util.List;
import org.springframework.stereotype.Component;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.StaticTypes;
-import com.sum.spirit.core.compile.AppTypeFactory;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.utils.TypeRegistry;
+import com.gitee.spirit.core.compile.AppTypeFactory;
@Component
-public class NativeTypeFactory extends AppTypeFactory {
+public class ExtTypeFactory extends AppTypeFactory {
public IType create(Class> clazz) {
IType type = create(clazz.getName());
@@ -36,7 +36,7 @@ public class NativeTypeFactory extends AppTypeFactory {
return create((Class>) nativeType);
} else if (nativeType instanceof WildcardType) {// ?
- return StaticTypes.WILDCARD;
+ return TypeRegistry.WILDCARD;
} else if (nativeType instanceof TypeVariable) {// T or K
return createTypeVariable(nativeType.toString());
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/JavaBuilder.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/JavaBuilder.java
similarity index 71%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/JavaBuilder.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/JavaBuilder.java
index e79c5f71e897802ec76562d707001e3a82664036..35dd41801db3557b48490c8335343c4829529f2e 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/JavaBuilder.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/JavaBuilder.java
@@ -1,28 +1,25 @@
-package com.sum.spirit.output.java;
+package com.gitee.spirit.output.java;
import java.util.List;
-import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.annotation.Native;
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.common.utils.SpringUtils;
-import com.sum.spirit.core.api.CodeBuilder;
-import com.sum.spirit.core.api.ElementAction;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IField;
-import com.sum.spirit.core.clazz.entity.IMethod;
-import com.sum.spirit.core.clazz.entity.Import;
-import com.sum.spirit.core.compile.AutoImporter;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-import com.sum.spirit.core.element.entity.Element;
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.core.api.CodeBuilder;
+import com.gitee.spirit.core.api.ElementAction;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IField;
+import com.gitee.spirit.core.clazz.entity.IMethod;
+import com.gitee.spirit.core.clazz.entity.Import;
+import com.gitee.spirit.core.clazz.frame.MemberEntity;
+import com.gitee.spirit.core.compile.AutoImporter;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.output.java.action.AbstractExtElementAction;
@Component
-@DependsOn("springUtils")
-public class JavaBuilder implements CodeBuilder, InitializingBean {
+public class JavaBuilder implements CodeBuilder {
public static final String IMPLEMENTS_KEYWORD = "implements";
public static final String SYNCHRONIZED_KEYWORD = "synchronized";
@@ -30,12 +27,8 @@ public class JavaBuilder implements CodeBuilder, InitializingBean {
@Autowired
public AutoImporter importer;
- public List actions;
-
- @Override
- public void afterPropertiesSet() throws Exception {
- actions = SpringUtils.getBeansByAnnotation(ElementAction.class, Native.class);
- }
+ @Autowired
+ public List actions;
@Override
public String build(IClass clazz) {
@@ -83,7 +76,7 @@ public class JavaBuilder implements CodeBuilder, InitializingBean {
// annotation
field.annotations.forEach((annotation) -> fieldsStr.append("\t" + annotation + "\n"));
field.element.replaceModifier(KeywordEnum.CONST.value, JavaBuilder.FINAL_KEYWORD);
- fieldsStr.append("\t" + convert(clazz, field.element) + "\n");
+ fieldsStr.append("\t" + convert(clazz, field, field.element) + "\n");
}
if (fieldsStr.length() > 0) {
fieldsStr.append("\n");
@@ -130,28 +123,26 @@ public class JavaBuilder implements CodeBuilder, InitializingBean {
}
// 方法体可能没有内容,但是这并不意味着这个方法没有被实现
if (element.hasChild()) {
- convertMethodElement(methodsStr, "\t\t", clazz, method.element);
+ convertMethodElement(methodsStr, "\t\t", clazz, method, method.element);
methodsStr.append("\t}\n\n");
}
}
return methodsStr.toString();
}
- public void convertMethodElement(StringBuilder builder, String indent, IClass clazz, Element father) {
+ public void convertMethodElement(StringBuilder builder, String indent, IClass clazz, IMethod method,
+ Element father) {
for (Element element : father.children) {
- builder.append(indent + convert(clazz, element) + "\n");
+ builder.append(indent + convert(clazz, method, element) + "\n");
if (element.hasChild()) {
- convertMethodElement(builder, indent + "\t", clazz, element);
+ convertMethodElement(builder, indent + "\t", clazz, method, element);
}
}
}
- public Element convert(IClass clazz, Element element) {
+ public Element convert(IClass clazz, MemberEntity member, Element element) {
for (ElementAction action : actions) {
- ElementEvent event = new ElementEvent(clazz, element);
- if (action.isTrigger(event)) {
- action.handle(event);
- }
+ action.visitElement(new VisitContext(clazz, member), element);
}
return element;
}
diff --git a/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/AbstractExtElementAction.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/AbstractExtElementAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..8408b3e484fa675dfbf514e9547c553a3c6bc55d
--- /dev/null
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/AbstractExtElementAction.java
@@ -0,0 +1,6 @@
+package com.gitee.spirit.output.java.action;
+
+import com.gitee.spirit.core.compile.action.AbstractElementAction;
+
+public abstract class AbstractExtElementAction extends AbstractElementAction {
+}
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/AbstractTreeElementAction.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/AbstractTreeElementAction.java
similarity index 74%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/AbstractTreeElementAction.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/AbstractTreeElementAction.java
index 562dd0d16707537b6a879aef057294ae1b7aee97..6c329e00f46fd0ffd3ca144572c520d21fdf8d1c 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/AbstractTreeElementAction.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/AbstractTreeElementAction.java
@@ -1,80 +1,79 @@
-package com.sum.spirit.output.java.action;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.compile.action.AbstractElementAction;
-import com.sum.spirit.core.compile.deduce.FragmentDeducer;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-import com.sum.spirit.core.element.utils.StmtVisiter;
-import com.sum.spirit.output.java.utils.TreeUtils;
-
-public abstract class AbstractTreeElementAction extends AbstractElementAction {
-
- public static final String START = "START";
- public static final String PREV_STATEMENT = "PREV_STATEMENT";
- public static final String PREV_TYPE = "PREV_TYPE";
- public static final String END = "END";
- public static final String NEXT_STATEMENT = "NEXT_STATEMENT";
- public static final String NEXT_TYPE = "NEXT_TYPE";
-
- @Autowired
- public FragmentDeducer deducer;
-
- @Override
- public void handle(ElementEvent event) {
- IClass clazz = event.clazz;
- Statement statement = event.element;
- StmtVisiter.visit(statement, stmt -> {
- for (int index = 0; index < stmt.size(); index++) {
- Token token = stmt.get(index);
- if (isTrigger(token)) {
- visit(clazz, stmt, index, token);
- }
- }
- });
- }
-
- public void visit(IClass clazz, Statement statement, int index, Token token) {
- Map context = new HashMap<>();
- visitPrev(clazz, statement, index, token, context);
- visitNext(clazz, statement, index, token, context);
- }
-
- public void visitPrev(IClass clazz, Statement statement, int index, Token token, Map context) {
- int start = TreeUtils.findStart(statement, index);
- Statement prevStatement = statement.subStmt(start, index);
- IType prevType = deducer.derive(clazz, prevStatement);
- context.put(START, start);
- context.put(PREV_STATEMENT, prevStatement);
- context.put(PREV_TYPE, prevType);
- doVisitPrev(clazz, statement, index, token, context);
- }
-
- public void visitNext(IClass clazz, Statement statement, int index, Token token, Map context) {
- int end = TreeUtils.findEnd(statement, index);
- Statement nextStatement = statement.subStmt(index + 1, end);
- IType nextType = deducer.derive(clazz, nextStatement);
- context.put(END, end);
- context.put(NEXT_STATEMENT, nextStatement);
- context.put(NEXT_TYPE, nextType);
- doVisitNext(clazz, statement, index, token, context);
- }
-
- public void doVisitPrev(IClass clazz, Statement statement, int index, Token token, Map context) {
- // ignore
- }
-
- public void doVisitNext(IClass clazz, Statement statement, int index, Token token, Map context) {
- // ignore
- }
-
- public abstract boolean isTrigger(Token currentToken);
-
-}
+package com.gitee.spirit.output.java.action;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.compile.derivator.FragmentDeducer;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.element.utils.StmtVisiter;
+import com.gitee.spirit.output.java.utils.TreeUtils;
+
+public abstract class AbstractTreeElementAction extends AbstractExtElementAction {
+
+ public static final String START = "START";
+ public static final String PREV_STATEMENT = "PREV_STATEMENT";
+ public static final String PREV_TYPE = "PREV_TYPE";
+ public static final String END = "END";
+ public static final String NEXT_STATEMENT = "NEXT_STATEMENT";
+ public static final String NEXT_TYPE = "NEXT_TYPE";
+
+ @Autowired
+ public FragmentDeducer deducer;
+
+ @Override
+ public void visitElement(VisitContext context, Element element) {
+ IClass clazz = context.clazz;
+ StmtVisiter.visit(element, stmt -> {
+ for (int index = 0; index < stmt.size(); index++) {
+ Token token = stmt.get(index);
+ if (isTrigger(token)) {
+ visit(clazz, stmt, index, token);
+ }
+ }
+ });
+ }
+
+ public void visit(IClass clazz, Statement statement, int index, Token token) {
+ Map context = new HashMap<>();
+ visitPrev(clazz, statement, index, token, context);
+ visitNext(clazz, statement, index, token, context);
+ }
+
+ public void visitPrev(IClass clazz, Statement statement, int index, Token token, Map context) {
+ int start = TreeUtils.findStart(statement, index);
+ Statement prevStatement = statement.subStmt(start, index);
+ IType prevType = deducer.derive(clazz, prevStatement);
+ context.put(START, start);
+ context.put(PREV_STATEMENT, prevStatement);
+ context.put(PREV_TYPE, prevType);
+ doVisitPrev(clazz, statement, index, token, context);
+ }
+
+ public void visitNext(IClass clazz, Statement statement, int index, Token token, Map context) {
+ int end = TreeUtils.findEnd(statement, index);
+ Statement nextStatement = statement.subStmt(index + 1, end);
+ IType nextType = deducer.derive(clazz, nextStatement);
+ context.put(END, end);
+ context.put(NEXT_STATEMENT, nextStatement);
+ context.put(NEXT_TYPE, nextType);
+ doVisitNext(clazz, statement, index, token, context);
+ }
+
+ public void doVisitPrev(IClass clazz, Statement statement, int index, Token token, Map context) {
+ // ignore
+ }
+
+ public void doVisitNext(IClass clazz, Statement statement, int index, Token token, Map context) {
+ // ignore
+ }
+
+ public abstract boolean isTrigger(Token currentToken);
+
+}
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/CommonAction.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/CommonAction.java
similarity index 62%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/CommonAction.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/CommonAction.java
index 5af34b302a3f4324d34a1055b989def84b1ab10a..941a030d4531693b760482c780c4c18d14529b8c 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/CommonAction.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/CommonAction.java
@@ -1,29 +1,26 @@
-package com.sum.spirit.output.java.action;
+package com.gitee.spirit.output.java.action;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.annotation.Native;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.compile.action.AbstractElementAction;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-import com.sum.spirit.core.element.utils.StmtVisiter;
-import com.sum.spirit.stdlib.Lists;
-import com.sum.spirit.stdlib.Maps;
-
-@Native
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+import com.gitee.spirit.core.element.utils.StmtVisiter;
+import com.gitee.spirit.stdlib.Lists;
+import com.gitee.spirit.stdlib.Maps;
+
@Component
@Order(-80)
-public class CommonAction extends AbstractElementAction {
+public class CommonAction extends AbstractExtElementAction {
@Override
- public void handle(ElementEvent event) {
- IClass clazz = event.clazz;
- Statement statement = event.element;
- StmtVisiter.visit(statement, stmt -> {
+ public void visitElement(VisitContext context, Element element) {
+ IClass clazz = context.clazz;
+ StmtVisiter.visit(element, stmt -> {
stmt.forEach(token -> {
if (token.isArrayInit()) {// String[10] => new String[10]
Statement subStatement = token.getValue();
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/EmptyAction.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/EmptyAction.java
similarity index 34%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/EmptyAction.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/EmptyAction.java
index 891fe9d33a2d4e339ce41bc1e54a68024142172e..079468f18cfb41adb97a18f4b81ca03fd0724ddf 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/EmptyAction.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/EmptyAction.java
@@ -1,36 +1,32 @@
-package com.sum.spirit.output.java.action;
-
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.common.annotation.Native;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.compile.action.AbstractElementAction;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.utils.StmtVisiter;
-import com.sum.spirit.stdlib.Emptys;
-
-@Native
-@Component
-@Order(-100)
-public class EmptyAction extends AbstractElementAction {
-
- @Override
- public void handle(ElementEvent event) {
- IClass clazz = event.clazz;
- Statement statement = event.element;
- StmtVisiter.visit(statement, stmt -> {
- stmt.forEach(token -> {
- if (token.isLocalMethod()) {// empty(str)
- if (KeywordEnum.EMPTY.value.equals(token.attr(Attribute.MEMBER_NAME))) {
- clazz.addStaticImport(Emptys.class.getName() + ".empty");
- }
- }
- });
- });
- }
-
-}
+package com.gitee.spirit.output.java.action;
+
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.utils.StmtVisiter;
+import com.gitee.spirit.stdlib.Emptys;
+
+@Component
+@Order(-100)
+public class EmptyAction extends AbstractExtElementAction {
+
+ @Override
+ public void visitElement(VisitContext context, Element element) {
+ IClass clazz = context.clazz;
+ StmtVisiter.visit(element, stmt -> {
+ stmt.forEach(token -> {
+ if (token.isLocalMethod()) {// empty(str)
+ if (KeywordEnum.EMPTY.value.equals(token.attr(Attribute.MEMBER_NAME))) {
+ clazz.addStaticImport(Emptys.class.getName() + ".empty");
+ }
+ }
+ });
+ });
+ }
+
+}
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/SeparatorAction.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/SeparatorAction.java
similarity index 70%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/SeparatorAction.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/SeparatorAction.java
index d4295e0ad28bbeeb245b0adf75a2d9cf4e7691dd..decd382d642f78a5dc1c18efc8f4f997fe1e8228 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/SeparatorAction.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/SeparatorAction.java
@@ -1,31 +1,25 @@
-package com.sum.spirit.output.java.action;
+package com.gitee.spirit.output.java.action;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.annotation.Native;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.compile.action.AbstractElementAction;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
-@Native
@Component
@Order(-20)
-public class SeparatorAction extends AbstractElementAction {
+public class SeparatorAction extends AbstractExtElementAction {
@Override
- public void handle(ElementEvent event) {
- IClass clazz = event.clazz;
- Element element = event.element;
-
+ public void visitElement(VisitContext context, Element element) {
+ IClass clazz = context.clazz;
if (element.isIf() || element.isElseIf() || element.isWhile() || element.isCatch() || element.isSync()) {
insertBrackets(clazz, element);
}
-
if (element.isDeclare() || element.isDeclareAssign() || element.isAssign() || //
element.isFieldAssign() || element.isInvoke() || element.isReturn() || //
element.isSuper() || element.isThis() || element.isThrow() || //
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/StatementAction.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/StatementAction.java
similarity index 68%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/StatementAction.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/StatementAction.java
index 731f7f264a699d69943918d1a46cc63daded67ae..84658ef2864c4c78844c2cd878e30d5a9380a2d8 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/StatementAction.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/StatementAction.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.output.java.action;
+package com.gitee.spirit.output.java.action;
import java.util.ArrayList;
@@ -8,40 +8,36 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.annotation.Native;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.KeywordEnum;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IField;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.compile.AutoImporter;
-import com.sum.spirit.core.compile.action.AbstractElementAction;
-import com.sum.spirit.core.compile.deduce.FragmentDeducer;
-import com.sum.spirit.core.compile.entity.ElementEvent;
-import com.sum.spirit.core.element.DefaultElementBuilder;
-import com.sum.spirit.core.element.entity.Element;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-import com.sum.spirit.output.java.JavaBuilder;
-import com.sum.spirit.output.java.utils.TypeUtils;
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.KeywordEnum;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.core.api.ElementBuilder;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IField;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.compile.AutoImporter;
+import com.gitee.spirit.core.compile.derivator.FragmentDeducer;
+import com.gitee.spirit.core.compile.entity.VisitContext;
+import com.gitee.spirit.core.element.entity.Element;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+import com.gitee.spirit.output.java.JavaBuilder;
+import com.gitee.spirit.output.java.utils.TypeUtils;
-@Native
@Component
@Order(-40)
-public class StatementAction extends AbstractElementAction {
+public class StatementAction extends AbstractExtElementAction {
@Autowired
- public DefaultElementBuilder builder;
+ public ElementBuilder builder;
@Autowired
public FragmentDeducer deducer;
@Autowired
public AutoImporter importer;
@Override
- public void handle(ElementEvent event) {
- IClass clazz = event.clazz;
- Element element = event.element;
+ public void visitElement(VisitContext context, Element element) {
+ IClass clazz = context.clazz;
if (element.isDeclare() || element.isDeclareAssign() || element.isAssign()) {
element.replaceModifier(KeywordEnum.CONST.value, JavaBuilder.FINAL_KEYWORD);
@@ -99,8 +95,10 @@ public class StatementAction extends AbstractElementAction {
if (clazz.getField("logger") == null) {
clazz.addImport(Logger.class.getName());
clazz.addImport(LoggerFactory.class.getName());
- Element loggerElement = builder.build("Logger logger = LoggerFactory.getLogger(" + clazz.getSimpleName() + ".class)");
- loggerElement.addModifiers(KeywordEnum.PUBLIC.value, KeywordEnum.STATIC.value, JavaBuilder.FINAL_KEYWORD);
+ Element loggerElement = builder
+ .build("Logger logger = LoggerFactory.getLogger(" + clazz.getSimpleName() + ".class)");
+ loggerElement.addModifiers(KeywordEnum.PUBLIC.value, KeywordEnum.STATIC.value,
+ JavaBuilder.FINAL_KEYWORD);
IField field = new IField(new ArrayList<>(), loggerElement);
clazz.fields.add(0, field);
}
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/StringEqualsAction.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/StringEqualsAction.java
similarity index 71%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/StringEqualsAction.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/StringEqualsAction.java
index e0b1f0c2e462cd8fe50fe302b85c026fb0cb0287..357363c20689596d7cb0b783cb8cd53e03b4b86a 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/action/StringEqualsAction.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/action/StringEqualsAction.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.output.java.action;
+package com.gitee.spirit.output.java.action;
import java.util.HashMap;
import java.util.Map;
@@ -7,17 +7,15 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.annotation.Native;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.common.enums.TokenTypeEnum;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.StaticTypes;
-import com.sum.spirit.core.element.entity.Statement;
-import com.sum.spirit.core.element.entity.Token;
-import com.sum.spirit.output.java.utils.TypeUtils;
-
-@Native
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.common.enums.TokenTypeEnum;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.utils.TypeRegistry;
+import com.gitee.spirit.core.element.entity.Statement;
+import com.gitee.spirit.core.element.entity.Token;
+import com.gitee.spirit.output.java.utils.TypeUtils;
+
@Component
@Order(-60)
public class StringEqualsAction extends AbstractTreeElementAction {
@@ -47,7 +45,7 @@ public class StringEqualsAction extends AbstractTreeElementAction {
String format = currentToken.isEquals() ? FORMAT : "!" + FORMAT;
String text = String.format(format, prevStatement, nextStatement);
Token expressToken = new Token(TokenTypeEnum.CUSTOM_EXPRESS, text);
- expressToken.setAttr(Attribute.TYPE, StaticTypes.BOOLEAN);
+ expressToken.setAttr(Attribute.TYPE, TypeRegistry.BOOLEAN);
expressToken.setAttr(Attribute.TREE_ID, currentToken.attr(Attribute.TREE_ID));
statement.replaceTokens(start, end, expressToken);
clazz.addImport(StringUtils.class.getName());
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/linker/NativeClassLinker.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/linker/ExtClassLinker.java
similarity index 83%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/linker/NativeClassLinker.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/linker/ExtClassLinker.java
index 100e48686226fef7d6cdcd64b4711a4389fee947..8cd030b02807710e71d7e349d54bda1cf9309084 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/linker/NativeClassLinker.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/linker/ExtClassLinker.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.output.java.linker;
+package com.gitee.spirit.output.java.linker;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -15,33 +15,33 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.utils.ListUtils;
-import com.sum.spirit.core.api.ClassLinker;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.output.java.ExtClassLoader;
-import com.sum.spirit.output.java.deduce.NativeTypeDerivator;
-import com.sum.spirit.output.java.deduce.NativeTypeFactory;
-import com.sum.spirit.output.java.utils.ReflectUtils;
+import com.gitee.spirit.common.utils.ListUtils;
+import com.gitee.spirit.core.api.ClassLinker;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.output.java.ExtClassLoader;
+import com.gitee.spirit.output.java.ExtTypeDerivator;
+import com.gitee.spirit.output.java.ExtTypeFactory;
+import com.gitee.spirit.output.java.utils.ReflectUtils;
import cn.hutool.core.lang.Assert;
@Component
@Order(-80)
-public class NativeClassLinker implements ClassLinker {
+public class ExtClassLinker implements ClassLinker {
@Autowired
public ExtClassLoader classLoader;
@Autowired
- public NativeTypeFactory factory;
+ public ExtTypeFactory factory;
@Autowired
- public NativeTypeDerivator derivator;
+ public ExtTypeDerivator derivator;
@Autowired
- public NativeMethodMatcher matcher;
+ public ExtMethodMatcher matcher;
@Override
@SuppressWarnings("unchecked")
public T toClass(IType type) {
- return (T) classLoader.findClass(type.getClassName());// 可能是数组
+ return (T) classLoader.loadClass(type.getClassName());// 可能是数组
}
@Override
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/linker/NativeMethodMatcher.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/linker/ExtMethodMatcher.java
similarity index 79%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/linker/NativeMethodMatcher.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/linker/ExtMethodMatcher.java
index 57f4ea98ae619ff1a30ed5ed1a9ea559d6615645..d60f5784d077a3949591e0ec14e46270739544c6 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/linker/NativeMethodMatcher.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/linker/ExtMethodMatcher.java
@@ -1,59 +1,59 @@
-package com.sum.spirit.output.java.linker;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Parameter;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.output.java.deduce.NativeTypeDerivator;
-import com.sum.spirit.output.java.deduce.NativeTypeFactory;
-import com.sum.spirit.output.java.utils.ReflectUtils;
-
-@Component
-public class NativeMethodMatcher {
-
- @Autowired
- public NativeTypeFactory factory;
- @Autowired
- public NativeTypeDerivator derivator;
-
- public boolean checkParameterCount(Method method, List parameterTypes) {
- if (!ReflectUtils.isIndefinite(method) && parameterTypes.size() == method.getParameterCount()) {// 不是不定项,那么参数个数相等
- return true;
-
- } else if (ReflectUtils.isIndefinite(method) && parameterTypes.size() >= method.getParameterCount() - 1) {// 不定项,则参数大于等于不定项-1
- return true;
- }
- return false;
- }
-
- public Integer getMethodScore(IType type, Method method, List parameterTypes) {
- if (!checkParameterCount(method, parameterTypes)) {
- return null;
- }
- Integer finalScore = 0;
- int index = 0;
- for (IType parameterType : parameterTypes) {
- int idx = index < method.getParameterCount() - 1 ? index : method.getParameterCount() - 1;// 保证索引不会溢出
- Parameter parameter = method.getParameters()[idx];// 分为两种情况,一种是最后一个参数之前的,一种是最后一个参数
- IType nativeParameterType = factory.create(parameter.getParameterizedType());// 获取本地参数类型
- if (idx == method.getParameterCount() - 1 && ReflectUtils.isIndefinite(parameter)) {// 如果最后一个参数,而且是不定项参数,则取数组里的类型
- nativeParameterType = derivator.toTarget(nativeParameterType);
- }
- nativeParameterType = derivator.populateParameter(type, parameterType, nativeParameterType);// 填充类型里的泛型参数
- Integer scope = derivator.getAbstractScore(nativeParameterType, parameterType);
- if (scope != null) {
- finalScore += scope;
- } else {
- finalScore = null;
- break;
- }
- index++;
- }
- return finalScore;
- }
-
-}
+package com.gitee.spirit.output.java.linker;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.output.java.ExtTypeDerivator;
+import com.gitee.spirit.output.java.ExtTypeFactory;
+import com.gitee.spirit.output.java.utils.ReflectUtils;
+
+@Component
+public class ExtMethodMatcher {
+
+ @Autowired
+ public ExtTypeFactory factory;
+ @Autowired
+ public ExtTypeDerivator derivator;
+
+ public boolean checkParameterCount(Method method, List parameterTypes) {
+ if (!ReflectUtils.isIndefinite(method) && parameterTypes.size() == method.getParameterCount()) {// 不是不定项,那么参数个数相等
+ return true;
+
+ } else if (ReflectUtils.isIndefinite(method) && parameterTypes.size() >= method.getParameterCount() - 1) {// 不定项,则参数大于等于不定项-1
+ return true;
+ }
+ return false;
+ }
+
+ public Integer getMethodScore(IType type, Method method, List parameterTypes) {
+ if (!checkParameterCount(method, parameterTypes)) {
+ return null;
+ }
+ Integer finalScore = 0;
+ int index = 0;
+ for (IType parameterType : parameterTypes) {
+ int idx = index < method.getParameterCount() - 1 ? index : method.getParameterCount() - 1;// 保证索引不会溢出
+ Parameter parameter = method.getParameters()[idx];// 分为两种情况,一种是最后一个参数之前的,一种是最后一个参数
+ IType nativeParameterType = factory.create(parameter.getParameterizedType());// 获取本地参数类型
+ if (idx == method.getParameterCount() - 1 && ReflectUtils.isIndefinite(parameter)) {// 如果最后一个参数,而且是不定项参数,则取数组里的类型
+ nativeParameterType = nativeParameterType.toTarget();
+ }
+ nativeParameterType = derivator.populateParameter(type, parameterType, nativeParameterType);// 填充类型里的泛型参数
+ Integer scope = derivator.getAbstractScore(nativeParameterType, parameterType);
+ if (scope != null) {
+ finalScore += scope;
+ } else {
+ finalScore = null;
+ break;
+ }
+ index++;
+ }
+ return finalScore;
+ }
+
+}
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/utils/ReflectUtils.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/utils/ReflectUtils.java
similarity index 94%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/utils/ReflectUtils.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/utils/ReflectUtils.java
index 81bf03a5b669205e322a010e6e58cdd1ad8ffba3..834bb3fdee1883d72fd86486ccd6127519ab7aca 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/utils/ReflectUtils.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/utils/ReflectUtils.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.output.java.utils;
+package com.gitee.spirit.output.java.utils;
import java.io.File;
import java.lang.reflect.Field;
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/utils/TreeUtils.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/utils/TreeUtils.java
similarity index 80%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/utils/TreeUtils.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/utils/TreeUtils.java
index cb9a3433aaf460e674a2e6f094194b74ee256235..f744e36ec8429c62a27d25c33dbf80a0aeb49576 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/utils/TreeUtils.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/utils/TreeUtils.java
@@ -1,7 +1,7 @@
-package com.sum.spirit.output.java.utils;
+package com.gitee.spirit.output.java.utils;
-import com.sum.spirit.common.constants.Attribute;
-import com.sum.spirit.core.element.entity.Statement;
+import com.gitee.spirit.common.constants.Attribute;
+import com.gitee.spirit.core.element.entity.Statement;
public class TreeUtils {
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/utils/TypeUtils.java b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/utils/TypeUtils.java
similarity index 83%
rename from spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/utils/TypeUtils.java
rename to spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/utils/TypeUtils.java
index b9222949c680a7facaba3de831ae013e9c82f6e1..a7b49a4e334b9c97828f74377041ff51f8efe7f2 100644
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/utils/TypeUtils.java
+++ b/spirit-output/spirit-output-java/src/main/java/com/gitee/spirit/output/java/utils/TypeUtils.java
@@ -1,9 +1,9 @@
-package com.sum.spirit.output.java.utils;
+package com.gitee.spirit.output.java.utils;
import java.util.List;
import java.util.Map;
-import com.sum.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.clazz.entity.IType;
public class TypeUtils {
diff --git a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/ExtClassLoader.java b/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/ExtClassLoader.java
deleted file mode 100644
index 919b97a5c56e4fd1ecac6c3333902df38d1c2fda..0000000000000000000000000000000000000000
--- a/spirit-output/spirit-output-java/src/main/java/com/sum/spirit/output/java/ExtClassLoader.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.sum.spirit.output.java;
-
-import java.net.URL;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import com.google.common.base.Splitter;
-import com.sum.spirit.common.utils.ConfigUtils;
-import com.sum.spirit.core.api.StaticTypesCtor;
-import com.sum.spirit.core.clazz.AbstractClassLoader;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.utils.TypeBuilder;
-import com.sum.spirit.core.clazz.utils.TypeUtils;
-import com.sum.spirit.output.java.utils.ReflectUtils;
-
-@Component
-@Order(-80)
-@DependsOn("configUtils")
-public class ExtClassLoader extends AbstractClassLoader> implements InitializingBean, StaticTypesCtor {
-
- public ClassLoader classLoader;
-
- @Override
- public void afterPropertiesSet() throws Exception {
- String classpathsArg = ConfigUtils.getClasspaths();
- if (StringUtils.isNotBlank(classpathsArg)) {
- List classpaths = Splitter.on(",").trimResults().splitToList(classpathsArg);
- classLoader = ReflectUtils.getClassLoader(classpaths);
- } else {
- classLoader = this.getClass().getClassLoader();
- }
- }
-
- @Override
- public Map prepareStaticTypes() {
- Map typeMap = new HashMap<>();
- typeMap.put("VOID_BOX", TypeBuilder.build("java.lang.Void", "Void", "java.lang.Void", false, false, false, false, true));
- typeMap.put("BOOLEAN_BOX", TypeBuilder.build("java.lang.Boolean", "Boolean", "java.lang.Boolean", false, false, false, false, true));
- typeMap.put("CHAR_BOX", TypeBuilder.build("java.lang.Character", "Character", "java.lang.Character", false, false, false, false, true));
- typeMap.put("BYTE_BOX", TypeBuilder.build("java.lang.Byte", "Byte", "java.lang.Byte", false, false, false, false, true));
- typeMap.put("SHORT_BOX", TypeBuilder.build("java.lang.Short", "Short", "java.lang.Short", false, false, false, false, true));
- typeMap.put("INT_BOX", TypeBuilder.build("java.lang.Integer", "Integer", "java.lang.Integer", false, false, false, false, true));
- typeMap.put("LONG_BOX", TypeBuilder.build("java.lang.Long", "Long", "java.lang.Long", false, false, false, false, true));
- typeMap.put("FLOAT_BOX", TypeBuilder.build("java.lang.Float", "Float", "java.lang.Float", false, false, false, false, true));
- typeMap.put("DOUBLE_BOX", TypeBuilder.build("java.lang.Double", "Double", "java.lang.Double", false, false, false, false, true));
-
- typeMap.put("OBJECT", TypeBuilder.build("java.lang.Object", "Object", "java.lang.Object", false, false, false, false, true));
- typeMap.put("STRING", TypeBuilder.build("java.lang.String", "String", "java.lang.String", false, false, false, false, true));
- typeMap.put("OBJECT_ARRAY", TypeBuilder.build("[Ljava.lang.Object;", "Object[]", "java.lang.Object[]", false, true/* array */, false, false, true));
- typeMap.put("STRING_ARRAY", TypeBuilder.build("[Ljava.lang.String;", "String[]", "java.lang.String[]", false, true/* array */, false, false, true));
- typeMap.put("CLASS", TypeBuilder.build("java.lang.Class", "Class", "java.lang.Class", false, false, false, false, true));
- typeMap.put("LIST", TypeBuilder.build("java.util.List", "List", "java.util.List", false, false, false, false, true));
- typeMap.put("MAP", TypeBuilder.build("java.util.Map", "Map", "java.util.Map", false, false, false, false, true));
- typeMap.put("NULL", TypeBuilder.build("java.lang.Object", "Object", "java.lang.Object", false, false, true/* null */, false, true));
- typeMap.put("WILDCARD", TypeBuilder.build("java.lang.Object", "Object", "java.lang.Object", false, false, false, true/* wildcard */, true));
- return typeMap;
- }
-
- @Override
- public List getResources() {
- throw new RuntimeException("This method is not supported!");
- }
-
- @Override
- public List getNames() {
- throw new RuntimeException("This method is not supported!");
- }
-
- @Override
- public boolean contains(String name) {
- return name.startsWith("java.lang.");
- }
-
- @Override
- public Class> findClass(String name) {
- try {
- return classLoader.loadClass(name);
-
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public Class> findLoadedClass(String name) {
- return findClass(name);
- }
-
- @Override
- public List> getAllClasses() {
- throw new RuntimeException("This method is not supported!");
- }
-
- @Override
- public URL findResource(String name) {
- throw new RuntimeException("This method is not supported!");
- }
-
- @Override
- public Class> defineClass(String name, URL resource) {
- throw new RuntimeException("This method is not supported!");
- }
-
- @Override
- public String findClassName(String simpleName) {
- return ReflectUtils.getClassName(TypeUtils.getTargetName(simpleName), TypeUtils.isArray(simpleName));
- }
-
- @Override
- public boolean shouldImport(String selfName, String className) {
- return false;
- }
-
-}
diff --git a/spirit-output/target/spirit-output-2.1.30.pom b/spirit-output/target/spirit-output-2.1.30.pom
deleted file mode 100644
index af7cceaffcb3970ecfbc78d32da26258e8cc43cf..0000000000000000000000000000000000000000
--- a/spirit-output/target/spirit-output-2.1.30.pom
+++ /dev/null
@@ -1,15 +0,0 @@
-
- 4.0.0
-
- com.gitee.chentaoah
- spirit-parent
- 2.1.30
-
- spirit-output
- pom
-
- spirit-output-java
-
-
\ No newline at end of file
diff --git a/spirit-output/target/spirit-output-2.1.30.pom.asc b/spirit-output/target/spirit-output-2.1.30.pom.asc
deleted file mode 100644
index 57f09d9819ef57c5d3c0131eb3e52b08660c119b..0000000000000000000000000000000000000000
--- a/spirit-output/target/spirit-output-2.1.30.pom.asc
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN PGP SIGNATURE-----
-
-iQGzBAABCAAdFiEEqOc4k/2bIzSwX8nzS1qmeLEMVg4FAmClx4gACgkQS1qmeLEM
-Vg6wKgv+LFxOcOJhyqE+6yOFcMUDp5kTGlMr08nmzBzQ93yOs4x4vT0bF19D7HgN
-YAYZCtZp63pVAu/RIoGVQBK3z9eyVc2I6W84LVpgTPM64nwuBkhupSUavF965lNq
-Ei07XxibPwummfKbDOUz5zNAY1NNOpl9ezYJinvK5xmssyXgKISoDCnkCnQ5RlQu
-9gV6hSHXtEMaGmegeFnNphkb6CBWs6n9m+0yTpjCYb//Bc+DHx075fmMcSqOrwQr
-pzG62CxlZSvRDg88G+rkGaexND/KdNzb92s9a3J1Dc3JdXjgPwJ229gHqpql40qD
-9ewqYngXzvrsBPMiJ10EGqWtde/xwEPjLr+JuquhEiUp0f7e79zAvVKcsZ7PGRcB
-kt/3sdxaKzDjtBas2jsh1YA3kUEEK9yluOLRdaJeTsYT1M3c7bnR4L0Zny2aZuXZ
-FvqBDfI0dvdLvxwZE3NM/VehEEQ1SRGrRe+Gs50K7Zq9tg4jdLXA2Zq6lvqMUJKi
-an9W6kUP
-=vQvx
------END PGP SIGNATURE-----
diff --git a/spirit-starter/spirit-starter-java/src/main/java/com/sum/spirit/starter/java/JavaRunner.java b/spirit-starter/spirit-starter-java/src/main/java/com/gitee/spirit/starter/java/JavaRunner.java
similarity index 79%
rename from spirit-starter/spirit-starter-java/src/main/java/com/sum/spirit/starter/java/JavaRunner.java
rename to spirit-starter/spirit-starter-java/src/main/java/com/gitee/spirit/starter/java/JavaRunner.java
index 953a40c39e54dddd2534b2c2562746416b5368ad..19494c22f35c204a0fed93fc262d8a1a8b3e3979 100644
--- a/spirit-starter/spirit-starter-java/src/main/java/com/sum/spirit/starter/java/JavaRunner.java
+++ b/spirit-starter/spirit-starter-java/src/main/java/com/gitee/spirit/starter/java/JavaRunner.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.starter.java;
+package com.gitee.spirit.starter.java;
import java.util.List;
@@ -9,13 +9,13 @@ import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.utils.ConfigUtils;
-import com.sum.spirit.common.utils.URLFileUtils;
-import com.sum.spirit.core.api.CodeBuilder;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.Import;
-import com.sum.spirit.core.compile.AppClassLoader;
-import com.sum.spirit.core.lexer.AliasCharsHandler;
+import com.gitee.spirit.common.utils.ConfigUtils;
+import com.gitee.spirit.common.utils.URLFileUtils;
+import com.gitee.spirit.core.api.CodeBuilder;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.Import;
+import com.gitee.spirit.core.compile.AppClassLoader;
+import com.gitee.spirit.core.lexer.AliasCharsHandler;
@Component
@Profile("compile")
diff --git a/spirit-starter/spirit-starter-java/src/main/java/com/sum/spirit/starter/java/JavaStarter.java b/spirit-starter/spirit-starter-java/src/main/java/com/gitee/spirit/starter/java/JavaStarter.java
similarity index 70%
rename from spirit-starter/spirit-starter-java/src/main/java/com/sum/spirit/starter/java/JavaStarter.java
rename to spirit-starter/spirit-starter-java/src/main/java/com/gitee/spirit/starter/java/JavaStarter.java
index 211ea87d7fc531ff46a887175c5510c7274e72a3..105454970d806b065df9e4ca33b95c160dc40328 100644
--- a/spirit-starter/spirit-starter-java/src/main/java/com/sum/spirit/starter/java/JavaStarter.java
+++ b/spirit-starter/spirit-starter-java/src/main/java/com/gitee/spirit/starter/java/JavaStarter.java
@@ -1,9 +1,9 @@
-package com.sum.spirit.starter.java;
+package com.gitee.spirit.starter.java;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-@SpringBootApplication(scanBasePackages = "com.sum.spirit")
+@SpringBootApplication(scanBasePackages = "com.gitee.spirit")
public class JavaStarter {
public static void main(String[] args) {
SpringApplication.run(JavaStarter.class, args);
diff --git a/spirit-starter/spirit-starter-java/src/main/java/com/sum/spirit/starter/java/RunningMonitor.java b/spirit-starter/spirit-starter-java/src/main/java/com/gitee/spirit/starter/java/RunningMonitor.java
similarity index 92%
rename from spirit-starter/spirit-starter-java/src/main/java/com/sum/spirit/starter/java/RunningMonitor.java
rename to spirit-starter/spirit-starter-java/src/main/java/com/gitee/spirit/starter/java/RunningMonitor.java
index 9196be5e0b07cb0e15e1cf3a2eb464648fa2430d..91eb70efd7b84c8b9e8359b4c4918af2eaff423c 100644
--- a/spirit-starter/spirit-starter-java/src/main/java/com/sum/spirit/starter/java/RunningMonitor.java
+++ b/spirit-starter/spirit-starter-java/src/main/java/com/gitee/spirit/starter/java/RunningMonitor.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.starter.java;
+package com.gitee.spirit.starter.java;
import org.springframework.boot.ApplicationArguments;
import org.springframework.stereotype.Component;
diff --git a/spirit-starter/target/spirit-starter-2.1.30.pom b/spirit-starter/target/spirit-starter-2.1.30.pom
deleted file mode 100644
index c7c747ded81dc1fdac7af160b5bb00f1c0b0cc70..0000000000000000000000000000000000000000
--- a/spirit-starter/target/spirit-starter-2.1.30.pom
+++ /dev/null
@@ -1,15 +0,0 @@
-
- 4.0.0
-
- com.gitee.chentaoah
- spirit-parent
- 2.1.30
-
- spirit-starter
- pom
-
- spirit-starter-java
-
-
\ No newline at end of file
diff --git a/spirit-starter/target/spirit-starter-2.1.30.pom.asc b/spirit-starter/target/spirit-starter-2.1.30.pom.asc
deleted file mode 100644
index a266250432a610ceb3cb6b7c4e2b836b40742d32..0000000000000000000000000000000000000000
--- a/spirit-starter/target/spirit-starter-2.1.30.pom.asc
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN PGP SIGNATURE-----
-
-iQGzBAABCAAdFiEEqOc4k/2bIzSwX8nzS1qmeLEMVg4FAmClx5MACgkQS1qmeLEM
-Vg5abgv/ZB3FGay0ROBWs/xVvhk/GzJXJ6mnNEsN+AvfoLaPxFQMNeCgOk3SXCeS
-EhuMzxu4jKRMLFe+hQIzvTC/AXog0whi+JfUwe0IqPrUU2C4kHVC4w2AJBb81LcE
-6CVELM1a9D8ZjTUM3ed7/BkrCYmyWg/buFjHCYdLvLq+vZJ0cqIQkwZA3L58qsnw
-Tb42iEp4Mc5zV5q70rxrNLtP+r1F1hL3ZaA6JxMBHKIb1err45h5Vxx5/xvsY3ZS
-JztJFYEHv4lUMCgAD8N13ip3f5uR8PHKql1k9qJrHCGvmZQBMsJnYGY8FIuOnf19
-9g7U+pnzRKM96YksLaYepZt3nowSJxS5jGrmaC3EA2B7XPBurvoUszgW2hBkn0pr
-vOJI2eGYo4Qjhe/p6beYWBb4VX7+RizJh41gy6X0Z5GSL5+hfCNxewxFZ6Xn7fFd
-L0eE7tf0hQrclrOvFMs07XgXYNTmjeI7yd9rttOSPA46oSIN1R7yVmcMPnJpieKt
-vXKjwHUJ
-=Xv2Y
------END PGP SIGNATURE-----
diff --git a/spirit-stdlib/src/main/java/com/gitee/spirit/stdlib/Emptys.java b/spirit-stdlib/src/main/java/com/gitee/spirit/stdlib/Emptys.java
new file mode 100644
index 0000000000000000000000000000000000000000..0216ba437026754d824cda8ac4ad686eddbc14d1
--- /dev/null
+++ b/spirit-stdlib/src/main/java/com/gitee/spirit/stdlib/Emptys.java
@@ -0,0 +1,20 @@
+package com.gitee.spirit.stdlib;
+
+import java.util.Collection;
+import java.util.Map;
+
+public class Emptys {
+
+ public static boolean empty(String str) {
+ return str == null || str.length() == 0;
+ }
+
+ public static boolean empty(Collection collection) {
+ return collection == null || collection.isEmpty();
+ }
+
+ public static boolean empty(Map map) {
+ return map == null || map.isEmpty();
+ }
+
+}
diff --git a/spirit-stdlib/src/main/java/com/sum/spirit/stdlib/Lists.java b/spirit-stdlib/src/main/java/com/gitee/spirit/stdlib/Lists.java
similarity index 97%
rename from spirit-stdlib/src/main/java/com/sum/spirit/stdlib/Lists.java
rename to spirit-stdlib/src/main/java/com/gitee/spirit/stdlib/Lists.java
index cb73d7a5ab7f2d1979089d21a213d8a752430a65..3b3b3670a9de8bb95fa28bde2a142179e0606202 100644
--- a/spirit-stdlib/src/main/java/com/sum/spirit/stdlib/Lists.java
+++ b/spirit-stdlib/src/main/java/com/gitee/spirit/stdlib/Lists.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.stdlib;
+package com.gitee.spirit.stdlib;
import java.util.ArrayList;
import java.util.List;
diff --git a/spirit-stdlib/src/main/java/com/sum/spirit/stdlib/Maps.java b/spirit-stdlib/src/main/java/com/gitee/spirit/stdlib/Maps.java
similarity index 94%
rename from spirit-stdlib/src/main/java/com/sum/spirit/stdlib/Maps.java
rename to spirit-stdlib/src/main/java/com/gitee/spirit/stdlib/Maps.java
index ac0284c49d574897b7afc8355d433cea4cf9124c..0e2535e78805ea6062cc1b208a195fb86e1bca17 100644
--- a/spirit-stdlib/src/main/java/com/sum/spirit/stdlib/Maps.java
+++ b/spirit-stdlib/src/main/java/com/gitee/spirit/stdlib/Maps.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.stdlib;
+package com.gitee.spirit.stdlib;
import java.util.HashMap;
import java.util.Map;
diff --git a/spirit-stdlib/src/main/java/com/sum/spirit/stdlib/Emptys.java b/spirit-stdlib/src/main/java/com/sum/spirit/stdlib/Emptys.java
deleted file mode 100644
index 86c526fa5eaab4459ed0c73b9439fc46a9909fda..0000000000000000000000000000000000000000
--- a/spirit-stdlib/src/main/java/com/sum/spirit/stdlib/Emptys.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.sum.spirit.stdlib;
-
-public class Emptys {
-
- public static boolean empty(String str) {
- return str == null || str.length() == 0;
- }
-
-}
diff --git a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/CodeToolsStarter.java b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/CodeToolsStarter.java
similarity index 72%
rename from spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/CodeToolsStarter.java
rename to spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/CodeToolsStarter.java
index b724d518a04d10ecfc6c7513c6b72b4cda269736..99b16a2197de77573aeb69373e107aba4e872a0f 100644
--- a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/CodeToolsStarter.java
+++ b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/CodeToolsStarter.java
@@ -1,9 +1,9 @@
-package com.sum.spirit.code.tools;
+package com.gitee.spirit.code.tools;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-@SpringBootApplication(scanBasePackages = "com.sum.spirit")
+@SpringBootApplication(scanBasePackages = "com.gitee.spirit")
public class CodeToolsStarter {
public static void main(String[] args) {
SpringApplication.run(CodeToolsStarter.class, args);
diff --git a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/controller/CodeToolsController.java b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/controller/CodeToolsController.java
similarity index 81%
rename from spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/controller/CodeToolsController.java
rename to spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/controller/CodeToolsController.java
index 3ec2371241e5d02bdb6d10d4104010d895f0b9b2..09e2c697c5b512a0f165e1e70815ddab75449cbb 100644
--- a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/controller/CodeToolsController.java
+++ b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/controller/CodeToolsController.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.code.tools.controller;
+package com.gitee.spirit.code.tools.controller;
import java.util.List;
import java.util.Map;
@@ -9,9 +9,9 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import com.sum.spirit.code.tools.pojo.MethodInfo;
-import com.sum.spirit.code.tools.pojo.Result;
-import com.sum.spirit.code.tools.service.MethodService;
+import com.gitee.spirit.code.tools.pojo.MethodInfo;
+import com.gitee.spirit.code.tools.pojo.Result;
+import com.gitee.spirit.code.tools.service.MethodService;
@RestController
@RequestMapping("/spirit/kit")
diff --git a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/core/CustomClassLoader.java b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/core/CustomClassLoader.java
similarity index 76%
rename from spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/core/CustomClassLoader.java
rename to spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/core/CustomClassLoader.java
index 447a98c97b523f69c813f8dd19dcf58da5b31ed5..46f03c981f972ff98e6dea4f8c581dce8748b298 100644
--- a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/core/CustomClassLoader.java
+++ b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/core/CustomClassLoader.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.code.tools.core;
+package com.gitee.spirit.code.tools.core;
import java.io.File;
import java.io.InputStream;
@@ -10,9 +10,9 @@ import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
-import com.sum.spirit.common.utils.URLFileUtils;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.compile.AppClassLoader;
+import com.gitee.spirit.common.utils.URLFileUtils;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.compile.AppClassLoader;
@Primary
@Component
@@ -26,16 +26,16 @@ public class CustomClassLoader extends AppClassLoader {
this.classes.putAll(classes);
resolveClasses(classes);
visitClasses(getAllClasses());
- return findClass(name);
+ return loadClass(name);
}
public void resolveClasses(Map classes) {
classes.values().forEach(clazz -> {
Set classNames = importer.dependencies(clazz);
classNames.forEach(className -> {
- if (contains(className) && findLoadedClass(className) == null) {
+ if (contains(className) && loadClass(className) == null) {
// 注意:这里间接要求,部分编译时,依赖项目不能是内部类
- Map classes0 = compiler.compile(className, URLFileUtils.asStream(findResource(className)));
+ Map classes0 = compiler.compile(className, URLFileUtils.asStream(getResource(className)));
this.classes.putAll(classes0);
resolveClasses(classes0);
}
@@ -45,7 +45,7 @@ public class CustomClassLoader extends AppClassLoader {
public String getName(String filePath) {
URL fileUrl = URLFileUtils.toURL(new File(filePath));
- for (Map.Entry entry : nameUrlMapping.entrySet()) {
+ for (Map.Entry entry : urls.entrySet()) {
if (fileUrl.sameFile(entry.getValue())) {
return entry.getKey();
}
diff --git a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/core/ElementSelector.java b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/core/ElementSelector.java
similarity index 57%
rename from spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/core/ElementSelector.java
rename to spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/core/ElementSelector.java
index 6beffc1b0a250eea833c67ca79b5d831cb3ddc70..e22c69091e54fdfa0d44d4df219a372740aaeddc 100644
--- a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/core/ElementSelector.java
+++ b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/core/ElementSelector.java
@@ -1,47 +1,46 @@
-package com.sum.spirit.code.tools.core;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.clazz.entity.IVariable;
-import com.sum.spirit.core.compile.CoreCompiler;
-import com.sum.spirit.core.compile.DefaultElementVisiter;
-import com.sum.spirit.core.element.entity.Element;
-
-@Component
-public class ElementSelector extends CoreCompiler {
-
- @Autowired
- public DefaultElementVisiter visiter;
-
- public IType findElementAndGetType(IClass clazz, Integer lineNumber) {
- Element element = findElement(Arrays.asList(clazz.element), lineNumber);
- if (element != null) {
- IVariable variable = visiter.getVariableIfPossible(clazz, element);
- return variable.getType();
- }
- return null;
- }
-
- public Element findElement(List elements, Integer lineNumber) {
- for (int index = 0; index < elements.size(); index++) {
- Element element = elements.get(index);
- if (element.line.number == lineNumber) {
- return element;
- }
- if (element.hasChild()) {
- Element subElement = findElement(element.children, lineNumber);
- if (subElement != null) {
- return subElement;
- }
- }
- }
- return null;
- }
-
-}
+package com.gitee.spirit.code.tools.core;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.compile.CoreCompiler;
+import com.gitee.spirit.core.compile.DefaultElementVisiter;
+import com.gitee.spirit.core.element.entity.Element;
+
+@Component
+public class ElementSelector extends CoreCompiler {
+
+ @Autowired
+ public DefaultElementVisiter visiter;
+
+ public IType findElementAndGetType(IClass clazz, Integer lineNumber) {
+ // TODO
+// Element element = findElement(Arrays.asList(clazz.element), lineNumber);
+// if (element != null) {
+// IVariable variable = visiter.getVariableIfPossible(clazz, element);
+// return variable.getType();
+// }
+ return null;
+ }
+
+ public Element findElement(List elements, Integer lineNumber) {
+ for (int index = 0; index < elements.size(); index++) {
+ Element element = elements.get(index);
+ if (element.line.number == lineNumber) {
+ return element;
+ }
+ if (element.hasChild()) {
+ Element subElement = findElement(element.children, lineNumber);
+ if (subElement != null) {
+ return subElement;
+ }
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/pojo/MethodInfo.java b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/pojo/MethodInfo.java
similarity index 85%
rename from spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/pojo/MethodInfo.java
rename to spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/pojo/MethodInfo.java
index c772d50426e65c54e91e3c1b886304d0b731a8df..29df1d2460e61d16d5e35a81dca0b477436af144 100644
--- a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/pojo/MethodInfo.java
+++ b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/pojo/MethodInfo.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.code.tools.pojo;
+package com.gitee.spirit.code.tools.pojo;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/pojo/Result.java b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/pojo/Result.java
similarity index 93%
rename from spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/pojo/Result.java
rename to spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/pojo/Result.java
index 54330a4b9d75b260d2b5aac387f706dbf37a17e2..53787a36fefd10ac3b01abd6354fd30bd30eb8e0 100644
--- a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/pojo/Result.java
+++ b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/pojo/Result.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.code.tools.pojo;
+package com.gitee.spirit.code.tools.pojo;
import java.io.Serializable;
diff --git a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/service/MethodService.java b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/service/MethodService.java
similarity index 86%
rename from spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/service/MethodService.java
rename to spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/service/MethodService.java
index fc9d0f9bb3514b8b6208a5c9cd2e7be34f171e05..e336d8069e14708bad167328617f7bac854a1052 100644
--- a/spirit-tools/spirit-code-tools/src/main/java/com/sum/spirit/code/tools/service/MethodService.java
+++ b/spirit-tools/spirit-code-tools/src/main/java/com/gitee/spirit/code/tools/service/MethodService.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.code.tools.service;
+package com.gitee.spirit.code.tools.service;
import java.io.StringReader;
import java.lang.reflect.Method;
@@ -10,16 +10,16 @@ import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import com.sum.spirit.code.tools.core.CustomClassLoader;
-import com.sum.spirit.code.tools.core.ElementSelector;
-import com.sum.spirit.code.tools.pojo.MethodInfo;
-import com.sum.spirit.common.constants.AppConfig;
-import com.sum.spirit.common.utils.LineUtils;
-import com.sum.spirit.core.api.ClassLinker;
-import com.sum.spirit.core.clazz.entity.IClass;
-import com.sum.spirit.core.clazz.entity.IMethod;
-import com.sum.spirit.core.clazz.entity.IType;
-import com.sum.spirit.core.element.entity.Line;
+import com.gitee.spirit.code.tools.core.CustomClassLoader;
+import com.gitee.spirit.code.tools.core.ElementSelector;
+import com.gitee.spirit.code.tools.pojo.MethodInfo;
+import com.gitee.spirit.common.constants.AppConfig.DefaultValue;
+import com.gitee.spirit.common.utils.LineUtils;
+import com.gitee.spirit.core.api.ClassLinker;
+import com.gitee.spirit.core.clazz.entity.IClass;
+import com.gitee.spirit.core.clazz.entity.IMethod;
+import com.gitee.spirit.core.clazz.entity.IType;
+import com.gitee.spirit.core.element.entity.Line;
import cn.hutool.core.io.IoUtil;
@@ -43,7 +43,7 @@ public class MethodService {
// 根据文件名,获取className
String className = loader.getName(filePath);
// 找到对应class,并找到印记,获取推导出的类型,并返回所有该类型的方法信息
- IClass clazz = loader.loadClass(className, IoUtil.toStream(content, AppConfig.DEFAULT_CHARSET));
+ IClass clazz = loader.loadClass(className, IoUtil.toStream(content, DefaultValue.CHARSET));
IType type = selector.findElementAndGetType(clazz, lineNumber);
Object clazzObj = linker.toClass(type);
diff --git a/spirit-tools/spirit-maven-plugin/src/main/java/com/sum/spirit/maven/plugin/SpiritCompileMojo.java b/spirit-tools/spirit-maven-plugin/src/main/java/com/gitee/spirit/maven/plugin/SpiritCompileMojo.java
similarity index 60%
rename from spirit-tools/spirit-maven-plugin/src/main/java/com/sum/spirit/maven/plugin/SpiritCompileMojo.java
rename to spirit-tools/spirit-maven-plugin/src/main/java/com/gitee/spirit/maven/plugin/SpiritCompileMojo.java
index 069aa9fb9b24f759aa4031b664b70a9adb93b7a8..8103597a8e3b9b053e6572622d9895df3a63f7b7 100644
--- a/spirit-tools/spirit-maven-plugin/src/main/java/com/sum/spirit/maven/plugin/SpiritCompileMojo.java
+++ b/spirit-tools/spirit-maven-plugin/src/main/java/com/gitee/spirit/maven/plugin/SpiritCompileMojo.java
@@ -1,4 +1,4 @@
-package com.sum.spirit.maven.plugin;
+package com.gitee.spirit.maven.plugin;
import java.util.List;
@@ -11,8 +11,8 @@ import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.maven.project.MavenProject;
+import com.gitee.spirit.starter.java.JavaStarter;
import com.google.common.base.Joiner;
-import com.sum.spirit.starter.java.JavaStarter;
@Mojo(name = "compile", defaultPhase = LifecyclePhase.NONE, requiresDependencyResolution = ResolutionScope.COMPILE)
public class SpiritCompileMojo extends AbstractMojo {
@@ -23,6 +23,10 @@ public class SpiritCompileMojo extends AbstractMojo {
private String inputPath;
@Parameter
private String outputPath;
+ @Parameter
+ private String langPackage;
+ @Parameter
+ private String utilPackage;
public void execute() throws MojoExecutionException, MojoFailureException {
try {
@@ -30,9 +34,8 @@ public class SpiritCompileMojo extends AbstractMojo {
inputPath = project.getResources().get(0).getDirectory();
inputPath = inputPath.endsWith("\\resources") ? inputPath + "\\sources" : inputPath + "/sources";
}
- if (outputPath == null) {
- outputPath = project.getBuild().getSourceDirectory();
- }
+ outputPath = outputPath == null ? project.getBuild().getSourceDirectory() : outputPath;
+
getLog().info("");
getLog().info("-----------------------[ inputPath, outputPath ]------------------------");
getLog().info(inputPath);
@@ -45,7 +48,16 @@ public class SpiritCompileMojo extends AbstractMojo {
classpaths.forEach(getLog()::info);
getLog().info("");
- JavaStarter.main(new String[] { "--input=" + inputPath, "--output=" + outputPath, "--classpaths=" + Joiner.on(", ").join(classpaths) });
+ langPackage = langPackage == null ? "java.lang" : langPackage;
+ utilPackage = utilPackage == null ? "java.util" : utilPackage;
+
+ JavaStarter.main(new String[] { //
+ "--input=" + inputPath, //
+ "--output=" + outputPath, //
+ "--classpaths=" + Joiner.on(", ").join(classpaths), //
+ "--langPackage=" + langPackage, //
+ "--utilPackage=" + utilPackage //
+ });
} catch (Exception e) {
e.printStackTrace();
@@ -53,11 +65,21 @@ public class SpiritCompileMojo extends AbstractMojo {
}
public static void main(String[] args) throws ClassNotFoundException {
+ String userHome = System.getProperty("user.home");
String inputPath = "D:\\Work\\CloudSpace\\spirit\\spirit-example\\spirit-example-plugin\\src\\main\\resources\\sources";
String outputPath = "D:\\Work\\CloudSpace\\spirit\\spirit-example\\spirit-example-plugin\\src\\main\\java";
String classpaths = "D:\\Work\\CloudSpace\\spirit\\spirit-example\\spirit-example-plugin\\target\\classes, ";
- classpaths += "C:\\Users\\tao.chen1\\.m2\\repository\\com\\sum\\spirit\\spirit-example-common\\2.1.30\\spirit-example-common-2.1.30.jar, ";
+ classpaths += userHome + "\\.m2\\repository\\com\\gitee\\chentaoah\\spirit-example-common\\2.1.30\\spirit-example-common-2.1.30.jar, ";
+ classpaths += userHome + "\\.m2\\repository\\com\\gitee\\chentaoah\\spirit-stdlib\\2.1.30\\spirit-stdlib-2.1.30.jar, ";
+ classpaths += userHome + "\\.m2\\repository\\org\\slf4j\\slf4j-api\\1.7.25\\slf4j-api-1.7.25.jar, ";
+ classpaths += userHome + "\\.m2\\repository\\org\\apache\\commons\\commons-lang3\\3.9\\commons-lang3-3.9.jar, ";
classpaths += "D:\\Work\\CloudSpace\\spirit\\spirit-example\\spirit-example-plugin\\target\\test-classes";
- JavaStarter.main(new String[] { "--input=" + inputPath, "--output=" + outputPath, "--classpaths=" + classpaths });
+ JavaStarter.main(new String[] { //
+ "--input=" + inputPath, //
+ "--output=" + outputPath, //
+ "--classpaths=" + classpaths, //
+ "--langPackage=" + "java.lang", //
+ "--utilPackage=" + "java.util" //
+ });
}
}
diff --git a/spirit-tools/target/spirit-tools-2.1.30.pom b/spirit-tools/target/spirit-tools-2.1.30.pom
deleted file mode 100644
index 354d707bdd1c38a62ab76d129223976a52d3c960..0000000000000000000000000000000000000000
--- a/spirit-tools/target/spirit-tools-2.1.30.pom
+++ /dev/null
@@ -1,16 +0,0 @@
-
- 4.0.0
-
- com.gitee.chentaoah
- spirit-parent
- 2.1.30
-
- spirit-tools
- pom
-
- spirit-maven-plugin
- spirit-code-tools
-
-
\ No newline at end of file
diff --git a/spirit-tools/target/spirit-tools-2.1.30.pom.asc b/spirit-tools/target/spirit-tools-2.1.30.pom.asc
deleted file mode 100644
index a05ffbd4d465c7d5cfd39d174f4bab4948d5cf5e..0000000000000000000000000000000000000000
--- a/spirit-tools/target/spirit-tools-2.1.30.pom.asc
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN PGP SIGNATURE-----
-
-iQGzBAABCAAdFiEEqOc4k/2bIzSwX8nzS1qmeLEMVg4FAmClx50ACgkQS1qmeLEM
-Vg62dAv/YeqLwmGtIurdXFruO0tC17ntDmVWFq2ipq3YJZpA5jUk5DvV31mRySFC
-dWjsjym1YFl/bYjjTO+MK8kL+GpzfAPBZelD/GLc7QwI2YhiCkYHjA8vl73yA+dB
-V1G0OPyHD5ggog+UzrHOoglqdyyTALLVPn03Jm/sJRd8DGC7zu8PMPCln/1OZBWy
-gHsH76wGBzMvMmISGbTmqzQQXfBSn0ZK/JH1LchcrjJ55ihgtvBUhImNNBAhyS+d
-q+yQHuEqQDGC1SBq8h1BqMNE7I7Gbg3EhstuSIUKa5zDiTRIVx2iHzzDU9pyM5Zh
-3g3dmar0jF1Q8SqybwqeNQ1rPR3f+gQMUN4nDEZ2BHpO/aekYF5Uw6CUfqK2X+UY
-ehnKxP0StWYLXOrlrAMYTxeEFngad66XloheGiMf4yBGg7fhfBmGqPuUv2TR96Ut
-VeEG5g2ZKF4liERJeT6SJy6VMIuV77+wKXHStWvsUDP1Mx0fClXxhBgMM+u57US8
-UZIshZOp
-=hmsr
------END PGP SIGNATURE-----
diff --git a/spirit/lib/spirit-code-tools-2.1.30.jar b/spirit/lib/spirit-code-tools-2.1.30.jar
index c27c014b4568b2d5931d051c0482ffaed78420e3..370886d2196f366afa4e95a528d3339b4262f634 100644
Binary files a/spirit/lib/spirit-code-tools-2.1.30.jar and b/spirit/lib/spirit-code-tools-2.1.30.jar differ
diff --git a/spirit/lib/spirit-common-2.1.30.jar b/spirit/lib/spirit-common-2.1.30.jar
index d227df6489a53143bd19d0cef9754afc240eb8a3..ccc62a18030c1582b8d0d9f3df19a3e0d1f9b34f 100644
Binary files a/spirit/lib/spirit-common-2.1.30.jar and b/spirit/lib/spirit-common-2.1.30.jar differ
diff --git a/spirit/lib/spirit-core-class-2.1.30.jar b/spirit/lib/spirit-core-class-2.1.30.jar
index 8ef7c5b70290328d3706c41ac4f25d5c6594ce2f..959208985d93f71f00c434c0947602bb157d8548 100644
Binary files a/spirit/lib/spirit-core-class-2.1.30.jar and b/spirit/lib/spirit-core-class-2.1.30.jar differ
diff --git a/spirit/lib/spirit-core-compile-2.1.30.jar b/spirit/lib/spirit-core-compile-2.1.30.jar
index 0179841af3066feb6f160be264a1f34eee3248c2..71956bb8d988f4f13f6ba869b2278f3ac4007b4c 100644
Binary files a/spirit/lib/spirit-core-compile-2.1.30.jar and b/spirit/lib/spirit-core-compile-2.1.30.jar differ
diff --git a/spirit/lib/spirit-core-element-2.1.30.jar b/spirit/lib/spirit-core-element-2.1.30.jar
index e37a7ed92b09735873775a0ba7d670b2f25c1305..b232ce3591cfe44ca8da2458c0e4c6452b84f1af 100644
Binary files a/spirit/lib/spirit-core-element-2.1.30.jar and b/spirit/lib/spirit-core-element-2.1.30.jar differ
diff --git a/spirit/lib/spirit-core-lexer-2.1.30.jar b/spirit/lib/spirit-core-lexer-2.1.30.jar
index 376049334b9290dadaf28644fdfce31fff989360..a436ce24fb225add17fb605c8c0c61b2d5ac5609 100644
Binary files a/spirit/lib/spirit-core-lexer-2.1.30.jar and b/spirit/lib/spirit-core-lexer-2.1.30.jar differ
diff --git a/spirit/lib/spirit-output-java-2.1.30.jar b/spirit/lib/spirit-output-java-2.1.30.jar
index ed0dcf18deb9dc157f2dc7f290fcf32321d737aa..27fbaf16f2504919bff9db2aed7b843e20c64ec7 100644
Binary files a/spirit/lib/spirit-output-java-2.1.30.jar and b/spirit/lib/spirit-output-java-2.1.30.jar differ
diff --git a/spirit/lib/spirit-starter-java-2.1.30.jar b/spirit/lib/spirit-starter-java-2.1.30.jar
index cafa1707d3f9136551efa9dcd9ae0036181498f1..79efde16956ce537b558f3de6b4147505c25d6ea 100644
Binary files a/spirit/lib/spirit-starter-java-2.1.30.jar and b/spirit/lib/spirit-starter-java-2.1.30.jar differ
diff --git a/spirit/lib/spirit-stdlib-2.1.30.jar b/spirit/lib/spirit-stdlib-2.1.30.jar
index 4f75277f5929cdf2d7d2e7cd01a1742740329ad7..26886e24c740c9c17d8dba186e80d1212bac3d5c 100644
Binary files a/spirit/lib/spirit-stdlib-2.1.30.jar and b/spirit/lib/spirit-stdlib-2.1.30.jar differ
diff --git a/target/spirit-parent-2.1.30.pom b/target/spirit-parent-2.1.30.pom
deleted file mode 100644
index 9277799c661294fa72656d2a5db5f0e70f3072f5..0000000000000000000000000000000000000000
--- a/target/spirit-parent-2.1.30.pom
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
- 4.0.0
- com.gitee.chentaoah
- spirit-parent
- 2.1.30
- pom
-
- spirit
- A new programming language based on Java.
- https://gitee.com/chentaoah/spirit
-
-
-
- GNU General Public License
- http://www.gnu.org/licenses/gpl-3.0.txt
-
-
-
-
-
- chentaoah
- 609580885@qq.com
- gitee
- https://gitee.com
-
-
-
-
- scm:git:https://gitee.com/chentaoah/spirit.git
- scm:git:https://gitee.com/chentaoah/spirit.git
- https://gitee.com/chentaoah/spirit/tree/master
-
-
-
-
-
- spirit-stdlib
- spirit-common
- spirit-core
- spirit-output
- spirit-starter
- spirit-tools
- spirit-example
-
-
-
- UTF-8
- UTF-8
- 1.8
- 1.8
- 2.2.2.RELEASE
- 1.18.16
- 1.7.25
- 3.9
- 2.8.0
- 5.5.1
- 29.0-jre
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- true
-
- 2.22.2
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- 3.0.2
-
-
- org.apache.maven.plugins
- maven-deploy-plugin
- 2.8.2
-
-
-
-
-
-
-
- release
-
-
- ossrh
- https://s01.oss.sonatype.org/content/repositories/snapshots
-
-
- ossrh
- https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
-
-
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
- 2.2.1
-
-
- attach-sources
-
- jar-no-fork
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 2.9.1
-
-
- attach-javadocs
-
- jar
-
-
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- 1.6
-
-
- sign-artifacts
- verify
-
- sign
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/target/spirit-parent-2.1.30.pom.asc b/target/spirit-parent-2.1.30.pom.asc
deleted file mode 100644
index 09b4daa3bdaf902d13ace2e1fee92ae6c07b66eb..0000000000000000000000000000000000000000
--- a/target/spirit-parent-2.1.30.pom.asc
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN PGP SIGNATURE-----
-
-iQGzBAABCAAdFiEEqOc4k/2bIzSwX8nzS1qmeLEMVg4FAmClxz4ACgkQS1qmeLEM
-Vg6Mvwv/RkGD7cT3kgaK83GRLn0L7jR5Pl8LbxVj3xUOdZDjP0PzcDESvN7Jj7tc
-p9GcnmBT+gRjhmNFTBS/3/HLFWMJnMqKzOTu7/U7ilK22+iec4zMjRABgaZOkrTM
-YOhE1pBLvdOA9GPqtlEI+1cScVKKtN/dh6y2A8xxESm+6CqLcfRRn8pGmx5FTow7
-qpgV3mNr7qzZuwOYMH4o09hNJvfQOrWpEu+Z1330zMH40itvh4pZ+czFRubOcPj9
-F075frD/tunHN6tvfyV1tNrv0keq3XR4Vpt3Awc3l6okS2EC3S+ZAut769eUWQQ1
-pgl2K1841xLyEfRc8aNfWAcA5UMrlY9Gp+Gt/SACVQNzRD6+4MiCAhwPp+66CUkS
-7/QDviJvuk77omY0Oem0AYwgimynfi11lBCrTNVZ+/msCA+P41CBa7ph4gc7EXAm
-cIYLY57f4RHiSINrW8XmUKfjvKoo4FerkF8QOQPq6pkC/2GROp8AkSUbzUuj1uAV
-XvSNH+cb
-=v7z9
------END PGP SIGNATURE-----