xref: /aosp_15_r20/external/kotlinpoet/docs/callable-references.md (revision 3c321d951dd070fb96f8ba59e952ffc3131379a0)
1*3c321d95SSadaf EbrahimiCallable References
2*3c321d95SSadaf Ebrahimi===================
3*3c321d95SSadaf Ebrahimi
4*3c321d95SSadaf Ebrahimi[Callable references][callable-references] to constructors, functions, and properties may be emitted
5*3c321d95SSadaf Ebrahimivia:
6*3c321d95SSadaf Ebrahimi
7*3c321d95SSadaf Ebrahimi- `ClassName.constructorReference()` for constructors
8*3c321d95SSadaf Ebrahimi- `MemberName.reference()` for functions and properties
9*3c321d95SSadaf Ebrahimi
10*3c321d95SSadaf EbrahimiFor example,
11*3c321d95SSadaf Ebrahimi
12*3c321d95SSadaf Ebrahimi```kotlin
13*3c321d95SSadaf Ebrahimival helloClass = ClassName("com.example.hello", "Hello")
14*3c321d95SSadaf Ebrahimival worldFunction: MemberName = helloClass.member("world")
15*3c321d95SSadaf Ebrahimival byeProperty: MemberName = helloClass.nestedClass("World").member("bye")
16*3c321d95SSadaf Ebrahimi
17*3c321d95SSadaf Ebrahimival factoriesFun = FunSpec.builder("factories")
18*3c321d95SSadaf Ebrahimi  .addStatement("val hello = %L", helloClass.constructorReference())
19*3c321d95SSadaf Ebrahimi  .addStatement("val world = %L", worldFunction.reference())
20*3c321d95SSadaf Ebrahimi  .addStatement("val bye = %L", byeProperty.reference())
21*3c321d95SSadaf Ebrahimi  .build()
22*3c321d95SSadaf Ebrahimi
23*3c321d95SSadaf EbrahimiFileSpec.builder("com.example", "HelloWorld")
24*3c321d95SSadaf Ebrahimi  .addFunction(factoriesFun)
25*3c321d95SSadaf Ebrahimi  .build()
26*3c321d95SSadaf Ebrahimi```
27*3c321d95SSadaf Ebrahimi
28*3c321d95SSadaf Ebrahimiwould generate:
29*3c321d95SSadaf Ebrahimi
30*3c321d95SSadaf Ebrahimi```kotlin
31*3c321d95SSadaf Ebrahimipackage com.example
32*3c321d95SSadaf Ebrahimi
33*3c321d95SSadaf Ebrahimiimport com.example.hello.Hello
34*3c321d95SSadaf Ebrahimi
35*3c321d95SSadaf Ebrahimifun factories() {
36*3c321d95SSadaf Ebrahimi  val hello = ::Hello
37*3c321d95SSadaf Ebrahimi  val world = Hello::world
38*3c321d95SSadaf Ebrahimi  val bye = Hello.World::bye
39*3c321d95SSadaf Ebrahimi}
40*3c321d95SSadaf Ebrahimi```
41*3c321d95SSadaf Ebrahimi
42*3c321d95SSadaf EbrahimiTop-level classes and members with conflicting names may require aliased imports, as with
43*3c321d95SSadaf Ebrahimi[member names](m-for-members.md).
44*3c321d95SSadaf Ebrahimi
45*3c321d95SSadaf Ebrahimi [callable-references]: https://kotlinlang.org/docs/reference/reflection.html#callable-references
46