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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Breandan Considine
April 19, 2017
Programming
0
120
Building Developer Tools with Kotlin
Breandan Considine
April 19, 2017
Tweet
Share
More Decks by Breandan Considine
See All by Breandan Considine
Intrinsic social motivation via causal influence in multi-agent RL
breandan
0
140
Deep, Skinny Neural Networks are not Universal Approximators
breandan
0
140
PRM-RL: Long-range Robotic Navigation Tasks by Combining Reinforcement Learning and Sampling-based Planning
breandan
0
160
DeepTest: Automated Testing of Deep-Neural-Network-driven Autonomous Cars
breandan
0
120
Idiolect: A Reconfigurable Voice Coding Assisant
breandan
0
240
Interactive Programming with Automated Reasoning
breandan
0
89
Learning Structural Edits via Incremental Tree Transformations
breandan
0
64
Thinking Like Transformers
breandan
0
100
Discriminative Embeddings of Latent Variable Models for Structured Data
breandan
0
73
Other Decks in Programming
See All in Programming
Oxlint JS plugins
kazupon
1
870
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
560
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
710
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
200
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
AI & Enginnering
codelynx
0
110
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
540
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
430
Architectural Extensions
denyspoltorak
0
280
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
260
Featured
See All Featured
Chasing Engaging Ingredients in Design
codingconduct
0
110
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
Faster Mobile Websites
deanohume
310
31k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Speed Design
sergeychernyshev
33
1.5k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
90
A designer walks into a library…
pauljervisheath
210
24k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
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")) } }