Slide 1

Slide 1 text

Kotlin Contributing Guide 森 洋之(ヤフー株式会社) GDG神戸 Android Oreo with Kotlin&Android Studio 3.0勉強会

Slide 2

Slide 2 text

今日話すこと ・Kotlinが公式になったし ・この機会にContributeしてみませんか ・かんたんだよ!

Slide 3

Slide 3 text

Kotlin、公式の開発言語になりました ・ふじゅうぶんな ・Java8対応を待つよりも ・Kotlinをつかったほうが ・ずっと快適

Slide 4

Slide 4 text

各地のセミナーで大人気の話題です

Slide 5

Slide 5 text

せっかくなので、Contributeしてみませんか

Slide 6

Slide 6 text

Oh, OK daddy! 写真:アフロ

Slide 7

Slide 7 text

But, How... 写真:アフロ

Slide 8

Slide 8 text

開発環境のセットアップ

Slide 9

Slide 9 text

開発環境のセットアップ ※開発環境のセットアップについては、 すべてREADMEに書いてあります JetBrains/kotlin

Slide 10

Slide 10 text

必要なもの ・JDK  JDKの1.6, 1.7, 1.8がすべて必要です。  JDK 1.6 for Mac  for Others(要ログイン)  JDK 1.7 Oracle(要ログイン)  JDK 1.8 Oracle ・IntelliJ IDEA  Community Editionで大丈夫 IntelliJ IDEA ・Apache Ant 1.9.4〜(たぶんもう入ってる)Apache Ant Project

Slide 11

Slide 11 text

JDK 1.6〜1.8 環境変数も設定します JAVA_HOME="path to JDK 1.8" JDK_16="path to JDK 1.6" JDK_17="path to JDK 1.7" JDK_18="path to JDK 1.8" java_homeコマンドを使うと楽です JAVA_HOME = `/usr/libexec/java_home -v 1.8`

Slide 12

Slide 12 text

fork, clone わりと時間かかります JetBrains/kotlin

Slide 13

Slide 13 text

dependenciesの更新 わりと時間かかります ant -f update_dependencies.xml ant -f build.xml

Slide 14

Slide 14 text

IntelliJで開く IntelliJ IDEAのプロジェクト用ファイルが含まれているので、 そのまま開くことができます。

Slide 15

Slide 15 text

Kotlin pluginのインストール 最新のKotlin pluginをインストールする

Slide 16

Slide 16 text

Project Structureの設定 Project SDKの設定、 SDKsにJDK 1.6, 1.7, 1.8を追加

Slide 17

Slide 17 text

Run! ビルドしたKotlin Pluginの入ったIntelliJ IDEAが起動するので、いろいろ試せる。

Slide 18

Slide 18 text

Contributing

Slide 19

Slide 19 text

issueを修正する ・issueはYouTrackで管理されているので、ここから未解決のものを探して修正するのが早い ・すぐに修正されるので、手を挙げてから始めたほうが、悲しい思いをしないで済むかも ・新規featureの提案も歓迎されるけど、 mergeには時間かかると思う

Slide 20

Slide 20 text

試しに2つ、issueを見てみましょう ・KT-20023 Java to Kotlin変換に関するbug ・KT-17204 Quickfixを追加してほしいfeature

Slide 21

Slide 21 text

Ok, Let’s try! 写真:アフロ

Slide 22

Slide 22 text

概要 @Nonnull(when = When.ALWAYS) @TypeQualifierDefault(ElementType.TYPE_USE) public @interface MaybeTypeuse { } ↑このJavaコードをktファイルにコピペしたら、 ↓こうなる @TypeQualifierDefault(ElementType.TYPE_USE) annotation class MaybeTypeuse この場合の@Nonnullは意味があるやつなので、消すべきじゃない KT-20023

Slide 23

Slide 23 text

