diff --git a/mybatis-plus-join-annotation/src/main/java/com/github/yulichang/annotation/Table.java b/mybatis-plus-join-annotation/src/main/java/com/github/yulichang/annotation/Table.java
index 6dcc563..40fd263 100644
--- a/mybatis-plus-join-annotation/src/main/java/com/github/yulichang/annotation/Table.java
+++ b/mybatis-plus-join-annotation/src/main/java/com/github/yulichang/annotation/Table.java
@@ -18,12 +18,17 @@ import java.lang.annotation.Target;
*
加APT后缀并且大写 %SAPT
*
*
- * 支持Ognl语法字段说明
+ * 支持Ognl语法,字段说明
* Ognl上下文
*
* - className 类名
* - classPackage 包名
- * - util 工具类 stringHelper {@link com.github.yulichang.apt.OgnlRoot.StringHelper}
+ * -
+ * util 工具类 OgnlUtil {@link com.github.yulichang.processor.utils.OgnlUtil} ,
+ *
+ * github link
+ *
+ *
*
* 指定开头 Ognl# 这不是ognl语法,这是MPJ规定的 用于区分 ognl还是String.format
*
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/extension/apt/matedata/OgnlRoot.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/extension/apt/matedata/OgnlRoot.java
deleted file mode 100644
index baca2cf..0000000
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/extension/apt/matedata/OgnlRoot.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.github.yulichang.extension.apt.matedata;
-
-import lombok.Getter;
-
-import java.util.Objects;
-
-/**
- * apt ognl表达式上下文
- *
- * @author yulichang
- * @since 1.5.0
- */
-@Getter
-public class OgnlRoot {
-
- /**
- * 类名
- */
- private final String className;
-
- /**
- * 包名
- */
- private final String classPackage;
-
- private final StringHelper util = new StringHelper();
-
- public OgnlRoot(String className, String classPackage) {
- this.className = className;
- this.classPackage = classPackage;
- }
-
- @SuppressWarnings("unused")
- public static final class StringHelper {
- /**
- * 移除后缀
- *
- * @param str 原字符串
- * @param suffix 指定后缀
- */
- public String removeSuffix(String str, String suffix) {
- if (isBlank(str) || isBlank(suffix)) {
- return str;
- }
- if (str.endsWith(suffix)) {
- return str.substring(0, str.length() - suffix.length());
- }
- return str;
- }
-
- /**
- * 替换后缀
- *
- * @param str 原字符串
- * @param suffix 指定后缀
- * @param replacement 新后缀
- */
- public String replaceSuffix(String str, String suffix, String replacement) {
- if (isBlank(str)) {
- return str;
- }
- String rep = Objects.isNull(replacement) ? "" : replacement;
- if (isBlank(suffix)) {
- return str + rep;
- }
- if (str.endsWith(suffix)) {
- return str.substring(0, str.length() - suffix.length()) + rep;
- }
- return str;
- }
-
- /**
- * 获取上级包名
- *
- * @param pk 报名
- * @return 上级报名
- */
- public String getParentPackage(String pk) {
- if (pk.lastIndexOf(".") > -1) {
- return pk;
- }
- return pk.substring(0, pk.lastIndexOf('.'));
- }
-
- private boolean isBlank(String str) {
- return str == null || str.trim().isEmpty();
- }
- }
-}
diff --git a/mybatis-plus-join-test/test-join/pom.xml b/mybatis-plus-join-test/test-join/pom.xml
index a7c4945..1f9133f 100644
--- a/mybatis-plus-join-test/test-join/pom.xml
+++ b/mybatis-plus-join-test/test-join/pom.xml
@@ -34,11 +34,29 @@
com.fasterxml.jackson.core
jackson-core
-
-
- com.github.yulichang
- mybatis-plus-join-processor
- ${revision}
-
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+
+
+ com.github.yulichang
+ mybatis-plus-join-processor
+ ${revision}
+
+
+ org.projectlombok
+ lombok
+ 1.18.34
+
+
+
+
+
+
diff --git a/plugin/mybatis-plus-join-processor/pom.xml b/plugin/mybatis-plus-join-processor/pom.xml
index f6db487..6ec0127 100644
--- a/plugin/mybatis-plus-join-processor/pom.xml
+++ b/plugin/mybatis-plus-join-processor/pom.xml
@@ -16,14 +16,17 @@
- com.github.yulichang
- mybatis-plus-join-core
- ${revision}
+ ognl
+ ognl
+ 3.4.3
+ compile
+ true
- com.baomidou
- mybatis-plus-extension
- ${mybatis.plus.version}
+ org.javassist
+ javassist
+ 3.30.2-GA
+ compile
true
@@ -48,6 +51,7 @@
+ org.apache.maven.plugins
maven-compiler-plugin
3.13.0
@@ -56,6 +60,55 @@
1.8
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.6.0
+
+
+
+ shade
+
+ package
+
+ false
+ true
+
+
+ ognl:ognl
+ org.javassist:javassist
+
+
+
+
+ ognl:ognl
+
+ META-INF/MANIFEST.MF
+
+
+
+ org.javassist:javassist
+
+ META-INF/MANIFEST.MF
+
+
+
+
+
+ ognl
+ com.github.yulichang.processor.ognl
+
+
+ javassist
+ com.github.yulichang.processor.javassist
+
+
+ true
+
+
+
+
\ No newline at end of file
diff --git a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/EntityProcessor.java b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/EntityProcessor.java
index 7820dbb..804dcfa 100644
--- a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/EntityProcessor.java
+++ b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/EntityProcessor.java
@@ -1,9 +1,5 @@
package com.github.yulichang.processor;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.github.yulichang.annotation.Table;
-import com.github.yulichang.extension.apt.matedata.BaseColumn;
-import com.github.yulichang.extension.apt.matedata.Column;
import com.github.yulichang.processor.matedata.Conf;
import com.github.yulichang.processor.matedata.FieldInfo;
import com.github.yulichang.processor.matedata.TableInfo;
@@ -31,6 +27,13 @@ import java.util.stream.Collectors;
*/
public class EntityProcessor extends AbstractProcessor {
+ private static final String TABLE = "com.github.yulichang.annotation.Table";
+ private static final String TABLE_FIELD = "com.baomidou.mybatisplus.annotation.TableField";
+ private static final String TABLE_FIELD_EXIST = "exist";
+
+ private static final String BASE_COLUMN = "com.github.yulichang.extension.apt.matedata.BaseColumn";
+ private static final String COLUMN = "com.github.yulichang.extension.apt.matedata.Column";
+
private Elements elementUtils;
private Types typeUtils;
private Messager messager;
@@ -53,13 +56,38 @@ public class EntityProcessor extends AbstractProcessor {
@Override
public boolean process(Set extends TypeElement> annotations, RoundEnvironment roundEnv) {
if (!roundEnv.processingOver()) {
- TypeElement table = annotations.stream().filter(i -> i.toString().equals(Table.class.getName())).findFirst().orElse(null);
- if (table != null) {
+ if (!globalConf.isEnable()) {
+ return false;
+ }
+ Set extends Element> tables = roundEnv.getRootElements().stream().filter(i -> {
+ List extends AnnotationMirror> mirrors = i.getAnnotationMirrors();
+ if (mirrors != null && !mirrors.isEmpty()) {
+ if (mirrors.stream().anyMatch(m -> m.getAnnotationType().toString().equals(TABLE))) {
+ return true;
+ }
+ if (StringUtil.isNotEmpty(globalConf.getScanAnno())) {
+ if (mirrors.stream().anyMatch(m -> m.getAnnotationType().toString().equals(globalConf.getScanAnno()))) {
+ return true;
+ }
+ }
+ }
+ if (StringUtil.isNotEmpty(globalConf.getScanPackage())) {
+ if (i.getKind() != ElementKind.CLASS) {
+ return false;
+ }
+ if (i.getModifiers().contains(Modifier.ABSTRACT)) {
+ return false;
+ }
+ String pkg = elementUtils.getPackageOf(i).getQualifiedName().toString();
+ String[] scanPackages = globalConf.getScanPackage().split(",");
+ return Arrays.stream(scanPackages).anyMatch(s -> StringUtil.matches(pkg, s));
+ }
+ return false;
+ }).collect(Collectors.toSet());
+ if (!tables.isEmpty()) {
note("mybatis plus join processor start");
- Set extends Element> tables = roundEnv.getElementsAnnotatedWith(table);
tables.stream().filter(f -> f instanceof TypeElement)
- .map(f -> (TypeElement) f).map(this::createColumn)
- .filter(Objects::nonNull).filter(TableInfo::isGenTables)
+ .map(f -> (TypeElement) f).map(this::createColumn).filter(TableInfo::isGenTables)
.collect(Collectors.groupingBy(TableInfo::getTagTablesPackageName))
.forEach(this::createTables);
}
@@ -71,7 +99,10 @@ public class EntityProcessor extends AbstractProcessor {
@Override
public Set getSupportedAnnotationTypes() {
Set supportedAnnotationTypes = new HashSet<>();
- supportedAnnotationTypes.add(Table.class.getCanonicalName());
+ supportedAnnotationTypes.add(TABLE);
+ if (StringUtil.isNotEmpty(globalConf.getScanAnno())) {
+ supportedAnnotationTypes.add(globalConf.getScanAnno());
+ }
return supportedAnnotationTypes;
}
@@ -85,19 +116,13 @@ public class EntityProcessor extends AbstractProcessor {
*/
private TableInfo createColumn(TypeElement element) {
AnnotationMirror tb = element.getAnnotationMirrors().stream().filter(a ->
- a.getAnnotationType().asElement().toString().equals(Table.class.getName())).findFirst().orElse(null);
- Table table = element.getAnnotation(Table.class);
- if (tb == null) {
- return null;
- }
- Set keySet = tb.getElementValues().keySet().stream().map(k ->
- k.getSimpleName().toString()).collect(Collectors.toSet());
- Conf conf = Conf.getConf(globalConf, table, keySet);
+ a.getAnnotationType().asElement().toString().equals(TABLE)).findFirst().orElse(null);
+ Conf conf = Optional.ofNullable(tb).map(t -> Conf.getConf(globalConf, t.getElementValues())).orElse(globalConf);
TableInfo tableInfo = new TableInfo(conf, element.toString(), element.getSimpleName().toString());
tableInfo.setClassPackage(elementUtils.getPackageOf(element).getQualifiedName().toString());
tableInfo.setClassComment(elementUtils.getDocComment(element));
- Set fieldInfos = new HashSet<>();
+ List fieldInfos = new ArrayList<>();
TypeElement currElement = element;
do {
@@ -106,8 +131,15 @@ public class EntityProcessor extends AbstractProcessor {
e.getKind() == ElementKind.FIELD && !e.getModifiers().contains(Modifier.STATIC))
.filter(e -> {
// 过滤 exist = false 的字段
- TableField tableField = e.getAnnotation(TableField.class);
- return tableField == null || tableField.exist();
+ AnnotationMirror tableField = e.getAnnotationMirrors().stream().filter(f ->
+ TABLE_FIELD.equals(f.getAnnotationType().toString())).findFirst().orElse(null);
+ if (tableField != null) {
+ Map propMap = tableField.getElementValues().entrySet().stream()
+ .collect(Collectors.toMap(entry -> entry.getKey().getSimpleName().toString(), entry -> entry.getValue().getValue()));
+ Object exist = propMap.get(TABLE_FIELD_EXIST);
+ return exist == null || (boolean) exist;
+ }
+ return true;
})
.map(e -> new FieldInfo(e.toString(), elementUtils.getDocComment(e))).collect(Collectors.toList()));
currElement = (TypeElement) typeUtils.asElement(currElement.getSuperclass());
@@ -118,8 +150,8 @@ public class EntityProcessor extends AbstractProcessor {
StringBuilderHelper content = new StringBuilderHelper(tableInfo)
.addPackage(tableInfo.getTagClassPackage())
.newLine()
- .addImport(true, BaseColumn.class.getName())
- .addImport(true, Column.class.getName())
+ .addImport(true, BASE_COLUMN)
+ .addImport(true, COLUMN)
.addImport(true, tableInfo.getClassName())
.newLine(tableInfo.isCache())
.addImport(tableInfo.isCache(), Map.class.getName())
@@ -127,7 +159,7 @@ public class EntityProcessor extends AbstractProcessor {
.addImport(tableInfo.isCache(), ConcurrentHashMap.class.getName())
.newLine()
.addClass(tableInfo.getClassComment(), tableInfo.getTagClassName(),
- BaseColumn.class.getSimpleName() + "<" + tableInfo.getSimpleClassName() + ">",
+ StringUtil.getSimpleName(BASE_COLUMN) + "<" + tableInfo.getSimpleClassName() + ">",
c -> c
.addConstructor()
.addFields()
diff --git a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/Conf.java b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/Conf.java
index 3f2f4c6..5dce1e6 100644
--- a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/Conf.java
+++ b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/Conf.java
@@ -1,19 +1,18 @@
package com.github.yulichang.processor.matedata;
-import com.github.yulichang.annotation.Table;
-
import javax.annotation.processing.Filer;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.ExecutableElement;
import javax.tools.FileObject;
import javax.tools.StandardLocation;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
-import java.util.Collection;
+import java.util.Map;
import java.util.Properties;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
-import java.util.function.Function;
public class Conf {
@@ -24,6 +23,10 @@ public class Conf {
private String tablesClassName = "%S";
private boolean cache = true;
+ private boolean enable = true;
+ private String scanAnno = "";
+ private String scanPackage = "";
+
private boolean initFlag = false;
private Conf(Conf conf) {
@@ -34,6 +37,10 @@ public class Conf {
this.tablesClassName = conf.tablesClassName;
this.initFlag = conf.initFlag;
this.cache = conf.cache;
+
+ this.enable = conf.enable;
+ this.scanAnno = conf.scanAnno;
+ this.scanPackage = conf.scanPackage;
}
@@ -76,14 +83,17 @@ public class Conf {
this.tablasClassPackage = properties.getOrDefault("tablasClassPackage", this.tablasClassPackage).toString();
this.tablesClassName = properties.getOrDefault("tablesClassName", this.tablesClassName).toString();
this.cache = Boolean.parseBoolean(properties.getOrDefault("cache", this.cache).toString());
+ this.enable = Boolean.parseBoolean(properties.getOrDefault("enable", this.enable).toString());
+ this.scanAnno = properties.getOrDefault("scanAnno", this.scanAnno).toString();
+ this.scanPackage = properties.getOrDefault("scanPackage", this.scanPackage).toString();
}
- public static Conf getConf(Conf globalConf, Table table, Collection keys) {
- if (keys == null || keys.isEmpty()) {
+ public static Conf getConf(Conf globalConf, Map extends ExecutableElement, ? extends AnnotationValue> elementMap) {
+ if (elementMap == null || elementMap.isEmpty()) {
return globalConf;
}
Conf conf = new Conf(globalConf);
- keys.forEach(key -> ConfItem.doIt(conf, key, table));
+ elementMap.forEach((k, v) -> ConfItem.doIt(conf, k.getSimpleName().toString(), v));
return conf;
}
@@ -135,29 +145,38 @@ public class Conf {
this.cache = cache;
}
+ public String getScanAnno() {
+ return scanAnno;
+ }
+
+ public String getScanPackage() {
+ return scanPackage;
+ }
+
+ public boolean isEnable() {
+ return enable;
+ }
+
public enum ConfItem {
- className("value", Table::value, (c, v) -> c.setClassName(v.toString())),
- packageName("classPackage", Table::classPackage, (c, v) -> c.setClassPackage(v.toString())),
- genTables("genTables", Table::genTables, (c, v) -> c.setGenTables((boolean) v)),
- tablasPackageName("tablesClassPackage", Table::tablesClassPackage, (c, v) -> c.setTablasClassPackage(v.toString())),
- tablesName("tablesClassName", Table::tablesClassName, (c, v) -> c.setTablesClassName(v.toString())),
- cache("cache", Table::cache, (c, v) -> c.setCache((boolean) v));
+ className("value", (c, v) -> c.setClassName(v.toString())),
+ packageName("classPackage", (c, v) -> c.setClassPackage(v.toString())),
+ genTables("genTables", (c, v) -> c.setGenTables((boolean) v)),
+ tablasPackageName("tablesClassPackage", (c, v) -> c.setTablasClassPackage(v.toString())),
+ tablesName("tablesClassName", (c, v) -> c.setTablesClassName(v.toString())),
+ cache("cache", (c, v) -> c.setCache((boolean) v));
private final String action;
- private final Function annoVal;
-
private final BiConsumer doIt;
- ConfItem(String action, Function annoVal, BiConsumer doIt) {
+ ConfItem(String action, BiConsumer doIt) {
this.action = action;
- this.annoVal = annoVal;
this.doIt = doIt;
}
- public static void doIt(Conf tableConf, String act, Table anno) {
- Arrays.stream(ConfItem.values()).filter(f -> f.action.equals(act)).findFirst()
- .ifPresent(item -> item.doIt.accept(tableConf, item.annoVal.apply(anno)));
+ public static void doIt(Conf tableConf, String key, AnnotationValue value) {
+ Arrays.stream(ConfItem.values()).filter(f -> f.action.equals(key)).findFirst()
+ .ifPresent(item -> item.doIt.accept(tableConf, value.getValue()));
}
}
@@ -169,6 +188,9 @@ public class Conf {
", genTables=" + genTables +
", tablasClassPackage='" + tablasClassPackage + '\'' +
", tablesClassName='" + tablesClassName + '\'' +
+ ", cache=" + cache +
+ ", scanAnno='" + scanAnno + '\'' +
+ ", scanPackage='" + scanPackage + '\'' +
", initFlag=" + initFlag +
'}';
}
diff --git a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/OgnlRoot.java b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/OgnlRoot.java
new file mode 100644
index 0000000..f295620
--- /dev/null
+++ b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/OgnlRoot.java
@@ -0,0 +1,42 @@
+package com.github.yulichang.processor.matedata;
+
+import com.github.yulichang.processor.utils.OgnlUtil;
+
+/**
+ * apt ognl表达式上下文
+ *
+ * @author yulichang
+ * @since 1.5.0
+ */
+@SuppressWarnings("unused")
+public class OgnlRoot {
+
+ /**
+ * 类名
+ */
+ private final String className;
+
+ /**
+ * 包名
+ */
+ private final String classPackage;
+
+ private final static OgnlUtil util = new OgnlUtil();
+
+ public OgnlRoot(String className, String classPackage) {
+ this.className = className;
+ this.classPackage = classPackage;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ public String getClassPackage() {
+ return classPackage;
+ }
+
+ public OgnlUtil getUtil() {
+ return util;
+ }
+}
diff --git a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/TableInfo.java b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/TableInfo.java
index d7ee8a4..c9d9e02 100644
--- a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/TableInfo.java
+++ b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/matedata/TableInfo.java
@@ -1,12 +1,10 @@
package com.github.yulichang.processor.matedata;
-import com.github.yulichang.extension.apt.matedata.OgnlRoot;
-import org.apache.ibatis.builder.BuilderException;
-import org.apache.ibatis.ognl.Ognl;
-import org.apache.ibatis.ognl.OgnlContext;
-import org.apache.ibatis.ognl.OgnlException;
+import ognl.Ognl;
+import ognl.OgnlContext;
+import ognl.OgnlException;
-import java.util.Set;
+import java.util.List;
/**
* @author yulichang
@@ -28,7 +26,7 @@ public class TableInfo {
private final Conf conf;
- private Set fields;
+ private List fields;
private String tagClassName;
private String tagPackageName;
@@ -90,7 +88,7 @@ public class TableInfo {
try {
return Ognl.getValue(ognl, context, context.getRoot()).toString();
} catch (OgnlException e) {
- throw new BuilderException("Error evaluating expression '" + ognl + "'. Cause: " + e, e);
+ throw new RuntimeException("Error evaluating expression '" + ognl + "'. Cause: " + e, e);
}
} else {
tag = String.format(expression, source);
@@ -130,11 +128,11 @@ public class TableInfo {
return this.conf.isCache();
}
- public Set getFields() {
+ public List getFields() {
return fields;
}
- public void setFields(Set fields) {
+ public void setFields(List fields) {
this.fields = fields;
}
diff --git a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/utils/OgnlUtil.java b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/utils/OgnlUtil.java
new file mode 100644
index 0000000..f52717e
--- /dev/null
+++ b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/utils/OgnlUtil.java
@@ -0,0 +1,60 @@
+package com.github.yulichang.processor.utils;
+
+import java.util.Objects;
+
+@SuppressWarnings("unused")
+public final class OgnlUtil {
+ /**
+ * 移除后缀
+ *
+ * @param str 原字符串
+ * @param suffix 指定后缀
+ */
+ public String removeSuffix(String str, String suffix) {
+ if (isBlank(str) || isBlank(suffix)) {
+ return str;
+ }
+ if (str.endsWith(suffix)) {
+ return str.substring(0, str.length() - suffix.length());
+ }
+ return str;
+ }
+
+ /**
+ * 替换后缀
+ *
+ * @param str 原字符串
+ * @param suffix 指定后缀
+ * @param replacement 新后缀
+ */
+ public String replaceSuffix(String str, String suffix, String replacement) {
+ if (isBlank(str)) {
+ return str;
+ }
+ String rep = Objects.isNull(replacement) ? "" : replacement;
+ if (isBlank(suffix)) {
+ return str + rep;
+ }
+ if (str.endsWith(suffix)) {
+ return str.substring(0, str.length() - suffix.length()) + rep;
+ }
+ return str;
+ }
+
+ /**
+ * 获取上级包名
+ *
+ * @param pk 报名
+ * @return 上级报名
+ */
+ public String getParentPackage(String pk) {
+ if (pk.lastIndexOf(".") > -1) {
+ return pk;
+ }
+ return pk.substring(0, pk.lastIndexOf('.'));
+ }
+
+ private boolean isBlank(String str) {
+ return str == null || str.trim().isEmpty();
+ }
+}
diff --git a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/utils/StringUtil.java b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/utils/StringUtil.java
index f8d9f81..ca0ebfa 100644
--- a/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/utils/StringUtil.java
+++ b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/utils/StringUtil.java
@@ -1,5 +1,8 @@
package com.github.yulichang.processor.utils;
+import java.util.Arrays;
+import java.util.stream.Collectors;
+
public final class StringUtil {
public static boolean isEmpty(String str) {
@@ -9,4 +12,27 @@ public final class StringUtil {
public static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
+
+ public static String getSimpleName(String fullName) {
+ if (isEmpty(fullName) && fullName.lastIndexOf(".") == -1) {
+ return fullName;
+ }
+ return fullName.substring(fullName.lastIndexOf(".") + 1);
+ }
+
+ public static boolean matches(String packageName, String packageRegex) {
+ if (packageRegex.lastIndexOf("*") != -1) {
+ String regex = Arrays.stream(packageRegex.split("\\.")).map(r -> {
+ if (r.equals("**")) {
+ return "[A-Za-z0-9_.]*";
+ } else if (r.equals("*")) {
+ return "\\w*";
+ } else {
+ return r;
+ }
+ }).collect(Collectors.joining("\\."));
+ return packageName.matches(regex);
+ }
+ return packageRegex.equals(packageName);
+ }
}