Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
120
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
110
Idiolect: A Reconfigurable Voice Coding Assisant
breandan
0
220
Interactive Programming with Automated Reasoning
breandan
0
83
Learning Structural Edits via Incremental Tree Transformations
breandan
0
57
Thinking Like Transformers
breandan
0
92
Discriminative Embeddings of Latent Variable Models for Structured Data
breandan
0
62
Other Decks in Programming
See All in Programming
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
14
14k
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
2.8k
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
170
最新のDirectX12で使えるレイトレ周りの機能追加について
projectasura
0
330
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
280
モダンJSフレームワークのビルドプロセス 〜なぜReactは503行、Svelteは12行なのか〜
fuuki12
0
160
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
140
配送計画の均等化機能を提供する取り組みについて(⽩⾦鉱業 Meetup Vol.21@六本⽊(数理最適化編))
izu_nori
0
110
分散DBって何者なんだ... Spannerから学ぶRDBとの違い
iwashi623
0
160
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
290
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
590
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
5
1.1k
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Scaling GitHub
holman
464
140k
4 Signs Your Business is Dying
shpigford
186
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Designing Experiences People Love
moore
142
24k
GraphQLとの向き合い方2022年版
quramy
49
14k
Bash Introduction
62gerente
615
210k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
RailsConf 2023
tenderlove
30
1.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
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")) } }