kotlin developer tools · 2017-07-19 · building developer tools with kotlinand gradle breandan...
TRANSCRIPT
BuildingDeveloperToolswithKotlin andGradle
BreandanConsidineGIDS2017
WhyDeveloperTools?• Syntaxmanipulation• Typingcompletions• Staticcodeanalysis• UI/UXcomponents• Languagesupport• Frameworksupport
WhyKotlin?• IntelliJPlatform/Eclipseintegration• Javalanguage/JVMinteroperability• Simplifiesframeworkinteractions• Domainspecificlanguages• Functionalprogramming• Buildtoolsintegration
WhyGradle?• Comprehensivetoolingsupport• Cross-platformIDE• Gradle toolingAPI
• Language-nativebuildscripts• Vibrantpluginecosystem• Gradlew isawesome!
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
Singleton.doSomething()
Singletonpattern:Java
Singleton.getInstance().doSomething();
Singleton.doSomething()
object Singleton {fun doSomething() {}
}
Singletonpattern:Kotlin1:2:3:
LazyInitialization
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
IntelliJPlatformSDK
ActionManager.getInstance().getAction("MyAction")…
MyAction…
foo(bar)
bar.foo()
Extensionfunctions
Extendanylibraryclass
fun String.wordCount(s: String) {return s.split(" ")
.filter { it.length > 3 }}
"hello to the world".wordCount()
Extendanylibraryclass
val File.extension: Stringget() = name.split(".").last()
myFile.extension
LazyInitializationval resource: Resource by lazy {println("Initializing…")configureResource()
}
println(resource)println(resource)
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: }
Gradle ScriptKotlin (GSK)
buildscript {repositories {
gradleScriptKotlin()}
dependencies {classpath(kotlinModule("gradle-plugin"))
}}
GradlePluginsplugins {
id("org.jetbrains.intellij") version "0.2"}
apply {plugin("org.jetbrains.intellij")plugin("kotlin")
}
GradleIntelliJPluginintellij {
pluginName = "MyPlugin"updateSinceUntilBuild = false
}
group = "com.group"version = "1.0"
GradleIntelliJPlugin// Also useful for OSS contributors!intellij {
runIde { args project.projectDir.path
}
downloadSources = false }
// Run `./gradlew runIde` to open project
LinksandResources• KotlinforPluginDevelopers• KotlinGradlePlugin• GradleScriptKotlin (GSK)• gradle-intellij-plugin• KotlinPluginforEclipse• goomph:IDEasabuildartifact