Привет, Хабр! Мы рады сообщить о выходе крупного обновления IDE – IntelliJ IDEA 2017.2. Поскольку далеко не все следят за новостями в нашем официальном блоге (а также потому, что многим удобнее будет прочитать об этом на русском), в этом посте я расскажу что ждать от новой версии IDE. Кто спешит попробовать обновление самостоятельно, качайте с сайта JetBrains, либо из Toolbox App. Все остальные, добро пожаловать под кат.




Java


Автодополнение остается одной из самых востребованных функций IDE и поэтому продолжает улучшаться от релиза к релизу. В этот раз, улучшения коснулись функции Smart Completion.

Во-первых, IDE научилась подсказывать выражения использующие Builder паттерн:



Во-вторых, подсказки содержащие цепочки вызовов, ранее доступные по второму вызову Smart Completion, теперь показываются при первом вызове, а кроме того сортируются на основе их популярности проекте:



Последнее улучшение пока доступно только после компиляции проекта компилятором IDE (иначе говоря, функция пока недоступна, если компиляция делегируется Gradle).

Анализ потока выполнения кода (control flow analysis) также стал умнее и теперь находит большее количество потенциальных ошибок в коде, незаметных с первого взгляда.

Во-первых, IDE замечает условия, противоречащие или повторяющие друг друга. Напрямую такой код не является причиной ошибки, однако часто он свидетельствует о ней косвенно.



Кроме того, IDE теперь научилась понимать контракт многих методов, и использовать это для нахождения логических проблем в коде. Например, если метод Collection#isEmpty() возвращает true, это означает, что итерация по этой коллекции не будет выполняться, а вызов метода List#get(int index > 0) приведет к ошибке.



Новые инспекции включают: Replace with Set.of, Add Thread#onSpinWait() (обе требуют Java 9), а также Extract set from comparison chain.

Последняя может быть очень полезна, т.к. она помогает избавить от громоздких конструкций и сделать код гораздо читабельнее:



Java 9 продолжает медленно но неумолимо двигаться вперед. Поэтому в обновлении мы добавили диаграммы модулей, которые, надеемся, сделают работу с модулями еще удобнее:



Окно Run для Spring Boot теперь отображают информацию о состоянии запущенных приложений, полученную с помощью Endpoints: Beans, Health и Mappings.



Отладчик теперь позволяет удобно фильтровать массивы и коллекции в окне Variables, Evaluate Expression, Watches, Inspect и других.



Kotlin 1.1.3


Кроме поддержки более свежей версии языка, IDE получила подсказки имен параметров методов (Parameter Hints, знакомые по Java и Groovy), подсказки выведенных типов (Type Hints), семантическую подсветку (также знакомую ранее по Java и другим языкам), а также подсветку TODO элементов.

Подсказки выведенных типов – принципиально новая функция, делающая код более читаемым.



Groovy 2.5.0


Поддержка Groovy 2.5.0 главным образом включает поддержку новых аннотаций: groovy.transform.builder.Builder#includeSuperProperties, groovy.transform.AutoImplement, и groovy.lang.Delegate для методов.

Контроль версий


Окно инструментов Log для Git предоставляет две новые функции: Revert Commit (откат изменений), а также Reword Commit. Последняя позволяет изменить описание неотправленного изменения.



Кроме этого, IDE получила возможность автоматического форматирования описаний изменений согласно настройкам (Version Control | Commit Dialog): blank line between the subject and the body, limit body line, и limit subject line. При редактировании описания изменения в Commit диалоге стали доступны инспекция и функция Reformat:



Пользовательский интерфейс


Область редактора внутри попапа Find in Path получила левую панель с элементами навигации и индикаторами локальных изменений. Попап отображает прогресс поиска. Результаты поиска с одних и тех же строк объединяются в один результат.



Элементы интерфейса на Window 10 стали выглядеть нативно.



В случае нескольких мониторов с высоким разрешением (HiDPI), теперь IDE правильно определяет разрешение: в зависимости от того, на котором мониторе элемент отображается (ранее всегда использовалось разрешение главного монитора).

Размер шрифтов теперь также автоматически корректируется в зависимости от разрешения.

