代码文件生成方法、装置、计算机设备和存储介质与流程

文档序号:16325778发布日期:2018-12-19 05:54阅读:178来源:国知局
代码文件生成方法、装置、计算机设备和存储介质与流程

本申请涉及计算机技术领域,特别是涉及一种代码文件生成方法、装置、计算机设备和存储介质。

背景技术

随着互联网技术的发展,当下无疑已经进入了全民互联网时代,而软件系统作为互联网的灵魂,为满足人们日益增长的计算机软件服务需求,软件开发人员需要不断进行计算机程序的开发和创新。

计算机程序由一系列的代码组合而成且能够表达特定数学逻辑。生成上述的一系列的代码的传统方式包括:开发人员手动敲写代码和通过代码生成工具自动生成。其中,开发人员纯手动敲写代码的方式的缺点在于大量代码重复编写,费时费力。而通过工具生成代码的方式,由于传统的代码生成工具多为针对某个特定场景进行代码生成,一种代码生成工具只能生成一种特定场景(如数据库操作)的代码。生成多种场景下的操作代码时需要使用多种代码生成工具,代码生成效率低,灵活性差。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够实现多种操作逻辑代码灵活定制,代码生成效率更高的代码生成文件方法、装置、计算机设备和存储介质。

一种代码文件生成方法,所述方法包括:

获取待操作对象的元数据;

加载与提取的所述元数据匹配的至少一组代码模板,其中,每组代码模板定义所述待操作对象的设定操作逻辑;

将加载的代码模板与所述元数据进行组合,生成至少一种操作所述待操作对象的代码文件。

在一个实施例中,所述获取所述操作对象的元数据,包括:

获取待操作对象的源码文件;

解析所述源码文件,根据预先配置的源码文件类型与数据提取策略之间的对应关系确定所述源码文件对应的数据提取策略;

加载所述数据提取策略,通过所述数据提取策略从所述源码文件中提取元数据。

在一个实施例中,所述加载与提取的所述元数据匹配的至少一组代码模板,包括:

根据所述元数据的类型调用至少一个模板处理器,其中,所述模板处理器为设定代码模板组合的加载器;

通过所述模板处理器加载对应的代码模板组合。

在一个实施例中,所述将加载的代码模板与所述元数据进行组合,生成至少一种操作所述待操作对象的代码文件,包括:

将提取的所述元数据转换成键值对的集合,所述键值对包括变量和变量值;

获取所述代码模板目录,提取所述代码模板目录中的目录子项,将所述目录子项中的变量替换成所述元数据中对应变量的变量值,根据变量替换后的所述目录子项生成包名;

根据所述代码模板目录中的文件子项获取代码模板文件,将所述代码模板文件中的变量替换成所述元数据中对应变量的变量值,生成代码文件,其中,生成的所述代码文件声明生成的所述包名。

在一个实施例中,在将加载的代码模板与所述元数据进行组合,生成至少一种操作所述待操作对象的代码文件后,还包括:

判断生成的所述代码文件是否已经存在,若是,则将生成的所述代码文件和已有代码文件转换成语法树,循环执行配置的合并策略生成合并后的语法树,根据合并后的所述语法树生成合并后的代码文件。

一种代码文件生成装置,所述装置包括:

元数据提取模块,用于获取所述待操作对象的元数据;

代码模板加载模块,用于加载与提取的所述元数据匹配的至少一组代码模板,其中,每组所述代码模板定义所述待操作对象的设定操作逻辑;

组合模块,用于将加载的代码模板与所述元数据进行组合,生成至少一种操作所述待操作对象的代码文件。

在一个实施例中,所述代码模板加载模块,还用于根据所述元数据的类型调用至少一个预先定义的模板处理器;通过所述模板处理器加载代码模板组合,预先为每个所述模板处理器配置其可加载的代码模板组合。

在一个实施例中,所述组合模块,还包括:

格式转换模块,用于将提取的所述元数据转换成键值对的集合,所述键值对包括变量和变量值;

