company_banner

IntelliJ IDEA 2018.1 — улучшенный анализ кода, поддержка частичных коммитов Git, Android Studio 3.0 и многое другое

    Привет, Хабр! Недавно мы запустили IntelliJ IDEA 2018.1 – первое большое обновление в этом году. В нем вас ждет множество важных улучшений: поддержка частичных коммитов Git, отображение внешних аннотаций в коде, функциональность, добавленная из Android Studio 3.0, и многое другое. Ниже мы расскажем об этом подробнее, а попробовать новую версию можно здесь.

    image

    Улучшения в автодополнении кода


    Теперь автодополнение поддерживает приведение типов в цепочках вызовов Stream API. Автодополнение кода предлагает не только вариант дополнения, соответствующий имеющемуся вызову filter(String.class::isInstance), но также и вариант с автоматическим приведением типа.

    image

    В новом релизе также было улучшено постфиксное автодополнение кода. Теперь IDE позволяет создавать свои собственные шаблоны Java, а также изменять и переименовывать предопределенные шаблоны Java, в разделе настроек Preferences | Editor | General | Postfix Completion.

    image

    image

    Улучшенный анализ порядка выполнения


    Мы улучшили анализ порядка выполнения кода: теперь он способен определять более широкий спектр проблем в коде. Прежде всего, IDE теперь отслеживает отношения между переменными, такие как «больше чем» и «меньше чем». При сравнении переменных во всех возможных ветвях кода IDE определяет условия, которые всегда являются истинными (или ложными).

    image

    Также IDE теперь обнаруживает незавершенные цепочки Stream API.

    image

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

    image

    Также IDE предупреждает об изменении неизменяемых (immutable) коллекций.

    image

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

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

    image

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

    image

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

    image

    Теперь содержимое массивов можно сортировать в алфавитном порядке.

    image

    Если в коде присутствует конструктор копирования, копирующий не все поля класса, будет показано уведомление. Обратите внимание, что IDE не учитывает поля с модификатором типа transient как обязательные для копирования.

    image

    Новая IntelliJ IDEA теперь предупреждает вас об очевидно избыточных вызовах close() и предоставляет быстрое исправление (quick-fix) для их удаления.

    image

    Новая версия включает в себя инспекции и быстрые исправления, предназначенные специально для Java 9. Для сервисов, загружаемых при помощи ServiceLoader, IDE проверяет наличие объявления в файле module-info.java и в случае его отсутствия предлагает быстрое исправление.

    image

    При наличии в module-info.java упоминания отсутствующего класса IDE теперь предлагает создать его. То же самое относится и к отсутствующим экспортируемым пакетам. (IDE создает пакет с классом в соответствующей директории, так как экспортировать пустые пакеты в Java 9 нельзя.)

    image

    Теперь, если возможные проблемы в выбранной области видимости решаются различными способами, рекомендуемые быстрые исправления можно сгруппировать по типу. Для этого нажмите кнопку Fix partially в окне инструментов Inspection Results.

    image

    Поддержка аннотаций Tag для JUnit 5


    Новая IntelliJ IDEA 2018.1 теперь поддерживает аннотации Tag для JUnit 5 — их можно включать в область теста, а также в помеченные классы и методы. В диалоге Run/Debug Configuration выберите вариант Tags (JUnit 5) из раскрывающегося списка Test kind. Для фильтрации тестов по идентификатору используйте поле UniqueId.

    image

    Генерация кода


    При создании тестового класса IntelliJ IDEA по умолчанию добавляет «Test» в конец названия класса. Теперь можно настроить шаблон тестового класса так, чтобы «Test» добавлялось в начало его названия. Настроить это можно в Preferences | Editor | Code Style | Java | Code Generation.

    Отладчик JVM


    Новое действие Throw Exception позволяет генерировать исключение из определенного места в программе без изменения кода. Действие доступно из меню Run | Throw Exception или же из контекстного меню фрейма во время сессии отладки.

    image

    Вывод трассировки стека для точек прерывания


    Новая IntelliJ IDEA 2018.1 позволяет выводить в консоль трассировку стека для точек прерывания. Для этого нужно включить настройку Stacktrace в диалоговом окне Breakpoints. IDE также позволяет видеть в журнале консоли трассировки стека для нескольких точек прерывания одновременно.

    image

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

    image

    Компилятор Java


    На страницу Java Compiler в настройках (Preferences | Build, Execution, Deployment | Compiler | Java Compiler) добавлен новый флажок Use --release option for cross-compilation (Java 9 and later), который установлен по умолчанию. Если нужно использовать с Java 9 параметры --source и --target, одновременно выполняя линковку с классами Java 9, этот флажок можно снять.
    Также теперь можно использовать определенную версию компилятора ECJ. В раскрывающемся меню Use Compiler выберите Eclipse и укажите путь к jar-файлу компилятора.

    Редактор


    В IntelliJ IDEA можно добавлять к коду внешние аннотации, даже когда прямая аннотация исходного кода невозможна (например, в случае с классами библиотек). Настроить аннотации можно в файлах annotations.xml, хранящихся за пределами исходного кода.

    Раньше в IDE показывался только значок «@» на полях возле строки кода с внешней аннотацией, но теперь внешние аннотации показываются непосредственно в коде.

    image

    IntelliJ IDEA теперь позволяет вам видеть автоматически выведенные аннотации NotNull и @Nullable прямо в исходном коде (а не только в виде значка на полях рядом с соответствующей строкой, как раньше). Для этого установите флажок Show inferred annotations inline в Preferences | Editor | General | Appearance.

    image

    Если с вашим кодом что-то не так, новая IntelliJ IDEA 2018.1 поможет вам быстро обнаружить проблемы. IDE теперь подсвечивает свернутые участки кода, содержащие ошибки или предупреждения, и окрашивает их цветом, соответствующим статусу валидации.

    image

    Также свернутые участки кода подсвечиваются при поиске по текущему файлу, если они содержат совпадения.

    image

    Когда вы перемещаете курсор на идентификатор и IDE подсвечивает его вхождения, теперь вы можете использовать сочетания «Alt + Прокрутка вниз» и «Alt + Прокрутка вверх» для перехода к следующему или предыдущему вхождению, соответственно.

    image

    Конфигурация проектов


    Для конфигураций Application и Spring Boot в диалоге Run/Debug Configurations добавлена новая опция Include dependencies with “Provided” scope. Функция позволяет при необходимости добавлять «provided»-зависимости в classpath. Обратите внимание, что для приложений Spring Boot опция Include dependencies with “Provided” scope включена по умолчанию.
    Новый релиз также позволяет изменять полные имена нескольких модулей одновременно, используя новое действие Change Module Names…, доступное из контекстного меню диалога Project Structure.

    image

    Улучшенная замена


    В IntelliJ IDEA 2018.1 можно выполнять предварительный просмотр результатов замены по регулярному выражению в окне Replace in Path.

    image

    Улучшенный структурный поиск


    Мы улучшили структурный поиск (Structural Search), чтобы находить вызовы методов с аннотациями было проще. В диалоге Structural Search можно создать собственный шаблон поиска или выбрать один из существующих. В приведенном ниже примере при структурном поиске будут найдены все вызовы методов, помеченных как @Deprecated.

    image

    image

    Groovy


    В контекстном меню Refactor | Convert to @CompileStatic доступно новое действие по рефакторингу для файлов и модулей Groovy.

    Действие Convert to @CompileStatic добавляет аннотации к каждому классу Groovy в области действия аннотации @CompileStatic.

    image

    Android


    Вот несколько долгожданных новостей для разработчиков на Android! Новая IntelliJ IDEA 2018.1 включает в себя изменения из Android Studio 3.0 и множество новых возможностей. Самые важные из них:

    Прежде всего, IntelliJ IDEA теперь поддерживает последние API Android Oreo и позволяет создавать приложения Android как на Java 8, так и на Kotlin.

    Также в IDE теперь есть поддержка Gradle 3.0.0 для приложений Android.

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

    image

    Теперь вы можете создавать иконки приложений при помощи обновленного инструмента Image Asset Studio. Щелкните правой кнопкой папку res в проекте Android и выберите New | Image Asset в контекстном меню. В окне Asset Studio выберите тип иконки Launcher Icons (Adaptive and Legacy).

    image

    Теперь IDE поддерживает сборку приложений Instant Apps — облегченных приложений Android, запускающихся без установки. Прежде чем приступить к сборке приложений Instant Apps, убедитесь, что у вас установлен Instant Apps Development SDK. Чтобы просмотреть список установленных инструментов SDK, откройте Preferences | Appearance & Behavior | System Settings | Android SDK и перейдите на вкладку SDK.

    image

    image

    Новое окно инструментов Device File Explorer показывает структуру файлов и директорий на вашем устройстве или в эмуляторе Android. Используйте окно Device File Explorer для просмотра, копирования и удаления файлов на устройстве Android. Открыть его можно из меню View | Tool Windows | Device File Explorer.

    image

    В новую IntelliJ IDEA 2018.1 также включен Android Profiler — новый набор инструментов профилирования, который в реальном времени предоставляет данные об использовании вашим приложением процессора, памяти и сети.

    image

    Для получения более подробной информации ознакомьтесь с заметками к релизу Android Studio.

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


    Одно из главных нововведений релиза — поддержка частичных коммитов Git (git add -p). Теперь IntelliJ IDEA позволяет ассоциировать фрагменты кода со списком изменений. Создайте список изменений, поместите туда все необходимые фрагменты кода и выполните коммит. Теперь IDE будет включать в коммит только выбранные изменения из файла и пропускать все остальные.

    Чтобы добавить требуемые фрагменты кода в коммит, используйте флажки на полях раздела Diff в диалоговом окне Commit Changes.

    image

    Для перемещения фрагментов кода между списками изменений откройте контекстное меню раздела Diff в диалоговом окне Commit Changes, затем нажмите Move to another changelist.

    image

    В качестве альтернативного варианта IDE позволяет добавлять фрагменты кода из редактора кликом по маркеру изменения на полях.

    Новая IntelliJ IDEA 2018.1 также позволяет включать и выключать группирование локальных изменений. Для этого перейдите на вкладку Local Changes в окне инструментов Version Control и найдите новую иконку Group by. С ее помощью можно группировать локальные изменения по директории, модулю или репозиторию. Можно выбрать как один вариант группирования, так и все три сразу.

    image

    Ряд улучшений получила вкладка Log, доступная при работе с Git и Mercurial VCS. Переработан дизайн раздела Commit Details во вкладке Log. Теперь можно быстро перейти к коммиту в Log, кликнув по соответствующему хэшу коммита в разделе Commit Details.

    image

    Повышена производительность отображения вкладки History for revision, являющейся частью интеграции с Git. Вкладка также получила обновленный интерфейс.

    image

    Из всплывающего меню Git Branches во время выполнения процесса перемещения (rebase) теперь доступны действия Abort Rebase, Continue Rebase и Skip Commit.

    image

    Добавлено новое предопределенное сочетание клавиш для выполнения действия Commit and Push… из диалогового окна Commit Changes. Используйте Alt + Cmd + K (в macOS) или Alt + Ctrl + K (в Windows или Linux).

    Кроме того, диалоговые окна Clone Repository для Git и GitHub были объединены в одно. В новом диалоговом окне Clone Repository теперь доступно автодополнение названий репозиториев GitHub. Просто войдите в аккаунт GitHub, используя кнопку Log in to GitHub...

    image

    Также удалена библиотека SVNKit. Подробнее читайте в блоге.

    Улучшения в Docker Compose


    Усовершенствована схема работы с Docker Compose. Диалоговое окно Run/Debug Configurations для конфигурации запуска Docker Compose было улучшено для обеспечения работы важных особенностей Docker Compose, таких как поддержка нескольких файлов compose и возможность выбора службы для запуска.

    Плагин Docker теперь поддерживает использование нескольких файлов Docker Compose и учитывает не только docker-compose.yml, но также и опциональный файл docker-compose.override.yml. Добавить docker-compose.override.yml, как и любой другой файл переопределения, можно сразу же после основного файла конфигурации.

    image

    Для файлов Docker Compose в обновленном диалоговом окне Run/Debug Configurations теперь можно задавать переменные окружения. Кроме того, если вы хотите использовать параметры командной строки --build, установите флажок Force build.

    После выбора конфигурационных файлов в конфигурации запуска Docker Compose плагин Docker позволяет вам выбрать набор запускаемых служб.

    Улучшенная поддержка Spring Boot


    Добавлена поддержка инструментов разработки Spring Boot.

    Новая иконка на полях позволяет открывать методы с аннотациями @RequestMapping при помощи нового REST-клиента.

    Прочее


    • IDE автоматически подгоняет графику под размеры окна.
    • Теперь IntelliJ IDEA может автоматически импортировать конфигурацию оформления кода при импорте проектов Eclipse.
    • Доступно новое действие Open in terminal, запускающее встроенный терминал по пути выбранной папки.
    • Улучшена поддержка HiDPI при работе с несколькими мониторами в Windows.


    JDK обновлен до версии 1.8.0_152-release-1136-b16, в которую интегрированы следующие исправления:
    • Итоговое исправление проблемы при запуске IDE под 32-битными версиями Windows  JRE-590.
    • Исправлено расположение окон композиции IME  JRE-668,  JRE-669.
    • Исправлена проблема с отображением интерфейса после переключения параметра DPI  JRE-660.


    В новой IntelliJ IDEA 2018.1 мы полностью переработали подсистему фокуса ввода. Уже исправлено множество проблем, связанных с фокусом ввода, например: всплывающее окно Search Everywhere теперь может быть в фокусе, окно инструментов Project теперь получает фокус при вызове из всплывающего окна Select In, а также многие другие проблемы. Более подробная информация — по этой ссылке. Мы считаем, что новая подсистема фокуса ввода позволит нам значительно быстрее исправлять относящиеся к фокусу ввода ошибки.

    Спасибо, что присылаете нам сообщения об ошибках — так держать!

    И, наконец, встроенный исполняемый файл SSH теперь совместим с новыми стандартами криптографии в GitHub. Подробности смотрите здесь.

    Скачать обновление можно через Toolbox App либо с официального сайта.

    Мы всегда рады вашим отзывам — пишите нам в баг-трекере, в Twitter или в комментариях ниже.

    Программируйте с удовольствием!
    JetBrains 128,88
    Делаем эффективные инструменты для разработчиков
    Поделиться публикацией
    Похожие публикации
    Комментарии 39
    • +1
      И по какой-то неизвестной причине 2018.1 жутко тормозит на MacOsX — и даже 2018.1.1 (пока не могу сформулировать причины / как воспроизвести, чтобы зарепортить багу, и та же эта бага IDEA-189324 или нет — пока не ясно)
      • +2
        Самый простой способ прислать нам CPU snapshot. Вот здесь подробнее, как репортить такие проблемы: intellij-support.jetbrains.com/hc/en-us/articles/207241235-Reporting-performance-problems
        • 0
          Damn! Article is closed for comments.

          Поставил yourkit, добавил агента в IDEA — агент пишет логи (т.е агент подключился) — но при этом никаких Tools / Start CPU Usage Profiling
          • 0
            В кастомных .vmoptions должна быть строчка вида "-agentlib:yjpagent=delay=10000,probe_disable=*". Если это Community Edition, нужно скопировать yjpagent библиотеку из YourKit инсталляции в IDE bin директорию (нужны файлы libyjpagent.jnilib и libyjpagent.dylib) и перезапустить IDE.

            Так же можно попробовать 2018.1.2 EAP (или скачать из Toolbox App), где были сделаны некоторые улучшения производительности.
            • 0
              У меня IDEA CE — поставил YourKit — добавил строчку как вы сказали и как сказано в инструкции — результат — 0.

              Однако, после обновления до 2018.1.2EAP тормоза действительно исчезли
              • 0
                Спасибо за информацию!

                Если это Community edition, то чтобы снять снапшот, нужно подключиться к IDEA процессу из YourKit профайлера (после добавления библиотеки агента yjpagent).
          • 0
            сегодня обновился и тоже заметил некоторые подтормаживания.
            похоже, что во время запущенного проекта Ангулар после нажатия ctr+s
            • 0
              Присылайте, пожалуйста, CPU snapshots. У вас проект с Angular CLI? Если да, то какая версия CLI? Спасибо!
            • 0
              У меня после обновления стал сильно тормозить компонент Database. Скроллинг при просмотре результата какого-либо SQL-запроса регулярно подвисает на несколько секунд (тоже MacOS X)
            • +2
              большое спасибо за автоподстановку, когда пишешь
              filter(String.class::isInstance;)
              и после ";" само перепрыгивает в
              filter(String.class::isInstance);

              ну очень не хватало
              • +1
                А когда будут кастомные шаблоны postfix completion в PhpStorm?
              • +4
                Восхищен тем, что такие мегасложные проги становятся еще лучше. Отличный инструмент, удовольствие от использования.
                • 0

                  И до сих пор!
                  В 2005м была 4 или 5ая версии, как время летит и размеры растут :)

                  • 0
                    ктати говоря, качественные скачки, как и везде, довольно редки. версии двух-трех летней давности не особо хуже.
                    главные фичи появились почти сразу. потом лишь понемногу улучшались.
                • 0

                  А можно настроить шрифт для "именованных параметров" и внешних аннотаций?

                  • 0
                    Пока, к сожалению, нельзя, поскольку IDE использует шрифт указанный для UI.
                  • 0
                    Часто использую ваши редакторы кода и они очень нравятся, рад что они не стоят на месте. Только, почему IDEA иногда помечает используемые участки кода как неиспользуемые?
                    • +2

                      Покажите конкретный пример

                      • 0
                        i.imgur.com/uahbAcM.png
                        Например. Как видно, таких локаторов куча.
                        • 0
                          Видимо, она не видит write в эти поля.
                          Там есть quick-fix, чтобы научить IDEA вашей аннотации @FindBy. Он должен помочь.
                      • 0

                        Да есть такое. Имя метода горит серым, Хотя когда щелкаешь по имени метода он перескакивает на участок кода с использованием этого метода. Но в процессе работы все исправляется и метод выделяется как используемый. Думаю просто IDEA не успела проиндексировать этот бин

                      • +1

                        А GWT приложения поверх томката только у меня требуют теперь ручного kill Tomcat (Ctrl-F2) при перезапуске сервера (через Shift-F10)?


                        Собирался добраться до багтрекера, но как то не добрался.

                        • 0
                          А операционная система какая? Почему спрашиваю — когда-то давно при старте Идеи всегда выдавался ворнинг на проблемы с киллом под линуксом, в ворнинге была ссылка на тикет, я проделал инструкции оттуда и все починилось. Вроде бы это была проблема линукса, а не идеи
                          • 0
                            7 (tar с сайта) и 8 (tomcat8 + tomcat8-user) томкат, Debian 9.
                            • 0
                              Можешь поделиться ссылочкой?
                              • 0
                                Нет, не могу. Но помню, что там был какой-то нереально простой воркэраунд. По-моему, сделать баш-скрипт из одной строчки которая запускает Идею, и дальше всегда запускать Идею из консоли.
                            • 0
                              Нет, не только у Вас. С некоторыми версиями Tomcat, действительно приходится «убивать» принудительно.
                            • –2
                              Вывод трассировки стека для точек прерывания

                              Перевод устоявшихся терминов — не тот случай, когда стоит изобретать велосипед.
                              Breakpoint это «точка останова», wikipedia в помощь.

                              • 0
                                Про Kubernetes ничего не написали
                                www.jetbrains.com/idea/whatsnew/#v2018-1-kubernetes
                                • 0
                                  Никто под awesome-wm не сидит? У меня с последних версий 2017 и 2018 все окна работают плохо, их позиции на экране прыгают, в основном все окна, контекстные меню и его подпункты открываются слева вверху в углу. Кто нибудь встречал такое или я один единственный?
                                  • 0
                                    А курсор мышачий под линуксом наконец починили?
                                    порой залипает в одной форме, притом по разному.
                                    особенно неудобно когда в виде I.
                                    • 0
                                      Поддержка частичных коммитов Git будет в следующих версиях Android Studio??
                                      • 0
                                        Очень вероятно, что это попадет в Android Studio 4.
                                      • 0
                                        image
                                        • 0
                                          Пара советов, для решения проблем с лаганием IDEA, может кому пригодятся:

                                          1.Macos. Лагает скроллинг и UI в целом.
                                          Оказалось уже была такая проблема, связанная с обновлением JDK, в нашем случае как раз он представлен выше (JDK обновлен до версии 1.8.0_152-release-1136-b16)
                                          В настройках есть опция, позволяющая изменить JDK, Cmd+Shift+A > Switch IDE Boot JDK.
                                          Я выбрал другую JDK и проблемы с лаганием скроллинга пропали.

                                          2.Linux (Ubuntu), фризы системы (по логам Idea увидел много RW локов на файловую систему при периодическом авто сохранении настроек settings.jar)
                                          Отключил apparmor и на удивление Scala plugin, который почему-то вызывался в Java проекте.
                                          Также некоторые коллеги сказали, что у них такие же лаги при использовании Upsouгсe плагина.
                                          • 0
                                            в 2018.1.1 уже прилетел фиксоний лагов

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

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