Slide 1

Slide 1 text

Writing Your First Kotlin Compiler Plugin by Kevin Most (Introduction) CA.kt #7 scache @scal_ch AbemaTV, Inc.

Slide 2

Slide 2 text

❖ Writing Your First Kotlin Compiler Plugin by Kevin Most ❖ https://www.youtube.com/watch?v=w-GMlaziIyo

Slide 3

Slide 3 text

Α͋͘Δ࣭໰

Slide 4

Slide 4 text

Α͋͘Δ࣭໰ ❖ AnnotationProcessorͱ͸ҧ͏ͷʁ

Slide 5

Slide 5 text

AnnotationProcessorͱͷൺֱ

Slide 6

Slide 6 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor

Slide 7

Slide 7 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌

Slide 8

Slide 8 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ

Slide 9

Slide 9 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaίʔυΛੜ੒

Slide 10

Slide 10 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaίʔυΛੜ੒ • Kotlin/JavaίʔυΛॲཧ

Slide 11

Slide 11 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaίʔυΛੜ੒ • Kotlin/JavaίʔυΛॲཧ • Multiplatform

Slide 12

Slide 12 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaίʔυΛੜ੒ • Kotlin/JavaίʔυΛॲཧ • Multiplatform • Compiler Plugin

Slide 13

Slide 13 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaίʔυΛੜ੒ • Kotlin/JavaίʔυΛॲཧ • Multiplatform • Compiler Plugin • ίϯύΠϧ࣌

Slide 14

Slide 14 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaίʔυΛੜ੒ • Kotlin/JavaίʔυΛॲཧ • Multiplatform • Compiler Plugin • ίϯύΠϧ࣌ • υΩϡϝϯτ

Slide 15

Slide 15 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaίʔυΛੜ੒ • Kotlin/JavaίʔυΛॲཧ • Multiplatform • Compiler Plugin • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaόΠτίʔυ(or LLVM IR)Λੜ੒

Slide 16

Slide 16 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaίʔυΛੜ੒ • Kotlin/JavaίʔυΛॲཧ • Multiplatform • Compiler Plugin • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaόΠτίʔυ(or LLVM IR)Λੜ੒ • KotlinίʔυΛॲཧ

Slide 17

Slide 17 text

AnnotationProcessorͱͷൺֱ • AnnotationProcessor • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaίʔυΛੜ੒ • Kotlin/JavaίʔυΛॲཧ • Multiplatform • Compiler Plugin • ίϯύΠϧ࣌ • υΩϡϝϯτ • JavaόΠτίʔυ(or LLVM IR)Λੜ੒ • KotlinίʔυΛॲཧ • Multiplatform

Slide 18

Slide 18 text

Compiler Plugin ྫ ❖ all-open: ࢦఆͨ͠ΫϥεΛopen classʹ͢Δ ❖ no-arg: ࢦఆͨ͠ΫϥεͷҾ਺ͳ͠ίϯετϥΫλੜ੒ ❖ android-extensions: @ParcelizeͳͲ ❖ kotlin-serialization: Serializableͷ࣮૷Λੜ੒ ❖ MultiplatformରԠ

Slide 19

Slide 19 text

Plugin ΞʔΩςΫνϟ Plugin Subplugin CommandLineProcessor ComponentRegistrar Extension Extension } Gradle Plugin } Kotlin Plugin

Slide 20

Slide 20 text

Plugin ΞʔΩςΫνϟ Plugin Subplugin CommandLineProcessor ComponentRegistrar Extension Extension • build.gradle͔ΒϓϥάΠ ϯͷઃఆΛಡࠐΉ • CommandLineProcessorʹ ઃఆΛ౉͢

Slide 21

Slide 21 text

Plugin ΞʔΩςΫνϟ Plugin Subplugin CommandLineProcessor ComponentRegistrar Extension Extension • ίϯύΠϥΦϓγϣϯͷɹ ಡΈࠐΈ • Extensionͷొ࿥

Slide 22

Slide 22 text

Plugin ΞʔΩςΫνϟ Plugin Subplugin CommandLineProcessor ComponentRegistrar Extension Extension • ίʔυੜ੒෦෼ • όΠτίʔυ(or LLVM IR) Λهड़ • extensionͷछྨ • ExpressionCodegenExtension • ClassBuilderInterceptorExtension • StorageComponentContainerContributor • IrGenerationExtension • …

Slide 23

Slide 23 text

ίʔυྫ fun prime(n: Int): Long { println("-> prime(n=$n)") val startTime = System.currentTimeMillis() val result = primeNumberSequence.take(n).last() val timeToRun = System.currentTimeMillis() - startTime println("<- prime [ran in $timeToRun ms]") return result }

Slide 24

Slide 24 text

ίʔυྫ fun prime(n: Int): Long { println("-> prime(n=$n)") val startTime = System.currentTimeMillis() val result = primeNumberSequence.take(n).last() val timeToRun = System.currentTimeMillis() - startTime println("<- prime [ran in $timeToRun ms]") return result }

Slide 25

Slide 25 text

ίʔυྫ fun prime(n: Int): Long { println("-> prime(n=$n)") val startTime = System.currentTimeMillis() val result = primeNumberSequence.take(n).last() val timeToRun = System.currentTimeMillis() - startTime println("<- prime [ran in $timeToRun ms]") return result } @DebugLog fun prime(n: Int): Long { return primeNumberSequence.take(n).last() }

Slide 26

Slide 26 text

❖ ଓ͖͸ ❖ Writing Your First Kotlin Compiler Plugin by Kevin Most ❖ https://www.youtube.com/watch?v=w-GMlaziIyo

Slide 27

Slide 27 text

࠷ޙʹ ❖ ॲཧͷྲྀΕ͸AnnotationProcessorͱࣅ͍ͯΔ ❖ JavaίʔυͰ͸ͳ͘όΠτίʔυΛੜ੒ ❖ CompilerPluginͷํ͕ࣗ༝౓͕ߴ͍ ❖ ·ͣ͸AnnotationProcessorΛݕ౼

Slide 28

Slide 28 text

Have a nice Kotlin !