kotlin-tooling-java-to-kotlin

Par kotlin · kotlin-agent-skills

À utiliser lors de la conversion de fichiers sources Java en Kotlin idiomatique, lorsque l'utilisateur mentionne « java to kotlin », « j2k », « convert java », « migrate java to kotlin », ou lorsqu'il travaille avec des fichiers .java à transformer en fichiers .kt. Gère la conversion avec prise en charge des frameworks Spring, Lombok, Hibernate, Jackson, Micronaut, Quarkus, Dagger/Hilt, RxJava, JUnit, Guice, Retrofit et Mockito.

npx skills add https://github.com/kotlin/kotlin-agent-skills --skill kotlin-tooling-java-to-kotlin

Conversion Java vers Kotlin

Convertir les fichiers sources Java en Kotlin idiomatique en utilisant une méthodologie de conversion disciplinée en 4 étapes avec 5 invariants vérifiés à chaque étape. Supporte une conversion sensible aux frameworks qui gère les cibles de sites d'annotation, les idiomes de bibliothèque et la préservation d'API.

Workflow

digraph j2k_workflow {
  rankdir=TB;
  "User specifies files" -> "Step 0: Scan & Detect";
  "Step 0: Scan & Detect" -> "Load framework guides";
  "Load framework guides" -> "Step 1: Convert";
  "Step 1: Convert" -> "Step 2: Write .kt";
  "Step 2: Write .kt" -> "Step 3: Git rename";
  "Step 3: Git rename" -> "Step 4: Verify";
  "Step 4: Verify" -> "Next file?" [label="pass"];
  "Step 4: Verify" -> "Fix issues" [label="fail"];
  "Fix issues" -> "Step 1: Convert";
  "Next file?" -> "Step 0: Scan & Detect" [label="batch: yes"];
  "Next file?" -> "Done" [label="no more files"];
}

Step 0: Scan & Detect Frameworks

Avant la conversion, scannez les instructions import du fichier Java pour détecter les frameworks utilisés. Chargez UNIQUEMENT les fichiers de référence de framework correspondants pour garder le contexte ciblé.

Framework Detection Table

Import prefix Framework guide
org.springframework.* SPRING.md
lombok.* LOMBOK.md
javax.persistence.*, jakarta.persistence.*, org.hibernate.* HIBERNATE.md
com.fasterxml.jackson.* JACKSON.md
io.micronaut.* MICRONAUT.md
io.quarkus.*, javax.enterprise.*, jakarta.enterprise.* QUARKUS.md
dagger.*, dagger.hilt.* DAGGER-HILT.md
io.reactivex.*, rx.* RXJAVA.md
org.junit.*, org.testng.* JUNIT.md
com.google.inject.* GUICE.md
retrofit2.*, okhttp3.* RETROFIT.md
org.mockito.* MOCKITO.md

Si javax.inject.* est détecté, vérifiez s'il s'agit de Dagger/Hilt ou Guice en recherchant d'autres imports de ces frameworks. En cas d'ambiguïté, chargez les deux guides.

Step 1: Convert

Appliquez la méthodologie de conversion de CONVERSION-METHODOLOGY.md.

Ceci est un processus de chaîne de réflexion en 4 étapes :

  1. Traduction fidèle 1:1 — sémantique exacte préservée
  2. Audit nullable et mutabilité — val/var, types nullable
  3. Conversion de types collection — Java mutable → types Kotlin
  4. Transformations idiomatiques — propriétés, templates de chaîne, lambdas

Cinq invariants sont vérifiés après chaque étape. Si un invariant est violé, revenez à l'étape précédente et recommencez.

Appliquez tout guidage spécifique au framework chargé pendant l'étape 4 (transformations idiomatiques).

Step 2: Write Output

Écrivez le code Kotlin converti dans un fichier .kt portant le même nom que le fichier Java d'origine, dans le même répertoire.

Step 3: Preserve Git History

Pour préserver l'historique git blame, utilisez une approche en deux phases :

# Phase 1: Rename (creates rename tracking)
git mv src/main/java/com/example/Foo.java src/main/kotlin/com/example/Foo.kt
git commit -m "Rename Foo.java to Foo.kt"

# Phase 2: Replace content (tracked as modification, not new file)
# Write the converted Kotlin content to Foo.kt
git commit -m "Convert Foo from Java to Kotlin"

Si le projet conserve Java et Kotlin dans la même racine source (par exemple, src/main/java/), renommez sur place :

git mv src/main/java/com/example/Foo.java src/main/java/com/example/Foo.kt

Si le projet n'utilise pas Git, écrivez simplement le fichier .kt et supprimez le fichier .java.

Step 4: Verify

Après la conversion, vérifiez à l'aide de checklist.md :

  • Tentez de compiler le fichier converti
  • Exécutez les tests existants
  • Vérifiez les cibles de sites d'annotation
  • Confirmez l'absence de changements comportementaux

Batch Conversion

Lors de la conversion de plusieurs fichiers (un répertoire ou un package) :

  1. Listez tous les fichiers .java dans la portée cible
  2. Triez par ordre de dépendance — convertissez d'abord les dépendances feuilles (fichiers qui n'importent pas d'autres fichiers de l'ensemble de conversion), puis remontez aux fichiers qui en dépendent
  3. Convertissez un fichier à la fois — appliquez le workflow complet (étapes 0-4) pour chacun
  4. Suivez la progression — signalez quels fichiers sont terminés, lesquels restent
  5. Gérez les références croisées — après la conversion d'un fichier, mettez à jour les imports dans les autres fichiers Java si nécessaire (par exemple, si une classe a changé de package)

Pour les gros lots, envisagez la conversion par packages (de bas en haut, à partir des packages feuilles).

Common Pitfalls

Consultez KNOWN-ISSUES.md pour :

  • Conflits de mots-clés Kotlin (when, in, is, object)
  • Ambiguïté SAM conversion
  • Types platform issus de l'interopérabilité Java
  • Utilisation de @JvmStatic / @JvmField / @JvmOverloads
  • Exceptions vérifiées et @Throws
  • Génériques wildcards → variance Kotlin

Skills similaires