Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin Compiler Plugin のワークフローを知る

tommykw
December 21, 2020

Kotlin Compiler Plugin のワークフローを知る

tommykw

December 21, 2020
Tweet

More Decks by tommykw

Other Decks in Programming

Transcript

  1. ,PUMJO$PNQJMFS1MVHJOͷϫʔΫϑϩʔΛ஌Δ
    QPUBUPUJQTJ04"OESPJE։ൃ5JQTڞ༗ձ
    !UPNNZLX

    View Slide

  2. ࣗݾ঺հ
    w ෋ా݈ೋ!UPNNZLX
    w ίωώτגࣜձࣾ
    w "OESPJEΤϯδχΞ

    View Slide

  3. ࠓ೔࿩͢͜ͱ

    View Slide

  4. ࠓ೔࿩͢͜ͱ
    w ,PUMJO$PNQJMFS1MVHJOͱ͸ʁ
    w ,PUMJO$PNQJMFS1MVHJOͷϫʔΫϑϩʔ
    w αϯϓϧΛ࡞ͬͯΈΔ

    View Slide

  5. ,PUMJO$PNQJMFS1MVHJOͱ͸ʁ

    View Slide

  6. ,PUMJO$PNQJMFS1MVHJOͱ͸ʁ
    w όΠτίʔυΛ্ॻ͖Ͱ͖Δ
    w ίʔυهड़ͷࣗಈԽ͕Ͱ͖Δ
    w ,BQUͰ࢖ΘΕ͍ͯΔ
    w υΩϡϝϯτ͕ͳ͍ͷͰ஫ҙ͕ඞཁ

    View Slide

  7. ,PUMJO$PNQJMFS1MVHJOͱ͸ʁ
    w όΠτίʔυΛ্ॻ͖Ͱ͖Δ
    w ίʔυهड़ͷࣗಈԽ͕Ͱ͖Δ
    w ,BQUͰ࢖ΘΕ͍ͯΔ
    w υΩϡϝϯτ͕ͳ͍ͷͰ஫ҙ͕ඞཁ
    ࡞Γํ͕શ͘Θ͔Βͳ͍ʜ
    υΩϡϝϯτ͕ͳ͍ͱ͍͏͜ͱ͸ίʔυΛ
    ಡΉ͔͠ͳ͍ͷ͔ʜ

    View Slide

  8. ࿕ใͰ͢ʂ

    View Slide

  9. IUUQTXXXESPJEDPODPNNFEJBEFUBJM WJEFP

    View Slide

  10. IUUQTXXXESPJEDPODPNNFEJBEFUBJM WJEFP
    ,PUMJO$PNQJMFS1MVHJOͷϫʔΫϑϩʔ͕ɺ
    Θ͔Γ΍͘͢·ͱΊΒΕ͍ͯͯײँʂ
    ॳΊͯ,PUMJO$PNQJMFS1MVHJOΛ࡞ͬͯΈ͍ͨͱࢥ͏
    ํʹ͓͢͢ΊͷಈըͰ͢ɻ

    View Slide

  11. ,PUMJO$PNQJMF1MVHJOͷϫʔΫϑϩʔ

    View Slide

  12. ,PUMJO$PNQJMFS1MVHJOΛ࡞ΔͨΊͷͭͷεςοϓ
    Kotlin Compiler Plugin - Write your own code transformer without dealing with bytecode
    By Jingbo Yang
    (SBEMF1MVHJO
    ,PUMJO$PNQJMFS1MVHJO
    5SFF7JTJUPS

    View Slide

  13. (SBEMF1MVHJO
    ,PUMJO(SBEMF4VC1MVHJOΛհ
    ͯ͠,PUMJO$PNQJMFS1MVHJO
    Λݺͼग़͢
    ੒Ռ෺Λൃߦ͢Δ
    Kotlin Compiler Plugin - Write your own code transformer without dealing with bytecode
    By Jingbo Yang

    View Slide

  14. ,PUMJO$PNQJMFS1MVHJO
    $PNNBOE-JOF1SPDFTTPSɺ
    $PNQPOFOU3FHJTUSBSΛఆٛ
    ͢Δ
    "OBMZTJT)BOEMFS&YUFOTJPOΛ
    հͯ͠ίʔυղੳ͢ΔͨΊͷ
    5SFF7JTJUPSΛݺͼग़͢
    ղੳͨ͠಺༰Λ೚ҙͷܗʹม
    ߋ͠ɺ$PMMFDUJPO,U'JMFͱ
    ͯ͠౉͢ Kotlin Compiler Plugin - Write your own code transformer without dealing with bytecode
    By Jingbo Yang

    View Slide

  15. 5SFF7JTJUPS
    ࣮ߦ͞ΕͨϑΝΠϧɺΫϥ
    εɺؔ਺ɺϓϩύςΟͳͲ
    ΛղੳͰ͖Δ
    Kotlin Compiler Plugin - Write your own code transformer without dealing with bytecode
    By Jingbo Yang

    View Slide

  16. αϯϓϧΛ࡞ͬͯΈΔ

    View Slide

  17. ؔ਺ʹ!)FMMP8PSME͕෇Ճ͞Ε͍ͯΕ͹ɺ
    ʮ)FMMP8PSMEʯΛग़ྗ͢Δ
    ࣮ߦ݁Ռ
    ࠓճͷΰʔϧ IUUQTHJUIVCDPNUPNNZLXLPUMJO
    DPNQJMFSQMVHJOTBNQMF

    View Slide

  18. αϯϓϧͷ࡞੒ɾ࣮ߦεςοϓ
    (SBEMF1MVHJOͷ࡞੒
    ,PUMJO$PNQJMFS1MVHJOͷ࡞੒
    $PNNBOE-JOF1SPDFTTPSͷ࡞੒
    $PNQPOFOU3FHJTUSBSͷ࡞੒
    1MVHJO&YUFOTJPOͷ࡞੒
    5SFF7JTJUPSͷ࡞੒
    )FMMP8PSME1MVHJOͷQVCMJTIλεΫΛ࣮ߦ
    )FMMP8PSME1MVHJO4BNQMFͷCVJMEλεΫΛ࣮ߦ
    )FMMP8PSME1MVHJO4BNQMFͷ.BJOLUΛ࣮ߦ

    View Slide

  19. (SBEMF1MVHJOͷ࡞੒

    View Slide

  20. (SBEMF1MVHJOͷ࡞੒ʢTFSWJDFTʹࢦఆ͢Δʣ

    View Slide

  21. (SBEMF1MVHJOͷ࡞੒ʢCVJMEHSBEMFͷઃఆʣ

    View Slide

  22. ,PUMJO$PNQJMFS1MVHJOͷ࡞੒ʢ$PNNBOE-JOF1SPDFTTPSʣ

    View Slide

  23. ,PUMJO$PNQJMFS1MVHJOͷ࡞੒ʢTFSWJDFTʹࢦఆ͢Δʣ

    View Slide

  24. ,PUMJO$PNQJMFS1MVHJOͷ࡞੒ʢ$PNQPOFOU3FHJTUSBSʣ

    View Slide

  25. ,PUMJO$PNQJMFS1MVHJOͷ࡞੒ʢTFSWJDFTʹࢦఆ͢Δʣ

    View Slide

  26. ,PUMJO$PNQJMFS1MVHJOͷ࡞੒ʢ1MVHJO&YUFOTJPOʣ

    View Slide

  27. 5SFF7JTJUPSͷ࡞੒

    View Slide

  28. )FMMP8PSME1MVHJOͷQVCMJTIλεΫΛ࣮ߦ

    View Slide

  29. )FMMP8PSME1MVHJO4BNQMFͷCVJMEλεΫΛ࣮ߦ

    View Slide

  30. )FMMP8PSME1MVHJO4BNQMFͷ.BJOLUΛ࣮ߦ

    View Slide

  31. ·ͱΊ

    View Slide

  32. ·ͱΊ
    w υΩϡϝϯτ͕ͳ͍ͷͰ஫ҙ
    w ,PUMJO$PNQJMFS1MVHJO࡞੒ͷϫʔΫϑϩʔΛ঺հ
    w (SBEMF1MVHJO
    w ,PUMJO$PNQJMFS1MVHJO
    w 5SFF7JTJUPS
    w ϫʔΫϑϩʔΛ஌Δ͜ͱͰશମ૾Λ஌Δ

    View Slide

  33. ࢀߟࢿྉ
    • Kotlin Compiler Plugin - Write your own code transformer without
    dealing with bytecode https://www.droidcon.com/media-detail?
    video=481164487
    • Writing Kotlin Compiler Plugins with Arrow Meta https://
    speakerdeck.com/heyitsmohit/writing-kotlin-compiler-plugins-with-arrow-
    meta?slide=172
    • Kotlin metaprogramming with kotlinpoet https://kotlin.christmas/2020/14

    View Slide

  34. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View Slide