$30 off During Our Annual Pro Sale. View Details »

Building Developer Tools with Kotlin

Building Developer Tools with Kotlin

Breandan Considine

April 19, 2017
Tweet

More Decks by Breandan Considine

Other Decks in Programming

Transcript

  1. Building Developer Tools
    with Kotlin and Gradle
    Breandan Considine
    GIDS 2017

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. 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

    View Slide

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

    View Slide

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

    View Slide

  8. 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

    View Slide

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

    View Slide

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

    View Slide

  11. 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: }

    View Slide

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

    View Slide