包名生成模块,用于获取所述代码模板目录,提取所述代码模板目录中的目录子项,将所述目录子项中的变量替换成所述元数据中对应变量的变量值,根据变量替换后的所述目录子项生成包名;

代码文件生成模块,用于根据所述代码模板目录中的文件子项获取代码模板文件,将所述代码模板文件中的变量替换成所述元数据中对应变量的变量值,生成代码文件,其中,生成的所述代码文件声明生成的所述包名。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的方法的步骤。

上述代码生成方法、装置、计算机设备和存储介质,通过扫描待操作对象,提取能够描述对象属性的元数据,加载能够与元数据组合的一组或者多组代码模板,每组代码模板可实现对待操作对象的设定场景中特定类型的操作,组合元数据和代码模板生成代码文件,生成的代码文件包括对待操作对象实施的多种操作的代码文件,通过灵活加载不同的代码模板,实现了对待操作对象的操作代码的灵活定制,一次操作即可生成多种场景下的多种操作逻辑的代码文件。

附图说明

图1为一个实施例中代码文件生成方法的应用场景图;

图2为一个实施例中代码文件生成方法的流程示意图;

图3为一个实施例中提取元数据的原理图;

图4为一个实施例中加载与元数据匹配的至少一组代码模板所涉及的流程示意图;

图5为一个实施例中组合元数据和代码模板,生成操作对象的代码文件所涉及的流程示意图;

图6为一个实施例中代码文件合并的原理图;

图7为一个实施例中代码文件生成装置的结构框图;

图8为一个实施例中组合模块的结构框图;

图9为另一个实施例中代码文件生成装置的结构框图;

图10为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的代码生成方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。终端102用于提供用户操作界面,监听用户指定的待操作对象、监听用户的配置操作等,向服务器104发送代码生成请求等。服务器104提取待操作对象的元数据,加载与元数据匹配的至少一组代码模板,将元数据和代码模板进行组合,生成对待操作对象的至少一种操作类型的代码。终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一个实施例中,如图2所示,提供了一种代码文件生成方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:

步骤s202:获取待操作对象的元数据。

待操作对象可以是一个web页面、接口或者类等具有相对固化属性、且能被进一步操作的程序单元。待操作对象的元数据是指用来描述对象属性的数据。例如,一个http接口的元数据可以包括接口路径、接口的输入输出参数等。web页面的元数据可以是组件id,组件类型等。

扫描待操作对象的源代码,从待操作对象的源代码中提取元数据。例如java工程,通过加载待操作对象的类文件,遍历类文件中的类方法(method)和类变量(field)获取类文件中描述类属性元数据。

步骤s204:加载与提取的元数据匹配的至少一组代码模板,其中,每组代码模板定义待操作对象的设定操作逻辑。

抽象针对各种类型的待操作对象可能实施的各种类型的操作逻辑,定义用于操作各种类型对象的代码模板。操作逻辑是抽象出来的操作方法框架,一种类型的操作逻辑实质上是能够对同一类待操作对象实施设定操作的代码。如对“http接口”实施“调用”操作的操作代码为“接口调用代码模板”。

针对一种类型的待操作对象可能实施的操作有多个,本实施例中,针将对于该待操作对象定义多个代码模板,每个代码模板实现对待操作对象的一种操作逻辑。如待操作对象为接口,针对“http接口”定义的代码模板可能是调用接口的代码模板、封装接口的代码模板等等。针对于同一对象的多个代码模板的组合也可以用于实现一种操作逻辑。

在一个实施例中,可以在定义的每个代码模板中添加匹配对象的标签,加载的代码模板为带有待操作对象标签的代码模板。在另一个实施例中,可以计算提取的元数据与代码模板中可替换内容的匹配度,根据匹配度确定代码模板是否适应对该待操作对象实施相应的操作。还可以通人工配置的方式,用户选定当前需要加载的代码模板。