JavaScript и TypeScript


В TypeScript-коде, как и в Java, теперь показываются имена параметров. Также стало доступно действие Expression Type (ранее знакомое по Java):



Действие Rearrange Code, знакомое тем, кто работал с Java-кодом в IntelliJ IDEA, стало доступно для JavaScript и TypeScript. Оно позволяет упорядочить код внутри классов.



С помощью нового Move Symbol рефакторинга можно безопасно переносить классы, методы и переменные из одного ES6-модуля в другой. IDE автоматически обновит все импорты и экспорты.



В новой версии мы улучшили поддержку Angular Material, — библиотеки UI-компонентов для Angular. Теперь IDE понимает и подсказывает специальные атрибуты из Angular Material.



При тестировании JavaScript-приложений с Mocha теперь можно узнать, насколько хорошо код покрыт тестами. А при работе с Karma теперь можно запускать каждый тест отдельно.



Автодополнение и навигация в JavaScript-коде теперь учитывает конфигурацию проекта (например, aliases), описанную в webpack.config.js.



Производительность


Любой модуль теперь можно указать как “незагруженный” (Unloaded). В этом случае IDE исключит его из индексации и компиляции.



Эту функцию рекомендуется использовать только для исключения модулей, от которых не зависят модули, с которыми вы планируете работать. Если вы выполняете рефакторинг, поиск или другую операцию, на которую потенциально может повлиять незагруженный модуль, IDE сообщит об этом:



Кроме модулей, теперь также стало возможно исключить файлы из индексации по выражению. Это может быть полезно, если вы хотите исключить файлы определенного типа, в именах которых повторяются определенные паттерны (например, *_min.js).

Процесс индексации теперь можно приостанавливать. Это может быть полезно, когда нужно срочно высвободить ресурсы CPU.

Вкратце, это все важные изменения. Подробнее об изменениях можно узнать на странице What’s New. Там же можно скачать обновление.

Буду рад ответить на любые вопросы.

Программируйте с удовольствием!
Поделиться с друзьями
-->

