CN112965748A - 一种可配置的自动添加代码注解的方法 - Google Patents

一种可配置的自动添加代码注解的方法 Download PDF

Info

Publication number
CN112965748A
CN112965748A CN202110386184.XA CN202110386184A CN112965748A CN 112965748 A CN112965748 A CN 112965748A CN 202110386184 A CN202110386184 A CN 202110386184A CN 112965748 A CN112965748 A CN 112965748A
Authority
CN
China
Prior art keywords
name
attribute
annotation
file
location
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.)
Granted
Application number
CN202110386184.XA
Other languages
English (en)
Other versions
CN112965748B (zh
Inventor
熊德明
李耀
彭磊
杨志文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Zhongbang Bank Co Ltd
Original Assignee
Wuhan Zhongbang Bank Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Zhongbang Bank Co Ltd filed Critical Wuhan Zhongbang Bank Co Ltd
Priority to CN202110386184.XA priority Critical patent/CN112965748B/zh
Publication of CN112965748A publication Critical patent/CN112965748A/zh
Application granted granted Critical
Publication of CN112965748B publication Critical patent/CN112965748B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及信息技术领域,提供了一种可配置的自动添加代码注解的方法,目的在于提出一种通过配置xml文件自动按指定属性、方法、类的后缀,扫描项目自动添加相应的注解,帮助开发更快完成项目开发工作。主要方案包括配置XML模板文件;解析XML文件,将所有注解配置参数子节点<request‑param>转换为注解对象Param,将集合对象参数列表paramList转换为键值对对象paramMap,根据XML文件中所配置的待处理文件的路径,逐级扫描路径下的所有java文件,获得文件对象的集合fileList;遍历集合对象fileList,对每个文件对象file的类名、属性名、方法名与键值对对象paramMap进行匹配,在匹配的上的类名、属性名、方法名前添加对应注解。

Description

一种可配置的自动添加代码注解的方法
技术领域
本发明涉及信息技术领域,提供了用于java开发方向的辅助开发的工具程序,具体为一种可配置的自动添加代码注解的方法。
背景技术
如果说注释是写给人看的,那么注解就是写给程序看的。它更像一个标签,贴在一个类、一个方法或者字段上。它的目的是为当前读取该注解的程序提供判断依据。比如程序只要读到加了@Test的方法,就知道该方法是测试方法,又比如@Befbre注解,程序看到这个注解,就知道该方法要放在@Test方法之前执行。
目前主流的java开发项目大量使用注解注入对应对象例如@Autowired、 @Resource,或者声明方法特性例如@Override、@Deprecated等,各种各样的注解帮助开发更快实现功能,完成开发任务。但是本身在代码上添加注解也需要时间,另外大量同类型属性、方法、类、接口需要添加的注解也基本相同,手动添加可能还会出现部分遗漏的情况。
发明内容
本发明的目的在于提出一种通过配置xml文件自动按指定属性、方法、类的后缀,扫描项目自动添加相应的注解,帮助开发更快完成项目开发工作。
为解决上述技术问题,本发明采用以下技术手段:
一种可配置的自动添加代码注解的方法,其特征在于,包括以下步骤:
步骤1、根据待添加的注解和所有待添加注解的文件所在的目录,以及注解的相关信息,配置XML模板文件;
步骤2、解析XML文件,将所有注解配置参数子节点<request-param>转换为注解对象Param,Param组成参数列表集合paramList,location-suffix属性与用location-type属性的值拼接即得到这个待添加注解在添加时在java文件中的位置信息;
其中注解配置参数子节点包含以下属性:
包含有待添加的注解名称的annotate-name属性;
包含有待添加注解的类型信息的location-type属性;
包含有待添加注解的类名、属性名、方法名的后缀的location-suffix属性
步骤3、将集合对象参数列表paramList转换为以locationSuffix拼接locationType为键的键值对对象paramMap,其中location-suffix的值放入locationSuffix,location-type的值放入locationType,annotate-name的值放入annotateName;
步骤4、根据XML文件中所配置的待处理文件的路径,逐级扫描路径下的所有java文件,获得文件对象的集合fileList;
步骤5、遍历集合对象fileList,对每个文件对象file的类名、属性名、方法名与键值对对象paramMap进行匹配,在匹配的上的类名、属性名、方法名前添加对应注解。
上述技术方案中,注解的相关信息包括解的java文件的类名、属性名、方法名。
上述技术方案中,步骤5具体包括:
步骤5.1、键值对对象paramMap中根据locationType确定需要匹配的是 iava文件的类名、属性名、方法名中的哪一个类型;
步骤5.2、然后根据locationSuffix的值去匹配iava文件中对一个类型的名称里的关键字;
步骤5.3、在匹配的上的类名、属性名、方法名前添加对应上annotateName 的值,即添加上注解名称。
上述技术方案中,定义XML模板的命名规则,以.xml为后缀,名称为项目名称或者需要处理得包的父级包名称;XML模板包括根节点和子节点,
所述XML模板的根节点:
具有用于区分各个不一样的文件待执行路径的id属性和用于表示待处理文件的路径的path属性;
所述子节点:
为注解配置参数子节点<request-param>,根节点具有多个子节点,所述注解配置参数子节点用于定义需要添加注解的要素,具体的包括用于表示待添加的注解名称的annotate-name属性、用于表示待添加注解的位置类型的location- type属性,用于表示待添加注解的位置的后缀的location-suffix属性。
因为本发明采用以上技术手段,因此具备以下有益效果:
具体实施方式
为了本技术领域的人员更好地理解本发明,下面结合实施例对本发明作进一步详细描述。
XML模板的说明如下:
步骤S0:定义XML模板的命名规则,以.xml为后缀,名称为项目名称或者需要处理得包的父级包名称,例如capital.xml;
步骤S1:XML模板的根节点为<service>,其有两个属性值,分别为:
id:该文件id,可以区分各个不一样的文件待执行路径;
path:待处理得文件路径;
步骤S2:XML的注解配置参数节点<request-param>,<service>可以有多个<request-param>节点。该节点定义了一种需要添加的注解的要素,其有三个属性值,分别为
annotate-name:待添加的注解名称,例如Autowired等;
location-type:待添加注解的位置类型,例如class(类)、function(方法)、attribute(属性)等;
location-suffix:待添加注解的位置的后缀,无固定字典项,类似lmpl 一类的文件名结尾;
步骤S2.1:<request-param>有0个、1个或者多个<entry>子节点,每个 <entry>;
节点都代表着该注解的一个参数。
<entry>的属性如下:
key-name:参数名称,允许不设定;
type:参数值的类型,支持String(字符串)、Array(数组)、Code(字典项)等类型;
value:支持直接设定参数的值,也可以设定*指代待处理得位置的名称;
function:参数值处理方法,允许不设定,对String类型的value值进行自动处理得方法名称。
实现该功能需要如下步骤:
步骤0:定义工具调用入口的main方法,使其读取对应xml文件,得到其内容为doc;
步骤1:验证该xml配置文件是否符合规范;
步骤1.1:解析doc,获取<service>的属性id和path的值,如果不存在则抛出异常提示信息结束操作,然后判断path的值对应的文件目录是否存在,不存在则抛出异常提示信息结束操作;
步骤1.2:获取<service>的所有<request-param>子节点得到列表reqParamList:
步骤1.3:遍历reqParamList,对reqParamList的每个元素reqParam如果存在<entry>子节点,再获取其下的所有<entry>子节点列表reqEntryList;
步骤1.3.1:遍历reqEntryList,对reqEntryList的每个元素reqEntry 做如下操作;
步骤1.3.2:获取reqEntry的type属性值type,如果获取不到则抛出异常提示信息结束操作,校验是否在支持的类型范围内,不在则抛出异常提示信息结束操作;
步骤1.3.3:获取reqEntry的value属性值value,如果获取不到则抛出异常提示信息结束操作;
步骤1.3.4:获取reqEntry的function属性值function,如果获取得到则校验是否在支持的方法范围内,不在则抛出异常提示信息结束操作;
步骤1.4:获取reqParam的annotate-name属性值annotate-name,如果获取不到则抛出异常提示信息结束操作;
步骤1.5:获取reqParam的location-type属性值location-type,如果获取不到则抛出异常提示信息结束操作,校验是否在支持的类型范围内,不在则抛出异常提示信息结束操作;
步骤1.6:获取reqParam的location-suffix属性值location-suffix,如果获取不到则抛出异常提示信息结束操作;
步骤1.7:校验reqParamList是否存在annotate-name相同的两个reqParam对象,如果存在则抛出异常提示信息结束操作;
步骤2:将doc内容转换成程序可执行的数据结构;
步骤2.1:将doc中的每个<request-param>子节点转换成Param对象;
步骤2.1.1:将<request-param>标签的属性annotate-name、location- type、location-suffix的值分别放入Param对象的属性annotateName、 locationType、locationSuffix中;
步骤2.1.2:如果<request-param>标签存在<entry>子节点,将每个 <entry>子节点转换成Entry对象;
步骤2.1.2.1:将<entry>标签的属性key-name、type、value、function 的值分别放入Entry对象的属性keyName、type、value、function中;
步骤2.1.2.2:将该<request-param>标签的全部<entry>子节点转换的 Entry对象加入到EntryList集合对象中;
步骤2.1.3:将EntryList集合对象放入Param对象的entryList属性中;
步骤2.2:将所有的Param对象加入到sumParamList集合对象中;
步骤2.3:遍历sumParamList集合对象,将sumParamList集合对象转为 ParamMap键值对(以String为key,Param的List集合对象为value)对象;
步骤2.3.1:将Param对象的locationSuffix和locationType的值,以locationSuffix+|+locationType的形式转为keyString字符串;
步骤2.3.2:判断ParamMap中是否已经存在该keyString字符串;
步骤2.3.2.1:如果存在则获取该key值对应的sonParamList集合对象;
步骤2.3.2.1.1:将本次遍历的Param对象加入到sonParamList集合对象中;
步骤2.3.2.1.2:将新的sonParamList集合对象再次以keyString为key 加入到ParamMap键值对对象中;
步骤2.3.2.2:如果不存在则实例化一个sonParamList集合对象;
步骤2.3.2.1.1:将本次遍历的Param对象加入到sonParamList集合对象中:
步骤2.3.2.1.2:将新的sonParamList集合对象以keyString为key加入到ParamMap键值对对象中;
步骤2.4:遍历结束,得到包含全部<request-param>子节点的ParamMap 键值对对象;
步骤3:扫描待处理的文件夹,得到其中包含的全部文件file,放入一个文件集合fileList;
步骤4:遍历文件集合fileList,按照xml设置处理全部file;
步骤4.1:遍历文件集fileList得到file对象;
步骤4.2:获得file对象的文件名fileName;
步骤4.3:遍历ParamMap键值对对象的key,看是否存在与fileName+ “|class”匹配的上的key;
步骤4.3.1:如果存在则获取该key的sonParamList集合对象;
步骤4.3.2:遍历sonParamList集合对象;
步骤4.3.2.1:按照Param对象的annotateName属性值在file文件的类名处前加入一行注解行;
步骤4.3.2.2:如果Param对象的entryList属性为非空集合,则遍历 entryList集合对象;
步骤4.3.2.2.1:在注解行后面加上(括号;
步骤4.3.2.2.2:如果Entry对象的keyName属性为非空,则按照keyName 的值设定注解参数的名称加“=”;
步骤4.3.2.2.3:如果Entry对象的type属性值为String,function属性值为空,则按照value的值设定注解参数的值;function属性值为非空,则按照value的值经过function的值指定的方法处理后,设定注解参数的值;
步骤4.3.2.3:entryList集合对象遍历完毕,在注解行后面加上)括号;
步骤4.3.2.4:打印日志记录fileName以及增加注解行信息:
步骤4.3.3:sonParamList集合对象遍历完毕;
步骤4.4:获得file文件的全部attribute属性组成attributeList集合对象;
步骤4.4.1:遍历attributeList集合对象得到attribute对象;
步骤4.4.2:获得attribute对象的名称attributeName值;
步骤4.4.3:遍历ParamMap键值对对象的key,看是否存在与 attributeName+“|attributeName”匹配的上的key;
步骤4.4.3.1:如果存在则获取该key的sonParamList集合对象;
步骤4.4.3.2:遍历sonParamList集合对象;
步骤4.4.3.2.1:按照Param对象的annotateName属性值在attribute属性的属性名处前加入一行注解行;
步骤4.4.3.2.2:如果Param对象的entryList属性为非空集合,则遍历 entryList集合对象;
步骤4.4.3.2.2.1:在注解行后面加上括号;
步骤4.4.3.2.2.2:如果Entry对象的keyName属性为非空,则按照 keyName的值设定注解参数的名称加“=”;
步骤4.4.3.2.2.3:如果Entry对象的type属性值为String,function 属性值为空,则按照value的值设定注解参数的值;function属性值为非空,则按照value的值经过function的值指定的方法处理后,设定注解参数的值;
步骤4.4.3.2.3:entryList集合对象遍历完毕,在注解行后面加上)括号;
步骤4.4.3.2.4:打印日志记录fileName的annotateName以及增加注解行信息;
步骤4.4.3.3:sonParamList集合对象遍历完毕,该attribute对象处理完毕;
步骤4.4.4:attributeList集合对象全部处理完毕;
步骤4.5:获得file文件的全部function方法组成functionList集合对象;
步骤4.5.1:遍历functionList集合对象得到function对象;
步骤4.5.2:对照4.4.2到4.4.4重复相同操作直到functionList集合对象全部处理完毕;
步骤4.6:获得下一个file对象,重复4.2到4.5操作,直到fileList 集合对象全部处理完毕;
步骤5:至此整个调用结束,日志打印结束标志。

