CN116578282A - 代码生成方法、装置、电子设备及介质 - Google Patents
代码生成方法、装置、电子设备及介质 Download PDFInfo
- Publication number
- CN116578282A CN116578282A CN202310437462.9A CN202310437462A CN116578282A CN 116578282 A CN116578282 A CN 116578282A CN 202310437462 A CN202310437462 A CN 202310437462A CN 116578282 A CN116578282 A CN 116578282A
- Authority
- CN
- China
- Prior art keywords
- code
- information
- meta information
- annotation information
- plug
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 230000004044 response Effects 0.000 claims abstract description 9
- 238000013507 mapping Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 7
- 238000011161 development Methods 0.000 abstract description 10
- 238000004891 communication Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种代码生成方法、装置、电子设备及介质,涉及计算机技术领域。该方法包括:在目标工程中引入代码生成插件;响应于编译指令,编译目标工程的源码,生成与目标工程对应的抽象语法树;触发代码生成插件,基于代码生成插件根据抽象语法树中的注解信息,采集与注解信息对应的元信息,根据所述元信息和预设的生成规则,自动生成与注解信息对应的代码。该方法的代码生成插件以插件的方式运行,在项目源码编译阶段基于注解信息采集元信息,并基于该元信息实现代码的自动生成,降低了代码开发工作量,提高了开发效率,对源码侵入性低,易于维护。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种代码生成方法、装置、电子设备及介质。
背景技术
目前,在开发软件项目中,开发人员无法避免大量重复逻辑的代码,在这些重复逻辑代码中,只有少部分代码不一致。为了解决重复性代码编写问题,提高软件开发效率,节省软件开发成本,出现了各种各样的代码生成器工具来协助开发人员完成软件项目的开发。然而,现有的代码生成器工具只能在新创建的软件工程中使用,不能在已存在的软件工程中使用;对软件项目的侵入性很强,导致软件项目与代码生成器工具深度绑定,对后续的维护工作带来极大的风险。
发明内容
为解决上述技术问题或至少部分地解决上述技术问题,本发明实施例提供一种代码生成方法、装置、电子设备及介质。
第一方面,本发明实施例提供了一种代码生成方法,包括:
在目标工程中引入代码生成插件;
响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树;
触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
在本发明一些可选的实施例中,所述触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码,包括:
根据预设的映射关系,触发与所述抽象语法树中的注解信息对应的代码生成器;所述预设的映射关系用于指示注解信息与代码生成器的对应关系;
基于所述代码生成器触发所述元信息采集器,基于所述元信息采集器采集与所述抽象语法树中的注解信息对应的元信息;
基于所述代码生成器根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
在本发明一些可选的实施例中,所述方法还包括:比对所述目标工程的源码与自动生成的代码;在确定所述目标工程的源码与所述自动生成的代码存在不同的情况下,合并所述目标工程的源码与所述自动生成的代码;在确定所述目标工程的源码与所述自动生成的代码相同的情况下,丢弃所述自动生成的代码。
在本发明一些可选的实施例中,所述比对所述目标工程的源码与自动生成的代码,包括:确定自动生成的代码所在的目录,确定所述目录下是否存在代码文件;在所述目录下存在代码文件的情况下,将所述代码文件作为原始代码,基于所述注解信息,获取所述原始代码的关键信息;将所述原始代码的关键信息与所述自动生成的代码进行比对。
在本发明一些可选的实施例中,所述元信息包括所述目标工程对应的抽象语法树、配置信息、网络信息和环境信息中的一种或多种。
第二方面,本发明实施例提供了一种代码生成装置,包括:
引入模块,用于在目标工程中引入代码生成插件;
编译模块,用于响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树;
生成模块,用于触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
在本发明一些可选的实施例中,所述代码生成插件包括元信息采集器和代码生成器;
所述生成模块用于:
根据预设的映射关系,触发与所述抽象语法树中的注解信息对应的代码生成器;所述预设的映射关系用于指示注解信息与代码生成器的对应关系;
基于所述代码生成器触发所述元信息采集器,基于所述元信息采集器采集与所述抽象语法树中的注解信息对应的元信息;
基于所述代码生成器根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。基于所述对应的元信息采集器采集与所述注解信息对应的元信息。
在本发明一些可选的实施例中,所述装置还包括比对模块,用于:
比对所述目标工程的源码与自动生成的代码;
在确定所述目标工程的源码与所述自动生成的代码存在不同的情况下,合并所述目标工程的源码与所述自动生成的代码;
在确定所述目标工程的源码与所述自动生成的代码相同的情况下,丢弃所述自动生成的代码。
在本发明一些可选的实施例中,所述比对模块还用于:
确定自动生成的代码所在的目录,确定所述目录下是否存在代码文件;
在所述目录下存在代码文件的情况下,将所述代码文件作为原始代码,基于所述注解信息,获取所述原始代码的关键信息;
将所述原始代码的关键信息与所述自动生成的代码进行比对。
第三方面,本发明实施例提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任一实施例的代码生成方法。
第四方面,本发明实施例提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明任一实施例的代码生成方法。
上述发明中的一个实施例具有如下优点或有益效果:
本发明实施例的代码生成方法,在目标工程中引入代码生成插件;响应于编译指令,编译目标工程的源码,生成与目标工程对应的抽象语法树;触发代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。该方法的代码生成插件以插件的方式运行,项目本身无需引入除代码生成插件以外的jar包,源码中的注解信息都是source级别的,生成的代码没有携带任何注解信息,没有代码生成插件的痕迹,对源码的侵入性低,易于维护;在项目源码编译阶段采集元信息,并基于该元信息实现代码的自动生成,显著地降低了代码开发工作量,有效提高了开发效率。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1示出了本发明一实施例的代码生成方法的流程示意图;
图2示出了本发明另一实施例的代码生成方法的流程示意图;
图3示出了本发明实施例的代码生成装置的结构示意图;
图4示出了本发明实施例的电子设备的示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1示出了本发明一实施例的代码生成方法的流程图。本发明实施例的代码生成方法的执行主体可以是代码生成装置或者其他能够实现相同功能的、包含了代码生成装置的电子设备。
如图1所示,该代码生成方法包括:
步骤S101:在目标工程中引入代码生成插件。
其中,目标工程可以是基于maven工具(maven是专门用于构建和管理java软件项目的管理工具)构建的软件项目,也可以是基于其他软件管理工具如garden、IDE(eclipse、ideal)、javac构建的软件项目。可以理解的是,本发明实施例的代码生成插件是在目标工程源码编译阶段触发的,所以只要有编译动作,本发明实施例的代码生产插件都能够自动生成代码。以目标工程为maven项目为例,可以在maven项目的项目对象模型(ProjectObject Model,简称POM)文件中引入代码生成插件。POM文件定义软件项目的基本信息,包含maven用于构建项目的项目信息和配置细节,主要用于管理源代码、配置文件、开发者的信息和角色、组织信息、项目的依赖关系等。开发人员可以在POM文件中指定需要引入的插件、项目依赖等。在本发明实施例中,在POM文件中引入代码生成插件,以将该代码生成插件以maven插件的方式运行,因此该代码生成插件既可以在新建的maven软件工程中引用,也可以在已有的maven软件项目中引用。因此,本实施例的目标工程是可以是新创建的软件工程,也可以是已有的软件工程,本发明在此不做限制。
代码生成插件(即代码生成工具)可以理解为一个用于自动化生成代码的jar包,在该jar包定义了代码生成的逻辑(代码生成规则或方法),当触发该待代码生成插件时,执行该jar包中的代码生成逻辑方法来自动化生成代码。
在可选的实施例中,若目标工程为maven项目,则可以在目标工程的项目对象模型文件中引入代码生成插件之后,设置代码生成插件的作用域scope为compile。
其中,scope的作用是控制代码生成插件加载的范围和使用的范围。Compile(默认值)用于指示代码生成插件需要参与到当前项目的编译、测试、打包、运行等阶段。将代码生成插件的作用域scope设置为compile,使得该代码生成插件在项目源码编码阶段自动触发,即代码生成插件的工作模式为自动触发模式,不需要工作人员手动触发。
步骤S102:响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树。
编译指令用于指示对目标工程的源码进行编译。用户可以通过项目构建工具的交互界面触发对源码的编译操作。在检测到用户的编译操作的情况下,生成编译指令。响应于该编译指令,编译器对目标工程的源码进行编译,获得该源码对应的抽象语法树。其中,抽象语法树(Abstract Syntax Tree,ATS)相当于用树结构将代码程式表现出来的一种数据结构,抽象语法树上的每个节点都表示源码中的一种结构。
步骤S103:触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
注解信息是附加在源码中的一些信息,提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。对源码编译后生成的抽象语法树中包括源码的注解信息。其中,Java注解可以划分为三类:标准注解、元注解和自定义注解。标准注解是已经定义的注解,一般用于开始代码编译检查。元注解是用于修饰注解的注解,是对其他注解进行解释说明的。自定义注解是根据项目需要自定义的注解。自定义注解的格式为:
public@interface注解名{
//注解内容,属性列表
}
不同的注解信息可以用于指示生成不同功能的代码,基于注解信息生成的代码可以实现相应的功能。在编译源码得到抽象语法树的过程中,若抽象语法树中包括注解信息,则触发代码生成插件,利用该代码生成插件采集相应的元信息。元信息(meta)是指代码生成插件可以采集到的信息,例如项目的配置信息、开发环境信息、网络信息以及源码的所有信息。具体的,元信息可以包括但不限于目标工程对应的抽象语法树、配置信息、网络信息和环境信息。在本发明实施例中,不同的注解信息所需要采集的元信息不同,可以在构建代码生成插件时配置注解信息与所需要的元信息的对应关系,代码生成插件根据该对应关系采集注解信息所需要的元信息。
代码生成插件基于元信息,按照预设的代码生成规则,自动生成与注解信息对应的代码。
本发明实施例的代码生成方法,在目标工程中引入代码生成插件;响应于编译指令,编译目标工程的源码,生成与目标工程对应的抽象语法树;触发代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。该方法的代码生成插件以插件的方式运行,项目本身无需引入除代码生成插件以外的jar包,源码中的注解信息都是source级别的,生成的代码没有携带任何注解信息,没有代码生成插件的痕迹,对源码的侵入性低,易于维护;在项目源码编译阶段采集元信息,并基于该元信息实现代码的自动生成,显著地降低了代码开发工作量,有效提高了开发效率;自动生成的代码不会覆盖原有的代码,便于用户对自动生成的代码进行二次开发;代码生成插件易于开发,使用方可以根据需求开发相应的代码生成插件。本发明实施例的代码生成方法可以应用于web开发场景,自动生成controller层、service层、dao层等代码(controller层用于接收和响应;service层用于处理业务逻辑,会调用dao层的API;dao层针对单张或多张表的增删改查),可以将一些需要动态处理的逻辑比如对象映射、动态代理等进行静态化处理,既能提升开发效率,又能提升性能。
在一些可选的实施例中,代码生成插件包括元信息采集器和代码生成器。其中,元信息采集器用于采集注解信息对应的元信息,代码生成器用于根据采集的元信息,按照预设的代码生成规则自动化生成代码。
在一些可选的实施例中,代码生成器可以有多个。不同的代码生成器用于响应不同的注解信息,触发信息采集器采集不同的元信息。在构建代码生成器时,可以配置该代码生成器响应的注解信息,即配置代码生成器与注解信息的映射关系,该映射关系用于指示代码生成器与注解信息的对应关系。在编译源码时,基于该映射关系触发与当前注解信息对应的代码生成器,代码生成器调用元信息采集器采集与当前注解信息对应的元信息。
图2示出了本发明另一实施例的代码生成方法的流程示意图,如图2所示,该代码生成方法包括:
步骤S201:在目标工程中引入代码生成插件,所述代码生成插件包括元信息采集器和代码生成器;
步骤S202:响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树;
步骤S203:根据预设的映射关系,触发与所述抽象语法树中的注解信息对应的代码生成器;所述预设的映射关系用于指示注解信息与代码生成器的对应关系;
步骤S204:基于所述代码生成器触发所述元信息采集器,基于所述元信息采集器采集与所述抽象语法树中的注解信息对应的元信息;
步骤S205:基于所述代码生成器根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码
步骤S206:比对目标工程的源码与自动生成的代码;
步骤S207:在确定目标工程的源码与自动生成的代码存在不同的情况下,合并目标工程的源码与自动生成的代码;
步骤S208:在确定目标工程的源码与自动生成的代码相同的情况下,丢弃自动生成的代码。
其中,步骤S201-S205可以参考图1所示的实施例,本发明在此不再赘述。
对于步骤S206-S208,在代码生成插件自动生成代码的情况下,确定该自动生成的代码所在的目录,判断该目录下是否存在代码文件,若该目录下存在代码文件,将该目录下的代码文件作为原始代码,检查该原始代码与自动生成的代码的不同,将两者的不同之处进行合并,并将合并后的代码输出到该目录下。其中,可以利用在先的代码比对工具比对原始代码和自动生成的代码,也可以根据如下过程进行比对:基于预设的分析项对原始代码进行分析,确定该原始代码的关键信息,将原始代码的关键信息与自动生成的代码进行比对,从而确定原始代码与自动生成的代码的相同之处和不同之处。其中,预设的分析项可以根据与自动生成的代码对应的注解信息确定,不同的注解信息对应不同的分析项。
图3示出了本发明实施例的代码生成装置的结构示意图。如图3所示,该代码生成装置300包括:
引入模块301,用于在目标工程中引入代码生成插件;
编译模块302,用于响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树;
生成模块303,用于触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
在一些可选的实施例中,所述代码生成插件包括元信息采集器和代码生成器;
所述生成模块用于:根据预设的映射关系,触发与所述抽象语法树中的注解信息对应的代码生成器;所述预设的映射关系用于指示注解信息与代码生成器的对应关系;基于所述代码生成器触发所述元信息采集器,基于所述元信息采集器采集与所述抽象语法树中的注解信息对应的元信息;基于所述代码生成器根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。基于所述对应的元信息采集器采集与所述注解信息对应的元信息
在本发明一些可选的实施例中,所述装置还包括比对模块,用于:
比对所述目标工程的源码与自动生成的代码;
在确定所述目标工程的源码与所述自动生成的代码存在不同的情况下,合并所述目标工程的源码与所述自动生成的代码;
在确定所述目标工程的源码与所述自动生成的代码相同的情况下,丢弃所述自动生成的代码。
在本发明一些可选的实施例中,所述比对模块还用于:
确定自动生成的代码所在的目录,确定所述目录下是否存在代码文件;
在所述目录下存在代码文件的情况下,将所述代码文件作为原始代码,基于所述注解信息,获取所述原始代码的关键信息;
将所述原始代码的关键信息与所述自动生成的代码进行比对。
上述装置可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
本发明实施例还提供了一种电子设备,如图4所示,包括处理器401、通信接口402、存储器403和通信总线404,其中,处理器401,通信接口402,存储器403通过通信总线404完成相互间的通信,
存储器403,用于存放计算机程序;
处理器401,用于执行存储器403上所存放的程序时,实现如下步骤:在目标工程中引入代码生成插件;响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树;触发所述代码生成插件,触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
上述终端提到的通信总线404可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线404可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口402用于上述终端与其他设备之间的通信。
存储器403可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器401的存储装置。
上述的处理器401可以是通用处理器,包括中央处理器(Central ProcessingUnit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读介质,该计算机可读介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一的代码生成方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一的代码生成方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (10)
1.一种代码生成方法,其特征在于,包括:
在目标工程中引入代码生成插件;
响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树;
触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
2.根据权利要求1所述的方法,其特征在于,所述代码生成插件包括元信息采集器和代码生成器;
所述触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码,包括:
根据预设的映射关系,触发与所述抽象语法树中的注解信息对应的代码生成器;所述预设的映射关系用于指示注解信息与代码生成器的对应关系;
基于所述代码生成器触发所述元信息采集器,基于所述元信息采集器采集与所述抽象语法树中的注解信息对应的元信息;
基于所述代码生成器根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
比对所述目标工程的源码与自动生成的代码;
在确定所述目标工程的源码与所述自动生成的代码存在不同的情况下,合并所述目标工程的源码与所述自动生成的代码;
在确定所述目标工程的源码与所述自动生成的代码相同的情况下,丢弃所述自动生成的代码。
4.根据权利要求3所述的方法,其特征在于,所述比对所述目标工程的源码与自动生成的代码,包括:
确定自动生成的代码所在的目录,确定所述目录下是否存在代码文件;
在所述目录下存在代码文件的情况下,将所述代码文件作为原始代码,基于所述注解信息,获取所述原始代码的关键信息;
将所述原始代码的关键信息与所述自动生成的代码进行比对。
5.根据权利要求1所述的方法,其特征在于,所述元信息包括所述目标工程对应的抽象语法树、配置信息、网络信息和环境信息中的一种或多种。
6.一种代码生成装置,其特征在于,包括:
引入模块,用于在目标工程中引入代码生成插件;
编译模块,用于响应于编译指令,编译所述目标工程的源码,生成与所述目标工程对应的抽象语法树;
生成模块,用于触发所述代码生成插件,基于所述代码生成插件根据所述抽象语法树中的注解信息,采集与所述注解信息对应的元信息,并根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。
7.根据权利要求6所述的装置,其特征在于,所述代码生成插件包括元信息采集器和代码生成器;
所述生成模块用于:
根据预设的映射关系,触发与所述抽象语法树中的注解信息对应的代码生成器;所述预设的映射关系用于指示注解信息与代码生成器的对应关系;
基于所述代码生成器触发所述元信息采集器,基于所述元信息采集器采集与所述抽象语法树中的注解信息对应的元信息;
基于所述代码生成器根据所述元信息和预设的生成规则,自动生成与所述注解信息对应的代码。基于所述对应的元信息采集器采集与所述注解信息对应的元信息。
8.根据权利要求6或7所述的装置,其特征在于,所述装置还包括比对模块,用于:
比对所述目标工程的源码与自动生成的代码;
在确定所述目标工程的源码与所述自动生成的代码存在不同的情况下,合并所述目标工程的源码与所述自动生成的代码;
在确定所述目标工程的源码与所述自动生成的代码相同的情况下,丢弃所述自动生成的代码。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-5中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310437462.9A CN116578282A (zh) | 2023-04-21 | 2023-04-21 | 代码生成方法、装置、电子设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310437462.9A CN116578282A (zh) | 2023-04-21 | 2023-04-21 | 代码生成方法、装置、电子设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116578282A true CN116578282A (zh) | 2023-08-11 |
Family
ID=87533230
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310437462.9A Pending CN116578282A (zh) | 2023-04-21 | 2023-04-21 | 代码生成方法、装置、电子设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116578282A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117369783A (zh) * | 2023-12-06 | 2024-01-09 | 之江实验室 | 一种安全代码生成模型的训练方法及装置 |
-
2023
- 2023-04-21 CN CN202310437462.9A patent/CN116578282A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117369783A (zh) * | 2023-12-06 | 2024-01-09 | 之江实验室 | 一种安全代码生成模型的训练方法及装置 |
CN117369783B (zh) * | 2023-12-06 | 2024-02-23 | 之江实验室 | 一种安全代码生成模型的训练方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111124906B (zh) | 基于动态埋点的跟踪方法、编译方法、装置和电子设备 | |
US8930884B2 (en) | Efficient extraction of software dependencies from program code | |
US9122490B2 (en) | Code dependency calculation | |
US11650905B2 (en) | Testing source code changes | |
JP2020522790A (ja) | 異種にプログラムされたデータ処理システムの自動依存性アナライザ | |
Safi et al. | Detecting event anomalies in event-based systems | |
US9170787B2 (en) | Componentization of compiler functionality | |
KR20090017598A (ko) | 소프트웨어를 분석하기 위한 방법 및 시스템 | |
US10514898B2 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
US10083029B2 (en) | Detect application defects by correlating contracts in application dependencies | |
CN113778445A (zh) | 一种跨平台组件生成方法、装置、电子设备及存储介质 | |
CN111240987B (zh) | 移植程序检测方法、装置、电子设备及计算机可读存储介质 | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
CN115705250A (zh) | 监测堆栈使用量以优化程序 | |
US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
US20070124723A1 (en) | Monitoring dynamic aspect oriented applications at execution time | |
CN110297639B (zh) | 用于检测代码的方法和装置 | |
JP2006294019A (ja) | 汎用ソフトウェア要件アナライザ | |
CN111352631A (zh) | 一种接口兼容性检测方法及装置 | |
US12093686B2 (en) | Code maintenance system | |
CN113031964B (zh) | 一种大数据应用的管理方法、装置、设备及存储介质 | |
Vysocký et al. | Application instrumentation for performance analysis and tuning with focus on energy efficiency | |
CN115730305A (zh) | 应用程序的检测方法、装置、非易失性存储介质及处理器 | |
CN111367796A (zh) | 应用程序调试方法及装置 | |
CN110737429A (zh) | 一种利用Makefile自身的依赖关系的模块化编译方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |