java格式化输出文件,JavaParser 系列学习-07-格式化输出&词汇保存

本文介绍了JavaParser在代码生成和转换中的应用场景,特别是如何进行漂亮印刷和词法保留打印。漂亮印刷使代码格式正确,而词法保留则保持原始布局。在大型代码库转换时,推荐使用词法保留以减少代码审查的压力。文章通过示例展示了如何使用PrettyPrinter和LexicalPreservingPrinter进行格式化输出和保留原始布局。
摘要由CSDN通过智能技术生成

漂亮的印刷和词法保存

您可以将JavaParser用于不同的目的。

最常见的两个是代码生成和代码转换。

在这两种情况下,您最终都将生成Java代码,可能将其存储在扩展名为.java的文件中。

在 CompilationUnit 上对 toString() 的简单调用将返回一个字符串,可用于编写源代码。

我们面临的问题是:它将如何格式化AST中的代码?

答案是两种方式之一:

使用漂亮的印刷

使用词法保留打印

什么是漂亮印刷?

漂亮的打印意味着当我们将代码作为源代码写出时,文本表示将以格式正确,标准的方式打印。

例如,如果要解析一个现有的java类,如下所示:

class A { int

a;}

然后,您决定使用JavaParser对它进行漂亮的打印,您将获得以下代码表示形式:

class A {

int a;

}

什么是词法保留打印?

保留词汇的印刷是指保持原始布局的印刷。

当我们编写代码时,有一些信息对于编译器而言并不是严格意义上的,但对人类而言却很重要。

即空格和注释的位置。

如果您解析了一些代码,然后以保留词法的打印方式将其打印回来,您将获得与解析后相同的代码。

如果解析某些代码,对其进行修改,然后使用lexicalpreserving打印将其打印回去,您将获得与原始代码非常接近的代码,并且更改仅限于已明确更改的节点。

即使在以编程方式构建且未从源解析的AST上,也可以始终使用保留词法的打印。

在这种情况下,没有原始布局可保留,并且代码将默认为漂亮的打印形式。

当您解析代码并将某些以编程方式创建的新节点添加到AST时,情况也是如此:您解析的代码部分将附加布局信息,而您创建的节点将没有布局信息,并且它们将被漂亮地打印。

在漂亮打印和保留词汇的打印之间进行选择

我们已经看到,使用JavaParser从AST生成代码时,可以使用两种不同的样式。

下一个要考虑的问题是何时应该使用一个,何时应该使用另一个?

从我们已经看到的情况来看,很多情况下都涉及将JavaParser用于在大型代码库上执行转换。

在这种情况下,您通常会希望使用词法保留打印。

原因是,您的转换未修改的所有代码将保持完全不变。

通常,这会使开发人员更加放心,当提交大型(甚至安全)更改时,开发人员可能会感到紧张。

这也使我们可以使用更小的diff文件,从而使手动代码审查变得容易。

最后,它使我们能够保留具有意义的复杂布局或格式。

当生成不用于手动审阅的代码或转换代码时,您可以选择漂亮的打印。

如果要强制执行特定的打印,漂亮的打印也是一个不错的选择

代码样式:每次保存代码时,都可以确保它格式正确,没有任何例外。

这些是我们认为普遍的考虑因素,但请记住,JavaParser和JavaSymbolSolver旨在用作在许多不同上下文中使用的工具。

作为开发人员,您必须分析您的上下文并为您做出适当的选择。

我们已经看到了漂亮打印和词法保留打印之间的区别。

现在,让我们看看如何使用它们以及它们如何工作。

格式化输出

代码

package com.github.houbb.javaparser.learn.chap4;

import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;

import com.github.javaparser.ast.comments.LineComment;

import com.github.javaparser.printer.PrettyPrinter;

import com.github.javaparser.printer.PrettyPrinterConfiguration;

/**

* @author binbin.hou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值