xref: /aosp_15_r20/external/kotlinpoet/docs/index.md (revision 3c321d951dd070fb96f8ba59e952ffc3131379a0)
1*3c321d95SSadaf EbrahimiKotlinPoet
2*3c321d95SSadaf Ebrahimi==========
3*3c321d95SSadaf Ebrahimi
4*3c321d95SSadaf Ebrahimi`KotlinPoet` is a Kotlin and Java API for generating `.kt` source files.
5*3c321d95SSadaf Ebrahimi
6*3c321d95SSadaf EbrahimiSource file generation can be useful when doing things such as annotation processing or interacting
7*3c321d95SSadaf Ebrahimiwith metadata files (e.g., database schemas, protocol formats). By generating code, you eliminate
8*3c321d95SSadaf Ebrahimithe need to write boilerplate while also keeping a single source of truth for the metadata.
9*3c321d95SSadaf Ebrahimi
10*3c321d95SSadaf Ebrahimi## Example
11*3c321d95SSadaf Ebrahimi
12*3c321d95SSadaf EbrahimiHere's a `HelloWorld` file:
13*3c321d95SSadaf Ebrahimi
14*3c321d95SSadaf Ebrahimi```kotlin
15*3c321d95SSadaf Ebrahimiclass Greeter(val name: String) {
16*3c321d95SSadaf Ebrahimi  fun greet() {
17*3c321d95SSadaf Ebrahimi    println("""Hello, $name""")
18*3c321d95SSadaf Ebrahimi  }
19*3c321d95SSadaf Ebrahimi}
20*3c321d95SSadaf Ebrahimi
21*3c321d95SSadaf Ebrahimifun main(vararg args: String) {
22*3c321d95SSadaf Ebrahimi  Greeter(args[0]).greet()
23*3c321d95SSadaf Ebrahimi}
24*3c321d95SSadaf Ebrahimi```
25*3c321d95SSadaf Ebrahimi
26*3c321d95SSadaf EbrahimiAnd this is the code to generate it with KotlinPoet:
27*3c321d95SSadaf Ebrahimi
28*3c321d95SSadaf Ebrahimi```kotlin
29*3c321d95SSadaf Ebrahimival greeterClass = ClassName("", "Greeter")
30*3c321d95SSadaf Ebrahimival file = FileSpec.builder("", "HelloWorld")
31*3c321d95SSadaf Ebrahimi  .addType(
32*3c321d95SSadaf Ebrahimi    TypeSpec.classBuilder("Greeter")
33*3c321d95SSadaf Ebrahimi      .primaryConstructor(
34*3c321d95SSadaf Ebrahimi        FunSpec.constructorBuilder()
35*3c321d95SSadaf Ebrahimi          .addParameter("name", String::class)
36*3c321d95SSadaf Ebrahimi          .build()
37*3c321d95SSadaf Ebrahimi      )
38*3c321d95SSadaf Ebrahimi      .addProperty(
39*3c321d95SSadaf Ebrahimi        PropertySpec.builder("name", String::class)
40*3c321d95SSadaf Ebrahimi          .initializer("name")
41*3c321d95SSadaf Ebrahimi          .build()
42*3c321d95SSadaf Ebrahimi      )
43*3c321d95SSadaf Ebrahimi      .addFunction(
44*3c321d95SSadaf Ebrahimi        FunSpec.builder("greet")
45*3c321d95SSadaf Ebrahimi          .addStatement("println(%P)", "Hello, \$name")
46*3c321d95SSadaf Ebrahimi          .build()
47*3c321d95SSadaf Ebrahimi      )
48*3c321d95SSadaf Ebrahimi      .build()
49*3c321d95SSadaf Ebrahimi  )
50*3c321d95SSadaf Ebrahimi  .addFunction(
51*3c321d95SSadaf Ebrahimi    FunSpec.builder("main")
52*3c321d95SSadaf Ebrahimi      .addParameter("args", String::class, VARARG)
53*3c321d95SSadaf Ebrahimi      .addStatement("%T(args[0]).greet()", greeterClass)
54*3c321d95SSadaf Ebrahimi      .build()
55*3c321d95SSadaf Ebrahimi  )
56*3c321d95SSadaf Ebrahimi  .build()
57*3c321d95SSadaf Ebrahimi
58*3c321d95SSadaf Ebrahimifile.writeTo(System.out)
59*3c321d95SSadaf Ebrahimi```
60*3c321d95SSadaf Ebrahimi
61*3c321d95SSadaf EbrahimiThe [KDoc][kdoc] catalogs the complete KotlinPoet API, which is inspired by [JavaPoet][javapoet].
62*3c321d95SSadaf Ebrahimi
63*3c321d95SSadaf Ebrahimi**Note:** In order to maximize portability, KotlinPoet generates code with explicit visibility
64*3c321d95SSadaf Ebrahimimodifiers. This ensures compatibility with both standard Kotlin projects as well as projects
65*3c321d95SSadaf Ebrahimiusing [explicit API mode][explicit-api]. Examples in the documentation omit those modifiers for
66*3c321d95SSadaf Ebrahimibrevity.
67*3c321d95SSadaf Ebrahimi
68*3c321d95SSadaf EbrahimiDownload
69*3c321d95SSadaf Ebrahimi--------
70*3c321d95SSadaf Ebrahimi
71*3c321d95SSadaf Ebrahimi![Maven Central][version-shield]
72*3c321d95SSadaf Ebrahimi
73*3c321d95SSadaf EbrahimiDownload [the latest .jar][dl] or depend via Maven:
74*3c321d95SSadaf Ebrahimi
75*3c321d95SSadaf Ebrahimi```xml
76*3c321d95SSadaf Ebrahimi<dependency>
77*3c321d95SSadaf Ebrahimi  <groupId>com.squareup</groupId>
78*3c321d95SSadaf Ebrahimi  <artifactId>kotlinpoet-jvm</artifactId>
79*3c321d95SSadaf Ebrahimi  <version>[version]</version>
80*3c321d95SSadaf Ebrahimi</dependency>
81*3c321d95SSadaf Ebrahimi```
82*3c321d95SSadaf Ebrahimi
83*3c321d95SSadaf Ebrahimior Gradle:
84*3c321d95SSadaf Ebrahimi
85*3c321d95SSadaf Ebrahimi```groovy
86*3c321d95SSadaf Ebrahimiimplementation("com.squareup:kotlinpoet:[version]")
87*3c321d95SSadaf Ebrahimi```
88*3c321d95SSadaf Ebrahimi
89*3c321d95SSadaf EbrahimiSnapshots of the development version are available in [Sonatype's `snapshots` repository][snap].
90*3c321d95SSadaf Ebrahimi
91*3c321d95SSadaf EbrahimiLicense
92*3c321d95SSadaf Ebrahimi-------
93*3c321d95SSadaf Ebrahimi
94*3c321d95SSadaf Ebrahimi    Copyright 2017 Square, Inc.
95*3c321d95SSadaf Ebrahimi
96*3c321d95SSadaf Ebrahimi    Licensed under the Apache License, Version 2.0 (the "License");
97*3c321d95SSadaf Ebrahimi    you may not use this file except in compliance with the License.
98*3c321d95SSadaf Ebrahimi    You may obtain a copy of the License at
99*3c321d95SSadaf Ebrahimi
100*3c321d95SSadaf Ebrahimi       https://www.apache.org/licenses/LICENSE-2.0
101*3c321d95SSadaf Ebrahimi
102*3c321d95SSadaf Ebrahimi    Unless required by applicable law or agreed to in writing, software
103*3c321d95SSadaf Ebrahimi    distributed under the License is distributed on an "AS IS" BASIS,
104*3c321d95SSadaf Ebrahimi    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
105*3c321d95SSadaf Ebrahimi    See the License for the specific language governing permissions and
106*3c321d95SSadaf Ebrahimi    limitations under the License.
107*3c321d95SSadaf Ebrahimi
108*3c321d95SSadaf Ebrahimi [kdoc]: https://square.github.io/kotlinpoet/1.x/kotlinpoet/kotlinpoet/com.squareup.kotlinpoet/
109*3c321d95SSadaf Ebrahimi [javapoet]: https://github.com/square/javapoet/
110*3c321d95SSadaf Ebrahimi [explicit-api]: https://kotlinlang.org/docs/whatsnew14.html#explicit-api-mode-for-library-authors
111*3c321d95SSadaf Ebrahimi [version-shield]: https://img.shields.io/maven-central/v/com.squareup/kotlinpoet
112*3c321d95SSadaf Ebrahimi [dl]: https://search.maven.org/remote_content?g=com.squareup&a=kotlinpoet-jvm&v=LATEST
113*3c321d95SSadaf Ebrahimi [snap]: https://s01.oss.sonatype.org/content/repositories/snapshots/com/squareup/kotlinpoet/
114