Kotlin Tooling Java To Kotlin

kotlin/kotlin-agent-skills/skills/kotlin-tooling-java-to-kotlin

作者 kotlinc2f90697bf71Apache-2.01K 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫今天更新

Use when converting Java source files to idiomatic Kotlin, when user mentions "java to kotlin", "j2k", "convert java", "migrate java to kotlin", or when working with .java files that need to become .kt files. Handles framework-aware conversion for Spring, Lombok, Hibernate, Jackson, Micronaut, Quarkus, Dagger/Hilt, RxJava, JUnit, Guice, Retrofit, and Mockito.

AI 產生的概覽

將 Java 原始檔轉換為符合 Kotlin 慣用寫法的程式碼,提供框架感知指引與經過驗證的四步方法。

功能
引導代理依照四步方法將 Java 原始檔轉換為符合 Kotlin 慣用寫法的程式碼,每一步都會檢查五項不變條件。它會掃描 import 陳述式以偵測 Spring、Lombok、Hibernate、Jackson、Micronaut、Quarkus、Dagger/Hilt、RxJava、JUnit、Guice、Retrofit 與 Mockito 等框架,並只載入相符的參考指南。它會在原位置產生 .kt 檔案取代 .java 檔案,透過兩階段重新命名與提交保留 Git 歷史,並依檢查清單驗證結果。支援批次轉換,依相依順序逐一處理檔案。
適用情境
適用於將 Java 原始檔轉換為 Kotlin 的情況,包括提到「java to kotlin」「j2k」「convert java」或「migrate java to kotlin」。也適合需要變成 .kt 檔案的 .java 檔案,尤其是在使用所支援框架的專案中。可用於單一檔案或目錄、套件等批次範圍。
執行需求
僅為說明文件,未附帶指令碼。代理需要存取 Java 原始檔以及該技能的參考文件。保留歷史的 Git 重新命名流程需要 Git,但並非必要。驗證環節需要能夠編譯轉換後的檔案並執行現有測試。

Java to Kotlin Conversion

Convert Java source files to idiomatic Kotlin using a disciplined 4-step conversion methodology with 5 invariants checked at each step. Supports framework-aware conversion that handles annotation site targets, library idioms, and API preservation.

Workflow

dot
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

Before converting, scan the Java file's import statements to detect which frameworks are in use. Load ONLY the matching framework reference files to keep context focused.

Framework Detection Table

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

If javax.inject.* is detected, check for Dagger/Hilt vs Guice by looking for other imports from those frameworks. If ambiguous, load both guides.

Step 1: Convert

Apply the conversion methodology from CONVERSION-METHODOLOGY.md [blocked].

This is a 4-step chain-of-thought process:

  1. Faithful 1:1 translation — exact semantics preserved
  2. Nullability & mutability audit — val/var, nullable types
  3. Collection type conversion — Java mutable → Kotlin types
  4. Idiomatic transformations — properties, string templates, lambdas

Five invariants are checked after each step. If any invariant is violated, revert to the previous step and redo.

Apply any loaded framework-specific guidance during step 4 (idiomatic transformations).

Step 2: Write Output

Write the converted Kotlin code to a .kt file with the same name as the original Java file, in the same directory.

Step 3: Preserve Git History

To preserve git blame history, use a two-phase approach:

bash
# Phase 1: Rename (creates rename tracking)git mv src/main/java/com/example/Foo.java src/main/kotlin/com/example/Foo.ktgit 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.ktgit commit -m "Convert Foo from Java to Kotlin"

If the project keeps Java and Kotlin in the same source root (e.g., src/main/java/), rename in place:

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

If the project does not use Git, simply write the .kt file and delete the .java file.

Step 4: Verify

After conversion, verify using checklist.md [blocked]:

  • Attempt to compile the converted file
  • Run existing tests
  • Check annotation site targets
  • Confirm no behavioral changes

Batch Conversion

When converting multiple files (a directory or package):

  1. List all .java files in the target scope
  2. Sort by dependency order — convert leaf dependencies first (files that don't import other files in the conversion set), then work up to files that depend on them
  3. Convert one file at a time — apply the full workflow (steps 0-4) for each
  4. Track progress — report which files are done, which remain
  5. Handle cross-references — after converting a file, update imports in other Java files if needed (e.g., if a class moved packages)

For large batches, consider converting in packages (bottom-up from leaf packages).

Common Pitfalls

See KNOWN-ISSUES.md [blocked] for:

  • Kotlin keyword conflicts (when, in, is, object)
  • SAM conversion ambiguity
  • Platform types from Java interop
  • @JvmStatic / @JvmField / @JvmOverloads usage
  • Checked exceptions and @Throws
  • Wildcard generics → Kotlin variance

來源與署名

來源:kotlin/kotlin-agent-skills位於skills/kotlin-tooling-java-to-kotlin提交c2f9069

授權條款: Apache-2.0

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架