Claims (4)

1.一种可配置的自动添加代码注解的方法,其特征在于,包括以下步骤:
步骤1、根据待添加的注解和所有待添加注解的文件所在的目录,以及注解的相关信息,配置XML模板文件;
步骤2、解析XML文件,将所有注解配置参数子节点<request-param>转换为注解对象Param,Param组成参数列表集合paramList,location-suffix属性与用location-type属性的值拼接即得到这个待添加注解在添加时在java文件中的位置信息;
其中注解配置参数子节点包含以下属性:
包含有待添加的注解名称的annotate-name属性;
包含有待添加注解的类型信息的location-type属性;
包含有待添加注解的类名、属性名、方法名的后缀的location-suffix属性。
步骤3、将集合对象参数列表paramList转换为以locationSuffix拼接locationType为键的键值对对象paramMap,其中location-suffix的值放入locationSuffix,location-type的值放入locationType,annotate-name的值放入annotateName;
步骤4、根据XML文件中所配置的待处理文件的路径,逐级扫描路径下的所有iava文件,获得文件对象的集合fileList;
步骤5、遍历集合对象fileList,对每个文件对象file的类名、属性名、方法名与键值对对象paramMap进行匹配,在匹配的上的类名、属性名、方法名前添加对应注解。
2.根据权利要求1所述的一种可配置的自动添加代码注解的方法,其特征在于,注解的相关信息包括解的java文件的类名、属性名、方法名。
3.根据权利要求1所述的一种可配置的自动添加代码注解的方法,其特征在于,步骤5具体包括:
步骤5.1、键值对对象paramMap中根据locationType确定需要匹配的是java文件的类名、属性名、方法名中的哪一个类型;
步骤5.2、然后根据locationSuffix的值去匹配java文件中对一个类型的名称里的关键字;
步骤5.3、在匹配的上的类名、属性名、方法名前添加对应上annotateName的值,即添加上注解名称。
4.根据权利要求1所述的一种可配置的自动添加代码注解的方法,其特征在于,定义XML模板的命名规则,以.xml为后缀,名称为项目名称或者需要处理得包的父级包名称;XML模板包括根节点和子节点,
所述XML模板的根节点:
具有用于区分各个不一样的文件待执行路径的id属性和用于表示待处理文件的路径的path属性;
所述子节点:
为注解配置参数子节点<request-param>,根节点具有多个子节点,所述注解配置参数子节点用于定义需要添加注解的要素,具体的包括用于表示待添加的注解名称的annotate-name属性、用于表示待添加注解的位置类型的location-type属性,用于表示待添加注解的位置的后缀的location-suffix属性。
CN202110386184.XA 2021-04-08 2021-04-08 一种可配置的自动添加代码注解的方法 Active CN112965748B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110386184.XA CN112965748B (zh) 2021-04-08 2021-04-08 一种可配置的自动添加代码注解的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110386184.XA CN112965748B (zh) 2021-04-08 2021-04-08 一种可配置的自动添加代码注解的方法

