奇怪的 JavaCore IType 缓存问题

2024-05-06

我正在开发一个插件,它接受工作区中实现某些接口(IDomain)的所有枚举,解析代码(使用 AST)对枚举进行一些修改,并将其标记为使用注释(@IDomainInfo)进行处理。

例如,它需要这样的东西:

public
enum SomeEnum implements IDomain {
  // ...
}

并生成如下内容:

public @IDomainInfo(domainId = 1)
enum SomeEnum implements IDomain {
  // Some changes here...
}

@IDomainInfo 背后的想法是插件不再需要处理带注释的枚举。

基本上,我完成该任务的方法是使用 JavaSearch API 进行搜索,以查找实现 IDomain 的所有枚举(简单的任务),结果我得到了 IJavaElements 列表(实际上是 IType 的实例)。然后,我调用一个方法来迭代结果列表,并创建一个包含所有未使用 @IDomainInfo 注释的 IType 实例的新列表,然后处理结果列表: 对于每个未注释的 IType 执行一些工作,使用 @ 注释 IType IDomainInfo 注释(使用 AST),然后将结果保存到文件(使用 IFile,这样我就可以看到更改而无需刷新,事实上,如果我在编辑器中打开枚举,我会看到它立即刷新:-)

所有这些工作正常,但如果我打开一个 @IDomainInfo 带注释的枚举(仅用于测试),然后删除 @IDomainInfo,保存文件(我确定),然后调用执行我之前描述的所有工作的操作,当我到达从无注释的 IType 中过滤带注释的 IType 的部分时,代码如下所示:

    for (IType type : typeList) {
      IAnnotation annotation = type.getAnnotation(“IDomainInfo”);

      if (!annotation.exists()) {
        // The annotation does not exist, so add the type to the
        // list of elements to update and go on...
        ret.add(type);
        continue;
      }
 // Something else here...
    }

嗯,结果是,对于我刚刚保存的文件,IType 检测到我刚刚删除的注释,就好像它仍然存在一样。如果我关闭并重新打开 Eclipse 一切正常。

现在,我刚刚检查并三次检查了我的代码,所以我确信我不会保留未编辑的旧 IType 的陈旧副本仍然带有注释版本(我所有的 IType 每次都来自新的 java 搜索调用我运行该动作)。

所以问题是,我可能做错了什么?我的意思是,我刚刚多次阅读了 JavaCore API,以检查我是否可能使用错误,或者我是否存在一些概念缺陷,但实际上我不知道,就像如果 Eclipse 会缓存 IType 并忽略我刚刚在编辑器中所做的更改 :-/

如果有人有想法,我将非常感激:-)


你的插件何时或如何被调用?您是否注册了资源侦听器,或者它是项目构建器还是其他什么?如果它是由资源侦听器调用的,则您的插件可能正在读取尚未保存的 IType 的“主副本”。因此,您的更改仍在工作副本中。

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

