本发明涉及计算机,尤其涉及一种代码生成方法、装置、电子设备及介质。
背景技术:
1、目前,在开发软件项目中,开发人员无法避免大量重复逻辑的代码,在这些重复逻辑代码中,只有少部分代码不一致。为了解决重复性代码编写问题,提高软件开发效率,节省软件开发成本,出现了各种各样的代码生成器工具来协助开发人员完成软件项目的开发。然而,现有的代码生成器工具只能在新创建的软件工程中使用,不能在已存在的软件工程中使用;对软件项目的侵入性很强,导致软件项目与代码生成器工具深度绑定,对后续的维护工作带来极大的风险。
技术实现思路
1、为解决上述技术问题或至少部分地解决上述技术问题,本发明实施例提供一种代码生成方法、装置、电子设备及介质。
2、第一方面,本发明实施例提供了一种代码生成方法,包括:
3、在目标工程中引入代码生成插件;
4、响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树;
5、触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
6、在本发明一些可选的实施例中,所述触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码,包括:
7、根据预设的映射关系,触发与所述抽象语法树中的注解信息对应的代码生成器;所述预设的映射关系用于指示注解信息与代码生成器的对应关系;
8、基于所述代码生成器触发所述元信息采集器,基于所述元信息采集器采集与所述抽象语法树中的注解信息对应的元信息;
9、基于所述代码生成器根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
10、在本发明一些可选的实施例中,所述方法还包括:比对所述目标工程的源码与自动生成的代码;在确定所述目标工程的源码与所述自动生成的代码存在不同的情况下,合并所述目标工程的源码与所述自动生成的代码;在确定所述目标工程的源码与所述自动生成的代码相同的情况下,丢弃所述自动生成的代码。
11、在本发明一些可选的实施例中,所述比对所述目标工程的源码与自动生成的代码,包括:确定自动生成的代码所在的目录,确定所述目录下是否存在代码文件;在所述目录下存在代码文件的情况下,将所述代码文件作为原始代码,基于所述注解信息,获取所述原始代码的关键信息;将所述原始代码的关键信息与所述自动生成的代码进行比对。
12、在本发明一些可选的实施例中,所述元信息包括所述目标工程对应的抽象语法树、配置信息、网络信息和环境信息中的一种或多种。
13、第二方面,本发明实施例提供了一种代码生成装置,包括:
14、引入模块,用于在目标工程中引入代码生成插件;
15、编译模块,用于响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树;
16、生成模块,用于触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
17、在本发明一些可选的实施例中,所述代码生成插件包括元信息采集器和代码生成器;
18、所述生成模块用于:
19、根据预设的映射关系,触发与所述抽象语法树中的注解信息对应的代码生成器;所述预设的映射关系用于指示注解信息与代码生成器的对应关系;
20、基于所述代码生成器触发所述元信息采集器,基于所述元信息采集器采集与所述抽象语法树中的注解信息对应的元信息;
21、基于所述代码生成器根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。基于所述对应的元信息采集器采集与所述注解信息对应的元信息。
22、在本发明一些可选的实施例中,所述装置还包括比对模块,用于:
23、比对所述目标工程的源码与自动生成的代码;
24、在确定所述目标工程的源码与所述自动生成的代码存在不同的情况下,合并所述目标工程的源码与所述自动生成的代码;
25、在确定所述目标工程的源码与所述自动生成的代码相同的情况下,丢弃所述自动生成的代码。
26、在本发明一些可选的实施例中,所述比对模块还用于:
27、确定自动生成的代码所在的目录,确定所述目录下是否存在代码文件;
28、在所述目录下存在代码文件的情况下,将所述代码文件作为原始代码,基于所述注解信息,获取所述原始代码的关键信息;
29、将所述原始代码的关键信息与所述自动生成的代码进行比对。
30、第三方面,本发明实施例提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任一实施例的代码生成方法。
31、第四方面,本发明实施例提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明任一实施例的代码生成方法。
32、上述发明中的一个实施例具有如下优点或有益效果:
33、本发明实施例的代码生成方法,在目标工程中引入代码生成插件;响应于编译指令,编译目标工程的源码,生成与目标工程对应的抽象语法树;触发代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。该方法的代码生成插件以插件的方式运行,项目本身无需引入除代码生成插件以外的jar包,源码中的注解信息都是source级别的,生成的代码没有携带任何注解信息,没有代码生成插件的痕迹,对源码的侵入性低,易于维护;在项目源码编译阶段采集元信息,并基于该元信息实现代码的自动生成,显著地降低了代码开发工作量,有效提高了开发效率。
34、上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
1.一种代码生成方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述代码生成插件包括元信息采集器和代码生成器;
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
4.根据权利要求3所述的方法,其特征在于,所述比对所述目标工程的源码与自动生成的代码,包括:
5.根据权利要求1所述的方法,其特征在于,所述元信息包括所述目标工程对应的抽象语法树、配置信息、网络信息和环境信息中的一种或多种。
6.一种代码生成装置,其特征在于,包括:
7.根据权利要求6所述的装置,其特征在于,所述代码生成插件包括元信息采集器和代码生成器;
8.根据权利要求6或7所述的装置,其特征在于,所述装置还包括比对模块,用于:
9.一种电子设备,其特征在于,包括:
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-5中任一所述的方法。