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