company_banner

Обзор IntelliJ IDEA 16 Public Preview

    В пятницу, 19 февраля, мы выпустили бета-версию IntelliJ IDEA 16. Учитывая то, что с момента выхода IntelliJ IDEA 15 прошло немногим более трех месяцев, вы будете приятно удивлены тем, что мы успели сделать за это время. Мы приглашаем вас скачать свежую версию прямо сейчас и самостоятельно попробовать все улучшения, о самых главных из которых я с удовольствием расскажу далее.

    image

    Отладчик

    Для Java проектов в Evaluate Expression и Watches теперь можно писать выражения и на Groovy, обладающим более компактным синтаксисом, что делает более удобной, например, работу с коллекциями.

    image

    Если текущий поток заблокирован другим остановленным потоком, то IntelliJ IDEA предложит его разблокировать.

    Ранее, по нажатию Resume, возобновлялись все запущенные потоки. Теперь можно изменить это поведение, включив опцию Resume only the current thread.

    Теперь IntelliJ IDEA предупреждает всякий раз, когда замечает, что исходники не соответствуют выполняемому коду. Это помогает избежать ошибок и сэкономить время.

    image

    Интеграция с Git и другими VCS

    IntelliJ IDEA теперь поддерживает git worktrees – на случай если вы хотите работать с несколькими ревизиями репозитория одновременно и сэкономить место на диске.

    Для Git в Branches popup появились две новые команды: Checkout with Rebase и Rename. Checkout with Rebase позволяет сэкономить время, если вы хотите выполнить эти две операции одну за другой.

    Инструменты Diff viewer и Merge dialog стали удобнее за счет подсветки изменений на уровне конкретных частей строки.

    image

    Редактор

    В редакторе появился новый инструмент: Move Element Right/Left (Alt + Ctrl + Shift + Arrows или Alt + Cmd + Shift + Arrows для OS X). С его помощью можно менять местами аргументы методов, элементы массивов и атрибуты тегов.

    image

    Мы добавили авто-импорт для статических методов и констант (ранее он работал только для классов). Опция Add unambiguous imports on the fly теперь также работает и для статических методов и констант.

    image

    Редактор поддерживает арабский, иврит и другие языки, где символы следуют справа налево.

    image

    В настройках стилей появилась опция для автоматического добавления пробела в начало комментариев.

    Java 8

    При вызове Inline method или Change signature, ссылки на метод (method references) преобразуются в соответствующие лямбда выражения.

    IntelliJ IDEA предупредит, если вы вызываете метод get() на java.util.Optional не проверив перед этим с помощью isPresent() содержится ли там значение.

    image

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

    image

    Если вы используете Guava, IDE предложат Вам заменить FluentIterable, Function, Optional и Predicate их аналогами из Java 8.

    image

    Быстрый поиск

    Быстрый поиск (speed-search) теперь доступен в окне Terminal, также был улучшен поиск во всплывающем окне Show usages и в окне Find usages.

    image

    Интерфейс Log viewer для Git и Mercurial теперь выглядит чуть приятнее.

    Gradle

    Теперь модель проекта IntelliJ IDEA полностью совпадает с моделью Gradle: каждый source set представлен в IntelliJ IDEA как отдельный модуль, и поэтому может иметь собственные зависимости (classpath). Это позволило решить огромное количество проблем.

    IntelliJ IDEA научилась автоматически импортировать EAR-артефакты из билд-скриптов.

    Spring

    Для Spring Boot проектов добавленны подсказки внутри файлов YML и banner.txt. Аннотация \@SpringApplicationConfiguration учитывается при создании конфигураций запуска для тестов. Для пользовательских свойств конфигурации теперь работает Find usages.

    Поддержка Spring MVC сильно улучшилась за счет поддежки аннотации \@EnableWebMvc.

    image

    Исправленнно много старых проблем.

    Thymeleaf

    Thymeleaf 3 Beta поддеживается “из коробки”.

    image

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

    image

    Исправленно много проблем с поддержкой Thymeleaf 2.

    Android

    Профайлер утечек и новые инспекции, появившиеся в Android Studio 1.5, теперь доступны и в IntelliJ IDEA.



    Kotlin

    Да-да, если вы еще не в курсе (или не верите своим глазам), неделю назад состоялся релиз Kotlin 1.0.

    Kotlin совместим с Java 6, 7, 8, Android, и любыми Java фреймворками (такими как Java EE, Spring) и билд-системами (Gradle, Maven). Kotlin можно использовать в существующих Java проектах. С версии 1.0 Kotlin обратно-совместим со своими предыдущими версиямми.

    IntelliJ IDEA 16 включает плагиин для Kotlin 1.0.

    Ранее на Хабре уже была проведена первая сессия вопросов и ответов.

    Scala

    Работая над Kotlin, мы не забываем и о Scala: комплишен претерпел ряд улучшений. Во-первых, порядок предлагаемых вариантов теперь учитывает такие факторы, как тип символа, историю его использования и контекст. Предпочтение отдается локальным переменным, затем аргументам, затем полям класса, затем методам и т.д. Если в данном контексте ожидается тип, IntelliJ IDEA учитывает это в порядке предложенных вариантов.

    image

    Во-вторых, появился комплишен для выражений pattern matching c подсказкой имен свойств case-классов.

    image

    ES6 и TypeScript

    Поддержкка ES6 и TypeScript становится лучше с каждым днем. Добавлены рефакторинги Create method, Extract method, Inline method и Introduce field и интеншены Make class abstract, Make public/private и Remove modifier. Неиспользуемые import-выражения теперь подсвечиваются и убираются с помощью Optimize imports. Во время набора кода import-выражения добавляются автоматически.

    image

    Добавленна поддерджка TypeScript 1.8.

    AngularJS

    Для AngularJS 2 добавлен комплишн директив, переменных шаблонов, пользовательских обработчиков событий, путей в templateUrl и styleUrls полях, а также в event, data, и property bindings.

    image

    Также IntelliJ IDEA понимает компоненты, определенные с помощью module.component(), добавленного в AngularJS 1.5.

    JavaScript отладчик

    С новым отладчиком для Chrome гораздо лечге отлаживать асинхронный код и код с лямбда выражениями (arrow functions). Для асинхронного кода, стек фреймов включает место вызова асинхронного кода. При добавлении точек остановки, теперь можно выбрать конкреное лямбда выражение.

    Также можно отлаживать main и render процессы Electron приложений.

    JSON

    Кроме этого теперь IntelliJ IDEA поддерживает JSON schema и предлагает на его основе комплишн внутри JSON файлов (tsconfig.json, .eslintrc, .babelrc и многих других).

    image

    Работа с базами данных

    После релиза DataGrip мы продолжаем улучшать поддержку баз данных и инструменты для работы с ними. Добавлены поддержка некоторых операторов PostgreSQL 9.5 (hstore ?) а также User Defined Table и Column Types для SQL Server. С помощью Create/Modify Table теперь можно редактировать комментарии для колонок (если это поддерживается базой данных).

    image

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

    image

    Docker

    И наконец, Docker стал отдельным окном (tool window) и его интерфейс понемногу становится лучше и лучше: теперь правая панель отображает логи и позволяет редактировать настройки контейнеров. Образы и контейнеры теперь показываются раздельно и более понятно. Также мы поддержали Docker Machine.

    image

    Если вы хотите чтобы я написал о каких-то из новых фич отдельно (или о каких-то старых фичах), – просите в комментариях, и я с удовольствием напишу. Также буду рад ответить на любые вопросы.
    JetBrains
    151,88
    Делаем эффективные инструменты для разработчиков
    Поделиться публикацией

    Похожие публикации

    Комментарии 72

      +1
      Фичи вкусные, хочу некоторые попробовать, но стрёмно. Андрей, а насколько релиз стабилен?
        +4
        Обычно, если мы находим критические баги, мы пересобираем. Пока серьезных замечено не было. Но это превью, что-то может быть неотполированно или даже сломаться. Поэтому мы и просим тестировать как можно интенсивнее. У нас три недели чтобы исправить все дефекты. Я бы посоветовал поставить рядом с v15 и посмотреть.
          0
          Такой вопрос, немного оффтоп:
          Вот есть youtrack, где в принципе, можно получить какой-то фидбек на баг и понять когда будет исправлено, какой workaround можно применить, пока не пофиксили, предоставить дополнительные логи/конфиги если нужно, собирать +1ны и т. д.
          Есть https://ea.jetbrains.com, куда репортятся исключения прямо из IDEA — но понять абсолютно ничего нельзя. У меня, например, в последнем EAP билде есть стабильный exception, который я репортил, и видели его или нет, фиксят его или нет — не понятно.
          Можно ли как-то популярно объяснить, что оно и зачем-почему ответвление от багтрекера? И может стоит просто копипастить исключение и заводить issue в багтрекере?
            +2
            Если exception reports отсылать под своей учётной записью, то можно посмотреть список всех отосланных и их статус (Unprocessed/Fixed). Но зачем для этого держут отдельный от youtrack интерфейс мне тоже непонятно.
            0
            После перехода с предыдущего EAP (3891) на Preview (4199) попап авто-комплита стал заметно более задумчивым.
            Где 3891 уже давно показала бы окошко с вариантами после ввода 2 букв, 4199 надо ещё дать подумать секунду-другую.
            Руки машинально уже набирают две буквы и жмут Enter. А тут либо ждать надо, либо Ctrl+Space жать.

            Проблема в том, что сложно это всё чётко замерить и сравнить. Всё "сломалось" на уровне моторной памяти.

            Это какая-то известная проблема? (есть тикет?) Или надо пытаться копать дальше и репортить?
              0
              А можно пример? Java или Scala?
                0
                Java

                Пример чего? Как я печатаю код, а попап не появляется, и приходится насильно его вызывать Ctrl+Space-ом?
                Я не представляю, как это можно показать. Разве что на видео заснять.

                И конечно же оно так не всегда. Но достаточно регулярно, чтобы начало раздражать.
            +7
            Да ладна тебе! Шашки на голо и вставь 16ю! На самом деле, я почти каждый EAP 16й версии ставил — всё норм :)
              +3
              Работаю уже довольно давно на 16 EAP. Вроде все стабильно
                0
                Многие сидят даже на EAP и все ок. А это уже Public Preview, по моему опыту можно пробовать смело. А какие именно фичи заинтересовали?
                  0
                  лично меня — дебаггинг и рефакторинги для Java 8. У меня же тулсет очень-очень простой :)
                    0
                    Простой, но даже тут Idea есть чем тебя порадовать! :)
                  0
                  Фичи вкусные, но одной не хватает.
                  Я пока начинающий пользователь, так что может уже и есть такая фича…
                  Но всё же.

                  По команде Navigate Symbol (Alt-Ctrl-Shift + N) было бы здОрово, чтоб при открытии окна поиска поле фильтра было всегда пустое (а не сохраняло последнюю набранную строку, как сейчас) и сразу же, пока ты еще не начал ничего набирать, открывался список из последних ранее посещенных (набранных) методов/символов.
                  Для совместимости (тем кто привык к текущему поведению) можно эту фичу сделать отключаемой через настройки редактора.

                  Есть возможность сейчас сделать такое?
                  Если нет, можно ли записать в фиче-реквесты — andreycheptsov?
                +4
                А как вы даете номера версиям? Если Idea 15 вышла всего несколько месяцев назад, то почему эта версия уже 16, а не 15.1 например?
                Ведь никаких особых мажорных изменений вроде бы нет.
                  +8
                  Здесь можно оставить шутку про нумерацию версий современных браузеров, которая началась с Google Chrome…
                    0
                    В данный момент IntelliJ IDEA переходит от одного релиза рад в год к трем релизам в год. Поскольку теперь и фичи и багфиксы будут равномерно распределяться между этими релизами, стирается и разница между большими релизами и маленькими. Поэтому вместо 15.1 будет 16. Однако прямо сейчас мы подумываем, чтобы пойти дальше и выровнить версии для всех IntelliJ IDE: PhpStorm, PyCharm, WebStorm, DataGrip, RubyMine, CLion и AppCode, например 2016.1, 2016.2, 2016.3 и т.д. Но пока мы не уверены на этот счет. Если у вас есть мысли, делитесь.
                      +2
                      Если делать релиз каждый месяц, то 2016.1, 2016.2, 2016.3 итд имеет смысл :)
                        0
                        А какой смысл в выравнивании версий? Если взять, например, RubyMine и IntelliJ IDEA, сравнять версии, то, мне кажется, будет ещё запутаннее, поскольку они вроде как одной версии, но при этом плагин в IDEA старше, чем нативная поддержка в RM, и в итоге всё всё-равно сводится к версия ИДЕ + версия плагина.
                        Или это исключительно в маркетинговых целях?

                        2016.1, 2016.2, 2016.3
                        Тут не понятно, то ли 1, 2 и 3 — это разные продукты, то ли минорные релизы в пределах года.
                          0
                          Так Adobe делает сейчас, вполне понятно получается
                          0
                          Как вариант: номером после года обозначать квартал.
                            +1
                            Matlab нумеруется как 2015a, 2015b, 2016a и тд.
                            Они обычно выпускают два релиза в год.

                            Это лучше, т.к. нет путаницы с месяцами.
                            Убунту же пишет именно месяц: 14.04 (апрель), 14.10 (октябрь)
                              +2
                              лучше 16.1, 16.2, 16.3, 17.1, 17.2, 17.3… "20" — излишество, и так понятно будет что первая цифра год и меньше чисел
                                0
                                Или по месяцу. 16.3, 16.7, 16.12 и.т.п.
                                0
                                Убунта же номеруется 1404, 1410, 1504, 1510…
                                вполне понятно, когда версия соответствует году
                                0
                                Наверное потому что мажорный релиз — больше событие, чем минорный :) Можно и отпраздновать.
                                +3
                                Поиск по «double shift»-то сделали отключаемым, ироды?
                                  +2
                                  зачем??
                                    +1
                                    Может, раздражает человека. Между прочим я могу его понять — у меня скрыты панели кнопок (те, которые по периметру) и показываются они по double cmd (с зажатым последним) и иногда случается, что они показываются когда мне не надо, или когда надо — нужно по несколько раз сделать triple-double cmd чтоб наконец увидеть их. Так что при определённых условиях попап по double-shift вполне может появляться "неожиданно".
                                    Если совсем короче — все хоткеи должны быть изменяемы. То, что удобно вам — может быть неудобно другим.
                                      0
                                      Затем что раздражает, если случайно нажал шифт дважды. И, между прочим, я далеко не один такой. Очень много людей жалуются на это. Ну и нестандартные hardcoded shortcuts в 2016 году выглядят, как минимум, глупо.
                                        0
                                        Можно же переназначить. Тогда и Shift-Shift откликаться не будет
                                          0
                                          А насколько это очевидное решение, учитывая что в настройках хоткеев в этом пункте — пустота?
                                          upd. Кроме того, в версии 15 даже переназначение не работает/не работало.
                                            0
                                            Неочевидное, согласен. За это надо разработчику по рукам а-та-та :)

                                            Таких проблем там не одна дюжина. И мы, как пользователи либо прощаем такие мелочи, либо находим решение методом тыка и экспериментов. Как результат, такие пробелы не доходят до YouTrack-а. ¯_(ツ)_/¯
                                      0
                                      Вот issue, голосуйте https://youtrack.jetbrains.com/issue/IDEA-118723.
                                      Спрошу сегодня у разрабочтика, что он думает. Вообще, звучит разумно. Я тоже проголосую :)
                                        +2
                                        Вообще, горячую клавишу можно переназначить.

                                        image
                                        +5
                                        Сижу на 16 EAP + scala plugin, и что мне не нравится, так это автокомплит. Перешел на идею, начиная с 14 версии, и после эклипса не могу привыкнуть к тому, что первым в списке на автокомплит НИКОГДА не стоят локальные переменные и поля класса. Т.е. я вынужден ввести 3-4 символа, прежде чем идея поймет, чего я от нее хочу (даже если у аргумента очень специфический тип), эклипс понимал даже без ввода символов.
                                          0
                                          Приведите пример, желательно последний билд плагина. Если это правда, разберемся.
                                            0
                                            Хорошо, завтра сяду за IDE — напишу
                                            0
                                            После апдейта IDE и Scala плагина до последней версии всё работает идеально. Спасибо!
                                              0
                                              Все выяснил. Новые фичи пока доступны только в найтли билде: https://plugins.jetbrains.com/update/index?pr=&updateId=24171

                                              Скоро будут в репозитории
                                              0
                                              Я вот не пойму, а если купить Idea, то есть ли смысл брать WebStorm?
                                                +1
                                                в IDEA можно накидать плагины, которые есть и в WebStorm, но это будет не совсем то же — в WebStorm они дополнительно тюнингованы в плане удобства. И обновления для WEB-плагинов выходят несколько раньше для WebStorm и только потом попадают в репозитарий IDEA, насколько я понял.
                                                  0
                                                  Не совсем верно, что мы "тюнингуем" плагины для WebStorm — все собирается из одного code base. Отличия, которые пользователи замечают, в основном связаны с тем, что у WebStorm более простая модель проектов по сравнению с IJ, какие-то вещи чуть проще настраивать, тк плагины работают "из коробки" и просто нет отвлекающих фич, не связанных с web-разработкой. WebStorm, как и IJ, тоже собирается переходить на релизный цикл с 3 обновлениями в год, так что надеемся, что отличий в версиях плагинов с IJ будет намного меньше.
                                                    0
                                                    Если память мне не изменяет, пару лет назад отличия видел как минимум в Command Line — в PhpStorm поддержка Zend Framework была "из коробки", а в IDEA необходимо была донастройка плагина. Как сейчас обстоят дела не знаю.
                                                    0
                                                    По-моему плагины идентичны и где-то авторы уже тут об этом говорили.
                                                    Другие дело, что в IDEA отображается сразу все, в то время как в PyChram, например, нету всяких пунктов меню и прочих кнопочек и элементов, присущих интерфейсу Java IDE.
                                                    0
                                                    Тоже интересует этот вопрос.
                                                    –1
                                                    Так и не получилось у меня настроить работу в Idea для своего юз-кейса: код приложения и его окружение находится на юниксовой машине, куда есть доступ по ssh с виндовой машины. Если remote SDK для Ruby со скрипом получилось настроить, то, например модуль для Git упрямо требовал от меня исполняемого файла гита на моей машине. Тот же Netbeans в этом плане меня как-то понимал)
                                                    Ну может это у меня руки кривые, но так и не получилось, вернулся к Netbeans
                                                      0
                                                      К сожалению, качество EAP билдов 16 версии оставляет желать лучшего.

                                                      Сломали Gradle проекты: почему-то создаются отдельные модули для test и main исходников, в результате проект не компилируется:

                                                      Error:scalac: Output path null is shared between: Module 'xxx_test' production, Module 'upload_test' production
                                                      Output path /Users/relgames/myprojects/xxx/upload/build/classes/main is shared between: Module 'upload_main' production, Module 'upload_main' tests
                                                      Output path /Users/relgames/myprojects/xxx/build/classes/main is shared between: Module 'xxx_main' production, Module 'xxx_main' tests
                                                      Please configure separate output paths to proceed with the compilation.
                                                      TIP: you can use Project Artifacts to combine compiled classes if needed.
                                                      

                                                      File -> Open сломан: показывается только / и бесконечно бежит индикатор загрузки.
                                                      Больше проверять не стал, запустил 15 версию.
                                                      +2
                                                      А что с поддержкой C#?
                                                      0
                                                      А сделали возможности получать language level отдельного модуля из gradle?

                                                      Очень раздражает каждый раз настраивать при запуске IDE

                                                      https://issues.gradle.org/browse/GRADLE-2198
                                                        0
                                                          0
                                                          Не запускается если менять idea.exe.vmoptions
                                                          -Xms128m
                                                          -Xmx1512m
                                                          0
                                                          Работу с CTE в базе данных не добавили?

                                                          image
                                                          Вероятно там какой-то слишком умный парсер запросов, который не передаёт запрос целиком....
                                                            0
                                                            А можно по-подробнее?
                                                              0
                                                              Что именно поподробнее? CTE — Common table expressions мощное надмножество над SQL. Хоть первые результаты гугления ведут на microsoft.com, современные БД ( http://www.postgresql.org/docs/9.1/static/queries-with.html ) их пркрасно поддерживают.
                                                              Однако же, я не нашел способ как запустить такой запрос для нужной мне БД (Exasol). Судя по коду ошибки, инструмент упорно отвезает все что написано перед select. Ровно так, как показано на примере из PhpStorm 9.0.2 на скриншоте.
                                                                0
                                                                Вот же, зараза! Попробовал пререключить SQL-dialect на упомянутый PostgreSQL и заработало. Стало быть SQL dialect отвечает не только за подсветку синтаксиса, но и за то, какой запрос будет отправлен.
                                                                Выходит, если писать что-то специфичное для БД, неизвестное парсеру типа: "open schema schema_name", то такой запрос будет выполнить нельзя. Значит, мой исходный вопрос будет не о CTE, а о выполнении запросов непонятных парсеру.
                                                                  0
                                                                  Определённый диалект, который не соотвествовал запущенному запросу, определял то, какая именно часть запроса отправится серверу. Если вы выделете код, то именно он отправится серверу и диалект будет тут непричём. А если диалект, определённый для файла не понимал CTE, то он и пытался отправить серверу только запрос select b from a.
                                                                    0
                                                                    Увы, в моем примере при неподходящем диалекте, даже при выделении двух строк, на сервер отправляется один только select. А если парсер вообще не понимает запроса (когда БД не из списка известных диалектов), например open schema, то вообще никакого запроса на сервер не происходит.
                                                            +1
                                                            В январе 2016 IntelliJ IDEA Community Edition портировали на FreeBSD (порт java/intellij). Спасибо большое! Давно ждали.
                                                              0
                                                              а почему сборки нет в EAP разделе? или это называется "Unix archive"?
                                                              0
                                                              Сегодня Intellij idea сама напросилась на обновление. Пробуем. Как я понял — стабильный релиз. Но здесь нет о нём информации, жаль.
                                                                0
                                                                А почему на страничке загрузки для текущей EAP-версии нет ссылки на ее Release Notes?

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

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