奇怪的 JavaCore IType 缓存问题 的相关文章

  • Eclipse 视图描述符已删除

    我有一个带有一些自定义视图的 Eclipse 插件项目 但最近每个视图在运行时都有错误 ENTRY org eclipse e4 ui workbench 2 0 2017 07 19 20 24 24 597 MESSAGE Removi
  • 可以安装 EGit:缺少要求:Git Team Provider Core

    所以我将 Coldfusion Builder 与 Ecplise 结合使用 我正在尝试在其中安装 EGit 以便我可以执行 Git 操作 我唯一能安装的是 EGit 0 11 1http download ecplise org rele
  • 强制 Eclipse (Helios) 在应用程序运行时使用较新版本的 SWT

    我正在使用 Eclipse Helios 开发一个 RCP 项目 安装的 SWT 版本 在插件目录中 是 org eclipse swt win32 3 6 2 org eclipse swt jar 我需要仅在 swt 3 8 中可用的新
  • 对话框中的 Xtext DSL 嵌入式编辑器

    我是 xtext 的新手 我已经使用 xtext 创建了 DSL 并且生成了工件 这生成了具有许多功能 如内容辅助和语法着色 的编辑器 现在的问题是我想将编辑器嵌入到对话框中 为了实现此目的 我使用嵌入式编辑器 我能够获取嵌入式编辑器并将其
  • 从 eclipse 中卸载和删除插件

    我正在从 eclipse 卸载选项中卸载名为 X 的插件 现在为了明确方法 我进入 eclipse 插件目录并从那里删除插件 jar 文件 现在我尝试重新安装相同的插件 并且 eclipse 提示错误 期间发生错误 org eclipse
  • Eclipse 中的 Scala 执行时间

    当我从 Eclipse 运行 Scala 程序时 出现了一些可疑的情况 我运行一个 App 对象 运行需要 7 8 秒 实际执行时间用对象中的 System nanoTime 计时 当我从命令行运行相同的 class 文件时 需要 2 5
  • M2Eclipse,META-INF/MANIFEST.MF

    我在 Eclipse 中使用 M2Eclipse 插件 而且不知道什么原因 每次在Eclipse中导入Maven项目时 总是生成一个空的 src main META INF MANIFEST MF 文件 jar 打包的项目 src main
  • Eclipse:如何安装 UML2 工具

    我想尝试 UML2 Tools for Eclipse 如图所示本教程 http www vogella de articles UML article html 我目前拥有面向 Java EE 开发人员的 Eclipse 3 6 Heli
  • 没有为 Eclipse 插件项目找到/生成 Plugin.xml 文件

    我正在开发一个 Maven 插件 它将用于覆盖默认的 Maven 生命周期 为了解决依赖关系 Eclipse 和其他 我想使用 tycho 所以我配置了maven项目将其转换为eclipse plugin project 这是我的 POM
  • Eclipse更新后插件消失了

    已使用更新 Eclipse PDTWindow gt Check for Updates特征 重启后所有第三方插件似乎都被关闭了 从 开始 clean命令行键没有帮助 Eclipse Installation Detals正确包含有关我所有
  • Eclipse 插件导出时出现错误:“无法解析导入 javafx.embed.swt”

    我正在尝试导出 Eclipse 插件 这只是我从此处的示例创建的一个 Eclipse 视图 http help eclipse org mars index jsp nav 2F2 0 http help eclipse org mars
  • 在 Eclipse 首选项中看不到 PHP 内容类型?

    我有一个带有 PDT 的新 eclipse Juno 安装 我导入了我的首选项 除了在内容类型部分我没有看到 PHP 内容类型之外 一切似乎都工作正常 我看到 php 内容类型为 content typ name0 如屏幕截图所示 这有什么
  • 如何修补 Eclipse 插件?

    我想修复 eclipse 插件 WTP 的官方插件 中的错误 我在本地更改了源代码 对其进行了调试 一切都很好 现在我想将此更改传播到我的 Eclipse 安装 但我遇到了问题 似乎有不止一种方法可以实现这一目标 例如 这个网站 http
  • 在Eclipse中添加注释掉代码的快捷按钮

    只是想知道是否有一种方法可以在 Eclipse 编辑器中添加一个按钮 就像在 Visual Studio 中一样 在 Java 视图 中快速注释或取消注释选定的代码块 Using the keyboard shortcut isn t ea
  • 对 JFace Treeviewer 多列进行排序

    我希望用户能够对TreeViewer只要他想 只要单击列标题即可 但是我不知道正确的方法 我发现我们可以使用ViewerComparator对不同的元素进行排序 但是 我不知道如何设置侦听器以便能够正确进行升序或降序排序 有没有办法让 JF
  • 如何使用 p2-maven-plugin 将插件和功能打包到 OSGI 包中

    我已经创建了一个插件和功能项目 用于插件 我正在使用 tycho maven 来构建它 我能够成功构建它 现在我想打包成 osgi 包 plugin jar feature jar artifacts jar content jar 为此
  • 用于将类文件转换为 Java 源代码的 Eclipse 插件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当源不可用时 是否有可用的 Eclipse 插件来反编译类文件 从 class 文件生成 java 源代码 类似于 Resharper 在
  • Eclipse 快捷方式查找覆盖某个方法的所有子类

    Is there an Eclipse shortcut to see all class overriding the method m Highlight select put cursor on the method name and
  • 如何使用 Eclipse 作为 Javascript IDE?

    我从官方下载页面下载了 eclipse Javascript IDE 但是 当我启动应用程序时 它显示 必须提供 Java 运行时环境或 Java 开发工具包才能运行 eclipse 我已经有一个运行良好的 eclipse 的 java I
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是

