how to build developer tools on top of intellij platform

Post on 19-Oct-2014

3.380 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

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

top related