Openrewrite - Refactoring as code

chercher remplacer
chercher remplacer
regexp
chercher remplacer
regexp
click droit
chercher remplacer
regexp
click droit
llm
chercher remplacer
regexp
click droit
llm
jta 1

Jérôme

Tech Lead/Architecte, Instructeur en permis de réécriture

logo onepoint onepoint BDX

@jtama avatar

openrewrite
under logo

Les concepts

  1. Recipe

  2. Lossless Syntax Tree

  3. Le pattern visitor

Anatomie d’une recette

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) { ... }
}
permis de refactoring

✅ Vue d’ensemble du véhicule

Exécution d’une recette

<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

Sans modifier vos poms

$ 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

permis de refactoring
  • ✅ Vue d’ensemble du véhicule

  • ✅ Savoir démarrer le véhicule

Declarative recipes

---
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

Distribution

Inclure ce fichier dans un module maven fantôme…​

permis de refactoring
  • ✅ Vue d’ensemble du véhicule

  • ✅ Savoir démarrer le véhicule

  • ✅ Savoir conduire en ville

Catalogue de recette

permis de refactoring
  • ✅ Vue d’ensemble du véhicule

  • ✅ Savoir démarrer le véhicule

  • ✅ Savoir conduire en ville

  • ✅ Savoir lire une carte

Ecrire sa propre recette

Demo time !

permis de refactoring
  • ✅ 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

Point d’attention

  • Quand on n’a qu’un marteau tout ressemble à un clou.

  • Composition de recettes complexes.

Merci !

Le dépôt github :

https://github.com/jtama/openrewrite-refactor-as-code

Feedback :

qrcode feedback