xref: /aosp_15_r20/external/kotlinpoet/docs/interop-javapoet.md (revision 3c321d951dd070fb96f8ba59e952ffc3131379a0)
1*3c321d95SSadaf EbrahimiJavaPoet Extensions for KotlinPoet
2*3c321d95SSadaf Ebrahimi==================================
3*3c321d95SSadaf Ebrahimi
4*3c321d95SSadaf Ebrahimi`interop:javapoet` is an interop API for converting [JavaPoet](https://github.com/square/javapoet)
5*3c321d95SSadaf Ebrahimitypes to KotlinPoet types. This is particularly useful for projects that support code gen in
6*3c321d95SSadaf Ebrahimimultiple languages and want to easily be able to jump between.
7*3c321d95SSadaf Ebrahimi
8*3c321d95SSadaf EbrahimiNote that this API is currently in preview and subject to API changes. Usage of them requires opting
9*3c321d95SSadaf Ebrahimiin to the `@KotlinPoetJavaPoetPreview` annotation.
10*3c321d95SSadaf Ebrahimi
11*3c321d95SSadaf Ebrahimi### Examples
12*3c321d95SSadaf Ebrahimi
13*3c321d95SSadaf Ebrahimi**Typealiases for common conflicting type names**
14*3c321d95SSadaf Ebrahimi
15*3c321d95SSadaf Ebrahimi```kotlin
16*3c321d95SSadaf Ebrahimi// Points to com.squareup.kotlinpoet.TypeName
17*3c321d95SSadaf EbrahimiKTypeName
18*3c321d95SSadaf Ebrahimi// Points to com.squareup.javapoet.TypeName
19*3c321d95SSadaf EbrahimiJTypeName
20*3c321d95SSadaf Ebrahimi```
21*3c321d95SSadaf Ebrahimi
22*3c321d95SSadaf Ebrahimi**Convert between a `JTypeName` and `KTypeName`**
23*3c321d95SSadaf Ebrahimi
24*3c321d95SSadaf EbrahimiMost usages of these can run through the `toKTypeName()` and `toJTypeName()` extensions.
25*3c321d95SSadaf Ebrahimi
26*3c321d95SSadaf Ebrahimi```kotlin
27*3c321d95SSadaf Ebrahimival jType = JTypeName.get("com.example", "Taco")
28*3c321d95SSadaf Ebrahimi
29*3c321d95SSadaf Ebrahimi// Returns a KotlinPoet `ClassName` of value `com.example.Taco`
30*3c321d95SSadaf Ebrahimival kType = jType.toKTypeName()
31*3c321d95SSadaf Ebrahimi
32*3c321d95SSadaf Ebrahimi// Returns a JavaPoet `ClassName` of value `com.example.Taco`
33*3c321d95SSadaf Ebrahimival jType2 = kType.toJTypeName()
34*3c321d95SSadaf Ebrahimi```
35*3c321d95SSadaf Ebrahimi
36*3c321d95SSadaf Ebrahimi### Intrinsics
37*3c321d95SSadaf Ebrahimi
38*3c321d95SSadaf EbrahimiKotlin supports a number of intrinsic types that live in the `kotlin` package, such as primitives,
39*3c321d95SSadaf Ebrahimi`List`, `String`, `IntArray`, etc. Where possible, interop will best-effort attempt to convert to
40*3c321d95SSadaf Ebrahimithe idiomatic Kotlin type when converting from the Java type.
41*3c321d95SSadaf Ebrahimi
42*3c321d95SSadaf Ebrahimi### Lossy Conversions
43*3c321d95SSadaf Ebrahimi
44*3c321d95SSadaf EbrahimiKotlin has more expressive types in some regards. These cannot be simply expressed in JavaPoet and
45*3c321d95SSadaf Ebrahimiare subject to lossy conversions.
46*3c321d95SSadaf Ebrahimi
47*3c321d95SSadaf EbrahimiExamples include:
48*3c321d95SSadaf Ebrahimi
49*3c321d95SSadaf Ebrahimi- Nullability
50*3c321d95SSadaf Ebrahimi  - Nullable types in Kotlin will appear as normal types in JavaPoet.
51*3c321d95SSadaf Ebrahimi- Collection mutability
52*3c321d95SSadaf Ebrahimi  - Immutable Kotlin collections will convert to their standard (mutable) Java analogs.
53*3c321d95SSadaf Ebrahimi  - Java collections will convert to _immutable_ Kotlin analogs, erring on the side of safety in generated public APIs
54*3c321d95SSadaf Ebrahimi- Unsigned types
55