How to Build Developer Tools on Top of IntelliJ Platform
Upcoming SlideShare
Loading in...5
×
 

How to Build Developer Tools on Top of IntelliJ Platform

on

  • 3,192 views

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?

Statistics

Views

Total Views
3,192
Slideshare-icon Views on SlideShare
3,133
Embed Views
59

Actions

Likes
7
Downloads
26
Comments
0

1 Embed 59

https://twitter.com 59

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    How to Build Developer Tools on Top of IntelliJ Platform How to Build Developer Tools on Top of IntelliJ Platform Presentation Transcript

    • 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-source,Apache 2 license Tuesday, July 30, 13
    • 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 extension points • For more history: Malmö, September 7, http://www.jetbrains.com/jetbrainsday/ Tuesday, July 30, 13
    • "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
    • 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
    • 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
    • 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
    • External Products on IntelliJ Platform Tuesday, July 30, 13
    • 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
    • GuideWire • http://www.guidewire.com/ • Insurance business • Gosu programming language • Lots of domain-specific UI • Commercial Tuesday, July 30, 13
    • mbeddr • http://mbeddr.wordpress.com/ • MPS-based tool for embedded development (generates C code) • Open-source Tuesday, July 30, 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
    • 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 language support Tuesday, July 30, 13
    • 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, refactorings, code formatter and a whole lot more Tuesday, July 30, 13
    • 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, 13
    • 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
    • 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 / issue tracker integration • UI Designer • Terminal Tuesday, July 30, 13
    • 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
    • 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
    • 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
    • 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
    • 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 options Tuesday, July 30, 13
    • 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
    • <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
    • 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
    • <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
    • 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
    • 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
    • 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 tied to our environment, roll your own • Linux - just a .tar.gz Tuesday, July 30, 13
    • Server Infrastructure • Exception reporting • Automatic updates and patches • Plugin repository • Usage statistics • All URLs in ApplicationInfo.xml Tuesday, July 30, 13
    • 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, July 30, 13
    • Q&A yole@jetbrains.com @intelliyole Tuesday, July 30, 13