$30 off During Our Annual Pro Sale. View Details »
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
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
130
Deep, Skinny Neural Networks are not Universal Approximators
breandan
0
130
PRM-RL: Long-range Robotic Navigation Tasks by Combining Reinforcement Learning and Sampling-based Planning
breandan
0
150
DeepTest: Automated Testing of Deep-Neural-Network-driven Autonomous Cars
breandan
0
120
Idiolect: A Reconfigurable Voice Coding Assisant
breandan
0
230
Interactive Programming with Automated Reasoning
breandan
0
86
Learning Structural Edits via Incremental Tree Transformations
breandan
0
62
Thinking Like Transformers
breandan
0
95
Discriminative Embeddings of Latent Variable Models for Structured Data
breandan
0
66
Other Decks in Programming
See All in Programming
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
340
Vibe codingでおすすめの言語と開発手法
uyuki234
0
110
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
270
AIコーディングエージェント(Gemini)
kondai24
0
270
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
250
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
130
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
120
愛される翻訳の秘訣
kishikawakatsumi
3
340
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
150
AIコーディングエージェント(NotebookLM)
kondai24
0
220
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
630
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
0
1.9k
Paper Plane
katiecoart
PRO
0
44k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.4k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
91
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.1k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
140
Claude Code のすすめ
schroneko
65
200k
Designing for humans not robots
tammielis
254
26k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.7k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
1
200
Docker and Python
trallard
47
3.7k
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")) } }