How to Build Developer Tools on Top of IntelliJ Platform

  • 3,002 views
Uploaded on

Slides from a July 30th webinar on building tools for IntelliJ Platform: …

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?

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,002
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
30
Comments
0
Likes
7

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. How to Build Developer Tools on Top of IntelliJ Platform Dmitry Jemerov, CTO, JetBrains Tuesday, July 30, 13
  • 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. JetBrains Products on IntelliJ Platform Tuesday, July 30, 13
  • 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. "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. 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. 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. 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. External Products on IntelliJ Platform Tuesday, July 30, 13
  • 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. GuideWire • http://www.guidewire.com/ • Insurance business • Gosu programming language • Lots of domain-specific UI • Commercial Tuesday, July 30, 13
  • 12. mbeddr • http://mbeddr.wordpress.com/ • MPS-based tool for embedded development (generates C code) • Open-source Tuesday, July 30, 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. Realaxy • ActionScript IDE based on MPS • Commercial • No longer in development, last released in 2010 Tuesday, July 30, 13
  • 15. IntelliJ Platform Components Tuesday, July 30, 13
  • 16. core • Virtual file system, lexer, parser, PSI, references • Utilities: collections, concurrency etc. • No UI • No specific language support Tuesday, July 30, 13
  • 17. platform • Action systen • UI framework: toolwindows, dialogs etc. • Text editor • Diff Tuesday, July 30, 13
  • 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. Other Platform Modules • Local history • Debugger framework • Test runner framework • VCS framework Tuesday, July 30, 13
  • 20. java-psi • UI-less part of IntelliJ IDEA's Java support • Parser, reference resolution, inspections etc. Tuesday, July 30, 13
  • 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. Other Platform Extensions • Spellchecker • Images support • Regular expression support Tuesday, July 30, 13
  • 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. 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. 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. 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. 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. Building a Product Tuesday, July 30, 13
  • 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. 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. <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. 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. <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. 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. 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. Windows Launcher • native/WinLauncher • tools/LauncherGenerator • buildWinLauncher() in utils.gant Tuesday, July 30, 13
  • 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. Server Infrastructure • Exception reporting • Automatic updates and patches • Plugin repository • Usage statistics • All URLs in ApplicationInfo.xml Tuesday, July 30, 13
  • 39. Contributing to IntelliJ Platform Tuesday, July 30, 13
  • 40. Contribution Workflow • Sign the CLA • Send us a pull request on GitHub • Explain the motivation for the change Tuesday, July 30, 13
  • 41. Q&A yole@jetbrains.com @intelliyole Tuesday, July 30, 13