概要 ・Java to Kotlin変換の関連ファイルは、j2kフォルダ内にある ・テストは、testDataフォルダ内に  変換前のJavaコード、変換後のKotlinコードを置いて、  生成する KT-20023

Slide 24

Slide 24 text

KT-20023 まずテスト j2k/testData/fileOrElement/issues/ before kt-20023.java after  kt-20023.kt 変換前Javaコード 変換後Kotlinコード

Slide 25

Slide 25 text

KT-20023 kt-20023.java kt-20023.kt Before After これが、こう変換されること、という内容のテストになる

Slide 26

Slide 26 text

KT-20023 ・run “Generate Tests” ・テストコードが生成されます ・run “J2K Tests”で実行されます

Slide 27

Slide 27 text

KT-20023 実装 ・Java to Kotlin変換の関連ファイルは、j2kフォルダ内にある ・JavaToKotlinConverter#elementsToKotlin() ・Converter#convert() あたりを探る ・デバッグも使えるから、楽に探れます

Slide 28

Slide 28 text

KT-20023 JavaToKotlinConverter#elementsToKotlin() 中間生成物を作って 結果をまとめる

Slide 29

Slide 29 text

KT-20023 Converter#convert() ※コピペするか、ファイル単位で変換するかで、途中経過が違う

Slide 30

Slide 30 text

KT-20023 Converter#convert()

Slide 31

Slide 31 text

KT-20023 AnnotationConverter#convertAnnotations() 特定のアノテーションを削除している

Slide 32

Slide 32 text

KT-20023 AnnotationConverter#convertAnnotations() 削除すべきアノテーションのなかにある

Slide 33

Slide 33 text

KT-20023 AnnotationConverter#convertAnnotations() アノテーション型の場合は削除しない ここを こうしてみる

Slide 34

Slide 34 text

KT-20023 Run!

Slide 35

Slide 35 text

Ok, Next! 写真:アフロ

Slide 36

Slide 36 text

KT-17204 概要 open class Plant{ var size:Int = 0 fun grow(size :Int):Unit{ size += size //val cannot be reassigned } } ↑ こういう場合に、 this.size += sizeとするQuickFixほしい

Slide 37

Slide 37 text

KT-17204 概要 ・Kotlin pluginの関連ファイルは、ideaフォルダ内にある ・QuickFixに関するものは、src/org.jetbrains.kotlin.idea.quickfix ・テストは idea/testData/quickFixにQuickFixでの変換前後のKotlinコードを置いて、生成する

Slide 38

Slide 38 text

KT-17204 まずテスト idea/testData/quickFix/ before addThis/basic.kt after  addThis/basic.kt.after 変換前 変換後

Slide 39

Slide 39 text

KT-17204 addThis/basic.kt addThis/basic.kt.after Before After これが、こう変換されること、という内容のテストになる

Slide 40

Slide 40 text

KT-17204 ・run “Generate Tests” ・テストコードが生成されます run “All IDEA Plugin Tests” ※すごい時間かかる

Slide 41

Slide 41 text

KT-17204 ・Kotlin pluginの関連ファイルは、ideaフォルダ内にある ・QuickFixに関するものは、src/org.jetbrains.kotlin.idea/quickfix 1. 必要なQuickFix用のクラスを作成 2. そのQuickFix作成用のファクトリクラスを作成 3. QuickFixRegister内で、対応するエラーに対して、ファクトリクラスを登録する

Slide 42

Slide 42 text

KT-17204 QuickFix用のクラス作成 KotlinQuickFixActionを継承する

Slide 43

Slide 43 text

KT-17204 QuickFix作成用のファクトリクラスを作成

Slide 44

Slide 44 text

KT-17204 QuickFixRegister内で、対応するエラーに対して、ファクトリクラスを登録する

Slide 45

Slide 45 text

KT-17204 Run!

Slide 46

Slide 46 text

Very easy! 写真:アフロ

Slide 47

Slide 47 text

〜おわり〜 写真:アフロ