From 386cbf9597e0b4c8a478e3d18f3e9457fcf32cbf Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Wed, 12 Jun 2024 11:05:40 +0800 Subject: [PATCH] =?UTF-8?q?update(REQ-2516)=20-=20=E6=B5=8B=E8=AF=95=20Jav?= =?UTF-8?q?aparser=20=E7=94=9F=E6=88=90=E4=BB=A3=E7=A0=81=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=B9=B6=E6=8E=A7=E5=88=B6=20Maven?= =?UTF-8?q?=20=E5=9C=A8=E6=89=93=E5=8C=85=E6=97=B6=EF=BC=8C=E8=83=BD?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=85=88=E7=94=9F=E6=88=90=EF=BC=8C=E5=86=8D?= =?UTF-8?q?=20package=20starter=20=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../client/feign/bpmn/ProcessModelApi.java | 2 +- .../server/controller/web/TestController.java | 10 +-- .../web/bpmn/BpmnProcessModelController.java | 2 +- .../StarterFeignClientConfiguration.java | 7 +- workflow-engine-support/pom.xml | 29 ++++++-- .../workflow/support/api/CodeGenerator.java | 17 +++++ ...or.java => CoreServiceCodeGeneration.java} | 43 +++++------- ....java => ManageServiceCodeGeneration.java} | 66 ++++++++++--------- 9 files changed, 105 insertions(+), 73 deletions(-) create mode 100644 workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CodeGenerator.java rename workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/{CoreServiceCodeGenerator.java => CoreServiceCodeGeneration.java} (83%) rename workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/{ManageServiceCodeGenerator.java => ManageServiceCodeGeneration.java} (73%) diff --git a/pom.xml b/pom.xml index 2947d97f2..5ebad126a 100644 --- a/pom.xml +++ b/pom.xml @@ -159,7 +159,7 @@ workflow-engine-common workflow-engine-core workflow-engine-server - workflow-engine-spring-boot-starter workflow-engine-support + workflow-engine-spring-boot-starter diff --git a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessModelApi.java b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessModelApi.java index 0da4f77d0..f3eca0f22 100644 --- a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessModelApi.java +++ b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessModelApi.java @@ -172,5 +172,5 @@ public interface ProcessModelApi { */ @Operation(summary = "查询模型的租户集合") @GetMapping("/api/process/model/tenant/ids") - CommonResponse> getTenantIds(); + CommonResponse> getModelTenantIds(); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java index a15efae9b..f8e0c34e7 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java @@ -14,6 +14,7 @@ import cn.axzo.workflow.core.service.BpmnProcessInstanceService; import cn.axzo.workflow.core.service.support.FlowNodeForecastService; import cn.axzo.workflow.server.common.annotation.RepeatSubmit; import cn.axzo.workflow.starter.api.WorkflowCoreService; +import cn.axzo.workflow.starter.api.WorkflowManageService; import cn.azxo.framework.common.model.CommonResponse; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.FlowElement; @@ -69,8 +70,8 @@ public class TestController { private BpmnProcessInstanceService bpmnProcessInstanceService; @Autowired private WorkflowCoreService workflowCoreService; -// @Autowired -// private WorkflowManageService workflowCoreService; + @Autowired + private WorkflowManageService workflowManageService; @RepeatSubmit @GetMapping("/test") @@ -247,8 +248,7 @@ public class TestController { @GetMapping("/tenant/get/ids") public CommonResponse> test11() { - workflowCoreService.sync(); -// List tenantIds = workflowCoreService.getTenantIds(); - return CommonResponse.success(); + List tenantIds = workflowManageService.sync().getTenantIds(); + return CommonResponse.success(tenantIds); } } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java index 9d92c3dc7..2924e846b 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java @@ -274,7 +274,7 @@ public class BpmnProcessModelController implements ProcessModelApi { @Operation(summary = "查询模型的租户集合") @GetMapping("/tenant/ids") @Override - public CommonResponse> getTenantIds() { + public CommonResponse> getModelTenantIds() { log.info("查询模型的租户集合getTenantIds"); return success(bpmnProcessModelService.getTenantIds()); } diff --git a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java index 5343fc609..0c6b6e763 100644 --- a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java +++ b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java @@ -7,7 +7,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Configuration; /** - * TODO + * 根据参数动态实例化可用 Bean * * @author wangli * @since 2024/6/11 21:26 @@ -16,16 +16,13 @@ import org.springframework.context.annotation.Configuration; public class StarterFeignClientConfiguration { @Configuration(proxyBeanMethods = false) - @ConditionalOnProperty(prefix = "workflow.engine.starter", value = "manageable", havingValue = "true", matchIfMissing = true) @EnableFeignClients(clients = WorkflowCoreService.class) public static class WorkflowCoreServiceClient { - } @Configuration(proxyBeanMethods = false) - @ConditionalOnProperty(prefix = "workflow.engine.starter", value = "manageable", havingValue = "false") + @ConditionalOnProperty(prefix = "workflow.engine.starter", value = "manageable", havingValue = "true") @EnableFeignClients(clients = WorkflowManageService.class) public static class WorkflowManageServiceClient { - } } diff --git a/workflow-engine-support/pom.xml b/workflow-engine-support/pom.xml index 6a40185c4..25007a6f7 100644 --- a/workflow-engine-support/pom.xml +++ b/workflow-engine-support/pom.xml @@ -15,9 +15,30 @@ com.github.javaparser javaparser-core - - cn.axzo.workflow - workflow-engine-spring-boot-starter - + + + + org.codehaus.mojo + exec-maven-plugin + 3.3.0 + + + run-custom-code + process-classes + + java + + + cn.axzo.workflow.support.api.CodeGenerator + + + + compile + + + + + + diff --git a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CodeGenerator.java b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CodeGenerator.java new file mode 100644 index 000000000..3f3861f92 --- /dev/null +++ b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CodeGenerator.java @@ -0,0 +1,17 @@ +package cn.axzo.workflow.support.api; + +/** + * Maven plugin execution entrance + * + * @author wangli + * @since 2024/6/12 10:56 + */ +public class CodeGenerator { + + public static void main(String[] args) throws Exception { + + CoreServiceCodeGeneration.generate(); + ManageServiceCodeGeneration.generate(); + + } +} diff --git a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGenerator.java b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGeneration.java similarity index 83% rename from workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGenerator.java rename to workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGeneration.java index c56d3127b..c313d1728 100644 --- a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGenerator.java +++ b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGeneration.java @@ -1,9 +1,5 @@ package cn.axzo.workflow.support.api; -import cn.axzo.workflow.client.config.WorkflowEngineClientAutoConfiguration; -import cn.axzo.workflow.common.annotation.Manageable; -import cn.axzo.workflow.starter.WorkflowEngineStarterAutoConfiguration; -import cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration; import com.github.javaparser.ParserConfiguration; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.ImportDeclaration; @@ -24,10 +20,7 @@ import com.github.javaparser.ast.type.ClassOrInterfaceType; import com.github.javaparser.ast.type.Type; import com.github.javaparser.printer.DefaultPrettyPrinter; import com.github.javaparser.printer.Printer; -import com.github.javaparser.utils.CodeGenerationUtils; import com.github.javaparser.utils.SourceRoot; -import lombok.SneakyThrows; -import org.springframework.cloud.openfeign.FeignClient; import java.io.FileWriter; import java.io.IOException; @@ -42,21 +35,19 @@ import java.util.Optional; * @author wangli * @since 2024/6/7 17:14 */ -public class CoreServiceCodeGenerator { +public class CoreServiceCodeGeneration { - @SneakyThrows - public static void main(String[] args) { + public static void generate() throws Exception { String newClassName = "WorkflowCoreService"; - CompilationUnit originFile = parseOriginFile(newClassName); - +// CompilationUnit originFile = parseOriginFile(newClassName); CompilationUnit testGeneric = genericCode("cn.axzo.workflow.starter.api", newClassName); writeToStarter(testGeneric, newClassName); } - @SneakyThrows - private static CompilationUnit parseOriginFile(String newClassName) { - Path sourceCodeRoot = CodeGenerationUtils.mavenModuleRoot(WorkflowEngineStarterAutoConfiguration.class).resolve("src/main/java/cn/axzo/workflow/starter/api/"); + private static CompilationUnit parseOriginFile(String newClassName) throws Exception { + String projectRootDir = System.getProperty("user.dir"); + Path sourceCodeRoot = Paths.get(projectRootDir, "/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/"); SourceRoot sourceRoot = new SourceRoot(sourceCodeRoot); sourceRoot.getParserConfiguration().setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_8); Printer printer = new DefaultPrettyPrinter(); @@ -84,7 +75,7 @@ public class CoreServiceCodeGenerator { } } - public static CompilationUnit genericCode(String pkg, String newClassName) { + private static CompilationUnit genericCode(String pkg, String newClassName) throws Exception { CompilationUnit cu = new CompilationUnit(pkg); ClassOrInterfaceDeclaration interfaceDeclaration = setCommon(cu, newClassName); @@ -97,13 +88,13 @@ public class CoreServiceCodeGenerator { MethodDeclaration sync = createDefaultMethod("sync", interfaceDeclaration); sync.setJavadocComment("强制使用‘同步’模式调用该方法,请在调用真实方法前调用该方法\r\n" + "
\r\n" +
-                "workflowCoreService.sync().createProcessInstance();\r\n" +
+                "  workflowCoreService.sync().createProcessInstance();\r\n" +
                 "
"); MethodDeclaration async = createDefaultMethod("async", interfaceDeclaration); sync.setJavadocComment("强制使用‘异步’模式调用该方法,请在调用真实方法前调用该方法\r\n" + "
\r\n" +
-                "workflowCoreService.async().createProcessInstance();\r\n" +
+                "  workflowCoreService.async().createProcessInstance();\r\n" +
                 "
"); } @@ -129,9 +120,9 @@ public class CoreServiceCodeGenerator { return methodDeclaration; } - @SneakyThrows - private static void addMethods(ClassOrInterfaceDeclaration interfaceDeclaration, CompilationUnit cu) { - Path sourceCodeRoot = CodeGenerationUtils.mavenModuleRoot(WorkflowEngineClientAutoConfiguration.class).resolve("src/main/java/cn/axzo/workflow/client/feign/"); + private static void addMethods(ClassOrInterfaceDeclaration interfaceDeclaration, CompilationUnit cu) throws Exception { + String projectRootDir = System.getProperty("user.dir"); + Path sourceCodeRoot = Paths.get(projectRootDir, "/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/"); SourceRoot sourceRoot = new SourceRoot(sourceCodeRoot); sourceRoot.getParserConfiguration().setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_8); Printer printer = new DefaultPrettyPrinter(); @@ -141,13 +132,13 @@ public class CoreServiceCodeGenerator { List compilationUnits = sourceRoot.getCompilationUnits(); NodeList> targetMethods = interfaceDeclaration.getMembers(); for (CompilationUnit apiCU : compilationUnits) { - if (!apiCU.getPrimaryType().filter(e -> e.getAnnotationByClass(Manageable.class).isPresent()).isPresent()) { + if (!apiCU.getPrimaryType().filter(e -> e.getAnnotationByName("Manageable").isPresent()).isPresent()) { addImports(apiCU, cu); // 类上含有 @Manageable,不进行解析 String interfaceName = apiCU.getPrimaryTypeName().get(); List methods = apiCU.getInterfaceByName(interfaceName).get().findAll(MethodDeclaration.class); for (MethodDeclaration method : methods) { - if (!method.getAnnotationByClass(Manageable.class).isPresent()) { + if (!method.getAnnotationByName("Manageable").isPresent()) { MethodDeclaration methodDeclaration = method.clone(); methodDeclaration.setType(changeReturnType(methodDeclaration.getType())); targetMethods.add(methodDeclaration); @@ -177,10 +168,10 @@ public class CoreServiceCodeGenerator { private static ClassOrInterfaceDeclaration setCommon(CompilationUnit cu, String newClassName) { ClassOrInterfaceDeclaration classOrInterfaceDeclaration = cu.addInterface(newClassName).setPublic(true); classOrInterfaceDeclaration.setJavadocComment("Workflow Engine Starter Core Service"); - classOrInterfaceDeclaration.addAndGetAnnotation(FeignClient.class) - .addPair("name", new StringLiteralExpr("workflow-engine-starter")) + classOrInterfaceDeclaration.addAndGetAnnotation("FeignClient") + .addPair("name", new StringLiteralExpr("workflow-engine-starter-core")) .addPair("url", new StringLiteralExpr("${axzo.service.workflow-engine:workflow-engine:8080}")) - .addPair("configuration", new ClassExpr(new ClassOrInterfaceType(null, WorkflowEngineStarterFeignConfiguration.class.getSimpleName()))); + .addPair("configuration", new ClassExpr(new ClassOrInterfaceType("WorkflowEngineStarterFeignConfiguration"))); cu.addImport("cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration", false, false); cu.addImport("cn.axzo.workflow.common.util.ThreadUtil", false, false); cu.addImport("cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC", true, false); diff --git a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGenerator.java b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGeneration.java similarity index 73% rename from workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGenerator.java rename to workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGeneration.java index 00fb79bcb..ffa4a7831 100644 --- a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGenerator.java +++ b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGeneration.java @@ -1,8 +1,5 @@ package cn.axzo.workflow.support.api; -import cn.axzo.workflow.client.config.WorkflowEngineClientAutoConfiguration; -import cn.axzo.workflow.common.annotation.Manageable; -import cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration; import com.github.javaparser.ParserConfiguration; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.ImportDeclaration; @@ -23,10 +20,7 @@ import com.github.javaparser.ast.type.ClassOrInterfaceType; import com.github.javaparser.ast.type.Type; import com.github.javaparser.printer.DefaultPrettyPrinter; import com.github.javaparser.printer.Printer; -import com.github.javaparser.utils.CodeGenerationUtils; import com.github.javaparser.utils.SourceRoot; -import lombok.SneakyThrows; -import org.springframework.cloud.openfeign.FeignClient; import java.io.FileWriter; import java.io.IOException; @@ -40,9 +34,9 @@ import java.util.List; * @author wangli * @since 2024/6/11 17:38 */ -public class ManageServiceCodeGenerator { - @SneakyThrows - public static void main(String[] args) { +public class ManageServiceCodeGeneration { + + public static void generate() throws Exception { String newClassName = "WorkflowManageService"; CompilationUnit testGeneric = genericCode("cn.axzo.workflow.starter.api", newClassName); @@ -60,7 +54,7 @@ public class ManageServiceCodeGenerator { } } - public static CompilationUnit genericCode(String pkg, String newClassName) { + private static CompilationUnit genericCode(String pkg, String newClassName) throws Exception { CompilationUnit cu = new CompilationUnit(pkg); ClassOrInterfaceDeclaration interfaceDeclaration = setCommon(cu, newClassName); @@ -73,20 +67,20 @@ public class ManageServiceCodeGenerator { MethodDeclaration sync = createDefaultMethod("sync", interfaceDeclaration); sync.setJavadocComment("强制使用‘同步’模式调用该方法,请在调用真实方法前调用该方法\r\n" + "
\r\n" +
-                "workflowCoreService.sync().createProcessInstance();\r\n" +
+                "  workflowManageService.sync().getTenantIds();\r\n" +
                 "
"); MethodDeclaration async = createDefaultMethod("async", interfaceDeclaration); - sync.setJavadocComment("强制使用‘异步’模式调用该方法,请在调用真实方法前调用该方法\r\n" + + async.setJavadocComment("强制使用‘异步’模式调用该方法,请在调用真实方法前调用该方法\r\n" + "
\r\n" +
-                "workflowCoreService.async().createProcessInstance();\r\n" +
+                "  workflowManageService.async().getTenantIds();\r\n" +
                 "
"); } private static MethodDeclaration createDefaultMethod(String methodName, ClassOrInterfaceDeclaration interfaceDeclaration) { // 将sync方法添加到WorkflowCoreService类中 MethodDeclaration methodDeclaration = interfaceDeclaration.addMethod(methodName, Modifier.Keyword.DEFAULT); - methodDeclaration.setType(new ClassOrInterfaceType("WorkflowCoreService")); + methodDeclaration.setType(new ClassOrInterfaceType("WorkflowManageService")); // 创建方法体 BlockStmt methodBody = new BlockStmt(); @@ -105,9 +99,9 @@ public class ManageServiceCodeGenerator { return methodDeclaration; } - @SneakyThrows - private static void addMethods(ClassOrInterfaceDeclaration interfaceDeclaration, CompilationUnit cu) { - Path sourceCodeRoot = CodeGenerationUtils.mavenModuleRoot(WorkflowEngineClientAutoConfiguration.class).resolve("src/main/java/cn/axzo/workflow/client/feign/"); + private static void addMethods(ClassOrInterfaceDeclaration interfaceDeclaration, CompilationUnit cu) throws Exception { + String projectRootDir = System.getProperty("user.dir"); + Path sourceCodeRoot = Paths.get(projectRootDir, "/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/"); SourceRoot sourceRoot = new SourceRoot(sourceCodeRoot); sourceRoot.getParserConfiguration().setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_8); Printer printer = new DefaultPrettyPrinter(); @@ -117,18 +111,30 @@ public class ManageServiceCodeGenerator { List compilationUnits = sourceRoot.getCompilationUnits(); NodeList> targetMethods = interfaceDeclaration.getMembers(); for (CompilationUnit apiCU : compilationUnits) { - if (!apiCU.getPrimaryType().filter(e -> e.getAnnotationByClass(Manageable.class).isPresent()).isPresent()) { + // 如果类上包含 @Manageable 注解,则直接将所有方法解析进新目标接口中 + if (apiCU.getPrimaryType().filter(e -> e.getAnnotationByName("Manageable").isPresent()).isPresent()) { addImports(apiCU, cu); // 类上含有 @Manageable,不进行解析 - String interfaceName = apiCU.getPrimaryTypeName().get(); - List methods = apiCU.getInterfaceByName(interfaceName).get().findAll(MethodDeclaration.class); - for (MethodDeclaration method : methods) { - if (!method.getAnnotationByClass(Manageable.class).isPresent()) { - MethodDeclaration methodDeclaration = method.clone(); - methodDeclaration.setType(changeReturnType(methodDeclaration.getType())); - targetMethods.add(methodDeclaration); - } - } + addMethod0(apiCU, targetMethods, false); + } else { + addImports(apiCU, cu); + addMethod0(apiCU, targetMethods, true); + } + } + } + + private static void addMethod0(CompilationUnit apiCU, NodeList> targetMethods, boolean containAnnotation) { + String interfaceName = apiCU.getPrimaryTypeName().get(); + List methods = apiCU.getInterfaceByName(interfaceName).get().findAll(MethodDeclaration.class); + for (MethodDeclaration method : methods) { + if (containAnnotation && method.getAnnotationByName("Manageable").isPresent()) { + MethodDeclaration methodDeclaration = method.clone(); + methodDeclaration.setType(changeReturnType(methodDeclaration.getType())); + targetMethods.add(methodDeclaration); + } else if (!containAnnotation && !method.getAnnotationByName("Manageable").isPresent()) { + MethodDeclaration methodDeclaration = method.clone(); + methodDeclaration.setType(changeReturnType(methodDeclaration.getType())); + targetMethods.add(methodDeclaration); } } } @@ -153,10 +159,10 @@ public class ManageServiceCodeGenerator { private static ClassOrInterfaceDeclaration setCommon(CompilationUnit cu, String newClassName) { ClassOrInterfaceDeclaration classOrInterfaceDeclaration = cu.addInterface(newClassName).setPublic(true); classOrInterfaceDeclaration.setJavadocComment("Workflow Engine Starter Management Service"); - classOrInterfaceDeclaration.addAndGetAnnotation(FeignClient.class) - .addPair("name", new StringLiteralExpr("workflow-engine-starter")) + classOrInterfaceDeclaration.addAndGetAnnotation("FeignClient") + .addPair("name", new StringLiteralExpr("workflow-engine-starter-manage")) .addPair("url", new StringLiteralExpr("${axzo.service.workflow-engine:workflow-engine:8080}")) - .addPair("configuration", new ClassExpr(new ClassOrInterfaceType(null, WorkflowEngineStarterFeignConfiguration.class.getSimpleName()))); + .addPair("configuration", new ClassExpr(new ClassOrInterfaceType("WorkflowEngineStarterFeignConfiguration"))); cu.addImport("cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration", false, false); cu.addImport("cn.axzo.workflow.common.util.ThreadUtil", false, false); cu.addImport("cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC", true, false);