随机推荐

  • 使用 GdiPlus 卸载 DLL 时程序挂起

    我有一个加载 DLL 的应用程序 它使用德尔福 GDI 库 http sourceforge net projects delphigdiplus 该应用程序在卸载 DLL 时挂起 调用免费图书馆 https msdn microsoft
  • 防止在 Windows 资源管理器中打开重复的文件夹或子文件夹

    我正在使用下面的代码打开特定文件夹 我需要在打开之前检查一下 如果是的话文件夹或子文件夹是否已在 Windows 资源管理器中打开 以防止重复 感谢任何有用的评论和答案 Sub Prevent opening duplicate folde
  • ioc 和依赖注入之间的区别

    ioc 和依赖注入之间的区别 解释一下 spring 中的依赖注入 JSF 依赖注入和 spring 依赖注入有什么区别 IoC 的意思是控制反转 让我们看一些 强耦合代码 MyComponent 依赖于 Logger public cla
  • 需要对 mongodb 中的数组对象值求和

    如果该值存在 我正在尝试计算总价值 但查询并不能 100 工作 那么有人可以帮我解决这个问题吗 这是我的示例文档 我附上了两份文件 请提供这些文件并找出最佳解决方案 文件 1 id 1 message count 4 messages da
  • MPMoviePlayerController 添加自定义播放按钮

    目前我正在开发一个显示视频的 iPhone 应用程序 我使用 MPMoviePlayerController 从本地文件夹加载视频 我们可以定制标准媒体播放器吗 我想要做的是隐藏所有标准元素 播放 前进 倒带 完成 并仅使用带有自定义图像的
  • 包 javax.comm 不存在[重复]

    这个问题在这里已经有答案了 可能的重复 如何获取javax comm API https stackoverflow com questions 7562565 how to get javax comm api 我已经下载并安装了jdk1
  • 无法安装组件:模板或渲染函数未定义。组件导入失败

    我正在尝试复制 vue 教程示例 在这里找到 https v3 vuejs org guide component basics html passing data to child components with props https
  • Sails.js 中的子域路由

    我试图找出一种在 Sails js 中以完全动态的方式路由子域的方法 默认路由似乎不允许这样做 例如 如果用户访问 yourname example com 则路由会将其读取为 example com users theirname 并且子
  • 应用程序注册失败,因为文件位于网络共享上。注册包之前将文件复制到本地计算机

    我使用这些示例来构建 Windows 8 应用程序 http code msdn microsoft com windowsapps Getting started with C and 41e15af5 http code msdn mi
  • 在 HTML 中设置 LI 标记的值

    我有一个有序列表 我需要为其设置 值 就像是 ol li apple li li pear li li car li ol 这样它们就会显示我分配的数字 34 apple 45 pear 55 car 有没有办法告诉 LI 应显示什么数字
  • 无法使用服务帐户查询 Google Search Console API

    我需要使用服务帐户从 Google Search Console 网站管理员工具 检索一些数据 到目前为止我已经能够检索到access token对于我需要附加到请求的 url 的服务帐户 问题是我找不到办法这样做 这是我正在使用的代码 f
  • C# 和泛型 - 为什么调用基类中的方法而不是派生类中的新方法?

    如果泛型类型参数 调用类或调用方法的 受以下约束where T Base不会调用 T Derived 中的新方法 而是调用 Base 中的方法 为什么类型 T 在方法调用中被忽略 即使它应该在运行时之前已知 Update 但是 当约束使用像
  • 自定义字体,eot,不起作用

    我无法让我的自定义字体在 IE7 和 IE8 中工作 http i creative dk iJob http i creative dk iJob 它在 IE9 Firefox 和 Chrome 中运行良好 对于 Firefox 和 Ch
  • 每当调用 malloc/free 时输出到 stderr

    使用 Linux GCC C 每当调用 malloc free new delete 时 我想向 stderr 记录一些内容 我试图了解库的内存分配 因此我想在运行单元测试时生成此输出 我使用 valgrind 进行内存泄漏检测 但我找不到
  • 我的 rtk 切片的初始状态未按预期保存在存储中?

    目前正在学习如何将 RTK 与 typescript 结合使用 我有 2 个切片 其中一个是我使用 RTK 查询制作的以获取数据 称为apiSlice ts 另一个使用 createSlice 来处理我的待办事项应用程序的同步状态更改 称为
  • 在 MATLAB 中将数据拟合到 B 样条

    我正在尝试估计矩阵形式的时间序列数据中的缺失值 列代表时间点 即现在 我想将矩阵的每一行拟合到 B 样条曲线 并用它来估计缺失值 我可以使用 MATLAB 将数据拟合到普通样条曲线 但我完全陷入尝试找出如何拟合数据以创建 B 样条曲线的困境
  • Android:如何获取设备的真实屏幕尺寸?

    我尝试了不同的方法来获取设备的屏幕尺寸 但它总是返回错误的尺寸 791x480代替854x480 可能是导航栏的原因 我的设备当前运行的是 JellyBean 4 1 1 I tried Display display getWindowM
  • OSGI - 处理捆绑包所需的第 3 方 JAR

    我刚刚开始 OSGI 开发 正在努力了解如何最好地处理依赖的 JAR 也就是说 如果我要创建一个捆绑包 我很可能需要使用一些第 3 方 JAR 当我创建要部署到 OSGI 的捆绑包 JAR 时 显然不包含这些第 3 方 JAR 因此该捆绑包
  • event.getSource() 返回 null android 中的可访问性

    我尝试使用 DashLane 等辅助服务或其他一些使用辅助服务的应用程序来填充 EditText 字段 我正在使用聚焦事件视图 当 EditText 获得焦点时 事件开始但是getSource 返回空值 Code Accessibility
  • 奇怪的 JavaCore IType 缓存问题

    我正在开发一个插件 它接受工作区中实现某些接口 IDomain 的所有枚举 解析代码 使用 AST 对枚举进行一些修改 并将其标记为使用注释 IDomainInfo 进行处理 例如 它需要这样的东西 public enum SomeEnum