Jérôme
Tech Lead/Architecte, Instructeur en permis de réécriture
onepoint BDX
@jtama
Recipe
Lossless Syntax Tree
Le pattern visitor
public abstract class Recipe implements Cloneable {
public abstract String getDisplayName();
public abstract String getDescription();
public Set<String> getTags() { ... }
public List<Recipe> getRecipeList() { ... }
public TreeVisitor<?, ExecutionContext> getVisitor() { ... }
public void addDataTable(DataTable<?> dataTable) { ... }
}
✅ Vue d’ensemble du véhicule
<project>
<build>
<plugins>
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>5.46.0</version>
<configuration>
<activeRecipes>
<recipe>org.openrewrite.apache.httpclient5.StatusLine</recipe>
</activeRecipes>
</configuration>
<dependencies>
<dependency>
<groupId>org.openrewrite.recipe</groupId>
<artifactId>rewrite-apache</artifactId>
<version>1.9.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
Déclaration du plugin
Ajout de la dépendance de la recette
Activation des recettes
$ mvn rewrite:run
$ mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=\
org.openrewrite.recipe:rewrite-testing-frameworks:RELEASE\
-Drewrite.activeRecipes=\
org.openrewrite.java.testing.hamcrest.AssertThatBooleanToAssertJ
Déclaration du plugin
Ajout de la dépendance de la recette
Activation des recettes
✅ Vue d’ensemble du véhicule
✅ Savoir démarrer le véhicule
---
type: specs.openrewrite.org/v1beta/recipe
name: com.github.jtama.openrewrite.RemovesThatToxicDependency
displayName: Removes that toxic dependency
description: |
Migrate from AcmeToxic ☠️ to AcmeHealthy 😇,
removes dependencies and migrates code.
tags:
- acme
- toxic
recipeList:
- org.openrewrite.java.ChangeMethodTargetToStatic:
methodPattern: com.github.jtama.toxic.BigDecimalUtils valueOf(..)
fullyQualifiedTargetTypeName: java.math.BigDecimal
- org.openrewrite.maven.RemoveUnusedProperties:
properties: .*toxic\.version
- org.openrewrite.maven.RemoveDependency:
groupId: com.github.jtama
artifactId: toxic-library
- com.github.jtama.openrewrite.VousAllezVoirCeQueVousAllezVoir
---
type: specs.openrewrite.org/v1beta/recipe
name: com.github.jtama.openrewrite.VousAllezVoirCeQueVousAllezVoir
displayName: Ça va vous épater
description: |
Rech. proj. pr proj. priv. Self Dem. Brt. Poss. S’adr. à l’hô. Mart
tags:
- acme
preconditions:
- org.openrewrite.java.search.FindTypes:
fullyQualifiedTypeName: com.github.jtama.toxic.FooBarUtils
recipeList:
- com.github.jtama.openrewrite.RemoveFooBarUtilsIsEmptyRecipes
- com.github.jtama.openrewrite.RemoveFooBarUtilsStringFormatted
- com.github.jtama.openrewrite.UseObjectsCompare
Dans un fichier qui doit s’appeler rewrite.yml
À la racine d’un projet.
Dans le répertoire META-INF/rewrite
$ mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.activeRecipes=\
com.github.jtama.openrewrite.RemovesThatToxicDependency
Inclure ce fichier dans un module maven fantôme…
✅ Vue d’ensemble du véhicule
✅ Savoir démarrer le véhicule
✅ Savoir conduire en ville
✅ Vue d’ensemble du véhicule
✅ Savoir démarrer le véhicule
✅ Savoir conduire en ville
✅ Savoir lire une carte
Demo time !
✅ Vue d’ensemble du véhicule
✅ Savoir lire une carte
✅ Savoir démarrer le véhicule
✅ Savoir conduire en ville
✅ Savoir drifter sur la glace
Quand on n’a qu’un marteau tout ressemble à un clou.
Composition de recettes complexes.
Le dépôt github :
Feedback :