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

Укрощаем Language injections в IntelliJ IDEA

Укрощаем Language injections в IntelliJ IDEA

Yuriy Artamonov

November 28, 2019
Tweet

More Decks by Yuriy Artamonov

Other Decks in Technology

Transcript

  1. Укрощаем
    Language injections
    в IntelliJ IDEA
    Юрий Артамонов

    View Slide

  2. Автор ты кто
    Юрий Артамонов @jreznot
    ■ Разрабатывал фреймворки и
    библиотеки для Java на
    протяжении 9 лет
    ■ Придумываю новые
    возможности IDE для ваших
    любимых JVM фреймворков в
    IntelliJ IDEA
    ■ Беспристрастный член ПК
    конференций Joker/JPoint
    2

    View Slide

  3. План действий
    1. Что за предмет такой Language Injections
    2. Как использовать в проекте
    3. Как используется в JetBrains IDE
    4. Как предоставить свои Injected References
    5. Что нового?
    3

    View Slide

  4. 4

    View Slide

  5. Причины String Obsession
    ■ Невозможно расширить компилятор Java
    ■ Конфигурационные файлы
    ■ Мета-данные и аннотации
    ■ Так проще!
    Лечим при помощи Language and Reference Injection!
    5

    View Slide

  6. Что такое Language Injections
    Точки расширения:
    ■ LanguageInjector
    ■ ReferenceInjector
    6

    View Slide

  7. Мотивация
    ■ Это классно
    ■ Это полезно
    ■ Потому что
    можем
    7

    View Slide

  8. Способы применения
    1. Вручную
    2. Комментарий // language=SQL
    3. Аннотация @Language(“SQL”)
    compile 'org.jetbrains:annotations:18.0.0'
    4. Плагин!
    8

    View Slide

  9. Конфигурация
    9

    View Slide

  10. Делимся опытом!
    10

    View Slide

  11. Ключевые внутренности IDE
    ■ Компоненты и сервисы
    ■ Виртуальная файловая система (VFS)
    ■ Поддержка языков (PSI)
    ■ Редактор кода
    ■ Инспекции
    ■ Индексы
    ■ Фоновые процессы
    ■ UI библиотека
    ■ Точки расширения
    IntelliJ Platform
    IDEA CE (Java,
    Groovy, Kotlin)
    PHP Support Ruby Support
    IDEA Ultimate PHP Storm RubyMine
    11

    View Slide

  12. Как начать
    12
    1. Проверить/включить
    Plugin DevKit
    2. Создать Gradle проект с
    библиотекой
    IntelliJ Platform Plugin
    3. Объявить и реализовать
    нужные точки
    расширения
    Рекомендуем Kotlin!

    View Slide

  13. Internal Mode
    Специальный режим работы IDE, в котором доступны опции для
    разработчиков.
    ■ Internal Actions
    ■ View PSI / Dump UAST
    ■ Dumb Mode Switch
    ■ …
    Включить в VM Options: -Didea.is.internal=true
    13

    View Slide

  14. Ссылки в PSI дереве
    ■ Позволяют установить связь
    между PsiElement и его
    использованиями:
    usage ➜ declaration
    ■ Могут предоставлять
    варианты для авто дополнения
    ■ Можно добавить cсылки без
    необходимости расширять язык!
    См.
    PsiReferenceContributor
    PsiLanguageInjectionHost
    14

    View Slide

  15. Как что-то нужное найти
    Модуль java-indexing-api предоставляет методы поиска по стандартным
    индексам:
    ■ ReferencesSearch
    ■ MethodReferenceSearch
    ■ AnnotatedElementsSearch
    ■ …
    Query MethodReferencesSearch.search(psiMethod, scope, strict)
    Query AnnotatedElementsSearch.searchPsiMethods(annotationClass, scope)
    15

    View Slide

  16. Куда копать дальше
    ■ Исходный код IntelliJ IDEA CE:
    github.com/JetBrains/intellij-community
    ■ Документация Plugin DevKit:
    jetbrains.org/intellij/sdk/docs/basics.html
    ■ Forum: IntelliJ IDEA Open API and Plugin Development
    ■ Slack: jetbrains-platform NEW!
    https://plugins.jetbrains.com/slack
    16

    View Slide

  17. Вопросы ?
    Исходный код:
    https://github.com/jreznot/intellij-uber-injector
    Twitter:
    @Yuriy_Artamonov

    View Slide

  18. Анонсы
    ■ Скоро: установка плагинов без перезапуска
    ■ Великое удаление deprecated API и иконок
    в IntelliJ IDEA 2020.1
    ■ Пользователи будут получать уведомления об
    использовании deprecated API в плагине при его
    установке
    18

    View Slide

  19. Фреймворки и микросевисы!
    Новое в IntelliJ IDEA Ultimate 2019.3
    1. Microservice Frameworks:
    Micronaut, Quarkus, Helidon
    2. OpenAPI Support
    3. Endpoints View
    4. URL Completion
    5. Injectable URL References
    19

    View Slide