如何清除Xtend中create方法的内部缓存?(Xtext模型转换场景)
清除Xtend create方法内部缓存的实现方案
1. 清理Xtext ResourceSet级缓存
若你的create方法依赖Xtext的ResourceSet加载或转换模型,ResourceSet会缓存已加载的资源与模型实例。清除方式有两种:
- 直接重新创建
ResourceSet,原有缓存会被垃圾回收:
val resourceSet = new XtextResourceSet()
- 手动卸载并清空现有
ResourceSet中的资源:
resourceSet.resources.forEach[ resource | resource.unload() ] resourceSet.resources.clear()
2. 自定义工厂方法的缓存清除
如果你的create方法是自定义的工厂方法(比如带@Factory注解)且自行实现了缓存逻辑,需显式添加缓存清理方法:
class MyModelFactory { private val cache = Maps.newHashMap<String, MyModel>() def create(String key) { cache.getIfAbsentPut(key, [ // 模型实例创建逻辑 new MyModel() ]) } // 新增缓存清除方法 def clearCache() { cache.clear() } }
调用时直接执行clearCache()即可清空内部缓存。
3. Xtend生成器缓存处理
若create方法涉及Xtext代码生成环节的缓存,可通过两种方式处理:
- 在生成器中禁用缓存:
class MyGenerator extends AbstractGenerator { override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) { // 关闭生成缓存,强制重新生成 context.setCancelable(false) fsa.setDeleteSourceFolder(true) // 生成逻辑代码... } }
- 手动删除生成目标目录下的所有文件,彻底清理旧缓存。
4. Eclipse IDE环境下的缓存清理
如果是在Eclipse中开发,还需清理IDE层面的缓存:
- 右键目标项目 → Refresh,刷新资源同步状态
- 通过菜单栏
Project → Clean...选择对应项目,清理构建缓存
内容的提问来源于stack exchange,提问作者R4de
相关产品推荐
相关产品推荐

