Top Banner
How to Build Developer Tools on Top of IntelliJ Platform Dmitry Jemerov, CTO, JetBrains Tuesday, July 30, 13
41

How to Build Developer Tools on Top of IntelliJ Platform

Oct 19, 2014

Download

Technology

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?
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 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

Page 2: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 3: How to Build Developer Tools on Top of IntelliJ Platform

JetBrains Productson IntelliJ Platform

Tuesday, July 30, 13

Page 4: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 5: How to Build Developer Tools on Top of IntelliJ Platform

"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

Page 6: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 7: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 8: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 9: How to Build Developer Tools on Top of IntelliJ Platform

External Productson IntelliJ Platform

Tuesday, July 30, 13

Page 10: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 11: How to Build Developer Tools on Top of IntelliJ Platform

GuideWire

• http://www.guidewire.com/

• Insurance business

• Gosu programming language

• Lots of domain-specific UI

• Commercial

Tuesday, July 30, 13

Page 12: How to Build Developer Tools on Top of IntelliJ Platform

mbeddr

• http://mbeddr.wordpress.com/

• MPS-based tool for embedded development (generates C code)

• Open-source

Tuesday, July 30, 13

Page 13: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 14: How to Build Developer Tools on Top of IntelliJ Platform

Realaxy

• ActionScript IDE based on MPS

• Commercial

• No longer in development, last released in 2010

Tuesday, July 30, 13

Page 15: How to Build Developer Tools on Top of IntelliJ Platform

IntelliJ Platform Components

Tuesday, July 30, 13

Page 16: How to Build Developer Tools on Top of IntelliJ Platform

core

• Virtual file system, lexer, parser, PSI, references

• Utilities: collections, concurrency etc.

• No UI

• No specific language support

Tuesday, July 30, 13

Page 17: How to Build Developer Tools on Top of IntelliJ Platform

platform

• Action systen

• UI framework: toolwindows, dialogs etc.

• Text editor

• Diff

Tuesday, July 30, 13

Page 18: How to Build Developer Tools on Top of IntelliJ Platform

lang

• Language-independent implementations of core code insight features

• Highlighting, navigation, completion, refactorings, code formatter and a whole lot more

Tuesday, July 30, 13

Page 19: How to Build Developer Tools on Top of IntelliJ Platform

Other Platform Modules

• Local history

• Debugger framework

• Test runner framework

• VCS framework

Tuesday, July 30, 13

Page 20: How to Build Developer Tools on Top of IntelliJ Platform

java-psi

• UI-less part of IntelliJ IDEA's Java support

• Parser, reference resolution, inspections etc.

Tuesday, July 30, 13

Page 21: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 22: How to Build Developer Tools on Top of IntelliJ Platform

Other Platform Extensions

• Spellchecker

• Images support

• Regular expression support

Tuesday, July 30, 13

Page 23: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 24: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 25: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 26: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 27: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 28: How to Build Developer Tools on Top of IntelliJ Platform

Building a Product

Tuesday, July 30, 13

Page 29: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 30: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 31: How to Build Developer Tools on Top of IntelliJ Platform

<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

Page 32: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 33: How to Build Developer Tools on Top of IntelliJ Platform

<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

Page 34: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 35: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 36: How to Build Developer Tools on Top of IntelliJ Platform

Windows Launcher

• native/WinLauncher

• tools/LauncherGenerator

• buildWinLauncher() in utils.gant

Tuesday, July 30, 13

Page 37: How to Build Developer Tools on Top of IntelliJ Platform

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

Page 38: How to Build Developer Tools on Top of IntelliJ Platform

Server Infrastructure

• Exception reporting

• Automatic updates and patches

• Plugin repository

• Usage statistics

• All URLs in ApplicationInfo.xml

Tuesday, July 30, 13

Page 39: How to Build Developer Tools on Top of IntelliJ Platform

Contributing to IntelliJ Platform

Tuesday, July 30, 13

Page 40: How to Build Developer Tools on Top of IntelliJ Platform

Contribution Workflow

• Sign the CLA

• Send us a pull request on GitHub

• Explain the motivation for the change

Tuesday, July 30, 13

Page 41: How to Build Developer Tools on Top of IntelliJ Platform

Q&A

[email protected]@intelliyole

Tuesday, July 30, 13