Комментарии (37)


  1. lenon
    18.07.2017 20:10
    +2

    Огромное спасибо от довольного клиента! Выглядит вкусно!


  1. webdevium
    18.07.2017 20:10

    Попробовал загрузить обновление. Вся интеграция и плагины связанные с PHP перестали подгружаться.
    Когда я свернул не туда?


    1. andreycheptsov
      18.07.2017 20:10
      +1

      Выясняем. Есть вот такой тикет: https://youtrack.jetbrains.com/issue/IDEA-176077
      Я обновился, установил PHP плагин, пока полет нормальный.
      Отпишитесь пожалуйста в тикет.


    1. andreycheptsov
      18.07.2017 20:18
      +2

      Пофиксили, обновите список плагинов.


      1. webdevium
        18.07.2017 20:21

        Благодарю.
        На текущий момент не имею возможности, так как выполнить работу важнее возможной неудачной попытки обновить IDE.

        Попробую завтра. Отпишусь.


      1. webdevium
        19.07.2017 13:53
        +5

        Отписываюсь: все успешно.
        Спасибо за прекрасную разработку!


  1. fly_style
    18.07.2017 22:12
    +1

    С юмором у JetBrains тоже все отлично, от первой демки раздела "JavaScript и TypeScript" потухал долго :)


  1. lexdevel
    18.07.2017 23:40

    Большое спасибо! Есть в планах поддержка Android NDK и C++?


    1. anastasiak2512
      19.07.2017 00:22

      Если вы про CLion-плагин к IntelliJ IDEA, то в целом мы планируем когда-то, но пока совсем не ясно, когда. Ресурсы все заняты более приоритетными задачами.


      1. lexdevel
        19.07.2017 01:18

        Спасибо, я в курсе про CLion, пользуюсь. Больше интересует именно поддержка NDK


        1. anastasiak2512
          19.07.2017 13:21

          Это Вам тогда к Android Studio, там кстати C++ из CLion как раз


    1. ZaMaZaN4iK
      19.07.2017 01:10
      +2

      C++ — это вам Clion нужен. Но, скажем так, IDE есть куда расти и очень много чего не хватает. Я довольно долгое время сидел на Clion, но в один прекрасный вечер тормоза IDE очень сильно выбесили, и я ушёл на KDevelop. Подождём пару лет, JetBrains вылижут IDE (в этом я уверен), может быть что-то поправят в перфомансе (в этом я не уверен, ибо Java, сэр). Но они упорно, хоть и крайне медленно, двигаются к лучшему.


    1. SamVimes
      19.07.2017 11:08

      В Android studio давно есть поддержка NDK


      1. lexdevel
        19.07.2017 12:24

        Есть, однако хотелось бы использовать одну IDE, и, поскольку не Android-ом единым, я бы предпочел именно IDEA.


  1. guai
    19.07.2017 14:11

    Мне что-то не нравится, как вы не так давно поиск испортили.
    Пишу я длинный регэксп, и на каждый новый символ оно обновляет поиск — это круто, а вот то, что куча недописанный регэкспов заполняет мне историю поисков, и потом что-то более нужное из истории уже улетело — это не круто.
    И если я правильно помню, раньше был мультилайн в поиске, теперь нет — тоже отстой.
    Для мультилайнового поиска приходится юзать jEdit. И там еще есть офигенная фича — замена с применением скрипта на beanshell.
    Я так понял, теперь в дистре идеи всегда есть котлин. Может прикрутите в поиск замену по котлинскрипту?

    Про явные косяки я конечно завожу тикеты. А то, что выше, — сейчас посмотрим на реакцию хабравчан, может не мне одному кажется полезным.

    И еще про котлин: в яве почти на каждый инспекшен, который мне идея выдаёт, мол, давай вот тут поправим, есть пункт в выпадающей менюшке, чтоб поискать такие же косяки во всем проекте. В котлине почему-то это не у всех инспекшенов.


    1. lampslave
      19.07.2017 15:51

      Мультилайн там есть, только до него добраться надо: https://habrahabr.ru/post/303554/#comment_9663852


      1. guai
        19.07.2017 17:47
        +1

        я про тот, который ctrl+shift+f
        отдельным окошком


  1. vsb
    19.07.2017 16:46

    Есть ли планы отвязать IDE от Java-плагина? Создаёшь PHP-проект или Static Web, заходишь в свойства проекта, а там предлагает выбор используемой JDK. Не то, чтобы мешало, но выглядит странно.


    1. artspb
      19.07.2017 16:47
      +2

      Так давно уже — WebStorm, PhpStorm ;)


  1. tyanigor
    19.07.2017 20:11

    Вот, что заметил в 2017.1.2:
    1) После обновления поиска, заметил, что были случаи, когда на одной и той же странице не находился одинаковый текст (в окне поиска). При переходе в файл и CTR+F, находилось два искомых фрагмента. Поиск после обновления явно стал менее стабильным.
    2) В окне выводится не больше 100 записей.
    3) В maven вкладке по кнопке execute maven goal, нельзя запустить свою команду в режиме отладки.


  1. trik
    19.07.2017 20:12

    Gogland коснутся эти обновления?


    1. andreycheptsov
      19.07.2017 20:36

      В ближайшее время: в следующем EAP билде.


  1. euspensky
    19.07.2017 20:13

    В случае нескольких мониторов с высоким разрешением (HiDPI), теперь IDE правильно определяет разрешение: в зависимости от того, на котором мониторе элемент отображается (ранее всегда использовалось разрешение главного монитора). Размер шрифтов теперь также автоматически корректируется в зависимости от разрешения.

    Это надо как-то отдельно включать? Окна на мониторе с меньшим dpi открываются четкие, но с гиганскими шрифтами. (Build #IU-172.3317.76)


  1. d3us
    19.07.2017 20:13

    Этот скриншот
    image
    нам кагбэ намекает, шо субпиксельный антиалиазинг шрифтов нам опять не завезли. Уважаемые разработчики, вы очень крутые, но доколе в Шторме кастомные шрифты будут кривыми?
    image


    1. AlexanderG
      20.07.2017 00:00

      Возможно, шрифты починятся при использовании java-машины от jb. Но это не точно. У меня Fira Code до сих пор глючит с лигатурами.


  1. mm3
    19.07.2017 20:14

    Вот только непонятно зачем надо было ломать в Java в Find Usages поиск мест где используюется класс.
    Верно говорят никогда не обновляйся до выхода первого сервиспака


    1. andreycheptsov
      19.07.2017 20:44

      Можно чуть поподробнее?


      1. mm3
        20.07.2017 10:55

        если поставить курсор на имя класса и нажать Ctrl+Alt+F7 производится поиск мест где используется этот класс, но, видимо, если ты весь такой современный и используешь gradle и ещё до кучи разбил проект на несколько модулей и класс этот в одном модуле, а используется он в другом модуле, то отныне тебе такой удобной функцией не воспользоваться и то что модули помечены загружеными не поможет


        1. Borz
          20.07.2017 14:15

          а issue есть на эту тему? Если нет, то заведите с типом "Usability Problem"


  1. Regis
    20.07.2017 18:12

    Похоже с 2017.2 поддержка Gradle-овского processResources окончательно сломалась :(


    Кастомные настройки вроде таких просто игнорируются:


        processResources {
            from sourceSets.main.java.srcDirs
            exclude '**/*.java'
            includeEmptyDirs = false
        }


    1. Borz
      20.07.2017 18:27

      странно, но у меня работает. добавил в конфигурацию, запустил из IDEA "clean processResources" и всё норм.
      Причём, если удалить строку "exclude...", то java-классы добавляются.
      Может дадите чуть больше информации? ну там, настройки IDEA для Gradle и прочее. А в идеале, заведёте issue


      1. Regis
        20.07.2017 18:47

        запустил из IDEA "clean processResources"

        Так это у вас Gradle отработал. Gradle свои собственные конфиги понимает нормально. А вот IDEA — нет.


        А в идеале, заведёте issue

        Уже добавил в существующий. Он у вас с мая висит.
        https://youtrack.jetbrains.com/issue/IDEA-173367#comment=27-2333616


        1. Borz
          20.07.2017 18:50
          +1

          не у меня. Я в JetBrains не работаю — так, адвокат их...


  1. relgames
    20.07.2017 22:03
    +1

    Иконки поменяли, а баг с производительностью уже больше года пофиксить не могут SCL-10417

    Анализатор синтаксиса по 30 секунд пересчитывает после каждого изменения.
    Разработчик, похоже, совсем забил, хотя я регулярно добавляю результаты профилировки.

    Надеюсь, это не специально, чтобы на котлин переходили.


  1. AlexandrRS
    24.07.2017 11:39

    Очень грустно, что коммерческий продукт выпускается в продакшн с таким количеством багов.

    Linux Ubuntu 16.04

    Исчезли запускалки для модулей (Run/Debug). Думаю, не беда:
    Run -> edit configuration -> + -> save -> apply. Перезапускаем Idea и она пропадает вслед за уже пропавшей. Открываем проект в предыдущей версии и видим их две. Я не могу работать, когда у меня постоянно что-то пропадает.

    Исчезла кнопка Stop. Я ей не пользуюсь, использую комбинации клавиш, но вернуть ее не удалось (на ней полезная информация в виде цифры означающей количество запущенных приложений).

    Закрыл, снес, откатился на предыдущую версию.

    Я помню, очень похожая ситуация с неюзабельностью была в 2017.1 (шрифты)

    Я не успел дойти до Interprise фишек — не хочу быть альфа тестером. Неужели эти вещи нельзя было на бесплатной версии обкатать?


    1. Borz
      24.07.2017 15:49
      +1

      видимо те, кто пользуется бесплатной версией или не сидят на Ubuntu 16.04 (а какая DE?) либо не извещают о проблемах на этапе EAP. Видимо у вас исключительный баг, т.к. если бы проблема была массовой, то истерия была бы уже давно


      1. AlexandrRS
        24.07.2017 15:56

        16.04.2 Unity — на нескольких машинах одно и то же, пытался даже скачать полный дистр. Но странно, что в трекере нет информации о такой проблеме.