使用 eclipse 插件将修改后的 AST 保存在新文件中

2023-12-14

我有一个 Eclipse 插件代码来操作项目/工作空间中的类 (smcho.Hello)。 我可以创建一个 CompilationUnit 并对其进行一些修改,但我需要将结果保存在不同的文件中以检查两个版本之间的差异。

这是我获取 CompilationUnit 的代码。

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject project = root.getProject("Hello");
project.open(null);
IJavaProject javaProject = JavaCore.create(project);
IType lwType = javaProject.findType("smcho.Hello");
org.eclipse.jdt.core.ICompilationUnit lwCompilationUnit = lwType.getCompilationUnit();
final ASTParser parser = ASTParser.newParser(AST.JLS3); 
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(lwCompilationUnit);
parser.setResolveBindings(true); // we need bindings later on
CompilationUnit unit = (CompilationUnit) parser.createAST(null /* IProgressMonitor */); 
// modify the unit AST node

如何将修改后的单元保存到新文件中?


您可以使用ASTRewriter这样做。

// get the ast rewriter
final ASTRewrite rewriter = ASTRewrite.create(ast);
// get the current document source
final Document document = new Document(unit.getSource());
// compute the edits you have made to the compilation unit
final TextEdit edits = rewriter.rewriteAST();
// apply the edits to the document
edits.apply(document);
// get the new source
String newSource = document.get();
// now write this source to some other file.

检查下面的链接。这让我们深入了解如何将 AST 更改写入文件。

http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html

Update:这就是我写入文件的方式:

