Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SBT Remote Control Extension for Intellij IDEA

SBT Remote Control Extension for Intellij IDEA

Nikolay Obedin

June 08, 2015
Tweet

Other Decks in Programming

Transcript

  1. Санкт-Петербургский Aкадемический Университет Расширение SBT Remote Control для IntelliJ IDEA

    Студент: Н.В. Обедин Руководитель: А.В. Подхалюзин Санкт-Петербург 2015 1/13
  2. SCALA И SBT • Scala – язык программирования для JVM.

    • Совмещает объектно-ориентированный и функциональный подходы • Используется в Linkedin, Twitter, Foursquare, Coursera. 2/13
  3. SCALA И SBT • Scala – язык программирования для JVM.

    • Совмещает объектно-ориентированный и функциональный подходы • Используется в Linkedin, Twitter, Foursquare, Coursera. • SBT – система сборки проектов на Scala и Java. • Автоматическое разрешение зависимостей (Ivy) • Инкрементальная компиляция кода на Scala и Java • Поддержка расширений и задач на Scala • Интерактивное управление (консоль команд) 2/13
  4. SCALA И SBT • Scala – язык программирования для JVM.

    • Совмещает объектно-ориентированный и функциональный подходы • Используется в Linkedin, Twitter, Foursquare, Coursera. • SBT – система сборки проектов на Scala и Java. • Автоматическое разрешение зависимостей (Ivy) • Инкрементальная компиляция кода на Scala и Java • Поддержка расширений и задач на Scala • Интерактивное управление (консоль команд) • sbt-remote-control – проект позволяющий запускать SBT в режиме сервера и посылать ему команды удаленно. Используется в Typesafe Activator 2/13
  5. ПОДДЕРЖКА SBT В СРЕДАХ РАЗРАБОТКИ • Расширения-генераторы • Расширения для

    SBT генерирующие (по запросу) файлы необходимые для открытия проекта в соответствующей среде разработки • Гибкие в настройке, но при изменении проекта SBT надо все перегенерировать вручную 3/13
  6. ПОДДЕРЖКА SBT В СРЕДАХ РАЗРАБОТКИ • Расширения-генераторы • Расширения для

    SBT генерирующие (по запросу) файлы необходимые для открытия проекта в соответствующей среде разработки • Гибкие в настройке, но при изменении проекта SBT надо все перегенерировать вручную • Встроенная поддержка SBT в IDEA • Не требует дополнительной настройки • Автоматически обновляет проект IDEA при изменении параметров проекта SBT 3/13
  7. АКТУАЛЬНЫЕ ПРОБЛЕМЫ ПОДДЕРЖКИ SBT • Корень проблем: не все проекты

    SBT могут быть представлены проектом IDE из-за ограничений самой IDE 4/13
  8. АКТУАЛЬНЫЕ ПРОБЛЕМЫ ПОДДЕРЖКИ SBT • Корень проблем: не все проекты

    SBT могут быть представлены проектом IDE из-за ограничений самой IDE • Проблема 1: некорректное поведение во время редактирования 4/13
  9. АКТУАЛЬНЫЕ ПРОБЛЕМЫ ПОДДЕРЖКИ SBT • Корень проблем: не все проекты

    SBT могут быть представлены проектом IDE из-за ограничений самой IDE • Проблема 1: некорректное поведение во время редактирования • Проблема 2: некорректные компиляция и/или тестирование средствами IDE 4/13
  10. АКТУАЛЬНЫЕ ПРОБЛЕМЫ ПОДДЕРЖКИ SBT • Корень проблем: не все проекты

    SBT могут быть представлены проектом IDE из-за ограничений самой IDE • Проблема 1: некорректное поведение во время редактирования • Проблема 2: некорректные компиляция и/или тестирование средствами IDE • Решается делегированием этих задач SBT! 4/13
  11. ЦЕЛЬ РАБОТЫ Создать расширение для IntelliJ IDEA иcпользующее sbt-remote-control для:

    • Импорта проекта: извлечения списка модулей, библиотек и зависимостей между ними • Компиляции проекта • Выполнения любыx другиx команд SBT (интерактивная консоль) 5/13
  12. ЗАДАЧИ • Изучение архитектуры и программного интерфейса IntelliJ IDEA и

    sbt-remote-control • Проектирование архитектуры расширения • Реализация расширения • Интеграция с расширением IntelliJ Scala 6/13
  13. ОСОБЕННОСТИ SBT-REMOTE-CONTROL • Архитектура sbt-remote-control асинхронная new Connector().connect { client

    => client.watchBuild { build => client.watchKey(sourceDirectories in build) { dirs => ... } client.requestExecution("compile") ... } } • Для параметров проекта предусмотрена подписка: при изменении параметра вызывается функция-callback • Остальные запросы (выполнение задач, автодополнение и пр.) возвращают Future[T] 7/13
  14. АРХИТЕКТУРА РАСШИРЕНИЯ Менеджер подключений Подсистема импорта Cостояниe проекта Логгер сессии

    Все запросы/ответы Интерактивная консоль Сообщения лога Команды 8/13
  15. АРХИТЕКТУРА РАСШИРЕНИЯ Менеджер подключений Подсистема импорта Cостояниe проекта Логгер сессии

    Все запросы/ответы Интерактивная консоль Сообщения лога Команды Плагин компиляции (в отдельном процессе) 8/13
  16. ПОДСИСТЕМА ИМПОРТА: ЗАДАЧА И УСЛОВИЯ • Задача: спроектировать архитектуру и

    реализовать подсистему импорта с учетом следующих условий 9/13
  17. ПОДСИСТЕМА ИМПОРТА: ЗАДАЧА И УСЛОВИЯ • Задача: спроектировать архитектуру и

    реализовать подсистему импорта с учетом следующих условий • Условие 1: разбить алгоритм построения проекта IDE на части с возможностью подключения/отключения различных частей при определенных условиях 9/13
  18. ПОДСИСТЕМА ИМПОРТА: ЗАДАЧА И УСЛОВИЯ • Задача: спроектировать архитектуру и

    реализовать подсистему импорта с учетом следующих условий • Условие 1: разбить алгоритм построения проекта IDE на части с возможностью подключения/отключения различных частей при определенных условиях • Условие 2: по возможности использовать IDEA External System, но обеспечить простой переход от нее к работе с сервисами IDEA напрямую 9/13
  19. ПОДСИСТЕМА ИМПОРТА: EXTRACTOR trait Extractor { def attach(client: SbtClient, project:

    Project): (Future[Unit], Subscription) } • Наследники инкапсулируют определенную часть алгоритма генерации 10/13
  20. ПОДСИСТЕМА ИМПОРТА: EXTRACTOR trait Extractor { def attach(client: SbtClient, project:

    Project): (Future[Unit], Subscription) } • Наследники инкапсулируют определенную часть алгоритма генерации • Позволяет подключаться/отключаться при необходимости 10/13
  21. ПОДСИСТЕМА ИМПОРТА: EXTRACTOR trait Extractor { def attach(client: SbtClient, project:

    Project): (Future[Unit], Subscription) } • Наследники инкапсулируют определенную часть алгоритма генерации • Позволяет подключаться/отключаться при необходимости • Работа с проектом через собственный интерфейс Project позволяет организовать работу как через External System, так и напрямую с сервисами IDEA 10/13
  22. РЕЗУЛЬТАТЫ • Cпроектировано и реализовано расширение для IntelliJ IDEA на

    языке Scala (https://github.com/dancingrobot84/intellij-sbt-remote) • В sbt-remote-control были внесены дополнения и исправления (информация о внутренних зависимостях проекта, используемых расширениях SBT и прочее) 12/13
  23. РЕЗУЛЬТАТЫ • Cпроектировано и реализовано расширение для IntelliJ IDEA на

    языке Scala (https://github.com/dancingrobot84/intellij-sbt-remote) • В sbt-remote-control были внесены дополнения и исправления (информация о внутренних зависимостях проекта, используемых расширениях SBT и прочее) • Архитектура подсистемы импорта была частично перенесена в расширение IntelliJ Scala 12/13