Maven Central Travis Build Status Coverage Status Maintainability Rating

Spoon

Spoon是一个开放源代码库,用于分析,重写,转换,转换Java源代码. 它解析源文件以构建具有强大分析和转换API的精心设计的AST. 它完全支持Java 11、12、13、14之前的现代Java版本.Spoon是Inria的一个官方开源项目,并且是OW2开源联盟的成员. 官方网站位于http://spoon.gforge.inria.fr/ .

Academic usage

如果您将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 = ,
  AUTHOR = {Pawlak, Renaud and Monperrus, Martin and Petitprez, Nicolas and Noguera, Carlos and Seinturier, Lionel},
  JOURNAL = ,
  PUBLISHER = ,
  PAGES = {1155-1179},
  VOLUME = {46},
  URL = {https://hal.archives-ouvertes.fr/hal-01078532/document},
  YEAR = {2015},
  doi = {10.1002/spe.2346},
}

Professional support

如果您需要有关Spoon的专业支持(开发,培训,扩展),欢迎您在https://github.com/INRIA/spoon/issues/3251上发表评论.

Getting started in 2 seconds

使用Maven获取最新的稳定版本,请参阅https://search.maven.org/artifact/fr.inria.gforge.spoon/spoon-core

并开始使用它:

CtClass l = Launcher.parseClass("class A { void m() { System.out.println(\"yeah\");} }");

Documentation:

Contributing in 2 seconds

创建您的第一个拉取请求以改进文档,请参阅doc ! 进行您的第一个错误修复! 社区思想开明,尊重和耐心. 欢迎所有外部贡献.

Design Philosophy

R1)Spoon元模型尽可能接近语言概念.

R2)程序的Spoon模型完整且完整.

R3)Spoon模型的文本版本格式正确,在语义上与原始程序等效.

R4)分析和转换API直观且规则.

R5)转换运算符旨在尽可能快地警告无效程序. 当使用运算符时,可以通过静态类型检查或动态检查来完成.

R6)在可行的情况下,Spoon模型的文本版本接近原始版本.

Compiling

要编译Spoon,您需要Java开发套件(JDK)和Maven:

git clone https://github.com/INRIA/spoon
cd spoon
mvn compile

运行测试: mvn test

Download

最新版本: https//search.maven.org/remote_content g = fr.inria.gforge.spoon &a = spoon - core &v = LATEST c = jar - with - dependencies - Javadoc

Maven:

<dependency>
    <groupId>fr.inria.gforge.spoon</groupId>
    <artifactId>spoon-core</artifactId>
    <!-- See rendered release value at http://spoon.gforge.inria.fr/ -->
    <version>8.2.0</version>
</dependency>

Releases

Github Contributors

姓氏的字母顺序

git log --pretty="%an" | sed -e '/Spoon Bot/d' | sort -u | awk 'NF>=2 {print "* " $0}' | sort -k3
  • 戴维·伯纳德
  • 阿图尔·博斯(Artur Bosch)
  • 埃戈尔·布雷迪欣(Egor Bredikhin)
  • 最大化水泥
  • 贝努瓦·科努(Benoit Cornu)
  • 安德烈·克鲁兹(Andre Cruz)
  • 本杰明·唐格
  • 斯科特·迪克森(Scott Dickerson)
  • 亚恩·迪奥塞特(Yann Diorcet)
  • 托马斯·杜里厄
  • 谢尔盖·费多罗夫(Sergey Fedorov)
  • 阿尔西德斯·丰塞卡
  • 克莱门特·弗尼尔(Clement Fournier)
  • 扬·加林斯基
  • 尼古拉斯·哈兰德
  • 米凯尔·伊斯特拉(Mickael Istria)
  • 梅迪·凯图(Mehdi Kaytoue)
  • 乌尔斯·凯勒
  • 菲利普·克拉科夫斯基(Filip Krakowski)
  • 卢卡斯·克雷奇(Lukas Krejci)
  • Ashutosh Kumar Verma
  • 罗曼·列文托夫(Roman Leventov)
  • 范龙
  • Kai Luo
  • 马蒂亚斯·马丁内斯(Matias Martinez)
  • 卢克·梅里克(Luke Merrick)
  • 马丁·蒙珀鲁斯
  • 文森佐·马斯科(Vincenzo Musco)
  • 卡洛斯·诺格拉(Carlos Noguera)
  • 杰拉德·帕里戈特
  • 雷诺·帕拉克(Renaud Pawlak)
  • 尼古拉斯·佩蒂普雷斯(Nicolas Petitprez)
  • 菲利普层
  • 莱昂内尔(Lionel Seinturier)
  • 米格尔(Miguel Sozinho)拉玛略(Ramalho)
  • 马塞尔·斯坦贝克
  • 克里斯托弗·斯托克斯
  • 埃迪·T
  • 西蒙·乌里(Simon Urli)
  • 帕维尔·沃伊奇霍夫斯基
  • 斯蒂芬·沃尔夫
  • Diorcet Yann
  • Gregor Zeitlinger
  • 托马斯·齐林斯基

早期贡献者:

  • 奥利维尔·巴拉伊斯(Olivier Barais)
  • 戴维·伯纳德
  • 贝努瓦·科努(Benoit Cornu)
  • 法维奥·德马科
  • 迪迪埃·唐塞兹(Didier Donsez)
  • 克里斯多夫·杜福
  • 塞巴斯蒂安·拉梅拉斯·马可特(Sebastian Lamelas Marcote)
  • 马蒂亚斯·马丁内斯(Matias Martinez)
  • 卡洛斯·诺格拉(Carlos Noguera)
  • 雷诺·帕拉克(Renaud Pawlak)
  • 尼古拉斯·佩斯米尔(Nicolas Pessemier)