How to Build Developer Tools on Top of IntelliJ Platform

Post on 19-Oct-2014

3.390 views 1 download

Tags:

description

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?

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

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 Productson 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 Productson 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 default VM 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