[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-kotlin-kotlin-tooling-java-to-kotlin":3,"mdc--33acc4-key":35,"related-repo-kotlin-kotlin-tooling-java-to-kotlin":1114,"related-org-kotlin-kotlin-tooling-java-to-kotlin":1203},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":30,"sourceUrl":33,"mdContent":34},"kotlin-tooling-java-to-kotlin","convert Java code to idiomatic Kotlin","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\u002FHilt, RxJava, JUnit, Guice, Retrofit, and Mockito.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"kotlin","Kotlin","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fkotlin.png",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Java","java",{"name":18,"slug":19,"type":13},"Migration","migration",{"name":21,"slug":22,"type":13},"Code Analysis","code-analysis",963,"https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlin-agent-skills","2026-04-06T18:26:00.191761","Apache-2.0",35,[8,29],"skills",{"repoUrl":24,"stars":23,"forks":27,"topics":31,"description":32},[8,29],"A collection of AI agent skills useful for projects using Kotlin language","https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlin-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fkotlin-tooling-java-to-kotlin","---\nname: kotlin-tooling-java-to-kotlin\ndescription: >\n  Use when converting Java source files to idiomatic Kotlin, when user mentions\n  \"java to kotlin\", \"j2k\", \"convert java\", \"migrate java to kotlin\", or when\n  working with .java files that need to become .kt files. Handles framework-aware\n  conversion for Spring, Lombok, Hibernate, Jackson, Micronaut, Quarkus, Dagger\u002FHilt,\n  RxJava, JUnit, Guice, Retrofit, and Mockito.\nlicense: Apache-2.0\nmetadata:\n  author: JetBrains\n  version: \"1.0.0\"\n---\n\n# Java to Kotlin Conversion\n\nConvert Java source files to idiomatic Kotlin using a disciplined 4-step conversion\nmethodology with 5 invariants checked at each step. Supports framework-aware conversion\nthat handles annotation site targets, library idioms, and API preservation.\n\n## Workflow\n\n```dot\ndigraph j2k_workflow {\n  rankdir=TB;\n  \"User specifies files\" -> \"Step 0: Scan & Detect\";\n  \"Step 0: Scan & Detect\" -> \"Load framework guides\";\n  \"Load framework guides\" -> \"Step 1: Convert\";\n  \"Step 1: Convert\" -> \"Step 2: Write .kt\";\n  \"Step 2: Write .kt\" -> \"Step 3: Git rename\";\n  \"Step 3: Git rename\" -> \"Step 4: Verify\";\n  \"Step 4: Verify\" -> \"Next file?\" [label=\"pass\"];\n  \"Step 4: Verify\" -> \"Fix issues\" [label=\"fail\"];\n  \"Fix issues\" -> \"Step 1: Convert\";\n  \"Next file?\" -> \"Step 0: Scan & Detect\" [label=\"batch: yes\"];\n  \"Next file?\" -> \"Done\" [label=\"no more files\"];\n}\n```\n\n## Step 0: Scan & Detect Frameworks\n\nBefore converting, scan the Java file's import statements to detect which frameworks\nare in use. Load ONLY the matching framework reference files to keep context focused.\n\n### Framework Detection Table\n\n| Import prefix | Framework guide |\n|---|---|\n| `org.springframework.*` | [SPRING.md](references\u002Fframeworks\u002FSPRING.md) |\n| `lombok.*` | [LOMBOK.md](references\u002Fframeworks\u002FLOMBOK.md) |\n| `javax.persistence.*`, `jakarta.persistence.*`, `org.hibernate.*` | [HIBERNATE.md](references\u002Fframeworks\u002FHIBERNATE.md) |\n| `com.fasterxml.jackson.*` | [JACKSON.md](references\u002Fframeworks\u002FJACKSON.md) |\n| `io.micronaut.*` | [MICRONAUT.md](references\u002Fframeworks\u002FMICRONAUT.md) |\n| `io.quarkus.*`, `javax.enterprise.*`, `jakarta.enterprise.*` | [QUARKUS.md](references\u002Fframeworks\u002FQUARKUS.md) |\n| `dagger.*`, `dagger.hilt.*` | [DAGGER-HILT.md](references\u002Fframeworks\u002FDAGGER-HILT.md) |\n| `io.reactivex.*`, `rx.*` | [RXJAVA.md](references\u002Fframeworks\u002FRXJAVA.md) |\n| `org.junit.*`, `org.testng.*` | [JUNIT.md](references\u002Fframeworks\u002FJUNIT.md) |\n| `com.google.inject.*` | [GUICE.md](references\u002Fframeworks\u002FGUICE.md) |\n| `retrofit2.*`, `okhttp3.*` | [RETROFIT.md](references\u002Fframeworks\u002FRETROFIT.md) |\n| `org.mockito.*` | [MOCKITO.md](references\u002Fframeworks\u002FMOCKITO.md) |\n\nIf `javax.inject.*` is detected, check for Dagger\u002FHilt vs Guice by looking for other\nimports from those frameworks. If ambiguous, load both guides.\n\n## Step 1: Convert\n\nApply the conversion methodology from [CONVERSION-METHODOLOGY.md](references\u002FCONVERSION-METHODOLOGY.md).\n\nThis is a 4-step chain-of-thought process:\n1. **Faithful 1:1 translation** — exact semantics preserved\n2. **Nullability & mutability audit** — val\u002Fvar, nullable types\n3. **Collection type conversion** — Java mutable → Kotlin types\n4. **Idiomatic transformations** — properties, string templates, lambdas\n\nFive invariants are checked after each step. If any invariant is violated, revert\nto the previous step and redo.\n\nApply any loaded framework-specific guidance during step 4 (idiomatic transformations).\n\n## Step 2: Write Output\n\nWrite the converted Kotlin code to a `.kt` file with the same name as the original\nJava file, in the same directory.\n\n## Step 3: Preserve Git History\n\nTo preserve `git blame` history, use a two-phase approach:\n\n```bash\n# Phase 1: Rename (creates rename tracking)\ngit mv src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FFoo.java src\u002Fmain\u002Fkotlin\u002Fcom\u002Fexample\u002FFoo.kt\ngit commit -m \"Rename Foo.java to Foo.kt\"\n\n# Phase 2: Replace content (tracked as modification, not new file)\n# Write the converted Kotlin content to Foo.kt\ngit commit -m \"Convert Foo from Java to Kotlin\"\n```\n\nIf the project keeps Java and Kotlin in the same source root (e.g., `src\u002Fmain\u002Fjava\u002F`),\nrename in place:\n\n```bash\ngit mv src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FFoo.java src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FFoo.kt\n```\n\nIf the project does not use Git, simply write the `.kt` file and delete the `.java` file.\n\n## Step 4: Verify\n\nAfter conversion, verify using [checklist.md](assets\u002Fchecklist.md):\n- Attempt to compile the converted file\n- Run existing tests\n- Check annotation site targets\n- Confirm no behavioral changes\n\n## Batch Conversion\n\nWhen converting multiple files (a directory or package):\n\n1. **List all `.java` files** in the target scope\n2. **Sort by dependency order** — convert leaf dependencies first (files that don't\n   import other files in the conversion set), then work up to files that depend on them\n3. **Convert one file at a time** — apply the full workflow (steps 0-4) for each\n4. **Track progress** — report which files are done, which remain\n5. **Handle cross-references** — after converting a file, update imports in other Java\n   files if needed (e.g., if a class moved packages)\n\nFor large batches, consider converting in packages (bottom-up from leaf packages).\n\n## Common Pitfalls\n\nSee [KNOWN-ISSUES.md](references\u002FKNOWN-ISSUES.md) for:\n- Kotlin keyword conflicts (`when`, `in`, `is`, `object`)\n- SAM conversion ambiguity\n- Platform types from Java interop\n- `@JvmStatic` \u002F `@JvmField` \u002F `@JvmOverloads` usage\n- Checked exceptions and `@Throws`\n- Wildcard generics → Kotlin variance\n",{"data":36,"body":40},{"name":4,"description":6,"license":26,"metadata":37},{"author":38,"version":39},"JetBrains","1.0.0",{"type":41,"children":42},"root",[43,52,58,65,205,211,216,223,561,574,580,593,598,644,649,654,660,673,679,692,821,834,861,881,887,900,924,930,935,995,1000,1006,1019,1108],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"java-to-kotlin-conversion",[49],{"type":50,"value":51},"text","Java to Kotlin Conversion",{"type":44,"tag":53,"props":54,"children":55},"p",{},[56],{"type":50,"value":57},"Convert Java source files to idiomatic Kotlin using a disciplined 4-step conversion\nmethodology with 5 invariants checked at each step. Supports framework-aware conversion\nthat handles annotation site targets, library idioms, and API preservation.",{"type":44,"tag":59,"props":60,"children":62},"h2",{"id":61},"workflow",[63],{"type":50,"value":64},"Workflow",{"type":44,"tag":66,"props":67,"children":72},"pre",{"className":68,"code":69,"language":70,"meta":71,"style":71},"language-dot shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","digraph j2k_workflow {\n  rankdir=TB;\n  \"User specifies files\" -> \"Step 0: Scan & Detect\";\n  \"Step 0: Scan & Detect\" -> \"Load framework guides\";\n  \"Load framework guides\" -> \"Step 1: Convert\";\n  \"Step 1: Convert\" -> \"Step 2: Write .kt\";\n  \"Step 2: Write .kt\" -> \"Step 3: Git rename\";\n  \"Step 3: Git rename\" -> \"Step 4: Verify\";\n  \"Step 4: Verify\" -> \"Next file?\" [label=\"pass\"];\n  \"Step 4: Verify\" -> \"Fix issues\" [label=\"fail\"];\n  \"Fix issues\" -> \"Step 1: Convert\";\n  \"Next file?\" -> \"Step 0: Scan & Detect\" [label=\"batch: yes\"];\n  \"Next file?\" -> \"Done\" [label=\"no more files\"];\n}\n","dot","",[73],{"type":44,"tag":74,"props":75,"children":76},"code",{"__ignoreMap":71},[77,88,97,106,115,124,133,142,151,160,169,178,187,196],{"type":44,"tag":78,"props":79,"children":82},"span",{"class":80,"line":81},"line",1,[83],{"type":44,"tag":78,"props":84,"children":85},{},[86],{"type":50,"value":87},"digraph j2k_workflow {\n",{"type":44,"tag":78,"props":89,"children":91},{"class":80,"line":90},2,[92],{"type":44,"tag":78,"props":93,"children":94},{},[95],{"type":50,"value":96},"  rankdir=TB;\n",{"type":44,"tag":78,"props":98,"children":100},{"class":80,"line":99},3,[101],{"type":44,"tag":78,"props":102,"children":103},{},[104],{"type":50,"value":105},"  \"User specifies files\" -> \"Step 0: Scan & Detect\";\n",{"type":44,"tag":78,"props":107,"children":109},{"class":80,"line":108},4,[110],{"type":44,"tag":78,"props":111,"children":112},{},[113],{"type":50,"value":114},"  \"Step 0: Scan & Detect\" -> \"Load framework guides\";\n",{"type":44,"tag":78,"props":116,"children":118},{"class":80,"line":117},5,[119],{"type":44,"tag":78,"props":120,"children":121},{},[122],{"type":50,"value":123},"  \"Load framework guides\" -> \"Step 1: Convert\";\n",{"type":44,"tag":78,"props":125,"children":127},{"class":80,"line":126},6,[128],{"type":44,"tag":78,"props":129,"children":130},{},[131],{"type":50,"value":132},"  \"Step 1: Convert\" -> \"Step 2: Write .kt\";\n",{"type":44,"tag":78,"props":134,"children":136},{"class":80,"line":135},7,[137],{"type":44,"tag":78,"props":138,"children":139},{},[140],{"type":50,"value":141},"  \"Step 2: Write .kt\" -> \"Step 3: Git rename\";\n",{"type":44,"tag":78,"props":143,"children":145},{"class":80,"line":144},8,[146],{"type":44,"tag":78,"props":147,"children":148},{},[149],{"type":50,"value":150},"  \"Step 3: Git rename\" -> \"Step 4: Verify\";\n",{"type":44,"tag":78,"props":152,"children":154},{"class":80,"line":153},9,[155],{"type":44,"tag":78,"props":156,"children":157},{},[158],{"type":50,"value":159},"  \"Step 4: Verify\" -> \"Next file?\" [label=\"pass\"];\n",{"type":44,"tag":78,"props":161,"children":163},{"class":80,"line":162},10,[164],{"type":44,"tag":78,"props":165,"children":166},{},[167],{"type":50,"value":168},"  \"Step 4: Verify\" -> \"Fix issues\" [label=\"fail\"];\n",{"type":44,"tag":78,"props":170,"children":172},{"class":80,"line":171},11,[173],{"type":44,"tag":78,"props":174,"children":175},{},[176],{"type":50,"value":177},"  \"Fix issues\" -> \"Step 1: Convert\";\n",{"type":44,"tag":78,"props":179,"children":181},{"class":80,"line":180},12,[182],{"type":44,"tag":78,"props":183,"children":184},{},[185],{"type":50,"value":186},"  \"Next file?\" -> \"Step 0: Scan & Detect\" [label=\"batch: yes\"];\n",{"type":44,"tag":78,"props":188,"children":190},{"class":80,"line":189},13,[191],{"type":44,"tag":78,"props":192,"children":193},{},[194],{"type":50,"value":195},"  \"Next file?\" -> \"Done\" [label=\"no more files\"];\n",{"type":44,"tag":78,"props":197,"children":199},{"class":80,"line":198},14,[200],{"type":44,"tag":78,"props":201,"children":202},{},[203],{"type":50,"value":204},"}\n",{"type":44,"tag":59,"props":206,"children":208},{"id":207},"step-0-scan-detect-frameworks",[209],{"type":50,"value":210},"Step 0: Scan & Detect Frameworks",{"type":44,"tag":53,"props":212,"children":213},{},[214],{"type":50,"value":215},"Before converting, scan the Java file's import statements to detect which frameworks\nare in use. Load ONLY the matching framework reference files to keep context focused.",{"type":44,"tag":217,"props":218,"children":220},"h3",{"id":219},"framework-detection-table",[221],{"type":50,"value":222},"Framework Detection Table",{"type":44,"tag":224,"props":225,"children":226},"table",{},[227,246],{"type":44,"tag":228,"props":229,"children":230},"thead",{},[231],{"type":44,"tag":232,"props":233,"children":234},"tr",{},[235,241],{"type":44,"tag":236,"props":237,"children":238},"th",{},[239],{"type":50,"value":240},"Import prefix",{"type":44,"tag":236,"props":242,"children":243},{},[244],{"type":50,"value":245},"Framework guide",{"type":44,"tag":247,"props":248,"children":249},"tbody",{},[250,273,294,330,351,372,407,435,463,491,512,540],{"type":44,"tag":232,"props":251,"children":252},{},[253,263],{"type":44,"tag":254,"props":255,"children":256},"td",{},[257],{"type":44,"tag":74,"props":258,"children":260},{"className":259},[],[261],{"type":50,"value":262},"org.springframework.*",{"type":44,"tag":254,"props":264,"children":265},{},[266],{"type":44,"tag":267,"props":268,"children":270},"a",{"href":269},"references\u002Fframeworks\u002FSPRING.md",[271],{"type":50,"value":272},"SPRING.md",{"type":44,"tag":232,"props":274,"children":275},{},[276,285],{"type":44,"tag":254,"props":277,"children":278},{},[279],{"type":44,"tag":74,"props":280,"children":282},{"className":281},[],[283],{"type":50,"value":284},"lombok.*",{"type":44,"tag":254,"props":286,"children":287},{},[288],{"type":44,"tag":267,"props":289,"children":291},{"href":290},"references\u002Fframeworks\u002FLOMBOK.md",[292],{"type":50,"value":293},"LOMBOK.md",{"type":44,"tag":232,"props":295,"children":296},{},[297,321],{"type":44,"tag":254,"props":298,"children":299},{},[300,306,308,314,315],{"type":44,"tag":74,"props":301,"children":303},{"className":302},[],[304],{"type":50,"value":305},"javax.persistence.*",{"type":50,"value":307},", ",{"type":44,"tag":74,"props":309,"children":311},{"className":310},[],[312],{"type":50,"value":313},"jakarta.persistence.*",{"type":50,"value":307},{"type":44,"tag":74,"props":316,"children":318},{"className":317},[],[319],{"type":50,"value":320},"org.hibernate.*",{"type":44,"tag":254,"props":322,"children":323},{},[324],{"type":44,"tag":267,"props":325,"children":327},{"href":326},"references\u002Fframeworks\u002FHIBERNATE.md",[328],{"type":50,"value":329},"HIBERNATE.md",{"type":44,"tag":232,"props":331,"children":332},{},[333,342],{"type":44,"tag":254,"props":334,"children":335},{},[336],{"type":44,"tag":74,"props":337,"children":339},{"className":338},[],[340],{"type":50,"value":341},"com.fasterxml.jackson.*",{"type":44,"tag":254,"props":343,"children":344},{},[345],{"type":44,"tag":267,"props":346,"children":348},{"href":347},"references\u002Fframeworks\u002FJACKSON.md",[349],{"type":50,"value":350},"JACKSON.md",{"type":44,"tag":232,"props":352,"children":353},{},[354,363],{"type":44,"tag":254,"props":355,"children":356},{},[357],{"type":44,"tag":74,"props":358,"children":360},{"className":359},[],[361],{"type":50,"value":362},"io.micronaut.*",{"type":44,"tag":254,"props":364,"children":365},{},[366],{"type":44,"tag":267,"props":367,"children":369},{"href":368},"references\u002Fframeworks\u002FMICRONAUT.md",[370],{"type":50,"value":371},"MICRONAUT.md",{"type":44,"tag":232,"props":373,"children":374},{},[375,398],{"type":44,"tag":254,"props":376,"children":377},{},[378,384,385,391,392],{"type":44,"tag":74,"props":379,"children":381},{"className":380},[],[382],{"type":50,"value":383},"io.quarkus.*",{"type":50,"value":307},{"type":44,"tag":74,"props":386,"children":388},{"className":387},[],[389],{"type":50,"value":390},"javax.enterprise.*",{"type":50,"value":307},{"type":44,"tag":74,"props":393,"children":395},{"className":394},[],[396],{"type":50,"value":397},"jakarta.enterprise.*",{"type":44,"tag":254,"props":399,"children":400},{},[401],{"type":44,"tag":267,"props":402,"children":404},{"href":403},"references\u002Fframeworks\u002FQUARKUS.md",[405],{"type":50,"value":406},"QUARKUS.md",{"type":44,"tag":232,"props":408,"children":409},{},[410,426],{"type":44,"tag":254,"props":411,"children":412},{},[413,419,420],{"type":44,"tag":74,"props":414,"children":416},{"className":415},[],[417],{"type":50,"value":418},"dagger.*",{"type":50,"value":307},{"type":44,"tag":74,"props":421,"children":423},{"className":422},[],[424],{"type":50,"value":425},"dagger.hilt.*",{"type":44,"tag":254,"props":427,"children":428},{},[429],{"type":44,"tag":267,"props":430,"children":432},{"href":431},"references\u002Fframeworks\u002FDAGGER-HILT.md",[433],{"type":50,"value":434},"DAGGER-HILT.md",{"type":44,"tag":232,"props":436,"children":437},{},[438,454],{"type":44,"tag":254,"props":439,"children":440},{},[441,447,448],{"type":44,"tag":74,"props":442,"children":444},{"className":443},[],[445],{"type":50,"value":446},"io.reactivex.*",{"type":50,"value":307},{"type":44,"tag":74,"props":449,"children":451},{"className":450},[],[452],{"type":50,"value":453},"rx.*",{"type":44,"tag":254,"props":455,"children":456},{},[457],{"type":44,"tag":267,"props":458,"children":460},{"href":459},"references\u002Fframeworks\u002FRXJAVA.md",[461],{"type":50,"value":462},"RXJAVA.md",{"type":44,"tag":232,"props":464,"children":465},{},[466,482],{"type":44,"tag":254,"props":467,"children":468},{},[469,475,476],{"type":44,"tag":74,"props":470,"children":472},{"className":471},[],[473],{"type":50,"value":474},"org.junit.*",{"type":50,"value":307},{"type":44,"tag":74,"props":477,"children":479},{"className":478},[],[480],{"type":50,"value":481},"org.testng.*",{"type":44,"tag":254,"props":483,"children":484},{},[485],{"type":44,"tag":267,"props":486,"children":488},{"href":487},"references\u002Fframeworks\u002FJUNIT.md",[489],{"type":50,"value":490},"JUNIT.md",{"type":44,"tag":232,"props":492,"children":493},{},[494,503],{"type":44,"tag":254,"props":495,"children":496},{},[497],{"type":44,"tag":74,"props":498,"children":500},{"className":499},[],[501],{"type":50,"value":502},"com.google.inject.*",{"type":44,"tag":254,"props":504,"children":505},{},[506],{"type":44,"tag":267,"props":507,"children":509},{"href":508},"references\u002Fframeworks\u002FGUICE.md",[510],{"type":50,"value":511},"GUICE.md",{"type":44,"tag":232,"props":513,"children":514},{},[515,531],{"type":44,"tag":254,"props":516,"children":517},{},[518,524,525],{"type":44,"tag":74,"props":519,"children":521},{"className":520},[],[522],{"type":50,"value":523},"retrofit2.*",{"type":50,"value":307},{"type":44,"tag":74,"props":526,"children":528},{"className":527},[],[529],{"type":50,"value":530},"okhttp3.*",{"type":44,"tag":254,"props":532,"children":533},{},[534],{"type":44,"tag":267,"props":535,"children":537},{"href":536},"references\u002Fframeworks\u002FRETROFIT.md",[538],{"type":50,"value":539},"RETROFIT.md",{"type":44,"tag":232,"props":541,"children":542},{},[543,552],{"type":44,"tag":254,"props":544,"children":545},{},[546],{"type":44,"tag":74,"props":547,"children":549},{"className":548},[],[550],{"type":50,"value":551},"org.mockito.*",{"type":44,"tag":254,"props":553,"children":554},{},[555],{"type":44,"tag":267,"props":556,"children":558},{"href":557},"references\u002Fframeworks\u002FMOCKITO.md",[559],{"type":50,"value":560},"MOCKITO.md",{"type":44,"tag":53,"props":562,"children":563},{},[564,566,572],{"type":50,"value":565},"If ",{"type":44,"tag":74,"props":567,"children":569},{"className":568},[],[570],{"type":50,"value":571},"javax.inject.*",{"type":50,"value":573}," is detected, check for Dagger\u002FHilt vs Guice by looking for other\nimports from those frameworks. If ambiguous, load both guides.",{"type":44,"tag":59,"props":575,"children":577},{"id":576},"step-1-convert",[578],{"type":50,"value":579},"Step 1: Convert",{"type":44,"tag":53,"props":581,"children":582},{},[583,585,591],{"type":50,"value":584},"Apply the conversion methodology from ",{"type":44,"tag":267,"props":586,"children":588},{"href":587},"references\u002FCONVERSION-METHODOLOGY.md",[589],{"type":50,"value":590},"CONVERSION-METHODOLOGY.md",{"type":50,"value":592},".",{"type":44,"tag":53,"props":594,"children":595},{},[596],{"type":50,"value":597},"This is a 4-step chain-of-thought process:",{"type":44,"tag":599,"props":600,"children":601},"ol",{},[602,614,624,634],{"type":44,"tag":603,"props":604,"children":605},"li",{},[606,612],{"type":44,"tag":607,"props":608,"children":609},"strong",{},[610],{"type":50,"value":611},"Faithful 1:1 translation",{"type":50,"value":613}," — exact semantics preserved",{"type":44,"tag":603,"props":615,"children":616},{},[617,622],{"type":44,"tag":607,"props":618,"children":619},{},[620],{"type":50,"value":621},"Nullability & mutability audit",{"type":50,"value":623}," — val\u002Fvar, nullable types",{"type":44,"tag":603,"props":625,"children":626},{},[627,632],{"type":44,"tag":607,"props":628,"children":629},{},[630],{"type":50,"value":631},"Collection type conversion",{"type":50,"value":633}," — Java mutable → Kotlin types",{"type":44,"tag":603,"props":635,"children":636},{},[637,642],{"type":44,"tag":607,"props":638,"children":639},{},[640],{"type":50,"value":641},"Idiomatic transformations",{"type":50,"value":643}," — properties, string templates, lambdas",{"type":44,"tag":53,"props":645,"children":646},{},[647],{"type":50,"value":648},"Five invariants are checked after each step. If any invariant is violated, revert\nto the previous step and redo.",{"type":44,"tag":53,"props":650,"children":651},{},[652],{"type":50,"value":653},"Apply any loaded framework-specific guidance during step 4 (idiomatic transformations).",{"type":44,"tag":59,"props":655,"children":657},{"id":656},"step-2-write-output",[658],{"type":50,"value":659},"Step 2: Write Output",{"type":44,"tag":53,"props":661,"children":662},{},[663,665,671],{"type":50,"value":664},"Write the converted Kotlin code to a ",{"type":44,"tag":74,"props":666,"children":668},{"className":667},[],[669],{"type":50,"value":670},".kt",{"type":50,"value":672}," file with the same name as the original\nJava file, in the same directory.",{"type":44,"tag":59,"props":674,"children":676},{"id":675},"step-3-preserve-git-history",[677],{"type":50,"value":678},"Step 3: Preserve Git History",{"type":44,"tag":53,"props":680,"children":681},{},[682,684,690],{"type":50,"value":683},"To preserve ",{"type":44,"tag":74,"props":685,"children":687},{"className":686},[],[688],{"type":50,"value":689},"git blame",{"type":50,"value":691}," history, use a two-phase approach:",{"type":44,"tag":66,"props":693,"children":697},{"className":694,"code":695,"language":696,"meta":71,"style":71},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Phase 1: Rename (creates rename tracking)\ngit mv src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FFoo.java src\u002Fmain\u002Fkotlin\u002Fcom\u002Fexample\u002FFoo.kt\ngit commit -m \"Rename Foo.java to Foo.kt\"\n\n# Phase 2: Replace content (tracked as modification, not new file)\n# Write the converted Kotlin content to Foo.kt\ngit commit -m \"Convert Foo from Java to Kotlin\"\n","bash",[698],{"type":44,"tag":74,"props":699,"children":700},{"__ignoreMap":71},[701,710,735,768,777,785,793],{"type":44,"tag":78,"props":702,"children":703},{"class":80,"line":81},[704],{"type":44,"tag":78,"props":705,"children":707},{"style":706},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[708],{"type":50,"value":709},"# Phase 1: Rename (creates rename tracking)\n",{"type":44,"tag":78,"props":711,"children":712},{"class":80,"line":90},[713,719,725,730],{"type":44,"tag":78,"props":714,"children":716},{"style":715},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[717],{"type":50,"value":718},"git",{"type":44,"tag":78,"props":720,"children":722},{"style":721},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[723],{"type":50,"value":724}," mv",{"type":44,"tag":78,"props":726,"children":727},{"style":721},[728],{"type":50,"value":729}," src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FFoo.java",{"type":44,"tag":78,"props":731,"children":732},{"style":721},[733],{"type":50,"value":734}," src\u002Fmain\u002Fkotlin\u002Fcom\u002Fexample\u002FFoo.kt\n",{"type":44,"tag":78,"props":736,"children":737},{"class":80,"line":99},[738,742,747,752,758,763],{"type":44,"tag":78,"props":739,"children":740},{"style":715},[741],{"type":50,"value":718},{"type":44,"tag":78,"props":743,"children":744},{"style":721},[745],{"type":50,"value":746}," commit",{"type":44,"tag":78,"props":748,"children":749},{"style":721},[750],{"type":50,"value":751}," -m",{"type":44,"tag":78,"props":753,"children":755},{"style":754},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[756],{"type":50,"value":757}," \"",{"type":44,"tag":78,"props":759,"children":760},{"style":721},[761],{"type":50,"value":762},"Rename Foo.java to Foo.kt",{"type":44,"tag":78,"props":764,"children":765},{"style":754},[766],{"type":50,"value":767},"\"\n",{"type":44,"tag":78,"props":769,"children":770},{"class":80,"line":108},[771],{"type":44,"tag":78,"props":772,"children":774},{"emptyLinePlaceholder":773},true,[775],{"type":50,"value":776},"\n",{"type":44,"tag":78,"props":778,"children":779},{"class":80,"line":117},[780],{"type":44,"tag":78,"props":781,"children":782},{"style":706},[783],{"type":50,"value":784},"# Phase 2: Replace content (tracked as modification, not new file)\n",{"type":44,"tag":78,"props":786,"children":787},{"class":80,"line":126},[788],{"type":44,"tag":78,"props":789,"children":790},{"style":706},[791],{"type":50,"value":792},"# Write the converted Kotlin content to Foo.kt\n",{"type":44,"tag":78,"props":794,"children":795},{"class":80,"line":135},[796,800,804,808,812,817],{"type":44,"tag":78,"props":797,"children":798},{"style":715},[799],{"type":50,"value":718},{"type":44,"tag":78,"props":801,"children":802},{"style":721},[803],{"type":50,"value":746},{"type":44,"tag":78,"props":805,"children":806},{"style":721},[807],{"type":50,"value":751},{"type":44,"tag":78,"props":809,"children":810},{"style":754},[811],{"type":50,"value":757},{"type":44,"tag":78,"props":813,"children":814},{"style":721},[815],{"type":50,"value":816},"Convert Foo from Java to Kotlin",{"type":44,"tag":78,"props":818,"children":819},{"style":754},[820],{"type":50,"value":767},{"type":44,"tag":53,"props":822,"children":823},{},[824,826,832],{"type":50,"value":825},"If the project keeps Java and Kotlin in the same source root (e.g., ",{"type":44,"tag":74,"props":827,"children":829},{"className":828},[],[830],{"type":50,"value":831},"src\u002Fmain\u002Fjava\u002F",{"type":50,"value":833},"),\nrename in place:",{"type":44,"tag":66,"props":835,"children":837},{"className":694,"code":836,"language":696,"meta":71,"style":71},"git mv src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FFoo.java src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FFoo.kt\n",[838],{"type":44,"tag":74,"props":839,"children":840},{"__ignoreMap":71},[841],{"type":44,"tag":78,"props":842,"children":843},{"class":80,"line":81},[844,848,852,856],{"type":44,"tag":78,"props":845,"children":846},{"style":715},[847],{"type":50,"value":718},{"type":44,"tag":78,"props":849,"children":850},{"style":721},[851],{"type":50,"value":724},{"type":44,"tag":78,"props":853,"children":854},{"style":721},[855],{"type":50,"value":729},{"type":44,"tag":78,"props":857,"children":858},{"style":721},[859],{"type":50,"value":860}," src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FFoo.kt\n",{"type":44,"tag":53,"props":862,"children":863},{},[864,866,871,873,879],{"type":50,"value":865},"If the project does not use Git, simply write the ",{"type":44,"tag":74,"props":867,"children":869},{"className":868},[],[870],{"type":50,"value":670},{"type":50,"value":872}," file and delete the ",{"type":44,"tag":74,"props":874,"children":876},{"className":875},[],[877],{"type":50,"value":878},".java",{"type":50,"value":880}," file.",{"type":44,"tag":59,"props":882,"children":884},{"id":883},"step-4-verify",[885],{"type":50,"value":886},"Step 4: Verify",{"type":44,"tag":53,"props":888,"children":889},{},[890,892,898],{"type":50,"value":891},"After conversion, verify using ",{"type":44,"tag":267,"props":893,"children":895},{"href":894},"assets\u002Fchecklist.md",[896],{"type":50,"value":897},"checklist.md",{"type":50,"value":899},":",{"type":44,"tag":901,"props":902,"children":903},"ul",{},[904,909,914,919],{"type":44,"tag":603,"props":905,"children":906},{},[907],{"type":50,"value":908},"Attempt to compile the converted file",{"type":44,"tag":603,"props":910,"children":911},{},[912],{"type":50,"value":913},"Run existing tests",{"type":44,"tag":603,"props":915,"children":916},{},[917],{"type":50,"value":918},"Check annotation site targets",{"type":44,"tag":603,"props":920,"children":921},{},[922],{"type":50,"value":923},"Confirm no behavioral changes",{"type":44,"tag":59,"props":925,"children":927},{"id":926},"batch-conversion",[928],{"type":50,"value":929},"Batch Conversion",{"type":44,"tag":53,"props":931,"children":932},{},[933],{"type":50,"value":934},"When converting multiple files (a directory or package):",{"type":44,"tag":599,"props":936,"children":937},{},[938,955,965,975,985],{"type":44,"tag":603,"props":939,"children":940},{},[941,953],{"type":44,"tag":607,"props":942,"children":943},{},[944,946,951],{"type":50,"value":945},"List all ",{"type":44,"tag":74,"props":947,"children":949},{"className":948},[],[950],{"type":50,"value":878},{"type":50,"value":952}," files",{"type":50,"value":954}," in the target scope",{"type":44,"tag":603,"props":956,"children":957},{},[958,963],{"type":44,"tag":607,"props":959,"children":960},{},[961],{"type":50,"value":962},"Sort by dependency order",{"type":50,"value":964}," — convert leaf dependencies first (files that don't\nimport other files in the conversion set), then work up to files that depend on them",{"type":44,"tag":603,"props":966,"children":967},{},[968,973],{"type":44,"tag":607,"props":969,"children":970},{},[971],{"type":50,"value":972},"Convert one file at a time",{"type":50,"value":974}," — apply the full workflow (steps 0-4) for each",{"type":44,"tag":603,"props":976,"children":977},{},[978,983],{"type":44,"tag":607,"props":979,"children":980},{},[981],{"type":50,"value":982},"Track progress",{"type":50,"value":984}," — report which files are done, which remain",{"type":44,"tag":603,"props":986,"children":987},{},[988,993],{"type":44,"tag":607,"props":989,"children":990},{},[991],{"type":50,"value":992},"Handle cross-references",{"type":50,"value":994}," — after converting a file, update imports in other Java\nfiles if needed (e.g., if a class moved packages)",{"type":44,"tag":53,"props":996,"children":997},{},[998],{"type":50,"value":999},"For large batches, consider converting in packages (bottom-up from leaf packages).",{"type":44,"tag":59,"props":1001,"children":1003},{"id":1002},"common-pitfalls",[1004],{"type":50,"value":1005},"Common Pitfalls",{"type":44,"tag":53,"props":1007,"children":1008},{},[1009,1011,1017],{"type":50,"value":1010},"See ",{"type":44,"tag":267,"props":1012,"children":1014},{"href":1013},"references\u002FKNOWN-ISSUES.md",[1015],{"type":50,"value":1016},"KNOWN-ISSUES.md",{"type":50,"value":1018}," for:",{"type":44,"tag":901,"props":1020,"children":1021},{},[1022,1056,1061,1066,1092,1103],{"type":44,"tag":603,"props":1023,"children":1024},{},[1025,1027,1033,1034,1040,1041,1047,1048,1054],{"type":50,"value":1026},"Kotlin keyword conflicts (",{"type":44,"tag":74,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":50,"value":1032},"when",{"type":50,"value":307},{"type":44,"tag":74,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":50,"value":1039},"in",{"type":50,"value":307},{"type":44,"tag":74,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":50,"value":1046},"is",{"type":50,"value":307},{"type":44,"tag":74,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":50,"value":1053},"object",{"type":50,"value":1055},")",{"type":44,"tag":603,"props":1057,"children":1058},{},[1059],{"type":50,"value":1060},"SAM conversion ambiguity",{"type":44,"tag":603,"props":1062,"children":1063},{},[1064],{"type":50,"value":1065},"Platform types from Java interop",{"type":44,"tag":603,"props":1067,"children":1068},{},[1069,1075,1077,1083,1084,1090],{"type":44,"tag":74,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":50,"value":1074},"@JvmStatic",{"type":50,"value":1076}," \u002F ",{"type":44,"tag":74,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":50,"value":1082},"@JvmField",{"type":50,"value":1076},{"type":44,"tag":74,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":50,"value":1089},"@JvmOverloads",{"type":50,"value":1091}," usage",{"type":44,"tag":603,"props":1093,"children":1094},{},[1095,1097],{"type":50,"value":1096},"Checked exceptions and ",{"type":44,"tag":74,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":50,"value":1102},"@Throws",{"type":44,"tag":603,"props":1104,"children":1105},{},[1106],{"type":50,"value":1107},"Wildcard generics → Kotlin variance",{"type":44,"tag":1109,"props":1110,"children":1111},"style",{},[1112],{"type":50,"value":1113},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1115,"total":126},[1116,1136,1151,1167,1183,1190],{"slug":1117,"name":1117,"fn":1118,"description":1119,"org":1120,"tags":1121,"stars":23,"repoUrl":24,"updatedAt":1135},"kotlin-backend-jpa-entity-mapping","map JPA entities in Kotlin backend apps","Model Kotlin persistence code correctly for Spring Data JPA and Hibernate. Covers entity design, identity and equality, uniqueness constraints, relationships, fetch plans, and common ORM (Object-Relational Mapping) traps  specific to Kotlin. Use when creating or reviewing JPA (Java Persistence API)  entities, diagnosing N+1 or LazyInitializationException, placing indexes and  uniqueness rules, or preventing Kotlin-specific bugs such as data class  entities and broken equals\u002FhashCode.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1122,1125,1128,1131,1132],{"name":1123,"slug":1124,"type":13},"Backend","backend",{"name":1126,"slug":1127,"type":13},"Data Modeling","data-modeling",{"name":1129,"slug":1130,"type":13},"Database","database",{"name":9,"slug":8,"type":13},{"name":1133,"slug":1134,"type":13},"ORM","orm","2026-04-06T18:26:01.44065",{"slug":1137,"name":1137,"fn":1138,"description":1139,"org":1140,"tags":1141,"stars":23,"repoUrl":24,"updatedAt":1150},"kotlin-tooling-agp9-migration","migrate KMP projects to AGP 9.0","Migrates Kotlin Multiplatform (KMP) projects to Android Gradle Plugin 9.0+. Handles plugin replacement (com.android.kotlin.multiplatform.library), module splitting, DSL migration, and the new default project structure. Use when upgrading AGP, when build fails due to KMP+AGP incompatibility, or when the user mentions AGP 9.0, android multiplatform plugin, KMP migration, or com.android.kotlin.multiplatform.library.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1142,1145,1146,1147],{"name":1143,"slug":1144,"type":13},"Android","android",{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":1148,"slug":1149,"type":13},"Mobile","mobile","2026-04-06T18:25:58.945632",{"slug":1152,"name":1152,"fn":1153,"description":1154,"org":1155,"tags":1156,"stars":23,"repoUrl":24,"updatedAt":1166},"kotlin-tooling-cocoapods-spm-migration","migrate KMP projects from CocoaPods to SPM","Migrate KMP projects from CocoaPods (kotlin(\"native.cocoapods\")) to Swift Package Manager (swiftPMDependencies DSL) — replaces pod() with swiftPackage(), transforms cocoapods.* imports to swiftPMImport.*, and reconfigures the Xcode project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1157,1160,1161,1162,1163],{"name":1158,"slug":1159,"type":13},"iOS","ios",{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":1148,"slug":1149,"type":13},{"name":1164,"slug":1165,"type":13},"Swift","swift","2026-04-06T18:25:57.691016",{"slug":1168,"name":1168,"fn":1169,"description":1170,"org":1171,"tags":1172,"stars":23,"repoUrl":24,"updatedAt":1182},"kotlin-tooling-immutable-collections-0-5-x-migration","migrate Kotlin projects to immutable collections 0.5.x","Migrate Kotlin (and Java) code from kotlinx.collections.immutable 0.3.x \u002F 0.4.x to the latest 0.5.x. The 0.5.x line renames every copy-returning method on PersistentList \u002F PersistentMap \u002F PersistentSet \u002F PersistentCollection to a participial form per KEEP-0459 (add→adding, removeAt→removingAt, set→replacingAt, put→putting, clear→cleared, …) and deprecates the old names (WARNING, with ReplaceWith). Driven by the compiler: bump the version, recompile, and apply the rename each deprecation warning names. Use when the user mentions kotlinx.collections.immutable 0.5.x, PersistentList migration, \"Use adding() instead\", KEEP-0459, or sees deprecation warnings from kotlinx.collections.immutable.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1173,1176,1177,1178,1179],{"name":1174,"slug":1175,"type":13},"Engineering","engineering",{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":1180,"slug":1181,"type":13},"Tech Debt","tech-debt","2026-06-09T07:19:44.883299",{"slug":4,"name":4,"fn":5,"description":6,"org":1184,"tags":1185,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1186,1187,1188,1189],{"name":21,"slug":22,"type":13},{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"slug":1191,"name":1191,"fn":1192,"description":1193,"org":1194,"tags":1195,"stars":23,"repoUrl":24,"updatedAt":1202},"kotlin-tooling-native-build-performance","optimize Kotlin Native build performance","Diagnoses and fixes slow Kotlin\u002FNative compilation and linking in Kotlin Multiplatform projects that target iOS. Use when the user reports slow iOS or shared-framework builds, long linkDebug*\u002FlinkRelease* or XCFramework tasks, cold CI builds that re-download the Kotlin\u002FNative toolchain, KSP or other generated code on the native path, transitiveExport usage, or asks for a local-development versus CI build performance plan.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1196,1197,1198,1199],{"name":1158,"slug":1159,"type":13},{"name":9,"slug":8,"type":13},{"name":1148,"slug":1149,"type":13},{"name":1200,"slug":1201,"type":13},"Performance","performance","2026-07-18T05:47:25.998032",{"items":1204,"total":126},[1205,1213,1220,1228,1236,1243],{"slug":1117,"name":1117,"fn":1118,"description":1119,"org":1206,"tags":1207,"stars":23,"repoUrl":24,"updatedAt":1135},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1208,1209,1210,1211,1212],{"name":1123,"slug":1124,"type":13},{"name":1126,"slug":1127,"type":13},{"name":1129,"slug":1130,"type":13},{"name":9,"slug":8,"type":13},{"name":1133,"slug":1134,"type":13},{"slug":1137,"name":1137,"fn":1138,"description":1139,"org":1214,"tags":1215,"stars":23,"repoUrl":24,"updatedAt":1150},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1216,1217,1218,1219],{"name":1143,"slug":1144,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":1148,"slug":1149,"type":13},{"slug":1152,"name":1152,"fn":1153,"description":1154,"org":1221,"tags":1222,"stars":23,"repoUrl":24,"updatedAt":1166},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1223,1224,1225,1226,1227],{"name":1158,"slug":1159,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":1148,"slug":1149,"type":13},{"name":1164,"slug":1165,"type":13},{"slug":1168,"name":1168,"fn":1169,"description":1170,"org":1229,"tags":1230,"stars":23,"repoUrl":24,"updatedAt":1182},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1231,1232,1233,1234,1235],{"name":1174,"slug":1175,"type":13},{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":1180,"slug":1181,"type":13},{"slug":4,"name":4,"fn":5,"description":6,"org":1237,"tags":1238,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1239,1240,1241,1242],{"name":21,"slug":22,"type":13},{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"slug":1191,"name":1191,"fn":1192,"description":1193,"org":1244,"tags":1245,"stars":23,"repoUrl":24,"updatedAt":1202},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1246,1247,1248,1249],{"name":1158,"slug":1159,"type":13},{"name":9,"slug":8,"type":13},{"name":1148,"slug":1149,"type":13},{"name":1200,"slug":1201,"type":13}]