Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Building Developer Tools with Kotlin
Search
Breandan Considine
April 19, 2017
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
210
Deep, Skinny Neural Networks are not Universal Approximators
breandan
0
180
PRM-RL: Long-range Robotic Navigation Tasks by Combining Reinforcement Learning and Sampling-based Planning
breandan
0
220
DeepTest: Automated Testing of Deep-Neural-Network-driven Autonomous Cars
breandan
0
170
Idiolect: A Reconfigurable Voice Coding Assisant
breandan
0
270
Interactive Programming with Automated Reasoning
breandan
0
110
Learning Structural Edits via Incremental Tree Transformations
breandan
0
83
Thinking Like Transformers
breandan
0
140
Discriminative Embeddings of Latent Variable Models for Structured Data
breandan
0
100
Other Decks in Programming
See All in Programming
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
7.3k
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
430
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
250
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
180
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1k
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
360
SREの越境 / SRE Collaboration
y0hgi
2
220
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
120
Security issues being discussed on Web Platforms
petamoriken
0
960
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
420
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
How to Talk to Developers About Accessibility
jct
2
550
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Skip the Path - Find Your Career Trail
mkilby
1
230
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
670
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")) } }