本实施例中,加载的与元数据匹配的组代码模板可以包括一个代码模板,也可以包括多个代码模板,无论是一个代码模板还是多个代码模板的组合都能够实现对待操作对象的一种操作逻辑。加载一组代码模板即加载一组能够实现一种操作逻辑的代码模板。本实施例侧重加载多组代码模板,多组代码模板可实现对待操作对象的多种类型的操作逻辑。

步骤s206:将加载的代码模板与元数据进行组合,生成至少一种操作待操作对象的代码文件。

模板引擎使用待操作对象的元数据替换加载的每一组代码模板的模板内容,替换后的每一组代码模板可实现对待操作对象的设定类型的操作逻辑。

本实施例中,通过扫描待操作的对象,提取能够描述对象属性的元数据,加载能够与元数据组合的一组或者多组代码模板,每组代码模板可实现对待操作对象的特定类型的操作,组合元数据和代码模板,即可生成针对待操作对象的各种类型操作逻辑的代码。本实施例可批量生成待操作对象的多种操作类型的代码,生成的代码可根据需要灵活定制。与待操作对象匹配的代码模板可进行定制化的组合,以衍生出多个对待操作对象的操作逻辑。

此外,通过针对某一类型的待操作对象抽象代码逻辑,减少了开发过程中代码的大量重复敲写。

在一个实施例中,步骤s202:获取待操作对象元数据包括:获取待操作对象的源码文件;解析源码文件,根据预先配置的源码文件类型与数据提取策略之间的对应关系确定源码文件对应的数据提取策略;加载确定的数据提取策略,通过数据提取策略从待操作对象的源码文件中提取元数据。

进一步的,请求中可携带多个待操作对象的标识,服务器采用多线程的方式同时针对多个待操作对象加载相应的提取策略,同时提取多个待操作对象的元数据。

如图3所示,服务器加载两种类型的待操作对象的源码文件,如java.class文件(类文件)和html文件,加载预先为java.class文件配置path策略,method策略,param策略,加载预先为html文件配置的组件策略,通过加载的策略提取待操作对象的元数据并输出,输出的元数据用于与匹配的代码模板进行匹配。

本实施例中,针对不同类型的待操作对象定义不同的提取策略,提取待操作对象的元数据时直接调用提取策略即可实现对元数据的自动提取。不同类型的待操作对象的元数据可通过调用不通的提取策略同时提取,提高了数据提取效率。

在一个实施例中,如图4所示,步骤s204:加载与元数据匹配的至少一组代码模板,包括如下步骤:

步骤s402:根据元数据的类型调用至少一个模板处理器,其中,模板处理器为设定代码模板组合的加载器。

步骤s404:通过模板处理器加载对应的代码模板组合。

预先定义多个模板处理器,具体定义每一个模板处理器能够加载的代码模板组合。即为每个模板处理器配置可加载的代码模板组合,模板处理器实质上为设定代码模板组合的加载器。通过模板处理器可加载的代码模板组合,以及代码模板组合中的代码模板所适应的元数据类型,建立模板处理器与元数据类型之间的关联关系。具体实现时表现为如下步骤:根据元数据的类型调用至少一个模板处理器,通过模板处理器加载其能够加载的代码模板组合。同一模板处理器加载的多个代码模板可以实现对待操作对象的一种操作逻辑,也可以实现对待操作对象的一系列相关的操作逻辑。

本实施例通过定义模板处理器,可预先对各种待处理对象所匹配的所有的代码模板进行组合分类,服务器只需根据元数据的类型查找相匹配的模板处理器,即能够按照预先定义好的组合去加载代码模板,无需在进行繁琐的代码模板的组合。

举例来说,与某一类型的待操作对象匹配的代码模板包括代码模板a,代码模板b和代码模板c,其中,代码模板b和代码模板c的组合,以及代码a、代码模板b和代码模板c的组合也能实现对待操作对象的一种类型的操作,那么,可定义5个模板处理器,定义这5个模板处理器可加载的代码模板依次为代码模板a、代码模板b、代码模板c、代码模板b和代码模板c的组合、代码a、代码模板b和代码模板c的组合。当然,如果还有其他组合也可以实现对待操作对象的操作,则定义更多的模板处理器。为定义的模板处理器添加对应的元数据类型标签,其中一个模板处理器可对应多个元数据类型标签。

