勺子
Spoon 是一个用于分析、重写、转换、转译 Java 源代码的开源库。它解析源文件以构建具有强大分析和转换 API 的精心设计的 AST。它支持高达 Java 20 的现代 Java 版本。Spoon 是 Inria 官方开源项目,也是 OW2 开源联盟的成员。
文档
最新的官方文档可在 https://spoon.gforge.inria.fr/ 获取。
学术用途
如果您将 Spoon 用于学术目的,请引用:Renaud Pawlak、Martin Monperrus、Nicolas Petitprez、Carlos Noguera、Lionel Seinturier。 “Spoon:用于实现 Java 源代码分析和转换的库”。 《软件:实践与经验》,Wiley-Blackwell,2015。Doi:10.1002/spe.2346。
@article{pawlak:hal-01169705,
TITLE = "{Spoon: A Library for Implementing Analyses and Transformations of Java Source Code}",
AUTHOR = {Pawlak, Renaud and Monperrus, Martin and Petitprez, Nicolas and Noguera, Carlos and Seinturier, Lionel},
JOURNAL = "{Software: Practice and Experience}",
PUBLISHER = "{Wiley-Blackwell}",
PAGES = {1155-1179},
VOLUME = {46},
URL = {https://hal.archives-ouvertes.fr/hal-01078532/document},
YEAR = {2015},
doi = {10.1002/spe.2346},
}
专业支持
如果您需要 Spoon 的专业支持(开发、培训、扩展),欢迎在 #3251 发表评论
2秒内开始使用
Java 版本: Spoon 版本 10 及更高版本需要 Java 11 或更高版本。 Spoon 9.1.0 是与 Java 8 兼容的最终 Spoon 版本,我们不打算将任何错误修复或功能向后移植到 Spoon 9。请注意,Spoon 当然仍然可以使用旧版本 Java 的源代码,但它需要 JDK 11+ 运行。
使用 Maven 获取最新稳定版本,请参阅 https://search.maven.org/artifact/fr.inria.gforge.spoon/spoon-core
并开始使用它:
CtClass l = Launcher . parseClass ( "class A { void m() { System.out.println( " yeah " );} }" );
文档:
- 参考文档:https://spoon.gforge.inria.fr/(包含doc文件夹的内容)
- 代码示例:https://github.com/SpoonLabs/spoon-examples
- 视频:Spoon:入门 - Simon Urli @ OW2Con'18(巴黎),使用 Spoon 生成测试断言 - Benjamin Danglot @ OW2Con'17(巴黎)
2秒内贡献
创建您的第一个拉取请求以改进文档,请参阅文档!继续您的第一个错误修复!社区思想开放、尊重和耐心。欢迎所有外部贡献。
设计理念
R1) Spoon 元模型尽可能接近语言概念。
R2) 程序的 Spoon 模型是完整且健全的。
R3)Spoon 模型的文本版本格式良好,并且在语义上与原始程序等效。
R4) 分析转换API直观、规范。
R5) 转换运算符旨在尽快警告无效程序。这是通过静态类型检查或使用运算符时的动态检查来完成的。
R6) 在可行的情况下,Spoon 模型的文本版本接近原始版本。
编译
要编译 Spoon,您需要 Java 开发工具包 (JDK) 和 Maven:
git clone https://github.com/INRIA/spoon
cd spoon
mvn compile
运行测试:
下载
最新版本:https://search.maven.org/remote_content?g=fr.inria.gforge.spoon&a=spoon-core&v=LATEST&c=jar-with-dependencies - Javadoc
行家:
< dependency >
< groupId >fr.inria.gforge.spoon</ groupId >
< artifactId >spoon-core</ artifactId >
<!-- See rendered release value at https://spoon.gforge.inria.fr/ -->
< version >{{site.spoon_release}}</ version >
</ dependency >
发布
- 2023 年 8 月 31 日,Spoon 10.4.1(变更日志)
- 2023 年 7 月 6 日,Spoon 10.4.0(变更日志)
- 2023 年 3 月 13 日,Spoon 10.3.0(变更日志)
- 2022 年 10 月,Spoon 10.2.0(变更日志)
- 2022 年 4 月,Spoon 10.1.0(变更日志)
- 2021 年 10 月,Spoon 10.0.0(变更日志)
- 2021 年 8 月:Spoon 9.1.0(变更日志)
- 2021 年 3 月:Spoon 9.0.0(变更日志)
- 2020 年 10 月:Spoon 8.3.0(变更日志)
- 2020 年 7 月:Spoon 8.2.0(变更日志)
- 2020 年 3 月:Spoon 8.1.0(变更日志)
- 2019 年 11 月,Spoon 8.0.0(变更日志)
- 2019 年 7 月:Spoon 7.5.0 发布(变更日志)
- 2019 年 5 月:Spoon 7.4.0 发布(变更日志)
- 2019 年 2 月 10 日:Spoon 7.3.0 发布(变更日志)
- 2018 年 12 月 4 日:Spoon 7.2.0 发布(变更日志)
- 2018 年 10 月 10 日:Spoon 7.1.0 发布(变更日志)
- 2018 年 7 月 4 日:Spoon 7.0.0 发布(变更日志)
- 2018 年 3 月 8 日:Spoon 6.2.0 发布(变更日志)
- 2017年12月20日:Spoon 6.1.0发布,圣诞快乐! ? (变更日志)
- 2017年11月17日:Spoon 6.0.0发布!检查(更改日志),因为有一些不向后兼容的更改️
- 2017 年 9 月 6 日:Spoon 5.9.0 发布(变更日志)恢复工作版本!
- 2017 年 7 月 11 日:Spoon 5.8.0 发布(变更日志) 夏季发布?与上一个相比,首选:修复大量错误。
- 2017 年 6 月 1 日:Spoon 5.7.0 发布(变更日志)
- 2017 年 3 月 16 日:Spoon 5.6.0 发布(变更日志)春季发布 :-)
- 2017 年 1 月 11 日:Spoon 5.5.0 发布(变更日志)。新年快乐!
- 2016 年 10 月 27 日:Spoon 5.4.0 发布(变更日志)。
- 2016 年 9 月 19 日:Spoon 5.3.0 发布(变更日志)。
- 2016 年 6 月 30 日:Spoon 5.2.0 发布(变更日志)。
- 2016 年 6 月 22 日:Spoon 5.1.1 发布(变更日志)。
- 2016 年 3 月 21 日:Spoon 5.1.0 发布(变更日志)。
- 2016 年 2 月 12 日:Spoon 5.0.2 发布(变更日志)。
- 2016 年 2 月 3 日:Spoon 5.0.1 发布(变更日志)。
- 2016 年 1 月 25 日:Spoon 5.0.0 发布(变更日志)。
- 2015 年 11 月 18 日:Spoon 4.4.1 发布(变更日志)。
- 2015 年 11 月 16 日:Spoon 4.4.0 发布(变更日志)。
- 2015 年 9 月 22 日:Spoon 4.3.0 发布(变更日志)。
- 2015 年 6 月 15 日:Spoon 4.2.0 发布(变更日志)。
- 2015 年 5 月 7 日:Spoon 4.1.0 发布(变更日志)。
- 2015 年 4 月 8 日:Spoon 4.0.0 发布(变更日志)。
- 2015 年 2 月 11 日:Spoon 3.1 发布(变更日志)。
- 2014 年 12 月 9 日:Spoon 3.0 发布(变更日志)。
- 2014 年 11 月 12 日:Spoon 2.4 发布(变更日志)。
- 2014 年 10 月 9 日:Spoon 2.3.1 发布(变更日志)。
- 2014 年 9 月 12 日:Spoon 2.1 发布(变更日志)。
- 2014 年 4 月 2 日:Spoon 2.0 发布(变更日志)。
- 2013年9月30日:Spoon 1.6 发布。
- 2012年4月12日:Spoon 1.5发布。
执照
Spoon 是免费和开源的,根据(CeCILL-C 许可证 - 法语相当于 LGPL)和 MIT 许可证获得双重许可。
JProfiler
Spoon 是在 JProfiler 的帮助下开发的,JProfiler 是 ej-technologies GmbH 的 Java 分析器。 JProfiler 通过免费提供其全功能的 Java Profiler 来支持 Spoon 的开发。我们感谢 ej-technologies GmbH 的支持。
Github 贡献者
该列表由chore/generate-contributor-list.py
生成。如果您未列出或您想知道您的全名,请发帖至#3909。
- 亚当吉赖安
- 阿尔西德斯·丰塞卡
- 亚历山大·肖波夫
- 阿曼·夏尔马
- 安德鲁布沃吉
- 安德烈·克鲁兹
- 安德烈·席尔瓦
- 安托万·莫蒂尔
- 安东·莱克塞尔
- 阿吉乌斯
- 阿诺布卢安
- 阿尔森希
- 阿尔塔姆
- 阿图尔·博斯
- 阿尔维德·西贝罗夫
- 雅利安人
- 阿舒托什·库马尔·维尔马
- 阿沃耶尔
- 阿克塞尔·霍温德
- 本杰明·丹格洛特
- 伯努瓦·科尔努
- 卡洛斯·诺格拉
- 塞基·居尔屈
- 冠军
- 魅力
- 克里斯广场
- 克里斯托夫·杜福尔
- 克里斯托弗·斯托克斯
- 克莱门斯·巴茨
- 克莱门特·福尼埃
- 塞萨尔·索托·瓦莱罗
- 丹尼尔·鲍伯特
- 大流士萨斯
- 大卫·伯纳德
- 迪迪埃·唐塞斯
- 迪奥塞·扬
- 多罗塔·科普奇克
- 杜福
- 德韦内布
- 迪亚电话
- 埃迪·T
- 叶戈尔·布列季欣
- 法比安·杜米尼
- 范龙
- 方镇
- 最爱
- 法维奥·德马科
- 费尔南达·马德拉尔
- 菲利普·克拉考斯基
- 加布里埃尔·查佩隆·布尔戈斯
- 吉巴乔
- GitHub Actions 机器人
- 张格鲁克
- 格雷戈尔·蔡特林格
- 格托伊森
- 纪尧姆·托松
- 热拉尔·帕利戈
- 汉内斯·格鲁尔
- 哈里斯·阿泽莫维奇
- 赫克托·SM
- 朱亨利
- 埃尔维·布特米
- 霍利亚·康斯坦丁
- 伊斯坦布尔
- 阴谋-lgtm
- 雅各布劳恩
- 简·加林斯基
- 乔恩
- 罗凯
- 拉克夏·阿格拉瓦尔
- 列文托夫
- 莱昂内尔·塞因图里埃
- 洛达特
- 卢卡斯
- 卢卡斯·克雷吉
- 卢克·梅里克
- 马塞尔·曼塞尔
- 马塞尔·斯坦贝克
- 马丁·蒙佩鲁斯
- 马丁·维特林格
- 马丁·维特
- 马蒂亚斯·马丁内斯
- 马克西姆·斯特凡诺夫
- 马克西姆·克莱门特
- 迈赫迪·凯图
- 迈克尔·泰格
- 米凯尔·伊斯特拉
- 米格尔·索西尼奥·拉马略
- 米凯尔·福斯伯格
- 松先生
- 穆罕默德·阿里·阿克巴伊
- 尼古拉斯·哈兰德
- 尼古拉斯·佩塞米尔
- 尼古拉斯·佩蒂普雷斯
- 诺亚·桑奇-库尼
- 奥利维尔·巴雷
- 翁德热·谢贝克
- 帕特里克·施密特
- 帕维尔·沃伊特科夫斯基
- 佩罗克西德90
- 菲利普·翁布雷丹纳
- 菲利普·席克特尔
- 普里扬卡-28
- 昆汀·勒·迪拉夫雷克
- 雷莫格
- 雷诺·帕拉克
- 礼萨·加里比
- 里斯·康普顿
- 里克·凯洛格
- 里杰纳德·范·通德
- 罗希特什·库马尔·贾恩
- 罗曼·莱文托夫
- 日吉良太
- 桑德·普洛格斯玛
- 桑托斯-塞缪尔
- 斯库塔菲夫
- 斯科特·迪克森
- 斯科特·平威尔
- 塞巴斯蒂安·拉梅拉斯·马科特
- 谢尔盖·费多罗夫
- 尚塔努
- 西蒙·拉森
- 西蒙·乌尔利
- 斯宾塞·威廉姆斯
- SRLM
- 石新墙
- 斯蒂芬·沃尔夫
- StepSecurity 机器人
- 塞巴斯蒂安·贝特朗
- 勺子机器人
- 蒂莫·塞茨
- 托马斯·杜里厄
- 蒂亚戈德尔卡瓦略
- 托马斯·齐林斯基
- 乌尔斯·凯勒
- 维克托
- 文森佐·马斯科
- 沃尔夫冈·施密辛
- 沃特·史明克
- 弗勒利克
- 扬·迪奥塞
- 日惹郁金香伽玛
- 张新东
- Дмитрий