CN112965748A - 一种可配置的自动添加代码注解的方法 - Google Patents
一种可配置的自动添加代码注解的方法 Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- 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
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-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属性。
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)
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 | 平安科技(深圳)有限公司 | 基于联邦学习的代码注释生成方法、系统及装置 |
-
2021
- 2021-04-08 CN CN202110386184.XA patent/CN112965748B/zh active Active
Patent Citations (5)
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)
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 |