Publications (2)

Publication Number Publication Date
CN112965748A true CN112965748A (zh) 2021-06-15
CN112965748B CN112965748B (zh) 2022-04-15

Family

ID=76279863

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110386184.XA Active CN112965748B (zh) 2021-04-08 2021-04-08 一种可配置的自动添加代码注解的方法

Country Status (1)

Country Link
CN (1) CN112965748B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090037805A1 (en) * 2007-08-03 2009-02-05 Dietmar Theobald Annotation data filtering of computer files
CN109857387A (zh) * 2019-01-03 2019-06-07 中国银行股份有限公司 一种生成java类对象的方法及电子设备
CN111752542A (zh) * 2020-06-26 2020-10-09 武汉众邦银行股份有限公司 基于xml模板的数据库查询接口引擎
CN112394974A (zh) * 2020-11-23 2021-02-23 平安科技(深圳)有限公司 代码变更的注释生成方法、装置、电子设备及存储介质
CN112463161A (zh) * 2020-11-27 2021-03-09 平安科技(深圳)有限公司 基于联邦学习的代码注释生成方法、系统及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090037805A1 (en) * 2007-08-03 2009-02-05 Dietmar Theobald Annotation data filtering of computer files
CN109857387A (zh) * 2019-01-03 2019-06-07 中国银行股份有限公司 一种生成java类对象的方法及电子设备
CN111752542A (zh) * 2020-06-26 2020-10-09 武汉众邦银行股份有限公司 基于xml模板的数据库查询接口引擎
CN112394974A (zh) * 2020-11-23 2021-02-23 平安科技(深圳)有限公司 代码变更的注释生成方法、装置、电子设备及存储介质
CN112463161A (zh) * 2020-11-27 2021-03-09 平安科技(深圳)有限公司 基于联邦学习的代码注释生成方法、系统及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JUSTCRAZY: "springmvc入门&参数&注解", 《HTTPS://WWW.CNBLOGS.COM/21556GUO/P/13761814.TML》 *

