当前位置: 首页 > news >正文

网站开发和推广方案专业搜索引擎优化电话

网站开发和推广方案,专业搜索引擎优化电话,在线作图免费网站,网站建设源代码共享目录 1. OpenRewrite处理流程概述 2. OpenRewrite访问者模式的应用 2.1 访问者模式简介 2.2 OpenRewrite框架如何应用访问者模式 2.2.1 抽象访问者具体访问者 2.2.2 抽象元素具体元素 3. LST无损语义树构造 4. 配方#xff08;Recipe#xff09;执行流程 …目录 1. OpenRewrite处理流程概述 2. OpenRewrite访问者模式的应用 2.1 访问者模式简介 2.2 OpenRewrite框架如何应用访问者模式 2.2.1 抽象访问者具体访问者 2.2.2 抽象元素具体元素 3. LST无损语义树构造 4. 配方Recipe执行流程 4.1 执行入口 4.2 LargeSourceSet说明 4.3 配方执行时序图 4.4 配方执行结果表示 OpenRewrite通过将不同类型的源文件构建为Lossless Semantic Trees (LST无损语义树的数据结构能够准确和全面地表示源文件的元数据和语义信息。构造完LST后通过应用访问者模式将LST数据结构本身与访问LST元素的操作解耦使得我们能够灵活的自定义各种访问操作而又不改变LST数据结构。 本文主要对OpenRewrite框架设计和原理进行解析分析OpenRewrite框架中是如何运用访问者模式进行架构设计的然后进一步分析访问逻辑的具体执行过程以便更清楚的掌握OpenRewrite内部执行机理拨开云雾见月明进而更好的指导OpenRewrite开发实践。 关于OpenRewrite的介绍和Recipe简单开发实践请参考前述文章 大规模自动化重构框架--OpenRewrite浅析 OpenRewrite实现一个简单的配方Recipe 1. OpenRewrite处理流程概述 OpenRewrite作为自动化重构的框架其内部处理流程是通过配方Recipe来触发执行的顶层处理流程如下 Recipe允许使用者自定义重构逻辑的封装类内部通过getVisitor方法返回构造好的访问器进而执行访问器的重构规则Tree作为LST无损语义树的顶层抽象元素是所有文件类型中元素的顶层接口类SourceFile所有不同类型文件解析后顶层具体元素的父接口比如Java源文件解析为J.CompilationUnit是SourceFile的具体实现子类LargeSourceSet需要改写的源文件集合的封装类内部可以包含不同文件类型的源文件TreeVisitor顶层访问器接口针对不同的文件类型派生了不同的子类访问器接口比如针对Java语言定义了JavaVisitorChangeset/Result源文件集合LargeSourceSet经过配方Recipe中的访问器TreeVisitor访问后的结果集包含了重构前before和重构后after的表示 2. OpenRewrite访问者模式的应用 2.1 访问者模式简介 在具体说明OpenRewrite框架中访问者模式是如何应用的之前先简单回顾下访问者模式的基本要素 访问者Visitor模式将作用于某种数据结构中的各元素的操作分离出来封装成独立的类使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作为数据结构中的每个元素提供多种访问方式。 访问者模式包含的核心类包括 抽象访问者Visitor定义一个访问具体元素的接口为每个具体元素类对应一个访问操作 visit() 该操作中的参数类型标识了被访问的具体元素。具体访问者ConcreteVisitor实现抽象访问者角色中声明的各个访问操作确定访问者访问一个元素时该做什么。抽象元素Element声明一个包含接受操作 accept() 的接口被接受的访问者对象作为 accept() 方法的参数。具体元素ConcreteElement实现抽象元素角色提供的 accept() 操作其方法体通常都是 visitor.visit(this) 另外具体元素中可能还包含本身业务逻辑的相关操作 2.2 OpenRewrite框架如何应用访问者模式 在介绍完访问者模式的基本概念后下面说明下访问者模式在OpenRewrite框架中是如何运用的。 2.2.1 抽象访问者具体访问者 在OpenRewrite中抽象访问者为抽象基类TreeVisitor并且针对不同类型的访问对象定义了不同类型的访问器各访问器的整体类图继承结构如下 JavaVisitor针对Java源代码文件的访问器支持访问Java源代码中的各种元素比如包名Package、类声明ClassDeclaration、方法声明MethodDeclaration、变量声明VariableDeclarations等PropertiesVisitor针对Properties属性文件的访问器支持访问属性文件中的键值对、注释等元素YamlVisitor和PropertiesVisitor访问器类似支持对yaml类型文件的访问XmlVisitor针对Xml类型文件的访问器支持访问Xml文件的各种元素包括Tag、属性Attribute等MavenVisitor针对Maven Pom文件的访问器由于Pom文件也属于Xml格式文件所以这里MavenVisitor继承了XmlVisitorJsonVisitor针对Json格式文件的访问比如元素JsonKey、JsonValue等 除此之外OpenRewrite还提供了针对上述不同类型访问器的XXXIsoVisitor版本的访问器区别之处是Iso版本的各个visit方法返回的是被访问元素本身如果访问逻辑不改变被访问元素类型使用Iso版本可以规避手动类型转换的工作对使用者更友好。 在如上各种类型的访问器中 通过isAcceptable方法判断该访问器是否可以应用到被访问元素上通过各种visit方法实现不同类型元素的访问 2.2.2 抽象元素具体元素 在OpenRewrite框架中顶层抽象元素是接口Tree并且针对不同的文件类型扩展了不同的顶层抽象元素其整体类图如下 JJava项目的顶层抽象元素接口其子类包括J.CompilationUnit、J.ClassDeclaration、J.Package等具体Java元素PropertiesProperties属性文件中元素的顶层抽象元素子类包括具体元素键值对Properties.Entry等XmlXml文件中元素的顶层抽象元素子类包含了具体元素声明XmlDecl、Tag等Yamlyaml文件中元素的顶层抽象元素子类包括Document、Entry等JsonJson格式文件中元素的顶层抽象元素子类包括具体元素Member、JsonObject、Array等 在顶层元素Tree中定义了抽象方法isAcceptable和accept并交由子类具体实现 isAcceptable用于判断是否可以接受访问器参数的访问accept接受访问器参数的访问执行访问器中的具体访问逻辑 针对Java语言这里图示下各种具体元素的类图如下 3. LST无损语义树构造 OpenRewrite自动化重构主要涉及2个流程 1将源文件解析为LST的过程根据不同的源文件类型调用对应的Parser解析器类构造差异化的各种元素 2LST构造完成后调用配方Recipe中的访问器执行自动化代码重构 不同类型源文件对应的Parser解析器类图如下 JavaParser针对Java源文件代码的解析器顶层抽象接口具体实现子类是针对不同JDK版本的解析器解析器隔离解析不同JDK版本的语法特性比如Java8Parser解析JDK8版本内部实现委托给ReloadableJava8Parser进行解析最终将Java源代码文件解析为J.CompilationUnit顶层元素 PropertiesParser针对Properties属性文件的解析器类最终解析为Properties.File顶层元素 XmlParser针对Xml类型文件的解析器类最终解析为Xml.Document顶层元素 ......其它类似 4. 配方Recipe执行流程 4.1 执行入口 配方的实际执行入口是RecipeRun run(LargeSourceSet before, ExecutionContext ctx, int maxCycles, int minCycles) LargeSourceSet表示输入源文件集合封装类包含配方执行重构的文件列表ExecutionContext配方执行上下文可以用于全局参数传递等用途maxCycles指定配方最大执行周期次数minCycles指定配方最小执行周期次数RecipeRun封装了配方执行后的结果内部包含了结果集Changeset 4.2 LargeSourceSet说明 这里展开LargeSourceSet的类图如下可以看出其内部包含了ListSourceFile源文件集合 4.3 配方执行时序图 配方Recipe执行过程的时序图细化如下  其中RecipeScheduler封装了配方调度执行的具体细节内部会委托给RecipeRunCycle配方单次执行的封装对象最大执行次数可在调度时进行指定执行实际的源文件改写 RecipeRunCycle封装了配方单次执行的主体逻辑其中主要包含了以下3个方法 1scanSources 对源文件集合进行前置扫描通常用于在源文件实际改写前通过扫描源文件集合获取一些上下文信息用于重构逻辑中辅助判断或者元数据获取 2generateSources 用于在源文件实际改写前生成新的源文件并添加到源文件集合中进而执行后续的文件改写操作 3editSources 执行实际的源文件改写操作这里会调用配方Recipe中定义的访问器对源文件各具体元素进行visit执行重构逻辑该部分也是开发者可以覆写重构逻辑的地方 4.4 配方执行结果表示 配方执行完成后的结果存放到了RecipeRun类中其中字段changeSet存放了所有变更的结果集ListResult对象Result中又保存了变更前before和变更后after的源文件 最终将重构后after的源文件进行输出完成了自动化重构的处理流程。
http://www.hkea.cn/news/14299298/

