diff --git a/plugin/mybatis-plus-join-processor/pom.xml b/plugin/mybatis-plus-join-processor/pom.xml index 2b89d99..6ec0127 100644 --- a/plugin/mybatis-plus-join-processor/pom.xml +++ b/plugin/mybatis-plus-join-processor/pom.xml @@ -109,25 +109,6 @@ - - org.apache.maven.plugins - maven-site-plugin - 4.0.0-M14 - - default,es,ja,fr,zh_CN,ko - - - - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - com.github.yulichang.processor.ognl.* - com.github.yulichang.processor.javassist.* - - - \ 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 a0a136e..6e18b65 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 @@ -56,13 +56,35 @@ public class EntityProcessor extends AbstractProcessor { @Override public boolean process(Set annotations, RoundEnvironment roundEnv) { if (!roundEnv.processingOver()) { - TypeElement table = annotations.stream().filter(i -> i.toString().equals(TABLE)).findFirst().orElse(null); - if (table != null) { + Set tables = roundEnv.getRootElements().stream().filter(i -> { + List 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 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); } @@ -75,6 +97,9 @@ public class EntityProcessor extends AbstractProcessor { public Set getSupportedAnnotationTypes() { Set supportedAnnotationTypes = new HashSet<>(); supportedAnnotationTypes.add(TABLE); + if (StringUtil.isNotEmpty(globalConf.getScanAnno())) { + supportedAnnotationTypes.add(globalConf.getScanAnno()); + } return supportedAnnotationTypes; } @@ -89,10 +114,7 @@ public class EntityProcessor extends AbstractProcessor { private TableInfo createColumn(TypeElement element) { AnnotationMirror tb = element.getAnnotationMirrors().stream().filter(a -> a.getAnnotationType().asElement().toString().equals(TABLE)).findFirst().orElse(null); - if (tb == null) { - return null; - } - Conf conf = Conf.getConf(globalConf, tb.getElementValues()); + 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)); 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 d909bbf..cc92bec 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 @@ -23,6 +23,9 @@ public class Conf { private String tablesClassName = "%S"; private boolean cache = true; + private String scanAnno = ""; + private String scanPackage = ""; + private boolean initFlag = false; private Conf(Conf conf) { @@ -33,6 +36,9 @@ public class Conf { this.tablesClassName = conf.tablesClassName; this.initFlag = conf.initFlag; this.cache = conf.cache; + + this.scanAnno = conf.scanAnno; + this.scanPackage = conf.scanPackage; } @@ -75,6 +81,8 @@ 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.scanAnno = properties.getOrDefault("scanAnno", this.scanAnno).toString(); + this.scanPackage = properties.getOrDefault("scanPackage", this.scanPackage).toString(); } public static Conf getConf(Conf globalConf, Map elementMap) { @@ -134,6 +142,14 @@ public class Conf { this.cache = cache; } + public String getScanAnno() { + return scanAnno; + } + + public String getScanPackage() { + return scanPackage; + } + public enum ConfItem { className("value", (c, v) -> c.setClassName(v.toString())), packageName("classPackage", (c, v) -> c.setClassPackage(v.toString())), @@ -165,6 +181,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/utils/StringUtil.java b/plugin/mybatis-plus-join-processor/src/main/java/com/github/yulichang/processor/utils/StringUtil.java index 834fded..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) { @@ -16,4 +19,20 @@ public final class StringUtil { } 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); + } }