Also Published As

Publication number Publication date
CN112965748B (zh) 2022-04-15

Similar Documents

Publication Publication Date Title
CN106919434B (zh) 一种代码生成方法及装置
CN110968325B (zh) 一种小程序转换方法及装置
CN111241454B (zh) 一种生成网页代码的方法、系统和装置
US10268570B2 (en) Methods, systems, and computer readable media for automated generation of test files and testing network equipment using same
US7577946B2 (en) Program product, method, and system for testing consistency of machine code files and source files
US20060161881A1 (en) Systems and methods for creating and providing templates in a single file
CN110109681B (zh) 不同平台间代码的转换方法及系统
CN110543427B (zh) 测试用例存储方法、装置、电子设备及存储介质
CN110781091A (zh) 应用程序的测试方法、装置、电子设备及存储介质
CN110618931A (zh) 依赖关系检测方法、装置、计算机设备及可读存储介质
CN113312033A (zh) 一种模板化的协议生成、管理方法
CN114579203B (zh) 脚本文件检查方法、装置、电子设备及存储介质
CN112799718A (zh) 一种枚举文档的生成方法、装置、电子设备及存储介质
CN103649924A (zh) 嵌入式装置、程序产生装置和程序
US8521762B2 (en) Automated business process modeling
CN111796855A (zh) 一种增量版本更新方法、装置、存储介质及计算机设备
CN113568604B (zh) 风控策略的更新方法、装置及计算机可读存储介质
JP2010140408A (ja) ソースコード変換装置
White et al. Datadeps. jl: Repeatable data setup for reproducible data science
CN113515303A (zh) 一种项目转型方法、装置和设备
CN112965748B (zh) 一种可配置的自动添加代码注解的方法
JP2010140407A (ja) ソースコード検査装置
CN111240681A (zh) 一种不同编程语言的转换方法及装置
CN112860232A (zh) 组件实施方法及装置
CN111221610B (zh) 一种页面元素采集方法和装置

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
GR01 Patent grant
GR01 Patent grant