在一个实施例中,如图5所示,步骤s306:将加载的代码模板与元数据进行组合,生成至少一种操作待操作对象的代码文件,包括如下步骤:

需要说明的是,下述步骤给出的是元数据与一个或者一组代码模板组合的逻辑,可通过循环执行下述步骤实现元数据与多组代码模板的组合,或者多线程运行下述步骤,实现元数据与多组代码模板的同步组合。

步骤s502:将元数据转换成键值对的集合,键值对包括变量和变量值。

将元数据转换成(”key=value”)字符串,key为变量,value为变量值。

步骤s504:获取代码模板的目录,将目录中目录子项的变量替换成元数据中的变量值。

递归遍历代码模板目录中的所有子项,判断当前遍历的子项是文件还有目录,若是目录,查找目录中是否有变量,若是,则查找元数据中是否存在对应目录中的变量的变量值,若是,用对应的变量值替换目录中的变量,直至替换掉代码模板每层目录子项的变量。

如模板目录中带有${var}变量字符,转换成的元数据为context.put(“var”,”hello”),目录遍历时,将${var}字符用”hello”替换。

步骤s506:根据替换变量后的代码模板目录的目录子项生成包名。

步骤s508:获取代码模板文件,使用元数据替换文件中的内容,生成代码文件,生成的代码文件声明生成的包名。

代码模板目录包括目录子项和文件子项,将目录子项中的变量替换成元数据的变量值后,基于代码模板的各层目录子项按照设定规则生成包名。

代码模板目录中的文件子项指定代码模板文件,模板引擎将代码模板文件中的内容用元数据进行替换,去掉模板中的空行和注解,生成代码文件。

本实施例中,根据模板目录的目录子项生成包名,根据模板目录中的文件子项生成代码文件,代码文件声明生成的包名。在生成代码的时候,为生成的代码文件声明一个包名,即使用该包名为代码文件中的类创建新的命名空间,由于包创建了新的命名空间(namespace),所以不会跟其他包中的任何名字产生命名冲突。使用包机制,更容易实现访问控制,并且让定位相关类更加简单,不使用这种包机制为新生成得到代码声明包名将会出现编辑错误。

在一个实施例中,在提取待操作对象的元数据时,为元数据配置包名前缀。可以是,查找待操作对象所处系统的系统标识名,将所处系统的系统标识名配置为待操作对象的元数据的包名前缀。生成的包名中添加包名前缀。

举例来说,代码模板的模板目录为:templates/app/appcaller.java,其中/app/为目录子项,appcaller.java为文件子项,若配置的包名前缀为com.lufax,根据目录子项生成的包名为com.lufax.app。基于文件子项加载模板文件,组合模板文件和元数据后生成代码文件,该代码文件对应的包名即为com.lufax.app。

当加载的一组代码模板中包括多个代码模板时,按照步骤s502-s508生成多个代码文件,每个代码文件对应生成一个包名。生成得到代码文件的目录包括其对应的包名。

应该理解的是,虽然图2、4-5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、4-5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,在步骤s508:获取述所代码模板的文件,使用元数据替换文件中的内容生成代码文件,其中,生成的代码文件声明根据代码模板目录生成的包名之后,还包括:判断生成的代码文件是否已经存在,若是,则合并代码文件。

如图6为代码合并的逻辑示意图。首先获取已有代码文件和新代码文件,使用eclipsejdt库将已有代码和新代码转换成语法树,加载配置的合并策略并循环执行合并策略以生成合并后的语法树,将合并后的语法树转换成代码文本,将代码文本写入目标代码文件。

