Cuillère
Spoon est une bibliothèque open source pour analyser, réécrire, transformer, transpiler le code source Java. Il analyse les fichiers sources pour créer un AST bien conçu avec une puissante API d'analyse et de transformation. Il prend en charge les versions Java modernes jusqu'à Java 20. Spoon est un projet open source officiel d'Inria et membre du consortium open source OW2.
Documentation
La dernière documentation officielle est disponible sur https://spoon.gforge.inria.fr/.
Utilisation académique
Si vous utilisez Spoon à des fins académiques, merci de citer : Renaud Pawlak, Martin Monperrus, Nicolas Petitprez, Carlos Noguera, Lionel Seinturier. "Spoon : une bibliothèque pour la mise en œuvre d'analyses et de transformations du code source Java". Dans Logiciel : pratique et expérience, 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},
}
Accompagnement professionnel
Si vous avez besoin d'un accompagnement professionnel sur Spoon (développement, formation, extension), vous êtes invités à poster un commentaire sur #3251
Commencer en 2 secondes
Version Java : Spoon version 10 et ultérieure nécessite Java 11 ou une version ultérieure. Spoon 9.1.0 est la dernière version de Spoon compatible avec Java 8, et nous ne prévoyons pas de rétroporter des corrections de bugs ou des fonctionnalités vers Spoon 9. Notez que Spoon peut bien sûr toujours consommer le code source des anciennes versions de Java, mais il a besoin du JDK. 11+ pour courir.
Obtenez la dernière version stable avec Maven, voir https://search.maven.org/artifact/fr.inria.gforge.spoon/spoon-core
Et commencez à l'utiliser :
CtClass l = Launcher . parseClass ( "class A { void m() { System.out.println( " yeah " );} }" );
Documentation:
- Documentation de référence : https://spoon.gforge.inria.fr/ (contient le contenu du dossier doc)
- Exemples de code : https://github.com/SpoonLabs/spoon-examples
- Vidéos : Spoon : Getting Started - Simon Urli @ OW2Con'18 (Paris), Générer une assertion de test avec Spoon - Benjamin Danglot @ OW2Con'17 (Paris)
Contribuer en 2 secondes
Créez votre première pull request pour améliorer la documentation, voir doc ! Procédez à votre première correction de bug ! La communauté est ouverte d’esprit, respectueuse et patiente. Toutes les contributions extérieures sont les bienvenues.
Philosophie de conception
R1) Le métamodèle Spoon est le plus proche possible des concepts du langage.
R2) Le modèle Spoon d’un programme est complet et solide.
R3) La version texte d'un modèle Spoon est bien formée et sémantiquement équivalente au programme original.
R4) L'API d'analyse et de transformation est intuitive et régulière.
R5) Les opérateurs de transformation sont conçus pour avertir le plus rapidement possible des programmes invalides. Cela se fait soit avec une vérification de type statique, soit avec des vérifications dynamiques lorsque les opérateurs sont utilisés.
R6) Lorsque cela est possible, la version texte d'un modèle Spoon est proche de la version originale.
Compilation
Pour compiler Spoon, vous avez besoin d'un kit de développement Java (JDK) et de Maven :
git clone https://github.com/INRIA/spoon
cd spoon
mvn compile
Pour exécuter les tests :
Télécharger
Dernière version : 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 https://spoon.gforge.inria.fr/ -->
< version >{{site.spoon_release}}</ version >
</ dependency >
Sorties
- 31 août 2023, Spoon 10.4.1 (journal des modifications)
- 6 juillet 2023, Spoon 10.4.0 (journal des modifications)
- 13 mars 2023, Spoon 10.3.0 (journal des modifications)
- Octobre 2022, Spoon 10.2.0 (journal des modifications)
- Avril 2022, Spoon 10.1.0 (journal des modifications)
- Octobre 2021, Spoon 10.0.0 (journal des modifications)
- Août 2021 : Spoon 9.1.0 (journal des modifications)
- Mars 2021 : Spoon 9.0.0 (journal des modifications)
- Octobre 2020 : Spoon 8.3.0 (journal des modifications)
- Juillet 2020 : Spoon 8.2.0 (journal des modifications)
- Mars 2020 : Spoon 8.1.0 (journal des modifications)
- Novembre 2019, Spoon 8.0.0 (journal des modifications)
- Juillet 2019 : Sortie de Spoon 7.5.0 (journal des modifications)
- Mai 2019 : Sortie de Spoon 7.4.0 (journal des modifications)
- 10 février 2019 : Sortie de Spoon 7.3.0 (journal des modifications)
- 4 décembre 2018 : Sortie de Spoon 7.2.0 (journal des modifications)
- 10 octobre 2018 : Sortie de Spoon 7.1.0 (journal des modifications)
- 4 juillet 2018 : Sortie de Spoon 7.0.0 (journal des modifications)
- 8 mars 2018 : Sortie de Spoon 6.2.0 (journal des modifications)
- 20 décembre 2017 : Sortie de Spoon 6.1.0, joyeux Noël ! ? (journal des modifications)
- 17 novembre 2017 : Spoon 6.0.0 est sorti ! Vérifiez le (changelog) car il y a peu de modifications non rétrocompatibles ️
- 6 septembre 2017 : Spoon 5.9.0 est publié (changelog) pour la rentrée !
- 11 juillet 2017 : Sortie de Spoon 5.8.0 (changelog) Version estivale ? A privilégier par rapport au précédent : correction de nombreux bugs.
- 01 juin 2017 : Sortie de Spoon 5.7.0 (journal des modifications)
- 16 mars 2017 : Sortie de Spoon 5.6.0 (changelog) Version de printemps :-)
- 11 janvier 2017 : Sortie de Spoon 5.5.0 (changelog). Bonne année!
- 27 octobre 2016 : Sortie de Spoon 5.4.0 (changelog).
- 19 septembre 2016 : Sortie de Spoon 5.3.0 (changelog).
- 30 juin 2016 : Sortie de Spoon 5.2.0 (changelog).
- 22 juin 2016 : Sortie de Spoon 5.1.1 (changelog).
- 21 mars 2016 : Sortie de Spoon 5.1.0 (journal des modifications).
- 12 février 2016 : Sortie de Spoon 5.0.2 (changelog).
- 3 février 2016 : Sortie de Spoon 5.0.1 (changelog).
- 25 janvier 2016 : Sortie de Spoon 5.0.0 (changelog).
- 18 novembre 2015 : Sortie de Spoon 4.4.1 (changelog).
- 16 novembre 2015 : Sortie de Spoon 4.4.0 (changelog).
- 22 septembre 2015 : Sortie de Spoon 4.3.0 (changelog).
- 15 juin 2015 : Sortie de Spoon 4.2.0 (changelog).
- 7 mai 2015 : Sortie de Spoon 4.1.0 (journal des modifications).
- 8 avril 2015 : Sortie de Spoon 4.0.0 (changelog).
- 11 février 2015 : Sortie de Spoon 3.1 (changelog).
- 9 décembre 2014 : Sortie de Spoon 3.0 (changelog).
- 12 novembre 2014 : Sortie de Spoon 2.4 (changelog).
- 9 octobre 2014 : Sortie de Spoon 2.3.1 (changelog).
- 12 septembre 2014 : Sortie de Spoon 2.1 (changelog).
- 2 avril 2014 : Sortie de Spoon 2.0 (changelog).
- 30 septembre 2013 : Sortie de Spoon 1.6.
- 12 avril 2012 : Sortie de Spoon 1.5.
Licence
Spoon est Libre et Open Source, sous double licence (licence CeCILL-C - équivalent français de la LGPL) et licence MIT.
JProfiler
Spoon est développé avec l'aide de JProfiler, un profileur Java d'ej-technologies GmbH. JProfiler prend en charge le développement de Spoon en fournissant gratuitement son profileur Java complet. Nous remercions ej-technologies GmbH pour ce soutien.
Contributeurs GitHub
Cette liste est générée par chore/generate-contributor-list.py
. Si vous n'êtes pas répertorié ou si vous souhaitez connaître votre nom complet, veuillez poster au #3909.
- adamjryan
- Alcides Fonseca
- Alexandre Shopov
- Aman Sharma
- andrewbwogi
- André Cruz
- André Silva
- Antoine Mottier
- Anton Lyxell
- Argius
- Arnaud Blouin
- arsenki
- Artam
- Arthur Bosch
- Arvid Siberov
- aryen
- Ashutosh Kumar Verma
- averiller
- Axel Howind
- Benjamin DANGLOT
- Benoît Cornu
- Carlos Noguera
- Ceki Gülcü
- champ
- Charme
- ChrisSquare
- Christophe Dufour
- Christophe Stokes
- Clémens Bartz
- Clément Fournier
- César Soto Valéro
- Daniel Bobbert
- Darius Sas
- David Bernard
- Didier Donsez
- Yann Diorcet
- Dorota Kopczyk
- dufaux
- dwayneb
- dya-tel
- Eddie T.
- Egor Bredikhine
- Fabien DUMINY
- Ventilateur Long
- Fangzhen
- favori
- Favio DeMarco
- Fernanda Madeiral
- Filip Krakowski
- Gabriel Chaperón Burgos
- Gibahjoe
- Bot d'actions GitHub
- GluckZhang
- Grégor Zeitlinger
- gtoison
- Guillaume Toison
- Gérard Paligot
- Hannes Greule
- Haris Adzemović
- HectorSM
- Henri Chu
- Hervé Boutemy
- Horia Constantin
- I-Al-Istannen
- intrigus-lgtm
- jakobbraun
- Jan Galinski
- Jon
- Kai Luo
- Lakshya A Agrawal
- leventov
- Lionel Seinturier
- lodart
- Lucas
- Lukas Krejci
- Luc Merrick
- Marcel Manser
- Marcel Steinbeck
- Martin Monperrus
- Martin Wittlinger
- MartinWitt
- Matias Martinez
- Maxime Stefanov
- Maxime Clément
- Mehdi Kaytoué
- Michael Täge
- Mickaël Istrie
- Miguel Sozinho Ramalho
- Mikael Forsberg
- M. Pin
- Mohammed Ali AKBAY
- Nicolas Harrand
- Nicolas Pessémier
- Nicolas Petitprez
- Noah Santschi-Cooney
- Olivier Barais
- Ondrej Sebek
- Patrick Schmitt
- Pavel Vojtechovsky
- peroksid90
- Philippe Ombredanne
- Philippe Schichtel
- priyanka-28
- Quentin LE DILAVREC
- Raymogg
- Renaud Pawlak
- Reza Gharibi
- Rhys Compton
- Rick Kellogg
- Rijnard van Tonder
- Rohitesh Kumar Jain
- Romain Leventov
- Ryota Hiyoshi
- Sander Ploegsma
- santos-samuel
- scootafew
- Scott Dickerson
- Scott Pinwell
- Sébastien Lamelas Marcote
- Sergueï Fedorov
- Shantanu
- Simon Larsen
- Simon Urli
- Spencer Williams
- srl
- ST0NEWALL
- Stéphane Loup
- Bot de sécurité Step
- Sébastien Bertrand
- Le robot cuillère
- Thimo Seitz
- Thomas Durieux
- tiagodrcarvalho
- Tomasz Zieliński
- Urs Keller
- Victor
- Vincenzo Musco
- Wolfgang Schmiesing
- Wouter Smeenk
- Wreulicke
- Yann Diorcet
- Jeu de tulipes Yogya
- Zhang Xindong
- Dimitry