Отладчик
Для Java проектов в Evaluate Expression и Watches теперь можно писать выражения и на Groovy, обладающим более компактным синтаксисом, что делает более удобной, например, работу с коллекциями.
Если текущий поток заблокирован другим остановленным потоком, то IntelliJ IDEA предложит его разблокировать.
Ранее, по нажатию Resume, возобновлялись все запущенные потоки. Теперь можно изменить это поведение, включив опцию Resume only the current thread.
Теперь IntelliJ IDEA предупреждает всякий раз, когда замечает, что исходники не соответствуют выполняемому коду. Это помогает избежать ошибок и сэкономить время.
Интеграция с Git и другими VCS
IntelliJ IDEA теперь поддерживает git worktrees – на случай если вы хотите работать с несколькими ревизиями репозитория одновременно и сэкономить место на диске.
Для Git в Branches popup появились две новые команды: Checkout with Rebase и Rename. Checkout with Rebase позволяет сэкономить время, если вы хотите выполнить эти две операции одну за другой.
Инструменты Diff viewer и Merge dialog стали удобнее за счет подсветки изменений на уровне конкретных частей строки.
Редактор
В редакторе появился новый инструмент: Move Element Right/Left (Alt + Ctrl + Shift + Arrows или Alt + Cmd + Shift + Arrows для OS X). С его помощью можно менять местами аргументы методов, элементы массивов и атрибуты тегов.
Мы добавили авто-импорт для статических методов и констант (ранее он работал только для классов). Опция Add unambiguous imports on the fly теперь также работает и для статических методов и констант.
Редактор поддерживает арабский, иврит и другие языки, где символы следуют справа налево.
В настройках стилей появилась опция для автоматического добавления пробела в начало комментариев.
Java 8
При вызове Inline method или Change signature, ссылки на метод (method references) преобразуются в соответствующие лямбда выражения.
IntelliJ IDEA предупредит, если вы вызываете метод get() на java.util.Optional не проверив перед этим с помощью isPresent() содержится ли там значение.
Добавлено много инспекций на использование функциональных интерфейсов, лямбда выражений и Optional.
Если вы используете Guava, IDE предложат Вам заменить FluentIterable, Function, Optional и Predicate их аналогами из Java 8.
Быстрый поиск
Быстрый поиск (speed-search) теперь доступен в окне Terminal, также был улучшен поиск во всплывающем окне Show usages и в окне Find usages.
Интерфейс 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.
Исправленнно много старых проблем.
Thymeleaf
Thymeleaf 3 Beta поддеживается “из коробки”.
Добавлена поддержка пользовательских диалектов: для них теперь доступны те же посказки, что и для стандартных.
Исправленно много проблем с поддержкой 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 учитывает это в порядке предложенных вариантов.
Во-вторых, появился комплишен для выражений pattern matching c подсказкой имен свойств case-классов.
ES6 и TypeScript
Поддержкка ES6 и TypeScript становится лучше с каждым днем. Добавлены рефакторинги Create method, Extract method, Inline method и Introduce field и интеншены Make class abstract, Make public/private и Remove modifier. Неиспользуемые import-выражения теперь подсвечиваются и убираются с помощью Optimize imports. Во время набора кода import-выражения добавляются автоматически.
Добавленна поддерджка TypeScript 1.8.
AngularJS
Для AngularJS 2 добавлен комплишн директив, переменных шаблонов, пользовательских обработчиков событий, путей в templateUrl и styleUrls полях, а также в event, data, и property bindings.
Также IntelliJ IDEA понимает компоненты, определенные с помощью module.component(), добавленного в AngularJS 1.5.
JavaScript отладчик
С новым отладчиком для Chrome гораздо лечге отлаживать асинхронный код и код с лямбда выражениями (arrow functions). Для асинхронного кода, стек фреймов включает место вызова асинхронного кода. При добавлении точек остановки, теперь можно выбрать конкреное лямбда выражение.
Также можно отлаживать main и render процессы Electron приложений.
JSON
Кроме этого теперь IntelliJ IDEA поддерживает JSON schema и предлагает на его основе комплишн внутри JSON файлов (tsconfig.json, .eslintrc, .babelrc и многих других).
Работа с базами данных
После релиза DataGrip мы продолжаем улучшать поддержку баз данных и инструменты для работы с ними. Добавлены поддержка некоторых операторов PostgreSQL 9.5 (hstore ?) а также User Defined Table и Column Types для SQL Server. С помощью Create/Modify Table теперь можно редактировать комментарии для колонок (если это поддерживается базой данных).
Если вы хотите удалить данные из таблиц, вам поможет новый инструмент: Truncate, который позволяет очень быстро и вне транзакции удалить данные из одной или более таблиц.
Docker
И наконец, Docker стал отдельным окном (tool window) и его интерфейс понемногу становится лучше и лучше: теперь правая панель отображает логи и позволяет редактировать настройки контейнеров. Образы и контейнеры теперь показываются раздельно и более понятно. Также мы поддержали Docker Machine.
Если вы хотите чтобы я написал о каких-то из новых фич отдельно (или о каких-то старых фичах), – просите в комментариях, и я с удовольствием напишу. Также буду рад ответить на любые вопросы.
Комментарии (69)
SergioShpadi
23.02.2016 19:04+4А как вы даете номера версиям? Если Idea 15 вышла всего несколько месяцев назад, то почему эта версия уже 16, а не 15.1 например?
Ведь никаких особых мажорных изменений вроде бы нет.voidMan
23.02.2016 19:05+8Здесь можно оставить шутку про нумерацию версий современных браузеров, которая началась с Google Chrome…
andreycheptsov
23.02.2016 19:10В данный момент IntelliJ IDEA переходит от одного релиза рад в год к трем релизам в год. Поскольку теперь и фичи и багфиксы будут равномерно распределяться между этими релизами, стирается и разница между большими релизами и маленькими. Поэтому вместо 15.1 будет 16. Однако прямо сейчас мы подумываем, чтобы пойти дальше и выровнить версии для всех IntelliJ IDE: PhpStorm, PyCharm, WebStorm, DataGrip, RubyMine, CLion и AppCode, например 2016.1, 2016.2, 2016.3 и т.д. Но пока мы не уверены на этот счет. Если у вас есть мысли, делитесь.
antonarhipov
23.02.2016 19:33+2Если делать релиз каждый месяц, то 2016.1, 2016.2, 2016.3 итд имеет смысл :)
extempl
23.02.2016 19:33А какой смысл в выравнивании версий? Если взять, например, RubyMine и IntelliJ IDEA, сравнять версии, то, мне кажется, будет ещё запутаннее, поскольку они вроде как одной версии, но при этом плагин в IDEA старше, чем нативная поддержка в RM, и в итоге всё всё-равно сводится к версия ИДЕ + версия плагина.
Или это исключительно в маркетинговых целях?
2016.1, 2016.2, 2016.3
Тут не понятно, то ли 1, 2 и 3 — это разные продукты, то ли минорные релизы в пределах года.
kosiakk
23.02.2016 23:47+1Matlab нумеруется как 2015a, 2015b, 2016a и тд.
Они обычно выпускают два релиза в год.
Это лучше, т.к. нет путаницы с месяцами.
Убунту же пишет именно месяц: 14.04 (апрель), 14.10 (октябрь)
eReS
24.02.2016 10:49+2лучше 16.1, 16.2, 16.3, 17.1, 17.2, 17.3… "20" — излишество, и так понятно будет что первая цифра год и меньше чисел
maratische
01.03.2016 10:48Убунта же номеруется 1404, 1410, 1504, 1510…
вполне понятно, когда версия соответствует году
extempl
23.02.2016 19:47Наверное потому что мажорный релиз — больше событие, чем минорный :) Можно и отпраздновать.
LimeOrange
23.02.2016 19:47+3Поиск по «double shift»-то сделали отключаемым, ироды?
antonarhipov
24.02.2016 02:45+2зачем??
extempl
24.02.2016 10:09+1Может, раздражает человека. Между прочим я могу его понять — у меня скрыты панели кнопок (те, которые по периметру) и показываются они по double cmd (с зажатым последним) и иногда случается, что они показываются когда мне не надо, или когда надо — нужно по несколько раз сделать triple-double cmd чтоб наконец увидеть их. Так что при определённых условиях попап по double-shift вполне может появляться "неожиданно".
Если совсем короче — все хоткеи должны быть изменяемы. То, что удобно вам — может быть неудобно другим.
LimeOrange
24.02.2016 11:31Затем что раздражает, если случайно нажал шифт дважды. И, между прочим, я далеко не один такой. Очень много людей жалуются на это. Ну и нестандартные hardcoded shortcuts в 2016 году выглядят, как минимум, глупо.
antonarhipov
24.02.2016 13:23Можно же переназначить. Тогда и Shift-Shift откликаться не будет
LimeOrange
24.02.2016 13:24А насколько это очевидное решение, учитывая что в настройках хоткеев в этом пункте — пустота?
upd. Кроме того, в версии 15 даже переназначение не работает/не работало.antonarhipov
24.02.2016 13:50Неочевидное, согласен. За это надо разработчику по рукам а-та-та :)
Таких проблем там не одна дюжина. И мы, как пользователи либо прощаем такие мелочи, либо находим решение методом тыка и экспериментов. Как результат, такие пробелы не доходят до YouTrack-а. ?_(?)_/?
moscas
24.02.2016 11:35Вот issue, голосуйте https://youtrack.jetbrains.com/issue/IDEA-118723.
Спрошу сегодня у разрабочтика, что он думает. Вообще, звучит разумно. Я тоже проголосую :)
gricom
23.02.2016 21:20+5Сижу на 16 EAP + scala plugin, и что мне не нравится, так это автокомплит. Перешел на идею, начиная с 14 версии, и после эклипса не могу привыкнуть к тому, что первым в списке на автокомплит НИКОГДА не стоят локальные переменные и поля класса. Т.е. я вынужден ввести 3-4 символа, прежде чем идея поймет, чего я от нее хочу (даже если у аргумента очень специфический тип), эклипс понимал даже без ввода символов.
andreycheptsov
23.02.2016 23:09Приведите пример, желательно последний билд плагина. Если это правда, разберемся.
gricom
24.02.2016 13:53После апдейта IDE и Scala плагина до последней версии всё работает идеально. Спасибо!
andreycheptsov
24.02.2016 13:56Все выяснил. Новые фичи пока доступны только в найтли билде: https://plugins.jetbrains.com/update/index?pr=&updateId=24171
Скоро будут в репозитории
Psy_Nejumi303
24.02.2016 01:34Я вот не пойму, а если купить Idea, то есть ли смысл брать WebStorm?
Borz
24.02.2016 01:39+1в IDEA можно накидать плагины, которые есть и в WebStorm, но это будет не совсем то же — в WebStorm они дополнительно тюнингованы в плане удобства. И обновления для WEB-плагинов выходят несколько раньше для WebStorm и только потом попадают в репозитарий IDEA, насколько я понял.
prigara
24.02.2016 13:12Не совсем верно, что мы "тюнингуем" плагины для WebStorm — все собирается из одного code base. Отличия, которые пользователи замечают, в основном связаны с тем, что у WebStorm более простая модель проектов по сравнению с IJ, какие-то вещи чуть проще настраивать, тк плагины работают "из коробки" и просто нет отвлекающих фич, не связанных с web-разработкой. WebStorm, как и IJ, тоже собирается переходить на релизный цикл с 3 обновлениями в год, так что надеемся, что отличий в версиях плагинов с IJ будет намного меньше.
Borz
24.02.2016 13:24Если память мне не изменяет, пару лет назад отличия видел как минимум в Command Line — в PhpStorm поддержка Zend Framework была "из коробки", а в IDEA необходимо была донастройка плагина. Как сейчас обстоят дела не знаю.
mukizu
24.02.2016 13:36По-моему плагины идентичны и где-то авторы уже тут об этом говорили.
Другие дело, что в IDEA отображается сразу все, в то время как в PyChram, например, нету всяких пунктов меню и прочих кнопочек и элементов, присущих интерфейсу Java IDE.
Dreyk
24.02.2016 01:47-1Так и не получилось у меня настроить работу в Idea для своего юз-кейса: код приложения и его окружение находится на юниксовой машине, куда есть доступ по ssh с виндовой машины. Если remote SDK для Ruby со скрипом получилось настроить, то, например модуль для Git упрямо требовал от меня исполняемого файла гита на моей машине. Тот же Netbeans в этом плане меня как-то понимал)
Ну может это у меня руки кривые, но так и не получилось, вернулся к Netbeans
relgames
24.02.2016 01:50К сожалению, качество 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 версию.Borz
24.02.2016 02:07баг заводили? тоже сталкивался с проблемой, когда только ввели это разделение
qwazer
24.02.2016 09:41+1да вроде уже поправили.
у них там серия issue в баг-трекере.
Я за этим следил: https://youtrack.jetbrains.com/issue/IDEA-149753
andreycheptsov
24.02.2016 12:18+1Исправлено: https://youtrack.jetbrains.com/issue/SCL-9900
Попробуйте обновить Scala плагин до 2.1.228.15.16
lostmsu
24.02.2016 04:27+2А что с поддержкой C#?
moscas
24.02.2016 11:32+2На платформе IntelliJ у нас теперь будет отдельная IDE для C# https://blog.jetbrains.com/dotnet/2016/01/13/project-rider-a-csharp-ide/
VasiliyKudryavtsev
24.02.2016 11:22А сделали возможности получать language level отдельного модуля из gradle?
Очень раздражает каждый раз настраивать при запуске IDE
https://issues.gradle.org/browse/GRADLE-2198
alexxz
01.03.2016 12:29Работу с CTE в базе данных не добавили?
Вероятно там какой-то слишком умный парсер запросов, который не передаёт запрос целиком....andreycheptsov
01.03.2016 12:39А можно по-подробнее?
alexxz
01.03.2016 13:02Что именно поподробнее? CTE — Common table expressions мощное надмножество над SQL. Хоть первые результаты гугления ведут на microsoft.com, современные БД ( http://www.postgresql.org/docs/9.1/static/queries-with.html ) их пркрасно поддерживают.
Однако же, я не нашел способ как запустить такой запрос для нужной мне БД (Exasol). Судя по коду ошибки, инструмент упорно отвезает все что написано перед select. Ровно так, как показано на примере из PhpStorm 9.0.2 на скриншоте.alexxz
01.03.2016 13:15Вот же, зараза! Попробовал пререключить SQL-dialect на упомянутый PostgreSQL и заработало. Стало быть SQL dialect отвечает не только за подсветку синтаксиса, но и за то, какой запрос будет отправлен.
Выходит, если писать что-то специфичное для БД, неизвестное парсеру типа: "open schema schema_name", то такой запрос будет выполнить нельзя. Значит, мой исходный вопрос будет не о CTE, а о выполнении запросов непонятных парсеру.moscas
01.03.2016 13:30Определённый диалект, который не соотвествовал запущенному запросу, определял то, какая именно часть запроса отправится серверу. Если вы выделете код, то именно он отправится серверу и диалект будет тут непричём. А если диалект, определённый для файла не понимал CTE, то он и пытался отправить серверу только запрос select b from a.
alexxz
01.03.2016 14:56Увы, в моем примере при неподходящем диалекте, даже при выделении двух строк, на сервер отправляется один только select. А если парсер вообще не понимает запроса (когда БД не из списка известных диалектов), например open schema, то вообще никакого запроса на сервер не происходит.
iZENfire
02.03.2016 01:05+1В январе 2016 IntelliJ IDEA Community Edition портировали на FreeBSD (порт java/intellij). Спасибо большое! Давно ждали.
23derevo
Фичи вкусные, хочу некоторые попробовать, но стрёмно. Андрей, а насколько релиз стабилен?
andreycheptsov
Обычно, если мы находим критические баги, мы пересобираем. Пока серьезных замечено не было. Но это превью, что-то может быть неотполированно или даже сломаться. Поэтому мы и просим тестировать как можно интенсивнее. У нас три недели чтобы исправить все дефекты. Я бы посоветовал поставить рядом с v15 и посмотреть.
extempl
Такой вопрос, немного оффтоп:
Вот есть youtrack, где в принципе, можно получить какой-то фидбек на баг и понять когда будет исправлено, какой workaround можно применить, пока не пофиксили, предоставить дополнительные логи/конфиги если нужно, собирать +1ны и т. д.
Есть
https://ea.jetbrains.com
, куда репортятся исключения прямо из IDEA — но понять абсолютно ничего нельзя. У меня, например, в последнем EAP билде есть стабильный exception, который я репортил, и видели его или нет, фиксят его или нет — не понятно.Можно ли как-то популярно объяснить, что оно и зачем-почему ответвление от багтрекера? И может стоит просто копипастить исключение и заводить issue в багтрекере?
Maccimo
Если exception reports отсылать под своей учётной записью, то можно посмотреть список всех отосланных и их статус (Unprocessed/Fixed). Но зачем для этого держут отдельный от youtrack интерфейс мне тоже непонятно.
sabio
После перехода с предыдущего EAP (3891) на Preview (4199) попап авто-комплита стал заметно более задумчивым.
Где 3891 уже давно показала бы окошко с вариантами после ввода 2 букв, 4199 надо ещё дать подумать секунду-другую.
Руки машинально уже набирают две буквы и жмут Enter. А тут либо ждать надо, либо Ctrl+Space жать.
Проблема в том, что сложно это всё чётко замерить и сравнить. Всё "сломалось" на уровне моторной памяти.
Это какая-то известная проблема? (есть тикет?) Или надо пытаться копать дальше и репортить?
andreycheptsov
А можно пример? Java или Scala?
sabio
Java
Пример чего? Как я печатаю код, а попап не появляется, и приходится насильно его вызывать Ctrl+Space-ом?
Я не представляю, как это можно показать. Разве что на видео заснять.
И конечно же оно так не всегда. Но достаточно регулярно, чтобы начало раздражать.
andreycheptsov
Насильно? Т.е. речь идет об автопопапе?
andreycheptsov
Нашел, будем фиксить: https://youtrack.jetbrains.com/issue/IDEA-151684
sabio
Спасибо!
andreycheptsov
https://youtrack.jetbrains.com/issues/IDEA?q=Affected+versions%3A+2016.1+%23Critical+%23Show-stopper+%23Major+
antonarhipov
Да ладна тебе! Шашки на голо и вставь 16ю! На самом деле, я почти каждый EAP 16й версии ставил — всё норм :)
gurinderu
Работаю уже довольно давно на 16 EAP. Вроде все стабильно
tolkkv
Многие сидят даже на EAP и все ок. А это уже Public Preview, по моему опыту можно пробовать смело. А какие именно фичи заинтересовали?
23derevo
лично меня — дебаггинг и рефакторинги для Java 8. У меня же тулсет очень-очень простой :)
tolkkv
Простой, но даже тут Idea есть чем тебя порадовать! :)
cubuanic
Фичи вкусные, но одной не хватает.
Я пока начинающий пользователь, так что может уже и есть такая фича…
Но всё же.
По команде Navigate Symbol (Alt-Ctrl-Shift + N) было бы здОрово, чтоб при открытии окна поиска поле фильтра было всегда пустое (а не сохраняло последнюю набранную строку, как сейчас) и сразу же, пока ты еще не начал ничего набирать, открывался список из последних ранее посещенных (набранных) методов/символов.
Для совместимости (тем кто привык к текущему поведению) можно эту фичу сделать отключаемой через настройки редактора.
Есть возможность сейчас сделать такое?
Если нет, можно ли записать в фиче-реквесты — andreycheptsov?
andreycheptsov
Звучит интересно. Да фича-реквест приветствуется: https://youtrack.jetbrains.com/issues/IDEA. Чем подробнее, тем лучше.