File file = new File(destFile);
FileUtils.writeStringToFile(File file, String newSource) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 eclipse 插件将修改后的 AST 保存在新文件中 的相关文章

  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 如何将 Eclipse Classic 升级到 Java EE?

    我想开发 HTML5 网站 我已经安装了用于Android开发的Java 我的机器上安装了 Eclipse Classic 3 6 现在我希望在同一台机器上安装 Java EE 是否可以 如果是这样 请告诉我如何将 Eclipse Clas
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • php 字符串像 python 的“””“””一样转义?

    你好 我想知道是否有一种简单的方法来转义 php 中的字符串 在Python中我使用 并且它们之间的所有内容都被转义 所以当使用特殊字符时它会被忽略 我有一些文本需要回显 手动转义所有内容都需要很长时间 php有内置类似的功能吗 thank
  • 尝试访问 Android 中的 SQLite 数据库时,如何修复 SQLiteOpenHelper.getDatabaseLocked 错误?

    我正在尝试从 Sqlite 数据库检索一些数据 但是当我尝试使用 getTaskSent 方法检索数据时 出现以下错误 谁能建议我解决以下错误 E AndroidRuntime 23159 at android database sqlit
  • Django AND .htaccess 重写/重定向,这可能吗?

    是否可以让 Apache htaccess 重写在到达 django 之前生效 我希望能够指定RewriteRules在优先于 django 的 htaccess 文件中 如果没有匹配的内容 则将其分派到 mod wsgi django 我
  • C 中 const 和 volatile 限定符的用法区别?

    我已经回答了问题 C 中 const 指针和 volatile 指针有什么区别 我理解的解释是 const 修饰符意味着此代码不能更改变量的值 但这并不意味着不能通过此代码之外的方式更改该值 然而 易失性表示 此数据可能会被其他人更改 因此
  • 重新启动游戏并重新实例化对象

    介绍 我正在用 C 创建一个小游戏 并想创建一个重新启动游戏的函数 首先我创建对象player 然后我有一个 if 语句来确定何时按下某个键来调用New 方法 My goal 在该方法中 我想重新实例化 Player 类的对象 因此所有变量
  • 将连接字符串中的排序规则属性设置为 SQL Server 2005

    我有一个 ASP Net Web 应用程序 其 web config 中包含 SQL Server 2005 的连接字符串 Data Source ABCSERVER Network Library DBMSSOCN Initial Cat
  • 找不到 Python Visual Studio 代码模块

    已安装 Python 3 7 6 并尝试在 Visual Studio Code 中编写代码 Using import pikepdf 让我犯以下错误ModuleNotFoundError No module named pikepdf 但
  • 如何使 pygame 窗口全屏显示而不隐藏任务栏

    我目前正在学习pygame 我已经设置了一个窗口并将其设置为全屏 import pygame WIN pygame display set mode 0 0 pygame FULLSCREEN pygame display set capt
  • 通过Java客户端连接Azure服务总线

    我正在尝试使用 AMQP 协议从 Java 客户端连接 Azure 服务总线 我按照以下链接中的说明进行操作 http azure microsoft com en us documentation articles service bus
  • Python pygame 需要帮助同时禁用多个按键

    我创建了一个Frogger游戏原型和我不想允许同时按下两个键进行移动 目前在我的事件函数中我有以下内容 for event in pygame event get check for closing window if event type
  • 来自多个源字段的自动映射器条件映射

    我有一个如下所示的源类 public class Source public Field Fields get set public Result Results get set 并有一个目标类 例如 public class Destin
  • numpy中如何计算两个矩阵的外积?

    我有两个矩阵 A 和 B 大小分别为 NxK 和 MxK 我希望计算大小为 NxMxK 的张量 C 使得 C i j k A i k B j k 如何在 numpy 中有效地实现这一点 所有维度都很大 因此循环不是一种选择 使用循环版本中迭
  • 在 VSCode 中设置 Python 远程调试

    我将远程 ubuntu 16 04 驱动器安装在本地系统 ubuntu 16 04 上 以便我可以通过在 vscode 中打开源文件来编辑源文件 另外 在集成终端中 我可以 ssh 到远程系统并使用安装在虚拟环境中的远程 python 解释
  • Chrome 中不同父元素的 z 索引

    有两个容器 其中一个是固定的并覆盖 100 的屏幕 第二个是相对的 包含可滚动的内容 问题是有四个元素彼此相对定位 如下所示 第一个在固定容器中 第二个在绝对容器中 第三个元素在固定容器中 第四个在绝对容器中 div class conta
  • iOS 等宽自定义字体

    我的 Xcode 7 iOS 9 目标项目中包含自定义字体 我想让字体变成等宽字体 我尝试了这个 但没有成功 let originalFont UIFont name My Custom Font size 18 let originalF
  • 健康损失的迷宫中的最短路径

    假设您有一个由 2D 矩阵表示的地下城 您有一个起点 S x1 y1 和一个终点 E x2 y2 在此过程中 一些细胞中会有一个数字 这些数字会从您的健康得分中减去 其他细胞是你无法跨越的障碍 你一开始有 5 点生命值 你需要找到从 S 到
  • 处理带有空格的名称

    我的 Puppet 代理是 Windows Server 2012 我正在尝试向 AD 用户授予数据库权限 如果我尝试将权限分配给名称中不包含任何空格的 AD 用户 则该脚本可以正常工作 早些时候 不带空格的用户名也不起作用 但是当我添加额
  • 如何将highcharts中的毫秒级json数据格式化为日期格式?

    我从json获取日期数组为1420185600000 1420531200000 1420617600000 1420704000000 1420790400000 1420876800000 如何格式化它以在高图表的 X 轴标签中显示正确
  • 无法在android的服务中启动计时器

    我不知道发生了什么问题 我无法在我的服务中启动计时器 遵循代码 public class BkgService extends Service private Timer ServUpdTimer new Timer private sta
  • 使用 eclipse 插件将修改后的 AST 保存在新文件中

    我有一个 Eclipse 插件代码来操作项目 工作空间中的类 smcho Hello 我可以创建一个 CompilationUnit 并对其进行一些修改 但我需要将结果保存在不同的文件中以检查两个版本之间的差异 这是我获取 Compilat