company_banner

Что нового в IntelliJ IDEA 2017.2

    Привет, Хабр! Мы рады сообщить о выходе крупного обновления 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. Там же можно скачать обновление.

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

    Программируйте с удовольствием!
    Метки:
    JetBrains 371,47
    Компания
    Поделиться публикацией
    Похожие публикации
    Комментарии 38
    • +2
      Огромное спасибо от довольного клиента! Выглядит вкусно!
    • 0
      Попробовал загрузить обновление. Вся интеграция и плагины связанные с PHP перестали подгружаться.
      Когда я свернул не туда?
      • +1
        Выясняем. Есть вот такой тикет: https://youtrack.jetbrains.com/issue/IDEA-176077
        Я обновился, установил PHP плагин, пока полет нормальный.
        Отпишитесь пожалуйста в тикет.
      • +2
        Пофиксили, обновите список плагинов.
        • 0
          Благодарю.
          На текущий момент не имею возможности, так как выполнить работу важнее возможной неудачной попытки обновить IDE.

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

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

    • 0
      Большое спасибо! Есть в планах поддержка Android NDK и C++?
      • 0
        Если вы про CLion-плагин к IntelliJ IDEA, то в целом мы планируем когда-то, но пока совсем не ясно, когда. Ресурсы все заняты более приоритетными задачами.
        • 0
          Спасибо, я в курсе про CLion, пользуюсь. Больше интересует именно поддержка NDK
          • 0
            Это Вам тогда к Android Studio, там кстати C++ из CLion как раз
      • +2
        C++ — это вам Clion нужен. Но, скажем так, IDE есть куда расти и очень много чего не хватает. Я довольно долгое время сидел на Clion, но в один прекрасный вечер тормоза IDE очень сильно выбесили, и я ушёл на KDevelop. Подождём пару лет, JetBrains вылижут IDE (в этом я уверен), может быть что-то поправят в перфомансе (в этом я не уверен, ибо Java, сэр). Но они упорно, хоть и крайне медленно, двигаются к лучшему.
      • 0

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

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

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

      И еще про котлин: в яве почти на каждый инспекшен, который мне идея выдаёт, мол, давай вот тут поправим, есть пункт в выпадающей менюшке, чтоб поискать такие же косяки во всем проекте. В котлине почему-то это не у всех инспекшенов.
    • 0
      Есть ли планы отвязать IDE от Java-плагина? Создаёшь PHP-проект или Static Web, заходишь в свойства проекта, а там предлагает выбор используемой JDK. Не то, чтобы мешало, но выглядит странно.
      • +2
        Так давно уже — WebStorm, PhpStorm ;)
    • 0
      Вот, что заметил в 2017.1.2:
      1) После обновления поиска, заметил, что были случаи, когда на одной и той же странице не находился одинаковый текст (в окне поиска). При переходе в файл и CTR+F, находилось два искомых фрагмента. Поиск после обновления явно стал менее стабильным.
      2) В окне выводится не больше 100 записей.
      3) В maven вкладке по кнопке execute maven goal, нельзя запустить свою команду в режиме отладки.
    • 0
      Gogland коснутся эти обновления?
      • 0
        В ближайшее время: в следующем EAP билде.
    • 0
      В случае нескольких мониторов с высоким разрешением (HiDPI), теперь IDE правильно определяет разрешение: в зависимости от того, на котором мониторе элемент отображается (ранее всегда использовалось разрешение главного монитора). Размер шрифтов теперь также автоматически корректируется в зависимости от разрешения.

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

    • 0
      Этот скриншот
      image
      нам кагбэ намекает, шо субпиксельный антиалиазинг шрифтов нам опять не завезли. Уважаемые разработчики, вы очень крутые, но доколе в Шторме кастомные шрифты будут кривыми?
      image
      • 0
        Возможно, шрифты починятся при использовании java-машины от jb. Но это не точно. У меня Fira Code до сих пор глючит с лигатурами.
    • 0
      Вот только непонятно зачем надо было ломать в Java в Find Usages поиск мест где используюется класс.
      Верно говорят никогда не обновляйся до выхода первого сервиспака
      • 0
        Можно чуть поподробнее?
        • 0
          если поставить курсор на имя класса и нажать Ctrl+Alt+F7 производится поиск мест где используется этот класс, но, видимо, если ты весь такой современный и используешь gradle и ещё до кучи разбил проект на несколько модулей и класс этот в одном модуле, а используется он в другом модуле, то отныне тебе такой удобной функцией не воспользоваться и то что модули помечены загружеными не поможет
          • 0

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

    • 0

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


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


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

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

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

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


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

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

          • +1

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

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

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

      Надеюсь, это не специально, чтобы на котлин переходили.
    • 0
      Очень грустно, что коммерческий продукт выпускается в продакшн с таким количеством багов.

      Linux Ubuntu 16.04

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

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

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

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

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

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

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

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое