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
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
98
Deep, Skinny Neural Networks are not Universal Approximators
breandan
0
95
PRM-RL: Long-range Robotic Navigation Tasks by Combining Reinforcement Learning and Sampling-based Planning
breandan
0
120
DeepTest: Automated Testing of Deep-Neural-Network-driven Autonomous Cars
breandan
0
94
Idiolect: A Reconfigurable Voice Coding Assisant
breandan
0
160
Interactive Programming with Automated Reasoning
breandan
0
62
Learning Structural Edits via Incremental Tree Transformations
breandan
0
40
Thinking Like Transformers
breandan
0
73
Discriminative Embeddings of Latent Variable Models for Structured Data
breandan
0
42
Other Decks in Programming
See All in Programming
AIコーディングの理想と現実
tomohisa
36
39k
カウシェで Four Keys の改善を試みた理由
ike002jp
1
130
note の Elasticsearch 更新系を支える技術
tchov
9
3.6k
Ruby on Railroad: The Power of Visualizing CFG
ydah
0
310
Vibe Coding の話をしよう
schroneko
14
3.8k
eBPF超入門「o11yに使える」とは (20250424_eBPF_o11y)
thousanda
1
110
一緒に働きたくなるプログラマの思想 #QiitaConference
mu_zaru
80
21k
AIコーディングエージェントを 「使いこなす」ための実践知と現在地 in ログラス / How to Use AI Coding Agent in Loglass
rkaga
4
1.3k
Lambda(Python)の リファクタリングが好きなんです
komakichi
5
270
Носок на сок
bo0om
0
1.2k
Orleans + Sekiban + SignalR でリアルタイムWeb作ってみた
tomohisa
0
240
監視 やばい
syossan27
12
10k
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Adopting Sorbet at Scale
ufuk
76
9.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Scaling GitHub
holman
459
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Code Reviewing Like a Champion
maltzj
523
40k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.4k
Producing Creativity
orderedlist
PRO
344
40k
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")) } }