在一个实施例中,还包括目录和目录的合并。具体为:判断合并源的类型,是目录和目录的合并还是文件和文件的合并。若是文件和文件的合并,采用如图6所示的合并方法进行合并。若是目录和目录的合并,则,读取源目录中的文件列表,遍历其中的每一个文件,获得文件与源目录路径之间的相对路径,根据相对路径,获取目标文件的完整路径,判断目标文件是否存在,若不存在,将当前遍历的代码文件中的代码复制到目标代码文件中,若目标文件存在,则进行按照图6所示的方法进行源文件和目标文件的合并。遍历源目录中的下一个源文件,直至遍历完源目录文件列表中的所有的文件。

本实施例中,预先定义如下表格所示合并策略,表1中给出的合并策略类型、名称和对合并策略的描述,具体参考如下的表格。

表1

本实施例中,为避免生成的代码文件覆盖已有代码,造成代码文件丢失,本实施例中预先定义代码合并策略,自动查找待合并的代码文件,包括文件和文件的合并以及目录和目录的合并。本实施例中,通过循环执行代码策略自动进行代码的合并,无需手动合并,在批量生成代码的基础上实现了代码的自动管理。

在一个实施例中提供一种代码文件生成方法,包括如下内容:

获取待操作对象的源码文件,从源码文件中提取待操作对象的元数据。将所有待操作对象的元数据以元数据文件的形式进行存储。获取到批量生成代码的指令时,递归遍历每一个元数据文件,从文件中读取元数据,将读取的元数据转换成递归的键值对格式的map。创建数据容器,使用从spring(spring是一个分层的javase/eefull-stack一站式轻量级开源框架)中加载配置的各种工具类将格式转换后的元数据加入到数据容器中,获取配置的包名前缀,将报名前缀加入到数据容器中。

针对当前遍历的元数据配置需要加载的模板处理器,也可以根据预先定义的模板处理器与待操作对象的对应关系,自动加载对应的模板处理器。预先定义每个模板处理器加载的代码模板。遍历模板处理器能够加载的代码模板目录的所有子项,判断当前遍历的子项是文件还是目录,若是目录,查找中是否存在变量,将变量对数据容器中的键值对进行匹配,将变量替换成变量值,替换后结合当前层目录和上一层目录生成包名,遍历下一层目录子项,不断更新包名,直至遍历的子项为文件,将最新的包名加入至数据容器中,包名和包名前缀组合成完整的包名。模板引擎加载模板代码文件,调用数据容器,首先是调用数据容器中的元数据,将代码模板中的内容替换成元数据,其次,是将数据容器中的包名写入代码模板中声明包名的位置,最后替换模板内容,去除模板造成的空行以及模板中的注解,生成并输出代码文件,生成的代码文件声明数据容器中的包名,判断代码文件是否存在,若是,合并代码文件。

遍历模板处理器可加载的下一个代码模板目录,遍历目录子项生成包名,将当前生成的包名加入至数据容器中替换已有的包名,加载当前代码模板目录对应的代码模板文件,生成代码文件,生成的代码文件声明数据容器中替换后的包名。直至遍历完该元数据对应的所有的模板处理器中的所有代码模板。获取下一个元数据文件,基于下一个元数据文件重新构建数据容器,遍历完所有的元数据文件。

本实施例中,基于一个待操作对象生成一个数据容器,配置的众多代码模板调用该数据容易进行内容替换即可批量生成代码文件,代码文件生成效率更高。

在一个实施例中,如图7所示,提供了一种代码文件生成装置,包括:元数据提取模块702、代码模板加载模块704和组合模块706,其中:

元数据提取模块702,获取待操作对象的元数据。

代码模板加载模块704,用于加载与提取的元数据匹配的至少一组代码模板,其中,每组代码模板定义待操作对象的设定操作逻辑。

组合模块706,用于将加载的代码模板与元数据进行组合,生成至少一种操作待操作对象的代码文件。

在一个实施例中,元数据提取模块702,还用于获取待操作对象的源码文件;解析源码文件,根据预先配置的源码文件类型与数据提取策略之间的对应关系确定源码文件对应的数据提取策略;加载确定的数据提取策略,通过数据提取策略从源码文件中提取元数据。

