Plugin development for intelli j platform
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Plugin development for intelli j platform

  • 550 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
550
On Slideshare
550
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
3
Comments
0
Likes
0

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. Разработка плагинов на базе IntelliJ Platform Николай Чашников Nikolay.Chashnikov@jetbrains.com
  • 2. Continuous Integration ● сборка плагина ● запуск тестов ● установка и обновление плагина в IDE
  • 3. Структура дистрибутива плагина samplePlugin.zip samplePlugin lib samplePlugin.jar plugin classes META-INF plugin.xml pluginLib.jar ...
  • 4. Сборка плагина вне IDE ● IntelliJ IDEA Project runner (TeamCity) ● Ant (Build | Generate Ant Build) ● ...
  • 5. Настройка проекта для сборки на TeamCity создание артефакта для плагина (File | Project Structure | Artifacts)
  • 6. Build Configuration на TeamCity ● настройка VCS ● настройка внешних зависимостей (IDEA SDK) ○ получение через VCS ○ копирование на build agent ○ получение из стороннего репозитория (отдельный build step)
  • 7. Автоматические тестирование ● честные unit tests ● функциональные тесты в формате unit tests ○ ○ ○ ○ тестируют поведение загружают IntelliJ Platform (без UI) время работы достаточно велико не меняются при изменении реализации
  • 8. Запуск тестов на TeamCity ● через Ant, Maven,... ● через IntelliJ IDEA Project runner: ○ создать shared run configuration в IDEA ○ положить соответствующий файл в VCS ○ добавить название run configuration в настройках IDEA Project runner
  • 9. Возможности TeamCity ● автоматический запуск тестов ● просмотр результатов, история ● назначение ответственного за падение тестов ● проверка изменений до коммита в VCS (Remote Run)
  • 10. Установка плагина в IDE ● из репозитория plugins.jetbrains.com ● с диска (Settings | Plugins | Install plugin from disk) ● из собственного репозитория
  • 11. Собственый репозиторий плагинов File | Settings | Plugins | Browse Repositories | Manage Repositories, добавить ссылку на plugins.xml. plugins.xml: <plugins> <plugin id="samplePlugin" url="PluginZipFileUrl.zip" version="1.0"/> </plugins>
  • 12. Архитектура IntelliJ Platform Компоненты, сервисы, точки расширения
  • 13. Система компонентов ● экземпляры объектов хранятся в иерархии контейнеров PicoContainer ● иерархия состоит из трёх уровней ○ Application ○ Project ○ Module ● регистрируются в plugin.xml
  • 14. Получение экземпляра компонента ● метод getInstance(), getInstance(project), getInstance(module) ● dependency injection через параметры конструктора (другие компоненты данного уровня или более высоких уровней)
  • 15. Компоненты ● наследуются от ApplicationComponent, ProjectComponent, ModuleComponent ● регистрируются в <application-components>, <projectcomponents>,... в plugin.xml ● загружаются при старте IDE (загрузке проекта, загрузке модуля) init use dispose
  • 16. Сервисы ● не накладывают ограничений на наследование ● регистрируются в <applicationService>, <projectService>, <moduleService> ● загружаются при первом обращении (ServiceManager.getService()) ● если реализован интерфейс Disposable, метод dispose вызовется при закрытии IDE (проекта, модуля)
  • 17. Точки расширения ● ● ● ● регистрируются в <extensionPoints> полное имя - <plugin id>.<extension name> предполагают несколько реализаций для доступа к расширениям создаётся константа ExtensionPointName
  • 18. Точки расширения ● бывают двух видов: ○ beanClass - дают возможность задавать атрибуты расширения прямо в xml ○ interface - в расширении указывается только ссылка на класс, реализующий интерфейс ● могут быть уровня проекта или модуля (атрибут area), по умолчанию уровня application
  • 19. Расширения ● регистрируются в <extensions> ○ для расширений вида beanClass заполняются атрибуты ○ для расширений вида interface указывается полное имя класса в атрибуте implementation ● загружаются при первом обращении (ExtensionPointName.getExtensions())
  • 20. Плагины и их зависимости
  • 21. Plugin classpath ● jar файлы плагина (*.jar в директории ‘lib’) ● jar файлы плагинов, от которых он зависит ● jar файлы IDEA (*.jar в директории <IDEA_HOME>/lib )
  • 22. Зависимости плагина Определяются через <depends> в plugin.xml
  • 23. Опциональные зависимости Задаются тэгом <depends optional=”true” config-file=”fileName.xml”> в plugin.xml Компоненты из файла fileName.xml загружаются только в случае, если указанный плагин доступен
  • 24. Работа с фреймворками
  • 25. Конфигурирование фреймворка ● ● ● ● конфигурирование не требуется специальная библиотека (SDK) на уровне модуля на уровне проекта
  • 26. Фреймворк без конфигурации ● не требуется явных действий “добавить фреймворк” ● экшены (completion, inspections,...) определяют наличие фреймворка по аннотациям, наличию класса в зависимостях модуля (JavaPsiFacade.findClass(...,module. getModuleWithDependenciesAndLibrariesScope()),...
  • 27. Фреймворк-библиотека ● задаётся при помощи LibraryType ● можно хранить дополнительные настройки прямо в библиотеке ● настройки редактируются в библиотеке в диалоге Project Structure
  • 28. Фреймворк в настройками в модуле ● задаётся при помощи Facet (extension FacetType) ● настройки редактируются в диалоге Project Structure
  • 29. Фреймворк с настройками в проекте ● настройки хранятся в project service ● редактируются в диалоге Settings (extension projectConfigurable)
  • 30. Подключение фреймворка ● extension frameworkSupport (класс FrameworkSupportProvider) ● опция появляется в диалоге “New Project/Module Wizard” и в диалоге “Add Framework Support” (popup menu в Project View)
  • 31. Ссылки Исходный код плагина с примерами: https://github.com/chashnikov/intellij-sample-plugin