相关文章:

  • 网站开发需要什么东西广州冼村街道办事处电话
  • 龙川县建设网站建设银行企业网上银行
  • 制作网站需要哪些成本柳州做网站的
  • 环球旅行社网站建设规划书论文邯郸模板建站教程
  • python做网站显示表格国家学历提升官网
  • 专业郑州网站建设WordPress数据库自动切换
  • 网站建设自己能做吗网络直播公司营销方案
  • 装饰公司手机网站网站哪些功能是PHP做的
  • 怎么建立一个购物网站自己做竞猜网站挣钱吗
  • 网站建设 接单网站返回首页按钮
  • 成都正规集团网站制作维护wordpress设置备案
  • 免费网站空间怎么北京市装修公司前10名
  • 现在建设网站都用什么软件下载logo免费自动生成器app
  • clo3d代做网站织梦淘宝客网站
  • 可信网站认证服务中心眼科医院网站建设方案
  • 丰润网站建设品质好是什么意思
  • 个人网站域名申请个人养老金怎么缴纳
  • 旅游网站设计代码html软件推广方法
  • 游戏建设网站装修设计师培训班
  • 北京改网站邢台信息发布平台
  • 中国能源建设集团网站深圳做网站哪个平台好
  • 做微信h5的网站宝德科技专业嘉兴网站建设
  • 广西智能网站建设方案营销顾问
  • 对网站政务建设的建议网站建设优化价格
  • 沈阳网站建设团队wordpress 文章带字段
  • 榆林北京网站建设商洛网站制作
  • wordpress升级vipseo效果检测步骤
  • 营销型网站建设公司哪家好查询网站是否正规
  • 网站建设改版目的部门网站建设方案
  • 网站后台安全网页设计模板素材美食