CN111309634B - 一种基于继承和代理的代码检测规则框架建立及使用方法 - Google Patents
一种基于继承和代理的代码检测规则框架建立及使用方法 Download PDFInfo
- Publication number
- CN111309634B CN111309634B CN202010209191.8A CN202010209191A CN111309634B CN 111309634 B CN111309634 B CN 111309634B CN 202010209191 A CN202010209191 A CN 202010209191A CN 111309634 B CN111309634 B CN 111309634B
- Authority
- CN
- China
- Prior art keywords
- rule
- proxy
- class
- rules
- framework
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- 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
- Y02A—TECHNOLOGIES FOR ADAPTATION TO CLIMATE CHANGE
- Y02A90/00—Technologies having an indirect contribution to adaptation to climate change
- Y02A90/10—Information and communication technologies [ICT] supporting adaptation to climate change, e.g. for weather forecasting or climate simulation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于继承和代理的规则检测框架的建立及使用方法,建立方法包括创建一个框架;在框架内创建规则集模块、代理模块和通用规则模块;在所述规则集模块中存放多个标准规则集,对于多个标准规则集中的所有规则进行统一管理,具体为:对于在当前框架下无法实现的规则,通过代理到其它框架内实现,将相关代理信息存入代理模块;对于在当前框架下可以实现的规则,通过提取父类去除代码冗余,所述父类记为通用规则类并存入通用规则模块,使得在不同框架下实现检测逻辑的规则都在框架Ⅰ内实现调用,即实现调用指令的统一,且避免了不同标准规则集中相同代码重复执行的问题,消除代码冗余,提高代码的可维护性。
Description
技术领域
本发明涉及静态代码扫描的程序分析技术领域,属于编程语言领域,尤其涉及一种基于继承和代理的代码检测规则框架建立及使用方法。
背景技术
由于通常需要对编译好的代码进行检查,特别是对于代码变更比较频繁的项目,因此,除了人工检查提交的代码之外,还需要有程序分析工具来监控代码的变更,从而扫描并检查代码中所存在的缺陷以及不符合规范的代码。
基于静态代码扫描的程序分析工具(以下简称分析工具)中往往实现了代码检测的工作流程,同时提供了多种规则检测框架,比如基于抽象语法树遍历的框架、符号执行框架及词法分析框架等等,不同的规则检测框架位于不同类库下。不同的代码框架下规则的调用指令也不尽相同,而对于绝大部分标准来说,同一个规则集都涵盖了不同类型的规则,这就导致了在调用同一个规则集的代码时,需要用户通过不同的调用方式对不同代码框架下的规则进行调用,降低了分析工具的易用性,也破环了规则集的模块化,降低代码的可维护性。
另外,现有的编程规范、编程指导原则等标准,其规则集往往涵盖了语法、语义、预处理和词法等方面,编程规范、编程指导原则之间存在相同相似的可复用规则的情况,因此存在另一个问题,如何将多个规则集统一管理,避免不同规则集之间相同规则的代码冗余。
发明内容
针对上述现有技术存在的问题,本发明提供了一种基于继承和代理的规则检测框架的建立方法,包括:
(11)创建一个框架;
(12)在框架内创建规则集模块、代理模块和通用规则模块;
(13)在所述规则集模块中存放多个标准规则集,对于多个标准规则集中的所有规则进行统一管理,具体为:
(131)对于在当前框架下无法实现的规则,通过代理到其它框架内实现,将相关代理信息存入代理模块;
(132)对于在当前框架下可以实现的规则,通过提取父类去除代码冗余,所述父类记为通用规则类并存入通用规则模块,同时被提取父类的规则改写成子类继承父类的形式。
作为上述方案的进一步优化,步骤(13)中还包括:对单个标准规则集创建一个规则基类,对于单个标准规则集内的规则提取通用属性,将所述通用属性存入规则基类,同时单个标准规则集内的规则改写成继承该规则基类的形式。
作为上述方案的进一步优化,对于继承同一个通用规则类且继承不同规则基类的规则,在步骤(132)中提取的通用规则类中用多态或传参代码段表示不同规则基类。
作为上述方案的进一步优化,所述步骤(131)中,代理模块包括委托规则、代理规则实现类和代理规则,具体包括:
(41)对于在当前框架下无法实现的规则,在可以实现的框架下创建代理规则,该代理规则实现检测逻辑;
(42)在当前框架下创建委托规则,该委托规则中包含实现其检测逻辑的代理规则的属性信息;
(43)在当前框架下创建代理规则实现类,该代理规则实现类记载委托规则和代理规则之间的映射关系;
(44)所述委托规则继承代理规则实现类和该委托规则所在规则集的规则基类。
基于上述一种基于继承和代理的规则检测框架的建立方法,本发明还提供了一种基于继承和代理的规则检测框架的使用方法,通过代码分析工具执行,所述代码分析工具的工作流程中加入了规则代理机制,具体包括:
(51)分析工具接收到代码检测的调用指令,获取调用指令信息;
(52)判断调用指令中是否包含委托规则:
若不包含委托规则,则根据调用指令对应的规则,根据其继承的父类通用规则类,对于通用规则类包含的方法重写或传入对应参数,实现规则的检测逻辑;
若包含委托规则,则根据委托规则和代理规则实现类映射到该委托规则对应的代理规则,实现规则的检测逻辑;
(53)检测结束后获取代码诊断信息;
(54)判断诊断信息是否为执行代理规则获取的:
若诊断信息是执行代理规则获取的,则将诊断信息改为对应的委托规则的诊断信息后再输出;
否则,将诊断信息直接输出。
作为上述方案的进一步优化,步骤(52)中,若调用指令对应的规则不是委托规则且没有继承的通用规则类,则只对其所继承的规则基类中的方法重写或传入对应参数,实现规则的检测逻辑。
本发明的一种基于继承和代理的规则检测框架的建立及使用方法,具备如下有益效果:
在包含多个标准规则集的规则框架内:
1.对于不能在框架Ⅰ内实现的规则,设置代理模块将规则调用入口放在框架Ⅰ内,使得在不同框架下实现检测逻辑的规则都在框架Ⅰ内实现调用,即实现调用指令的统一;
2.通过对框架内所有规则提取父类作为通用规则类实现所有规则的代码复用,避免了不同标准规则集中相同代码重复执行的问题,消除代码冗余,提高代码的可维护性;
3.通过对框架内单个标准规则集的规则提取通用属性作为规则基类,进一步消除代码冗余。
附图说明
图1为本发明一种基于继承和代理的规则检测框架的建立方法的规则检测框架结构示意图;
图2为本发明一种基于继承和代理的规则检测框架的使用方法的流程图。
实施方式
以下结合说明书附图及具体实施例进一步说明本发明的技术方案。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供了一种基于继承和代理的规则检测框架的建立方法,将现有的多个标准规则集的所有规则进行统一管理,对在不同框架实现的规则通过代理模式进行调用指令统一,对同一框架内的不同规则集内相同代码重复实现的问题,通过由子类规则提取出其父类的方式,建立继承关系,多个子类规则继承父类,消除代码冗余。
具体的,本发明提供的一种基于继承和代理的规则检测框架的建立方法,包括:
(11)创建一个框架,本实施例中记为框架Ⅰ;
(12)在框架内创建规则集模块、代理模块和通用规则模块;
(13)在所述规则集模块中存放多个标准规则集,对于多个标准规则集中的所有规则进行统一管理,具体为:
(131)对于在当前框架下无法实现的规则,通过代理到其它框架内实现,将相关代理信息存入代理模块;所述相关代理信息包括在当前框架下无法实现的规则信息,在其它框架实现的方法以及两者之间的映射信息,本实施例中,其它框架记为框架Ⅱ、框架Ⅲ等。
(132)对于在当前框架下可以实现的规则,通过提取父类去除代码冗余,所述父类记为通用规则类并存入通用规则模块,同时被提取父类的规则改写成子类继承父类的形式。
本实施例中,对于不能在框架Ⅰ内实现的规则,设置代理模块将规则调用入口放在框架Ⅰ内,使得在不同框架下实现检测逻辑的规则都在框架Ⅰ内实现调用,即实现调用指令的统一;
通过对框架内所有规则提取父类实现所有规则的代码复用,避免了不同标准规则集中相同代码重复执行的问题,消除代码冗余,提高代码的可维护性。
由于不同的标准规则集针对的语言标准等通用属性可能有差异,因此本实施例中步骤(13)还包括:对单个标准规则集创建一个规则基类,对于单个标准规则集内的规则提取通用属性,将所述通用属性存入规则基类,同时单个标准规则集内的规则改写成继承该规则基类的形式,使该规则集中的所有规则都继承该规则基类,保证该规则集中的所有规则都满足规则基类中定义的通用属性。
比如规则集是针对C99标准的,则该规则基类中实现当检测文件的语言标准为C99时,规则才生效。
本实施例通过对框架内单个标准规则集的规则提取通用属性,进一步消除代码冗余。
进一步的,对于继承同一个通用规则类且继承不同规则基类的规则,在步骤(132)中提取的通用规则类中用多态或传参代码段表示不同规则基类。
即:对框架内单个标准规则集的规则提取通用属性之后,对于继承了同一个通用规则类且继承不同规则基类的规则,在其通用规则类中加入表示规则基类的代码段,通过多态或传参代码段表示,在执行规则时,通过继承通用规则类并对通用规则类中的方法进行重写或传入对应参数,以具体实现该规则。
在步骤(131)中,代理模块包括委托规则、代理规则实现类和代理规则,具体包括:
(41)对于在当前框架下无法实现的规则,在可以实现的框架下创建代理规则,该代理规则实现检测逻辑;
(42)在当前框架下创建委托规则,该委托规则中包含实现其检测逻辑的代理规则的属性信息;
(43)在当前框架下创建代理规则实现类,该代理规则实现类记载委托规则和代理规则之间的映射关系;
(44)所述委托规则继承代理规则实现类和该委托规则所在规则集的规则基类。
通过代理机制,实现不同框架下的规则的转换,将框架内所有规则的调用入口都放在框架Ⅰ内的的规则集中,需要在其他框架下实现的规则通过代理方式,映射到对应实现的代理规则,这就把规则的实现和调用方式分离,规则的实现可以在其它框架下实现,规则的调用都在框架Ⅰ内,统一了框架内所有规则的调用方式。
综上,在本实施例中,根据继承关系可将框架内的所有规则分为三大类:
第一类是通过代理方式实现检测逻辑的,即委托规则,该类规则同时继承规则基类和代理规则实现类;
第二类是在框架Ⅰ内可以实现检测逻辑的,该类规则同时继承规则基类和通用规则类;
第三类是在框架Ⅰ内可以实现检测逻辑的,该类规则只继承规则基类。
结合图1说明,对于框架Ⅰ内的每个规则集都设有其抽象出来的规则基类,在此基础上:
1.若该规则可以在框架Ⅰ内实现,并且不能与其它规则结合提取父类进行去除冗余,则只继承当前规则集的规则基类,并在当前规则代码中实现检测逻辑;比如规则d2;
2.若该规则可以在框架Ⅰ内实现,但是可以与其他规则集的规则结合提取父类,则:
2.1、在通用规则模块中创建一个对应的通用规则类,该通用规则类实现检测逻辑;
2.2、该规则同时继承规则集的规则基类和上述的通用规则类以实现规则复用;比如规则a2和规则b1都继承了通用规则类1,而规则c2,规则b2和规则d1都继承了通用规则类2;
3.若该规则无法在框架Ⅰ内实现,则:
3.1、在可以实现的框架下创建代理规则,比如框架Ⅱ中的代理规则a'和c',并实现检测逻辑;
3.2、在规则所在规则集下创建委托规则,比如委托规则a1和委托规则c1,该委托规则不实现检测逻辑,仅指向代理规则;
3.3、在框架Ⅰ内创建代理规则实现类,记载委托规则a1和代理规则a'之间的映射关系;
3.4、委托规则a1同时继承规则基类A和代理规则实现类。
根据本发明的一种基于继承和代理的规则检测框架的建立方法,本发明还提供了一种基于继承和代理的规则检测框架的使用方法:通过代码分析工具执行,所述代码分析工具的工作流程中加入了规则代理机制,具体包括:
(51)分析工具接收到代码检测的调用指令,获取调用指令信息;
(52)判断调用指令中是否包含委托规则:
若不包含委托规则,则根据调用指令对应的规则,根据其继承的父类通用规则类,对于通用规则类包含的方法重写或传入对应参数,实现规则的检测逻辑;
若包含委托规则,则根据委托规则和代理规则实现类映射到该委托规则对应的代理规则,实现规则的检测逻辑;
(53)检测结束后获取代码诊断信息;
(54)判断诊断信息是否为执行代理规则获取的:
若诊断信息是执行代理规则获取的,则将诊断信息改为对应的委托规则的诊断信息后再输出;
否则,将诊断信息直接输出。
步骤(52)中,若调用指令对应的规则不是委托规则且没有继承的通用规则类,则只对其所继承的规则基类中的方法重写或传入对应参数,实现规则的检测逻辑。
在本实施例中,对于不能在该框架内实现而能在非框架Ⅰ内实现的规则,其实现方式,需要修改原有的程序分析工具的工作流程,在调用规则时加入代理检测逻辑,并在报警阶段将报警信息替换,即:
1、在分析工具接收到调用指令时,分析调用指令中是否包含委托规则,若包含则将这部分指令替换为其对应的代理规则的调用指令;
2、在分析工具检测到代码错误后,根据诊断信息分析违反的规则是否为代理规则,若是代理规则,则将报警信息替换回其对应的委托规则的报警信息。
本发明不局限于上述具体的实施方式,本领域的普通技术人员从上述构思出发,不经过创造性的劳动,所做出的种种变换,均落在本发明的保护范围之内。
Claims (3)
1.一种基于继承和代理的规则检测框架的建立方法,其特征在于:包括:
(11)创建一个框架;
(12)在框架内创建规则集模块、代理模块和通用规则模块;
(13)在所述规则集模块中存放多个标准规则集,对于多个标准规则集中的所有规则进行统一管理,具体为:
(131)对于在当前框架下无法实现的规则,通过代理到其它框架内实现,将相关代理信息存入代理模块;
(132)对于在当前框架下可以实现的规则,通过提取父类去除代码冗余,所述父类记为通用规则类并存入通用规则模块,同时被提取父类的规则改写成子类继承父类的形式;
所述步骤(13)中还包括:对单个标准规则集创建一个规则基类,对于单个标准规则集内的规则提取通用属性,将所述通用属性存入规则基类,同时单个标准规则集内的规则改写成继承该规则基类的形式;
所述步骤(13)中还包括:对于继承同一个通用规则类且继承不同规则基类的规则,在步骤(132)中提取的通用规则类中用多态或传参代码段表示不同规则基类;
所述步骤(131)中,代理模块包括委托规则、代理规则实现类和代理规则,具体包括:
(41)对于在当前框架下无法实现的规则,在可以实现的框架下创建代理规则,该代理规则实现检测逻辑;
(42)在当前框架下创建委托规则,该委托规则中包含实现其检测逻辑的代理规则的属性信息;
(43)在当前框架下创建代理规则实现类,该代理规则实现类记载委托规则和代理规则之间的映射关系;
(44)所述委托规则继承代理规则实现类和该委托规则所在规则集的规则基类。
2.一种基于权利要求1所述方法建立的继承和代理的规则检测框架的使用方法,其特征在于:通过代码分析工具执行,所述代码分析工具的工作流程中加入了规则代理机制,具体包括:
(51)分析工具接收到代码检测的调用指令,获取调用指令信息;
(52)判断调用指令中是否包含委托规则:
若不包含委托规则,则根据调用指令对应的规则,根据其继承的父类通用规则类,对于通用规则类包含的方法重写或传入对应参数,实现规则的检测逻辑;
若包含委托规则,则根据委托规则和代理规则实现类映射到该委托规则对应的代理规则,实现规则的检测逻辑;
(53)检测结束后获取代码诊断信息;
(54)判断诊断信息是否为执行代理规则获取的:
若诊断信息是执行代理规则获取的,则将诊断信息改为对应的委托规则的诊断信息后再输出;
否则,将诊断信息直接输出。
3.根据权利要求2所述的规则检测框架的使用方法,其特征在于:步骤(52)中,若调用指令对应的规则不是委托规则且没有继承的通用规则类,则只对其所继承的规则基类中的方法重写或传入对应参数,实现规则的检测逻辑。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010209191.8A CN111309634B (zh) | 2020-03-23 | 2020-03-23 | 一种基于继承和代理的代码检测规则框架建立及使用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010209191.8A CN111309634B (zh) | 2020-03-23 | 2020-03-23 | 一种基于继承和代理的代码检测规则框架建立及使用方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111309634A CN111309634A (zh) | 2020-06-19 |
CN111309634B true CN111309634B (zh) | 2023-06-16 |
Family
ID=71156106
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010209191.8A Active CN111309634B (zh) | 2020-03-23 | 2020-03-23 | 一种基于继承和代理的代码检测规则框架建立及使用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111309634B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116756004A (zh) * | 2023-05-29 | 2023-09-15 | 成都赛力斯科技有限公司 | 一种静态检查的规则集生成方法及装置 |
CN117193750B (zh) * | 2023-11-08 | 2024-03-15 | 深圳大数信科技术有限公司 | 一种基于CraphQL的全栈低代码平台实现方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102339252A (zh) * | 2011-07-25 | 2012-02-01 | 大连理工大学 | 基于xml中间模型以及缺陷模式匹配的静态检测系统 |
CN102681855A (zh) * | 2012-05-25 | 2012-09-19 | 南京邮电大学 | 一种面向无线传感网的模型到代码的转化方法 |
CN103279631A (zh) * | 2013-06-27 | 2013-09-04 | 南京大学 | 设计模式制导的爪哇代码评审方法 |
CN106503563A (zh) * | 2016-10-17 | 2017-03-15 | 成都知道创宇信息技术有限公司 | 基于通用框架的批量漏洞检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8464225B2 (en) * | 2007-05-06 | 2013-06-11 | Dynatrace Software Gmbh | Method and system for adaptive, generic code instrumentation using run-time or load-time generated inheritance information for diagnosis and monitoring application performance and failure |
-
2020
- 2020-03-23 CN CN202010209191.8A patent/CN111309634B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102339252A (zh) * | 2011-07-25 | 2012-02-01 | 大连理工大学 | 基于xml中间模型以及缺陷模式匹配的静态检测系统 |
CN102681855A (zh) * | 2012-05-25 | 2012-09-19 | 南京邮电大学 | 一种面向无线传感网的模型到代码的转化方法 |
CN103279631A (zh) * | 2013-06-27 | 2013-09-04 | 南京大学 | 设计模式制导的爪哇代码评审方法 |
CN106503563A (zh) * | 2016-10-17 | 2017-03-15 | 成都知道创宇信息技术有限公司 | 基于通用框架的批量漏洞检测方法 |
Non-Patent Citations (1)
Title |
---|
曹阳,苏玉北,尹建华.基于规则方法的管理对象行为形式化描述.武汉大学学报(理学版).2001,(第01期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111309634A (zh) | 2020-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7010780B2 (en) | Method and system for software modularization and automatic code generation for embedded systems | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
CN111309634B (zh) | 一种基于继承和代理的代码检测规则框架建立及使用方法 | |
US20060129418A1 (en) | Method and apparatus for analyzing functionality and test paths of product line using a priority graph | |
CN111506314B (zh) | 项目开发的方法、装置、服务器及介质 | |
US8327343B2 (en) | Method and system for optimizing source code | |
CN112363694B (zh) | Fmu文件及求解器运行环境与工业软件的集成方法 | |
Ribeiro et al. | Ecoandroid: An android studio plugin for developing energy-efficient java mobile applications | |
US8615729B2 (en) | Extending existing model-to-model transformations | |
US20090055421A1 (en) | Migration and transformation of data structures | |
CN110233946A (zh) | 执行外呼业务方法、电子设备及计算机可读存储介质 | |
US7634763B2 (en) | Extensible multi-language compilation | |
Rinner et al. | Creating ISO/EN 13606 archetypes based on clinical information needs | |
JP2010140408A (ja) | ソースコード変換装置 | |
US20080127128A1 (en) | Type Validation for Applications Incorporating A Weakly-Typed Language | |
CN107729015B (zh) | 一种确定工程代码中的无用函数的方法和装置 | |
CN110879710B (zh) | 一种rpg程序自动转成java程序的方法 | |
Giachetti et al. | Integration of domain-specific modelling languages and UML through UML profile extension mechanism. | |
Normantas et al. | Extracting business rules from existing enterprise software system | |
Giachetti et al. | Using UML profiles to interchange DSML and UML models | |
CN113050935A (zh) | 生成混入对象的方法、装置、计算设备及计算机可读存储介质 | |
US7827522B2 (en) | Computer method and apparatus for implementing redefinition of model features | |
WO2008015110A2 (en) | Methods, apparatus and computer programs for modelling computer programs | |
Wendland et al. | Establishing a service-oriented tool chain for the development of domain-independent MBT scenarios | |
US20050144597A1 (en) | Transformation function of a TMN system |
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 |