How to Build
Developer Tools on Top
of IntelliJ Platform
Dmitry Jemerov, CTO, JetBrains
Tuesday, July 30, 13
What is IntelliJ Platform
• Foundation of all IntelliJ-based IDEs
• Provides building blocks for developer tools
• Open-so...
JetBrains Products
on IntelliJ Platform
Tuesday, July 30, 13
IntelliJ IDEA
• Where it all began
• Started as monolithic IDE
• Refactored over the years to modularize
and introduce ext...
"Small" IDEs
• PyCharm, RubyMine,WebStorm, PhpStorm,
AppCode, C++ IDE, <to be announced>
• Set of bundled plugins + UI cus...
MPS
• Meta Programming System - IDE for
domain specific languages
• Uses IntelliJ IDEA's overall UI framework
• Replaces te...
Kotlin Compiler
• Same code for command-line compiler and
IDE features in plugin
• Uses low-level parsing/PSI framework an...
UpSource
• http://upsource.jetbrains.com/
• Online code browser
• Uses core PSI, indexing, Java language
support (other la...
External Products
on IntelliJ Platform
Tuesday, July 30, 13
Android Studio
• http://developer.android.com/sdk/installing/
studio.html
• Repackaged IntelliJ IDEA Community
Edition
• C...
GuideWire
• http://www.guidewire.com/
• Insurance business
• Gosu programming language
• Lots of domain-specific UI
• Comme...
mbeddr
• http://mbeddr.wordpress.com/
• MPS-based tool for embedded
development (generates C code)
• Open-source
Tuesday, ...
esn.me
• http://www.planetframework.com/
• Commercial Python framework
for real-time Web
• IDE based on PyCharm with custo...
Realaxy
• ActionScript IDE based on MPS
• Commercial
• No longer in development, last released in
2010
Tuesday, July 30, 13
IntelliJ Platform
Components
Tuesday, July 30, 13
core
• Virtual file system, lexer, parser, PSI,
references
• Utilities: collections, concurrency etc.
• No UI
• No specific ...
platform
• Action systen
• UI framework: toolwindows, dialogs etc.
• Text editor
• Diff
Tuesday, July 30, 13
lang
• Language-independent implementations of
core code insight features
• Highlighting, navigation, completion,
refactor...
Other Platform
Modules
• Local history
• Debugger framework
• Test runner framework
• VCS framework
Tuesday, July 30, 13
java-psi
• UI-less part of IntelliJ IDEA's Java support
• Parser, reference resolution, inspections
etc.
Tuesday, July 30,...
xml
• Parsing, DTD/XML Schema/RelaxNG, etc.
• DOM framework for XML-based DSLs
• Recently separated into non-UI and UI
par...
Other Platform
Extensions
• Spellchecker
• Images support
• Regular expression support
Tuesday, July 30, 13
Community Edition
Plugins
• Version control: Git, Mercurial, Subversion,
CVS
• Build systems:Ant, Maven, Gradle
• Tasks / ...
IntelliJ Platform vs
Eclipse/NetBeans RCP
• Not a general-purpose RCP
• Best for code-centric tools, a lot of stuff
comes ...
Product Opportunities
• Language IDEs: Haskell, Go, Lua, D, Perl,
assembly,Verilog/VHDL
• Framework-specific IDEs
• Code an...
Plugin vs Product
• Start with plugin in any case
• Product lets you remove what you don't
need, change what you don't lik...
Product Licensing
• IntelliJ Platform is Apache 2 licensed, does
not restrict licensing of derivative products
• Talk to u...
Building a Product
Tuesday, July 30, 13
idea.platform.prefix
• System property used as prefix for names
of plugin and application info files
• Set in defaultVM optio...
Product Plugin File
• <idea.platform.prefix>Plugin.xml
• For example, IdeaPlugin.xml for IDEA CE
• Same format as regular p...
<idea-plugin version="2"
xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="/META-INF/IdeaPlugin.xml"
xpointer=...
Application Info File
• <idea.platform.prefix>ApplicationInfo.xml
• For example, IdeaApplicationInfo.xml for
IDEA CE
• Sing...
<component>
<version codename="Community Edition"
major="13" minor="0" eap="true"/>
<company name="JetBrains s.r.o."
url="...
Building the Product
• build/scripts/dist.gant
• IntelliJ project file built with JPS (JetBrains'
homegrown build system)
•...
def info = layout(targetDirectory) {
dir("lib") {
jar("util.jar") {
module("util")
module("util-rt")
}
jar("openapi.jar") ...
Windows Launcher
• native/WinLauncher
• tools/LauncherGenerator
• buildWinLauncher() in utils.gant
Tuesday, July 30, 13
Distribution Scripts
• Windows - NSIS installer, scripts currently
not open but likely will be
• Mac - DMG build script ti...
Server Infrastructure
• Exception reporting
• Automatic updates and patches
• Plugin repository
• Usage statistics
• All U...
Contributing to
IntelliJ Platform
Tuesday, July 30, 13
Contribution Workflow
• Sign the CLA
• Send us a pull request on GitHub
• Explain the motivation for the change
Tuesday, Ju...
Q&A
yole@jetbrains.com
@intelliyole
Tuesday, July 30, 13
Upcoming SlideShare
Loading in...5
×

How to Build Developer Tools on Top of IntelliJ Platform

3,942

Published on

Slides from a July 30th webinar on building tools for IntelliJ Platform:
* What is IntelliJ Platform?
* Who is it suited for?
* Why is it better than Eclipse and Netbeans platforms?
* How is it different from IntelliJ IDEA Community Edition?
* Is it possible to build a commercial product based on IntelliJ Platform?
* Plugins for IntelliJ IDEA Community Edition vs products based on IntelliJ Platform.
* What steps must be taken to create a product based on IntelliJ Platform?
* How you can contribute to IntelliJ Platform?

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,942
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
33
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

How to Build Developer Tools on Top of IntelliJ Platform

  1. 1. How to Build Developer Tools on Top of IntelliJ Platform Dmitry Jemerov, CTO, JetBrains Tuesday, July 30, 13
  2. 2. What is IntelliJ Platform • Foundation of all IntelliJ-based IDEs • Provides building blocks for developer tools • Open-source,Apache 2 license Tuesday, July 30, 13
  3. 3. JetBrains Products on IntelliJ Platform Tuesday, July 30, 13
  4. 4. IntelliJ IDEA • Where it all began • Started as monolithic IDE • Refactored over the years to modularize and introduce extension points • For more history: Malmö, September 7, http://www.jetbrains.com/jetbrainsday/ Tuesday, July 30, 13
  5. 5. "Small" IDEs • PyCharm, RubyMine,WebStorm, PhpStorm, AppCode, C++ IDE, <to be announced> • Set of bundled plugins + UI customizations • Same source tree as IntelliJ IDEA Tuesday, July 30, 13
  6. 6. MPS • Meta Programming System - IDE for domain specific languages • Uses IntelliJ IDEA's overall UI framework • Replaces text editing and PSI-based features with its own DSL framework Tuesday, July 30, 13
  7. 7. Kotlin Compiler • Same code for command-line compiler and IDE features in plugin • Uses low-level parsing/PSI framework and Java PSI • 7.6M distribution Tuesday, July 30, 13
  8. 8. UpSource • http://upsource.jetbrains.com/ • Online code browser • Uses core PSI, indexing, Java language support (other languages coming soon) • Web-based UI Tuesday, July 30, 13
  9. 9. External Products on IntelliJ Platform Tuesday, July 30, 13
  10. 10. Android Studio • http://developer.android.com/sdk/installing/ studio.html • Repackaged IntelliJ IDEA Community Edition • Custom UI for Gradle-based project model • Developed in partnership with JetBrains Tuesday, July 30, 13
  11. 11. GuideWire • http://www.guidewire.com/ • Insurance business • Gosu programming language • Lots of domain-specific UI • Commercial Tuesday, July 30, 13
  12. 12. mbeddr • http://mbeddr.wordpress.com/ • MPS-based tool for embedded development (generates C code) • Open-source Tuesday, July 30, 13
  13. 13. esn.me • http://www.planetframework.com/ • Commercial Python framework for real-time Web • IDE based on PyCharm with custom plugin • Acquired by EA, no longer supported Tuesday, July 30, 13
  14. 14. Realaxy • ActionScript IDE based on MPS • Commercial • No longer in development, last released in 2010 Tuesday, July 30, 13
  15. 15. IntelliJ Platform Components Tuesday, July 30, 13
  16. 16. core • Virtual file system, lexer, parser, PSI, references • Utilities: collections, concurrency etc. • No UI • No specific language support Tuesday, July 30, 13
  17. 17. platform • Action systen • UI framework: toolwindows, dialogs etc. • Text editor • Diff Tuesday, July 30, 13
  18. 18. lang • Language-independent implementations of core code insight features • Highlighting, navigation, completion, refactorings, code formatter and a whole lot more Tuesday, July 30, 13
  19. 19. Other Platform Modules • Local history • Debugger framework • Test runner framework • VCS framework Tuesday, July 30, 13
  20. 20. java-psi • UI-less part of IntelliJ IDEA's Java support • Parser, reference resolution, inspections etc. Tuesday, July 30, 13
  21. 21. xml • Parsing, DTD/XML Schema/RelaxNG, etc. • DOM framework for XML-based DSLs • Recently separated into non-UI and UI parts Tuesday, July 30, 13
  22. 22. Other Platform Extensions • Spellchecker • Images support • Regular expression support Tuesday, July 30, 13
  23. 23. Community Edition Plugins • Version control: Git, Mercurial, Subversion, CVS • Build systems:Ant, Maven, Gradle • Tasks / issue tracker integration • UI Designer • Terminal Tuesday, July 30, 13
  24. 24. IntelliJ Platform vs Eclipse/NetBeans RCP • Not a general-purpose RCP • Best for code-centric tools, a lot of stuff comes for free • Not necessarily best for graphics-intensive tools Tuesday, July 30, 13
  25. 25. Product Opportunities • Language IDEs: Haskell, Go, Lua, D, Perl, assembly,Verilog/VHDL • Framework-specific IDEs • Code analysis/exploration tools • Game development? • ERP? Tuesday, July 30, 13
  26. 26. Plugin vs Product • Start with plugin in any case • Product lets you remove what you don't need, change what you don't like • Product gives you control over branding • Both plugins and products can use commercial license Tuesday, July 30, 13
  27. 27. Product Licensing • IntelliJ Platform is Apache 2 licensed, does not restrict licensing of derivative products • Talk to us if you need components only available in IntelliJ IDEA Ultimate Tuesday, July 30, 13
  28. 28. Building a Product Tuesday, July 30, 13
  29. 29. idea.platform.prefix • System property used as prefix for names of plugin and application info files • Set in defaultVM options Tuesday, July 30, 13
  30. 30. Product Plugin File • <idea.platform.prefix>Plugin.xml • For example, IdeaPlugin.xml for IDEA CE • Same format as regular plugin.xml file • Can include chunks of components from platform Tuesday, July 30, 13
  31. 31. <idea-plugin version="2" xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include href="/META-INF/IdeaPlugin.xml" xpointer="xpointer(/idea-plugin/*)"/> </idea-plugin> Tuesday, July 30, 13
  32. 32. Application Info File • <idea.platform.prefix>ApplicationInfo.xml • For example, IdeaApplicationInfo.xml for IDEA CE • Single entry point for all branding info • Patched by build script to include build number etc. Tuesday, July 30, 13
  33. 33. <component> <version codename="Community Edition" major="13" minor="0" eap="true"/> <company name="JetBrains s.r.o." url="http://www.jetbrains.com/"/> <build number="__BUILD_NUMBER__" date="__BUILD_DATE__"/> <logo url="/idea_community_logo.png"/> <about url="/idea_community_about.png"/> </component> Tuesday, July 30, 13
  34. 34. Building the Product • build/scripts/dist.gant • IntelliJ project file built with JPS (JetBrains' homegrown build system) • Layout tasks used to build structure of product distribution • Layout has common and OS-specific (Windows, Linux, Mac) parts Tuesday, July 30, 13
  35. 35. def info = layout(targetDirectory) { dir("lib") { jar("util.jar") { module("util") module("util-rt") } jar("openapi.jar") { openapiModules.each { module it} } } } Tuesday, July 30, 13
  36. 36. Windows Launcher • native/WinLauncher • tools/LauncherGenerator • buildWinLauncher() in utils.gant Tuesday, July 30, 13
  37. 37. Distribution Scripts • Windows - NSIS installer, scripts currently not open but likely will be • Mac - DMG build script tied to our environment, roll your own • Linux - just a .tar.gz Tuesday, July 30, 13
  38. 38. Server Infrastructure • Exception reporting • Automatic updates and patches • Plugin repository • Usage statistics • All URLs in ApplicationInfo.xml Tuesday, July 30, 13
  39. 39. Contributing to IntelliJ Platform Tuesday, July 30, 13
  40. 40. Contribution Workflow • Sign the CLA • Send us a pull request on GitHub • Explain the motivation for the change Tuesday, July 30, 13
  41. 41. Q&A yole@jetbrains.com @intelliyole Tuesday, July 30, 13
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×