在一个实施例中,代码模板加载模块704,还用于根据元数据的类型调用至少一个模板处理器,其中,模板处理器为设定代码模板组合的加载器;通过模板处理器加载对应的代码模板组合。

在一个实施例中,如图8所示,组合模块706,包括格式转换模块802,包名生成模块804和代码文件生成模块806,其中:

格式转换模块802,用于将元数据转换成键值对的集合,键值对包括变量和变量值。

包名生成模块804,用于获取代码模板目录,提取代码模板目录中的目录子项,将目录子项中的变量替换成元数据中对应变量的变量值,根据变量替换后的目录子项生成包名。

代码文件生成模块806,用于根据代码模板目录中的文件子项获取代码模板文件,将代码模板文件中的变量替换成元数据中对应变量的变量值,生成代码文件,其中,生成的代码文件声明生成的包名。

在一个实施例中,如图9所示,代码生成装置还包括文件合并模块708,用于判断生成的代码文件是否已经存在,若是,则将生成的代码文件和已有代码文件转换成语法树,循环执行配置的合并策略生成合并后的语法树,根据合并后的语法树生成合并后的代码文件。

关于代码生成装置的具体限定可以参见上文中对于代码生成方法的限定,在此不再赘述。上述代码生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储生成的代码文件。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种代码文件生成方法。

本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:获取待操作对象的元数据;加载与提取的元数据匹配的至少一组代码模板,其中,每组代码模板定义待操作对象的设定操作逻辑;将加载的代码模板与元数据进行组合,生成至少一种操作待操作对象的代码文件。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取待操作对象的源码文件;解析源码文件,根据预先配置的源码文件类型与数据提取策略之间的对应关系确定源码文件对应的数据提取策略;加载数据提取策略,通过数据提取策略从源码文件中提取元数据。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据元数据的类型调用至少一个模板处理器,其中,模板处理器为设定代码模板组合的加载器;通过模板处理器加载对应的代码模板组合。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:将提取的元数据转换成键值对的集合,键值对包括变量和变量值;获取代码模板目录,提取代码模板目录中的目录子项,将目录子项中的变量替换成元数据中对应变量的变量值,根据变量替换后的目录子项生成包名;根据代码模板目录中的文件子项获取代码模板文件,将代码模板文件中的变量替换成元数据中对应变量的变量值,生成代码文件,其中,生成的代码文件声明生成的包名。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:判断生成的代码文件是否已经存在,若是,则将生成的代码文件和已有代码文件转换成语法树,循环执行配置的合并策略生成合并后的语法树,根据合并后的语法树生成合并后的代码文件。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取待操作对象的元数据;加载与提取的元数据匹配的至少一组代码模板,其中,每组代码模板定义待操作对象的设定操作逻辑;将加载的代码模板与元数据进行组合,生成至少一种操作待操作对象的代码文件。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取待操作对象的源码文件;解析源码文件,根据预先配置的源码文件类型与数据提取策略之间的对应关系确定源码文件对应的数据提取策略;加载数据提取策略,通过数据提取策略从源码文件中提取元数据。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:根据元数据的类型调用至少一个模板处理器,其中,模板处理器为设定代码模板组合的加载器;通过模板处理器加载对应的代码模板组合。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:将提取的元数据转换成键值对的集合,键值对包括变量和变量值;获取代码模板目录,提取代码模板目录中的目录子项,将目录子项中的变量替换成元数据中对应变量的变量值,根据变量替换后的目录子项生成包名;根据代码模板目录中的文件子项获取代码模板文件,将代码模板文件中的变量替换成元数据中对应变量的变量值,生成代码文件,其中,生成的代码文件声明生成的包名。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:判断生成的代码文件是否已经存在,若是,则将生成的代码文件和已有代码文件转换成语法树,循环执行配置的合并策略生成合并后的语法树,根据合并后的语法树生成合并后的代码文件。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1