Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Building Developer Tools with Kotlin
Search
Breandan Considine
April 19, 2017
Programming
130
0
Share
Building Developer Tools with Kotlin
Breandan Considine
April 19, 2017
More Decks by Breandan Considine
See All by Breandan Considine
Intrinsic social motivation via causal influence in multi-agent RL
breandan
0
170
Deep, Skinny Neural Networks are not Universal Approximators
breandan
0
150
PRM-RL: Long-range Robotic Navigation Tasks by Combining Reinforcement Learning and Sampling-based Planning
breandan
0
180
DeepTest: Automated Testing of Deep-Neural-Network-driven Autonomous Cars
breandan
0
130
Idiolect: A Reconfigurable Voice Coding Assisant
breandan
0
250
Interactive Programming with Automated Reasoning
breandan
0
95
Learning Structural Edits via Incremental Tree Transformations
breandan
0
74
Thinking Like Transformers
breandan
0
110
Discriminative Embeddings of Latent Variable Models for Structured Data
breandan
0
82
Other Decks in Programming
See All in Programming
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
840
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
180
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
0
130
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
3
1.1k
いつか誰かが、と思っていた フロントエンド刷新5年間の実践知
kiichisugihara
1
280
20260514 - build with ai 2026 - build LINE Bot with Gemini CLI
line_developers_tw
PRO
0
450
継続的な負荷検証を目指して
pyama86
3
1.2k
検索設計から 推論設計への重心移動と Recall-First Retrieval
po3rin
5
1.7k
Oxlintはいかにしてtsgolintのlint ruleを呼び出しているのか
syumai
0
120
Liberating Ruby's Parser from Lexer Hacks
ydah
2
2.7k
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
3.1k
From Formal Specification to Property Based Test
ohbarye
0
2.6k
Featured
See All Featured
Everyday Curiosity
cassininazir
0
210
Become a Pro
speakerdeck
PRO
31
5.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
540
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Utilizing Notion as your number one productivity tool
mfonobong
4
300
So, you think you're a good person
axbom
PRO
2
2k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
35k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
54k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Transcript
Building Developer Tools with Kotlin and Gradle Breandan Considine GIDS
2017
Why develop tools? • Syntax manipulation • Typing completions •
Static code analysis • UI/UX components • Language support • Framework support
Why use Kotlin? • IntelliJ Platform / Eclipse integration •
Java language / JVM interoperability • Functional programming patterns • Simplifies framework interactions • Domain specific languages • Build tools integration
Why use Gradle? • Comprehensive tooling support • Cross-platform IDE
• Gradle tooling API • Language-native buildscripts • Vibrant plugin ecosystem • Gradlew is awesome!
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
Singleton.doSomething() Singleton pattern: Java Singleton.getInstance().doSomething();
Singleton.doSomething() object Singleton { fun doSomething() {} } Singleton pattern:
Kotlin 1: 2: 3: Lazy Initialization
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
IntelliJ Platform SDK ActionManager.getInstance() .getAction("MyAction")… MyAction…
Kotlin Extensions fun String.print(string: String) { println(string) } "hello".print()
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: }
Gradle Script Kotlin (GSK) buildscript { repositories { gradleScriptKotlin() }
dependencies { classpath(kotlinModule("gradle-plugin")) } }