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. Автор ты кто Юрий Артамонов @jreznot ▪ Разрабатывал фреймворки и

    библиотеки для Java на протяжении 9 лет ▪ Придумываю новые возможности IDE для ваших любимых JVM фреймворков в IntelliJ IDEA ▪ Беспристрастный член ПК конференций Joker/JPoint 2
  2. План действий 1. Что за предмет такой Language Injections 2.

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

  4. Причины String Obsession ▪ Невозможно расширить компилятор Java ▪ Конфигурационные

    файлы ▪ Мета-данные и аннотации ▪ Так проще! Лечим при помощи Language and Reference Injection! 5
  5. Способы применения 1. Вручную 2. Комментарий // language=SQL 3. Аннотация

    @Language(“SQL”) compile 'org.jetbrains:annotations:18.0.0' 4. Плагин! 8
  6. Ключевые внутренности IDE ▪ Компоненты и сервисы ▪ Виртуальная файловая

    система (VFS) ▪ Поддержка языков (PSI) ▪ Редактор кода ▪ Инспекции ▪ Индексы ▪ Фоновые процессы ▪ UI библиотека ▪ Точки расширения IntelliJ Platform IDEA CE (Java, Groovy, Kotlin) PHP Support Ruby Support IDEA Ultimate PHP Storm RubyMine 11
  7. Как начать 12 1. Проверить/включить Plugin DevKit 2. Создать Gradle

    проект с библиотекой IntelliJ Platform Plugin 3. Объявить и реализовать нужные точки расширения Рекомендуем Kotlin!
  8. Internal Mode Специальный режим работы IDE, в котором доступны опции

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

    и его использованиями: usage ➜ declaration ▪ Могут предоставлять варианты для авто дополнения ▪ Можно добавить cсылки без необходимости расширять язык! См. PsiReferenceContributor PsiLanguageInjectionHost 14
  10. Как что-то нужное найти Модуль java-indexing-api предоставляет методы поиска по

    стандартным индексам: ▪ ReferencesSearch ▪ MethodReferenceSearch ▪ AnnotatedElementsSearch ▪ … Query<PsiReference> MethodReferencesSearch.search(psiMethod, scope, strict) Query<PsiReference> AnnotatedElementsSearch.searchPsiMethods(annotationClass, scope) 15
  11. Куда копать дальше ▪ Исходный код 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
  12. Анонсы ▪ Скоро: установка плагинов без перезапуска ▪ Великое удаление

    deprecated API и иконок в IntelliJ IDEA 2020.1 ▪ Пользователи будут получать уведомления об использовании deprecated API в плагине при его установке 18
  13. Фреймворки и микросевисы! Новое в 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