Slide 1

Slide 1 text

Building Developer Tools with Kotlin and Gradle Breandan Considine GIDS 2017

Slide 2

Slide 2 text

Why develop tools? • Syntax manipulation • Typing completions • Static code analysis • UI/UX components • Language support • Framework support

Slide 3

Slide 3 text

Why use Kotlin? • IntelliJ Platform / Eclipse integration • Java language / JVM interoperability • Functional programming patterns • Simplifies framework interactions • Domain specific languages • Build tools integration

Slide 4

Slide 4 text

Why use Gradle? • Comprehensive tooling support • Cross-platform IDE • Gradle tooling API • Language-native buildscripts • Vibrant plugin ecosystem • Gradlew is awesome!

Slide 5

Slide 5 text

public class Singleton { private Singleton() {} private static instance; public static Singleton getInstance() { if(instance == null) instance = new Singleton(); return instance; } public void doSomething() {} } 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: Singleton pattern: Java

Slide 6

Slide 6 text

Singleton.doSomething() Singleton pattern: Java Singleton.getInstance().doSomething();

Slide 7

Slide 7 text

Singleton.doSomething() object Singleton { fun doSomething() {} } Singleton pattern: Kotlin 1: 2: 3: Lazy Initialization

Slide 8

Slide 8 text

public class Singleton { private Singleton() {} private static instance; public static Singleton getInstance() { if(instance == null) instance = new Singleton(); return instance; } public void doSomething() {} } 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: Singleton pattern: Java

Slide 9

Slide 9 text

IntelliJ Platform SDK ActionManager.getInstance() .getAction("MyAction")… MyAction…

Slide 10

Slide 10 text

Kotlin Extensions fun String.print(string: String) { println(string) } "hello".print()

Slide 11

Slide 11 text

IntelliJ Platform Kotlin DSL 1: val panel = panel { 2: noteRow("Login:") 3: row("Username:") { userField() } 4: row("Password:") { passwordField() } 5: row { 6: rememberCheckBox() 7: right { 8: link("Forgot?") { browse(forgot) } 9: } 10: } 11: noteRow("No account? $signupLink") 12: }

Slide 12

Slide 12 text

Gradle Script Kotlin (GSK) buildscript { repositories { gradleScriptKotlin() } dependencies { classpath(kotlinModule("gradle-plugin")) } }