![Page 1: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/1.jpg)
![Page 2: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/2.jpg)
BuildingDeveloperToolswithKotlin andGradle
BreandanConsidineGIDS2017
![Page 3: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/3.jpg)
WhyDeveloperTools?• Syntaxmanipulation• Typingcompletions• Staticcodeanalysis• UI/UXcomponents• Languagesupport• Frameworksupport
![Page 4: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/4.jpg)
WhyKotlin?• IntelliJPlatform/Eclipseintegration• Javalanguage/JVMinteroperability• Simplifiesframeworkinteractions• Domainspecificlanguages• Functionalprogramming• Buildtoolsintegration
![Page 5: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/5.jpg)
WhyGradle?• Comprehensivetoolingsupport• Cross-platformIDE• Gradle toolingAPI
• Language-nativebuildscripts• Vibrantpluginecosystem• Gradlew isawesome!
![Page 6: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/6.jpg)
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:
Singletonpattern:Java
![Page 7: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/7.jpg)
Singleton.doSomething()
Singletonpattern:Java
Singleton.getInstance().doSomething();
![Page 8: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/8.jpg)
Singleton.doSomething()
object Singleton {fun doSomething() {}
}
Singletonpattern:Kotlin1:2:3:
LazyInitialization
![Page 9: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/9.jpg)
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:
Singletonpattern:Java
![Page 10: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/10.jpg)
IntelliJPlatformSDK
ActionManager.getInstance().getAction("MyAction")…
MyAction…
![Page 11: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/11.jpg)
foo(bar)
bar.foo()
Extensionfunctions
![Page 12: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/12.jpg)
Extendanylibraryclass
fun String.wordCount(s: String) {return s.split(" ")
.filter { it.length > 3 }}
"hello to the world".wordCount()
![Page 13: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/13.jpg)
Extendanylibraryclass
val File.extension: Stringget() = name.split(".").last()
myFile.extension
![Page 14: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/14.jpg)
LazyInitializationval resource: Resource by lazy {println("Initializing…")configureResource()
}
println(resource)println(resource)
![Page 15: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/15.jpg)
UIConfiguration1: 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: }
![Page 16: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/16.jpg)
Gradle ScriptKotlin (GSK)
buildscript {repositories {
gradleScriptKotlin()}
dependencies {classpath(kotlinModule("gradle-plugin"))
}}
![Page 17: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/17.jpg)
GradlePluginsplugins {
id("org.jetbrains.intellij") version "0.2"}
apply {plugin("org.jetbrains.intellij")plugin("kotlin")
}
![Page 18: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/18.jpg)
GradleIntelliJPluginintellij {
pluginName = "MyPlugin"updateSinceUntilBuild = false
}
group = "com.group"version = "1.0"
![Page 19: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/19.jpg)
GradleIntelliJPlugin// Also useful for OSS contributors!intellij {
runIde { args project.projectDir.path
}
downloadSources = false }
// Run `./gradlew runIde` to open project
![Page 20: Kotlin Developer Tools · 2017-07-19 · Building Developer Tools with Kotlinand Gradle Breandan Considine GIDS 2017. ... •Language support •Framework support. Why Kotlin? •IntelliJ](https://reader030.vdocuments.site/reader030/viewer/2022013022/5f832a2164007a4f65445fd7/html5/thumbnails/20.jpg)
LinksandResources• KotlinforPluginDevelopers• KotlinGradlePlugin• GradleScriptKotlin (GSK)• gradle-intellij-plugin• KotlinPluginforEclipse• goomph:IDEasabuildartifact