company_banner

IntelliJ IDEA 2016.3: Java 8 и ES6, улучшенные отладчик и интерфейс, и многое другое

    Привет, Хабр!

    Спешу поделиться хорошей новостью. Сегодня стала доступна IntelliJ IDEA 2016.3 – очередное крупное обновление нашей (и, хочется надеяться, вашей) любимой Java IDE. Читайте ниже об основных изменениях и нововведениях.



    Java 8


    С релиза Java 8 IntelliJ IDEA предоставляет инспекции, помогающие писать корректный и идиоматический Java 8. В IntellIJ IDEA 2016.3 эти инспекции были серьезно переработаны, расширив область применения за рамки тривиальных примеров. Теперь, если вы нажмете Alt+Enter внутри нетривиального for цикла, IDE предложит переписать его с использованием Stream API. При этом IDE будет опираться на практически все доступные API: count, sum, flatMap, map, mapToInt, collect, filter, anyMatch, findFirst, toArray и другие. Примечание: похожая инспекция доступна для Kotlin. Также IDE предложит заменить соответствующие конструкции на Map.computeIfAbsent, Collections.removeIf или ThreadLocal.withInitial там, где это имеет смысл.



    Scala


    Scala.js


    Обновленный Scala плагин теперь предоставляет навигацию и автодополнение для js.Dynamic – на основе переменных и методов, объявленных в JavaScript библиотеках или файлах проекта.

    scala.meta


    Также плагин получил поддержку scala.meta. IntelliJ IDEA поддерживает “новые” макро-аннотации и предоставляет помощь при редактировании scala.meta quasiquotes.

    JVM отладчик


    Class-level Watches


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



    Memory View


    Этот новый плагин позволяет исследовать объекты в памяти JVM при отладке кода. Плагин показывает количество объектов в памяти, с группировкой по имени класса. По мере того как вы перемещаетесь во время отладки по коду, колонка Diff показывает как это количество меняется. Двойной клик на классе откроет диалог с объектами. Также плагин позволяет отслеживать stacktraces создания объектов.



    Интерфейс


    Подсказки имен параметров методов


    Опция Parameter Hints (включена по-умолчанию) показывает имена параметров методов, если в качестве аргументов используются литералы или null. Такие подсказки делают код более читаемым. Если подсказки для каких-то методов избыточны, вы можете попросить IDE не показывать их.



    Семантическая подсветка


    Ранее появившийся в KDevelop и некоторых других IDE, Semantic highlighting теперь доступен в IntelliJ IDEA. Эта опция добавляет в стандартную подсветку уникальные цвета для каждого параметра и локальной переменной. Эта опция выключена по умолчанию, но может быть включена в SettingsEditorColors & FontsLanguage DefaultsSemantic highlighting.



    Иконки


    Иконки файлов и папок стали плоскими. Новые иконки стали четче и менее отвлекающими.

    Инструменты сборки


    Delegate IDE build/run actions to Gradle


    Эта новая опция позволяет делегировать такие действия IDE как Build, Build Artifacts и Run напрямую Gradle. Когда эта опция включена, IDE вместо стандартных действий вызывает соответствующие Gradle-таски. Включить эту опцию можно в SettingsBuild, Execution, DeploymentBuild ToolsGradleRunnerDelegate IDE build/run actions to Gradle.

    Gradle Composite Builds.


    Эта новая мощная опция позволяет заменить любую из зависимостей проекта другим проектом. Эта опция требует Gradle 3.1 или старше.

    Polyglot Maven


    Теперь pom.xml можно писать на Groovy, Scala, Ruby и других языках. (Примечание: подсказки при редактировании pom.xml доступны только для Groovy.)

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


    Log для Git и Mercurial


    Окно Log снова переработано, в этот раз – с целью повышения эргономичности и скорости работы. Панель подробных изменений сместилась вправо, освободив больше места. Описание изменений теперь выровнены и более читаемы. Метки с тегами и названиями веток сместились вправо и отображаются более элегантно. Строка поиска сохраняется между запусками IDE. Для Git поиск по тексту, автору и пути стал гораздо быстрее.

    Merge и Diff


    Окно Merge теперь может разрешать конфликты автоматически там, где это возможно. В таких случаях слева будет отображаться иконка Resolve с волшебной палочкой. Также мы добавили маркеры, отражающие изменения, которые будут применены поверх базовой ревизии. Кроме этого, и Merge и Diff теперь предлагают подсветку синтаксиса и навигацию для “не-базовых” ревизий.



    Также добавлено управление удаленными репозиториями.

    JavaScript


    ECMAScript 6


    IntelliJ IDEA позволяет автоматически конвертировать переменные объявленные var в const/let в зависимости от семантики их использования.



    Для всех вызовов require, IDE предложит автозамену на import.



    Для всех классов, объявленных с помощью функций и цепочек prototype, IDE предложит автозамену на полноценные классы.



    TypeScript


    Исправлена проблема переименования наследуемых методов.

    Flow


    Теперь, если вы укажете Flow в качестве версии JavaScript, а также укажете путь к дистрибутиву Flow, заработают соответствующие инспекции (и в некоторых случаях автодополнения).

    Серверы приложений


    TomEE 7


    Поддержка TomEE была обновлена до последней версии.

    Liberty


    Теперь IDE позволяет запускать loose applications. Для этого на закладке Deployment в окне WebSphere Run/Debug configuration вместо артефакта выберите Loose application….

    React Native


    Теперь запускать и отлаживать React Native приложения можно для OS X и Android прямо из IDE.



    Android


    Blueprint



    Это новый режим в Designer, который скрывает визуальные элементы компонентов и отражает только их структуру.

    Constraint Layout


    Это мощный новый layout manager, который позволяет создавать сложные структуры интерфейса, используя плоскую структуру.

    Instant Run


    Согласно информации от команды Android Tools, обновление исправляет большое количество проблем, связанных с работой Instant Run. Теперь Instant Run должен работать более стабильно.

    APK Analyzer


    Эта утилита позволяет анализировать содержимое APK.

    Базы данных


    Редактирование нескольких ячеек


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

    Пакетная отправка изменений


    Теперь изменения в таблице отправляются не сразу, а по нажатию Ctrl+Enter (Cmd+Enter для OS X) – целыми пакетами. Используйте Undo, чтобы откатить неотправленное изменение.

    Поиск использований


    Теперь вы можете искать использование объектов базы данных в исходном коде других объектов баз данных. Например, вы можете узнать, какие процедуры, функции, отображения и триггеры используют выбранную таблицу.



    Clouds


    Google Cloud Tools


    Google представила собственный плагин для деплоя приложений в Google Cloud. Позже этот плагин полностью заменит плагин JetBrains для работы с Google App Engine.

    OpenShift Origin (V3)


    Плагин для работы с OpenShift теперь поддерживает новую версию OpenShift.

    Toolbox App


    Не забудьте взглянуть на Toolbox App — новое десктопное приложение для удобной установки и обновления любых IDE от JetBrains.



    Это вкратце все, что команда успела сделать за 4 месяца, не считая багфиксов.

    Подробности, скриншоты и видео о релизе можно найти на странице What’s New (на английском). Там же можно скачать обновление.

    Как всегда, буду рад ответить на любые вопросы.
    JetBrains 107,45
    Компания
    Поделиться публикацией
    Похожие публикации

    Вакансии компании JetBrains

    Комментарии 141
    • +1
      Не очень понимаю устройство вашей главной IDE. В ее поставку уже входит функциональность WebStorm или нет? Вроде открывает проекты на webpack, babel, es6, но в тоже время видит не все, что видит WebStorm, например нодовские плагины.

      Спрашиваю потому, что для поддержки Ruby она требует установки соответствующего плагина и без него не видит ничего.

      На сколько полно Ultimate версия поддерживает функциональность ваших сторонних IDE?
      • +1
        В ее поставку уже входит функциональность WebStorm или нет?

        Да. Но Node.js и Angular доступны как отдельные бесплатные плагины для Ultimate. Тоже самое применительно к Ruby, PHP и Python.
        • 0

          Есть связанный вопрос. Я недавно проапгрейдился с perpetual license на Ultimate текущую. И там есть нелохая скидка когда вот так лицензию меняешь. Была опция приобрести пакет из всех продуктов Intellij, но я пожадничал.


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

          • +1
            Я бы посоветовал задать вопрос напрямую sales@jetbrains.com. Уверен они быстро и подробно все расскажут.
            • +2
              Если коротко, то предусмотрены.
              • 0

                Спасибо :). Сразу за оба ответа :).

          • +1

            входят, но обновления идут с небольшими запозданиями. Например новые фичи для работы с базами данных сперва появятся и обкатаются в DataGrip, а чуть позже в IDEA Ultimate.

            • 0

              А с переходом на rolling-релизы это запоздание не исчезло? Сейчас в основном использую PyCharm, но хочется попробовать Idea для react-native. Насколько сейчас это запоздание актуально? Стоит ли пересесть полностью на идею?

              • +1

                вроде бы не исчезло, но я сужу по EAP версиям тех же DataGrip и IDEA

          • +5
            Спасибо за такой удобный инструмент для работы
          • 0
            Приветствую! Сразу вопрос — а возможно ли как то переключиться на старый вид иконок? Непривычно(

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

            Ну и спасибо за новую версию) Функциональности отмены коммита ждал три месяца, как начал активно пользоваться Windows для разработки. На Linux все же из консоли достаточно просто отменить коммит, тем более она всегда под рукой.
            • +3
              Иконки переключить на старые нельзя. Непривычно, это правда. Однако привыкнуть можно очень быстро (из своего и опыта коллег).

              По поводу тестов, наверное будет проще посмотреть по коду: https://github.com/JetBrains/intellij-community/blob/master/platform/platform-tests/testSrc/com/intellij/openapi/editor/EditorMultiCaretTest.java
              и другие тесты: *EditorMultiCaret*Test
              • +2
                О! Спасибо! Почему то в упор их не мог найти. Ну, теперь то будет чем заняться скучными вечерами)
                • 0

                  Извините, но многие тоже недовольны: https://youtrack.jetbrains.com/issue/IDEA-162686 Зачем вообще вы их решили поменять?

                  • 0

                    Их грязный цвет просто ужасен (в отличие от 2016.2).

                    • +1

                      Я кажется, понял. Они ужасны при включенной теме darcula. Но без даркулы — никуда.

                    • 0
                      Я, как автор таска https://youtrack.jetbrains.com/issue/IDEA-162686, прошу проголосовать неравнодушных за возврат иконок.
                      Для меня (как и для минимум еще 19 не поленившихся проголосовавших человек) новые иконки слишком плохи: в основном на них тяжело концентрировать внимание, особенно это критично при попытке отличить папки и пакеджи. К тому же иконки части типов файлов теперь почти неразличимы.

                      Что мешает добавить опцию для переключения между старыми и новыми иконками?
                      • 0
                        Спасибо за конструктивный тикет. Уверен команда UI обратит на это внимание. Если главную проблему решить, делать два сета иконок не придется.
                        • 0

                          А зачем делать два сета иконок, если старый у вас уже был, а новый уже есть?

                          • 0
                            Проблема не в том что он уже был, а то что придется любые новые иконки поддерживать (т.е. рисовать) для двух сетов, а не одного. Тоже самое справедливо при изменении иконок.
                    • +2
                      На Linux все же из консоли достаточно просто отменить коммит, тем более она всегда под рукой.

                      Что мешает поставить коммандлайновый гит на винде? Там всё так же работает. Какой-нибудь git reset --hard HEAD^ без проблем выполнится.

                      • 0
                        Что мешает поставить коммандлайновый гит на винде?

                        Поставить командлайновый гит на винде ничего не мешает. Мешает большое количество инструментов вместо одного. На Linux я могу пойти по ssh на удаленный сервер, написать и исполнить маленький AWK скрипт по обработке логов/данных, закоммитить или же отменить изменения, собрать проект используя одну и туже консоль. В Windows к сожалению не так, приходится для каждой задачи использовать свой инструмент — Putty, Cygwin, Git Bash, IntelliJ IDEA. Получается слишком много окон под каждую задачу. А это несколько путает и мешает. Поэтому уменьшение количества инструментов, в которых я работаю одновременно — благо.

                        Еще одна проблема, которая есть на Windows — эстетическая. Почему то все терминалы, которые я видел, вызывают у меня некое отторжение. Шрифты не настроить, цветовую схему не настроить. Кошмар, да и только :)

                        В общем то, я почти уверен, что большую часть проблем можно решить перейдя на Windows 10 и используя Linux-подсистему. Но есть два но:
                        1) Я не проверял работоспособность данного решения для всех своих задач. Для части это работает, если верить информации в интернетах.
                        2) На рабочих компьютерах это не всегда возможно. Я сейчас использую Windows 7 на рабочем компьютере и обновление пока не светит.
                        • +2

                          Из git bash можно и зайти по SSH и выполнить скриптик на AWK. IDEA можно настроить использовать именно его вместо cmd.exe (хотя в последней версии с этим проблемка, см. мой комментарий). Шрифты и цвета там настраиваются.


                          Ощущения все равно немного не те, конечно (tmux, например, не работает), но уже почти можно жить. Под Win7 все благополучно работает, не надо ждать милостей от MS.

                          • +1
                            Рекомендую попробовать ConEmu для Windows, умеет запускать из под себя любую среду — git bash, cmd, power shell, wls bash etc.
                            Есть возможность поставить нормальные шрифты.
                            Больше у меня нет проблем с зоопарком окон
                        • 0

                          про иконки. Вероятно это вам поможет: https://plugins.jetbrains.com/plugin/9281?pr=idea

                        • 0
                          andreycheptsov, а что со сьеррой?
                          • +1
                            Поддерживается с 2016.2.5
                            • 0
                              можно смело обновляться?
                              • +1
                                Есть мелкие баги, но ничего серьезного. Основные проблемы были пофикшены.
                                • +1
                                  У нас много кто на Sierra обновился, в том числе и я. Очевидных проблем нет, все работает.
                              • +1

                                Обновился на сиерру почти сразу после выхода. Всплыла проблема с прокруткой на тачпаде в Java-приложениях и Idea в частности. Ребята из JetBrains очень оперативно выпустили пропатченную версию JDK, за что им большое спасибо. Чуть позже они включили эту версию JDK в сами IDE. Сейчас проблем на сиерре не наблюдаю.


                                PS как сменить версию JDK на маке

                              • +1

                                Планируется ли дальше улучшать алгоритм для git diff и git merge?


                                Например часто встречается проблема при мердже двух блоков кода когда последняя скобка не входит в дифф:


                                <<<
                                if(true) {
                                    foo()
                                ===
                                for(int i : ints) {
                                    boo()
                                >>>
                                }

                                Это очень мешает визуально и и не позволяет корректно включать оба блока кода. Но такую ситуацию можно разрешить имея AST. Ведется ли работа в этом направлении?

                                • 0
                                  По поводу второго: проще всего завести 2 папки через `git worktree` или аналог и просто не переключаться между ветками. Заодно и кеши компиляции сохранятся.

                                  По поводу первого: в будущем да, но пока не ясно когда.
                                  • 0
                                    По поводу второго

                                    Это относится к другому комментарию. Прошу прощение.
                                • +1
                                  В Black Friday 2016 будете принимать участие?
                                • +6
                                  Коллеги, большое спасибо вам за проделанную работу, вы очень крутые!!!
                                  • 0
                                    Спасибо! Передам коллегам :-)
                                    • +1
                                      передайте плес им максимум респект за поддержку скала-макросов
                                  • +9
                                    Так-то у меня характер нордический, не сентиментален и скуп на комплименты, но IDEA это что-то уникальное. Каждый раз, когда думаешь, что дальше некуда, и надеешься, что спустя 7 лет узнал хоть половину фич, прилетает ушат обновлений и ты опять хлопаешь глазами: «Хуясе, и так можно?!».
                                    • +1
                                      Спасибо! Очень приятно было читать :-)
                                    • +4
                                      За плоские иконки отдельное спасибо, давно ждал!!!
                                      • 0

                                        Простите, но есть ли какие то новости по поводу следующего бага?
                                        https://youtrack.jetbrains.com/issue/IDEA-157100


                                        Уже почти полгода висит :(

                                        • 0

                                          Путь к кастомному терминалу теперь надо отдельно настраивать для каждого проекта, зачем? И то иногда слетает, это нормально?

                                          • 0

                                            о, и так можно?


                                            ЗЫ: попробуйте прописать настройки только для Default Settings (File -> Other Settings -> Default Settings...)

                                            • 0
                                              попробуйте прописать настройки только для Default Settings

                                              Это-то как раз и не работает:( Открыл Default settings, выставил путь к git-bash.exe, сохранил, создал новый проект, открыл терминал — вижу cmd.

                                        • НЛО прилетело и опубликовало эту надпись здесь
                                          • 0
                                            Если Вы купите подписку на месяц, то по истечении ее срока пользоваться IDE будет нельзя. Подписка на год дает возможность пользоваться IDE (версией на момент покупки) и после того, как срок подписки истек.
                                            • +1
                                              Если покупать по-месячно в течении года, вы получаете возможность пользоваться IDE (версией на момент покупки) и после того, как срок подписки истек
                                            • 0
                                              Не написано, поправлен ли Debug при работе с JS в Nashorn?

                                              Вот ваша новость, что когда-то вы это сделали: https://blog.jetbrains.com/idea/2014/03/debugger-for-jdk8s-nashorn-javascript-in-intellij-idea-13-1/
                                              а позже (в 2015 вроде бы) версии сломали.
                                              • 0
                                                в 2016.2 Ultimate я добивался чтобы оно работало
                                                • 0
                                                  Надо в начале JS файла добавить путь к самому себе относительно корня исходников проекта:

                                                  nashorn-polyfill.js:
                                                  //@ sourceURL=src/main/resources/frontend/nashorn-polyfill.js
                                                  var a = 10;
                                                  
                                            • 0
                                              Как настроить, чтобы ctrl +s на пустой строке не сбивало табуляцию курсора?
                                              До ctrl +s
                                              image
                                              после
                                              image
                                              просто с моей привычкой сохраняться после каждого чиха я задолбаюсь
                                              • 0

                                                image


                                                См. текст там где красное слово. Вроде как надо выключить первую галку в разделе Virtual Space чуть выше.

                                              • +2

                                                Settings -> Editor -> General. Но ведь идея же автоматом сохраняет, зачем жать постоянно?

                                                • 0

                                                  старая привычка, привитая годами.
                                                  Да и сохраняет она только при потере фокуса у редактора вроде

                                                  • 0

                                                    Там и это настраивается. У меня вроде стоит сохранение через 5 секунд бездействия.

                                                  • 0
                                                    Но ведь идея же автоматом сохраняет, зачем жать постоянно?
                                                    «Мне проще штраф заплатить, чем руку сбивать» (из анекдота)
                                                    Большинство программ, к счастью, не пытается быть умнее пользователя и сохраняться там нужно явно.
                                                    • +1

                                                      Можно просто снять байндинг с Ctrl+S тогда и нажимай сколько влезет :-)

                                                      • 0
                                                        к счастью

                                                        Ага, я когда только пересел на линукс, еще не настроил до конца Android Studio (автосохранение по таймеру не поставил), она у меня зависла, пришлось прибить, и я потерял несколько десятков строк кода. Повезло, что не больше. А такое может быть с любой программой, которая "не пытается быть умнее пользователя".

                                                        • +4

                                                          В таких случаях, кстати, можно в Local History порыться, вдруг там что осталось.

                                                  • 0
                                                    Господа, у меня одного удалённые вкладки, вроде TODO и Favorites восстанавливаются после перезапуска?
                                                    • 0

                                                      не только у вас. сломали в одной из последней сборке. баг

                                                    • 0
                                                      Планируется обновление иконок для WebStorm?
                                                    • +1
                                                      Привет!
                                                      А зачем сохранение пароля к БД в DataBase plugin сломали?
                                                      Хотел перейти, пришлось откатиться. :-)
                                                      • 0

                                                        попробуйте "-Duse.linux.keychain=false" добавить в запуск. Взято тут

                                                        • 0
                                                          Можете пожалуйста подробней описать? Какая СУБД? Если можно, скриншот.
                                                          • 0

                                                            это опечатка. MadNazgul под "DataBase" имел в виду "DataGrip".
                                                            имело в виду эта проблема, которая решается отключением использования менеджера паролей от DE в Linux и возврат на старую схему.


                                                            Если не так, то можете меня поправить

                                                            • 0
                                                              А что описывать.
                                                              В 2016.2 DataSource к БД PostgreSQL.
                                                              При переносе в 2016.3 они перестали работать.
                                                              Причем если вводишь пароль и не нажимаешь OK или Apply, то TestConnection срабатывает.
                                                              Если нажать OK или Apply, то пароль «сбрасывается».
                                                              Прям сейчас посмотрел в 2016.2 работает, в 2016.3 — нет.
                                                              Зачем сломали?
                                                              • 0

                                                                и следом:
                                                                0) какая ОС
                                                                1) если Linux, какой DE
                                                                2) скрины настроек перед нажатием "OK" и сразу после
                                                                3) в файл idea.log что пишется?


                                                                например у меня сперва проблема решилась в рамках этого баг-репорта, хотя потом возникла другая бага, которую, как временную заплатку закрыл через "use.linux.keychain=false"

                                                                • +1
                                                                  OS Kubuntu 16.04
                                                                  Служба технической поддержки помогла, и да ч/з «use.linux.keychain=false» заработало.
                                                                  Но вопрос, то не в этом.
                                                                  Зачем сломали, то что работало?
                                                                  Судя по баг-репортам баг известен, зачем его в релиз выпускать?!
                                                                  • 0

                                                                    с этим согласен — в релиз подобный баг выпускать нельзя было.
                                                                    И если нельзя было выпилить из кода, то можно было просто в релизе искуственно взвести флаг "use.linux.keychain" на время, пока не исправят ошибку.

                                                          • –5
                                                            С каждой новой версией новые баги :( Когда уже начнете писать авто-тесты? Буквально на первом же файле с кодом увидел следующие ошибки (IDEA + Python plugin):

                                                            1. следующее регулярное выражение помечается как неверное:
                                                            re.compile('(?P<var>[\'"])(.*?)(?P=var)')
                                                            

                                                            2. Еще вот такая штука, которая нормально работала до этого:
                                                            if isinstance(var, MyType):
                                                                if isinstance(var, SubclassOfMyType):
                                                                    # здесь IDE ругается, мол у MyType нет такого метода
                                                                    var.subclass_of_my_type_method()
                                                            
                                                            • 0

                                                              В багтрекер написали?

                                                              • –8
                                                                Писать о каждом баге в багтрекер? Я плачу за продукт и при этом сам же его тестировать должен? Нет уж, я считаю, что тестировать и заводить баги должна сама компания, причём прежде, чем выпускать продукт на рынок. В конце концов, IDE призвана повышать продуктивность, экономить время и нервы, а выходит часто как раз наоборот.

                                                                PS: про утечки памяти наверно уже и баги заводить бесполезно, сталкиваются с этим все, а воз и ныне там.
                                                                • +7
                                                                  Если о багах не писать, то о них никто и не узнает.
                                                                  • 0
                                                                    Сложно поспорить с вашим аргументом. Но это не повод возлагать задачи по тестированию и нахождению багов на своих пользователей, тем более лояльных (пока) пользователей.
                                                                    • 0

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

                                                                      • 0
                                                                        Не надо подменять контекст. Речь же идет не о редких багах, на которые нарываешься в каких-то уникальных случаях, или о багах в новом функционале. Я говорю о том, что с продуктами Jetbrains с выходом новой версии очень часто сталкиваешься с поломками в существующем и часто используемом функционале — это совсем другое, и за такое надо испытывать по меньшей мере большой стыд.
                                                                        • +2

                                                                          На составление хорошего баг репорта свободно уходит до половины дня. Очень хотчется сообщать обо всех багах и даже их самостоятельно фиксить, но "до половины дня" всё портит.

                                                                • +2
                                                                  Первая: https://youtrack.jetbrains.com/issue/PY-21575
                                                                  Вторая пока не воспроизвелась
                                                                  • 0
                                                                    Хм, в синтетическом случае у меня тоже не воспроизвелась. Однако в реальном примере действительно не работает. Если у вас есть время и желание разобраться, то вот конкретное место, где это воспроизводится точно: https://github.com/renskiy/fabricio/blob/swarm/fabricio/docker/service.py#L194 ( строчка «option.get_remove_values,»)
                                                                    • +2

                                                                      Проблема в том, что в авто-тестах как раз обычно синтетические случаи. Так что "Когда уже начнете писать авто-тесты?" ко второму случаю не очень относится :-)

                                                                      • 0
                                                                        Каждый сложный случай можно разложить на серию простых — это простое математическое правило работает в большинстве случаев :) А если каждый простой случай покрыт автоматическими тестами, то и в сложных случаях проблем возникать не должно.
                                                                        • +2

                                                                          Тут подойдёт такая гифка: https://twitter.com/thepracticaldev/status/687672086152753152


                                                                          Вообще не знаю как в других областях, но в случае программного кода весьма сложно придумать тесты на все случаи жизни. Код можно написать миллионом разных способов. При том что IDEA должна адекватно реагировать на любой некомпилирующийся код или даже компилирующийся, но странный (недописанный, например). И часто нормальная работа частных случаев совсем не гарантирует нормальную их интеграцию.

                                                                          • –1
                                                                            Согласен, но это все равно не повод не писать тесты
                                                                            • +2

                                                                              Ну их так-то пишут. Не знаю, насколько хорошо, но пишут.

                                                                  • 0
                                                                    Какая версия плагина?
                                                                • +3
                                                                  Все никак не спрошу.

                                                                  Есть такая проблема в IntelliJ IDEA что из Project Tree пропадают классы, директории, etc. и на месте этого просто пустая линия. Это как-то чинится самостоятельно или уже существует тикет на это. Не знаю, может я плохо искал ишью/гуглил.
                                                                • 0
                                                                  > «Как всегда, буду рад ответить на любые вопросы.»

                                                                  Вот у меня вопрос — вы наверняка тестировали свою реализацию многострочного редактирования — какие официальные ограничения? Сколько строчек одноврменно можно редактировать?

                                                                  //мой вопрос вызван лютейшими тормозами всего UI, когда пытаешься отредактировать, скажем, 1000 строчек одновременно — хочется сделать, скажем, insert into blabla() values()

                                                                  Ни купленная идея, ни купленная 0xDBE/Natasha/DataGrip не умеют это делать… ваш продукт тупо зависает на попытке отрендерить все эти строки, редактировать вообще невозможно. Памяти много, вычислительных ресурсов много… однако ваши продукты так работают(по-видимому однопоточно для этой части функционала), что UI становится неработоспособным
                                                                  • 0

                                                                    На 2016.3 уже проверяли, лучше не стало? По-моему, там что-то пытались ускорить.

                                                                    • 0
                                                                      Не-а, лучше не стало.

                                                                      Буквально вчера понадобилось подготовить набор INSERT стейтментов для ~4k записей… Вставил я такой экспорт в DataGrip — загрузка ЦП на 14% одного из ядер и весь UI повис минут на 8, после чего любые действия в редакторе вызывают лютейшие тормоза.

                                                                      Пришлось открывать кучу консолей и нарезать данные по 500 штук
                                                                      • +1

                                                                        Вообще такие задачи появились задолго до многокурсорных редакторов. Есть много способов с ними справится. Например, раскопировав болванку выражения необходимое количество раз (набрать одну строчку, скопировать, вставить 10 раз, потом скопировать всё, вставить снова — уже сто строчек, потом снова скопировать всё, вставить — уже 1000). Потом выделить прямоугольным (блочным) выделятором и вставить в нужное место. И далее поиском с заменой с использованием регулярных выражений привести в чувство.


                                                                        Или если уже есть данные (скажем, в виде CSV-файла), то можно просто искать регулярное выражение ^ (начало строки) и заменять на нужный префикс INSERT-бла-бла. Ещё можно макросы записывать.


                                                                        В общем, не оправдываю тормоза DataGrip, но задачу можно решать эффективно и без этой фичи.

                                                                    • +2
                                                                      https://youtrack.jetbrains.com/issue/IDEA-135620
                                                                      В 2017.1 должно быть получше.
                                                                      Летать конечно не будет, и во много потоков не станет ничего делать, но будет сильно лучше чем сейчас, это точно.
                                                                      • +2

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


                                                                        @rauch я почему-то думал, что в 2016.3 попало. Но можете попробовать собрать Community Edition из сорцов на гитхабе из мастер-ветки и попробовать там :-) Конечно, SQL там нет, но для теста непринципиально.

                                                                    • +4
                                                                      А можно в следующих пресс-релизах гифки делать медленнее? Или видяшками, которым можно остановить, а то не успеваю понять, что было и что стало.
                                                                    • +2
                                                                      Да, с иконками вас задолбают в ближайшее время :)

                                                                      Спасибо за Toolbox, интересная штуковина.
                                                                      • 0

                                                                        Есть такая штука в Android Studio (и в этой версии IDEA все еще присутствует), которая очень мучает — при выходе новой версии Android SDK ее исходники появляются далеко не сразу, и если в проекте начать ее использовать, при попытке просмотреть исходники какого-то класса SDK идея будет искать последнюю версию кода и, естественно, не находить. В результате все методы выглядят как throw new RuntimeException("Stub!");. Хотелось бы иметь возможность выбрать версию исходников, которые смотреть, вручную.

                                                                        • 0
                                                                          В Project Structure | Modules можно вручную попробовать указать исходники для нужного модуля. Если я правильно понял проблему.
                                                                          • 0

                                                                            Почему-то я там не вижу, где можно вручную указать, какие исходники Android SDK надо использовать. Само SDK у меня выбрано 25, а исходники хочу от 24, допустим, просматривать при необходимости.

                                                                        • 0

                                                                          Не подскажете, кто теперь насильно вставляет проверки на null для @Nonnull параметров? Это компилятор или IDE? Сейчас апдейтнулся и сломалась половина тестов с ошибкой:


                                                                          Caused by: java.lang.IllegalArgumentException: Argument for @Nonnull parameter 'correlationId' of services/storage/CorrelationStorage$Correlation. must not be null
                                                                          at services.storage.CorrelationStorage$Correlation.$$$reportNull$$$0(CorrelationStorage.java)

                                                                          Просто есть куча immutable классов с публичным конструктором и параметрами @Nonnull. Чтобы работали всякие JPA и сериализаторы, добавляю приватный конструктор по умолчанию, который вызывает публичный с нулами:

                                                                          class Bean {
                                                                          public final String param;
                                                                          public Bean(@Nonnull String param) {this.param = param;}
                                                                          @SuppressWarnings("all")
                                                                          private Bean() {this(null);}
                                                                          }

                                                                          До 16.3 все работало. Где отключается?

                                                                          • 0
                                                                            Стоит проверить вот эту опцию:
                                                                            «File | Settings | Build, Execution, Deployment | Compiler» — «Add runtime assertions for not-null-...»
                                                                            • +4

                                                                              Вот это да, идея позволяет себе компилировать код в нечто, отличающееся от того, что потом будет залито в прод. Свинство! Хоть отключили бы по дефолту.

                                                                            • +1

                                                                              Ну вообще, это нарушение контракта на методе, не надо тогда писать там @Nonnull. А зачем, если не секрет, финальное поле в энтити?

                                                                              • 0

                                                                                В Entity финальное поле, может, и не нужно. А вот при создании immutable-объектов, если используется сериализация отличная от Java, требуется определить пустой конструктор, где нужно инициализировать все final nonnull-поля (кстати, забыл в примере пометить как поле nonnull) дефолтными значениями. Если раньше все прокатывало с null-ами, то теперь требуется определить некие "пустые" объекты для каждого из полей.


                                                                                Я считаю, что нарушение контракта — это как раз вставка проверок на nonnull в рантайме, т.к. изначально эта аннотация планировалась исключително для warning-ов при компиляции. И с @SuppressWarnings код должен компилироваться и работать корректно.

                                                                            • +1

                                                                              deleted

                                                                              • 0
                                                                                Скажите, пожалуйста, можно ли как-то включить инспекцию повторного вызова set?
                                                                                action.setId();
                                                                                ..
                                                                                action.setId();
                                                                                
                                                                                • 0
                                                                                  Спасибо за статью.
                                                                                  Но когда выходят новые версии, то баги не только чинятся, но и добавляются новые.
                                                                                  Вот как раз сейчас пытаюсь понять кому адресовать проблему.
                                                                                  Есть такой плагин QAPlug, который прекрасно работает на 2016.2.*, но с выходом 2016.3 начались чудеса вида

                                                                                  ClassNotFoundException: com.intellij.profile.ApplicationProfileManager
                                                                                  
                                                                                  • 0

                                                                                    Если плагин сторонний, то обращаться к разработчику плагина, конечно же. Обратной совместимости в sdk для плагинов, насколько я понял, не особо предусмотрено.

                                                                                    • 0
                                                                                      Я это прекрасно понимаю и обращусь к разработчику обязательно.
                                                                                      Я сейчас просто указал, что в данном случае ситуация, когда плагин не менялся, но поменялось окружение.
                                                                                      • 0

                                                                                        для разработчиков плагинов есть же EAP — всегда можно скачать и проверить работоспособность при приближении выпуска релиза. Хотя некоторые ждут до последнего и только потом вносят исправления даже если уже известна проблема :(

                                                                                    • +1
                                                                                      Насколько я помню, этот плагин не обновлялся очень давно. Исходников в открытом доступе я не нашел. С учетом того, что используемые в нем версии PMD и CheckStyle падают при наличии стримов с лямбдами в коде — я бы задумался о необходимости его использования.
                                                                                      • 0

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

                                                                                      • 0
                                                                                        Важный для меня вопрос по JavaScript:
                                                                                        Если использовать модули ES6 и следовать правилу (есть и у airbnb) использовать index.js в качестве импортируемого файла по умолчанию (по системе разрешения файлов node.js), то команда Find Usages не показывает ни одного совпадения.

                                                                                        Подскажите пожалуйста, может быть нужно сделать дополнительные настройки проекта или это по дизайну так?

                                                                                        IntelliJ IDEA 2016.3.2
                                                                                        Build #IU-163.10154.41, built on December 21, 2016
                                                                                        • 0
                                                                                          Вопрос вне темы:

                                                                                          Почему иногда платформа обновляется патчем, а иногда приходится ползти на сайт и скачивать вручную?
                                                                                          Что мешает автоматически скачивать обновление в обоих случаях?
                                                                                          • +3

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


                                                                                            слегка оффтопик: jetbrains toolbox решил проблему в корне — никуда ходить не нужно, надавил «обновить» и вуаля. ну то есть оно если и скачивает полный архив, то пользователям этого не видно.

                                                                                            • +2
                                                                                              Да, Toolbox App умеет накладывать патчи последовательно, если нет прямого патча с одной версии на другую.
                                                                                              • +1

                                                                                                а вот это вообще отлично

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

                                                                                                  toolbox может и хорош, но он и есть «куда ходить нужно» — в том смысле зачем мне дублировать функционал, если студия это сама умеет.
                                                                                                  а с точки зрения uix одинаково: на сайте я нажму кнопку или в ещё одном приложении — это всегда выход из той среды, где я нахожусь.

                                                                                                  то есть вы предлагаете сделать так:
                                                                                                  1) идея говорит «пора обновиться, вот сходи на сайт, скачай новую версию»
                                                                                                  2) я говорю — «нет, не пойду»
                                                                                                  3) открываю toolbox — и нажимаю там кнопки.

                                                                                                  вместо этого:
                                                                                                  1) идея говорит «пора обновиться, можно скачать новую версию с сайта, но я сама это все сделаю. скачаюсь, установлюсь, все в лучшем виде будет, хозяин»
                                                                                                  2) я говорю — «ок, жги»

                                                                                                  у меня кстати несколько idea — 16, 17, 17EAP etc. и даже 14 где-то есть. и система linux, если это важно.

                                                                                                  • 0
                                                                                                    Патчи есть не всегда, они могут отстутствовать по ряду причин. Поэтому, так или иначе, могут возникать ситуации, когда нужно скачать новую версию IDE полностью. На сколько я знаю, непосредствено в программу такой функционал встраивать не планируется.

                                                                                                    В то же время, как уже упоминалось выше, Toolbox App по нажатию кнопки «Update» самостоятельно выполняет всю магию. Если можно обновиться серией патчей — будут патчи, если нет — он сам скачает и установит дистрибутив. Более того, в планах есть автоматическое обновление. Как только его реализуют, вообще никуда «ходить» не придется. Проголосовать за эту фичу можно здесь.
                                                                                                    • 0
                                                                                                      непосредствено в программу такой функционал встраивать не планируется.


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

                                                                                                          тем более таким образом, что в идее полностью работать не будет, надо использовать утилиту сомнительной полезности, в которой нельзя указать установленный инстанс.
                                                                                                          • 0
                                                                                                            в которой нельзя указать установленный инстанс

                                                                                                            Не очень понял, о чем речь.
                                                                                                            • 0
                                                                                                              у меня несколько idea уже есть на компьютере, я запускаю тулбокс. и он мне предлагает установить новую.

                                                                                                              image

                                                                                                              • +1
                                                                                                                Да, и правда есть такая проблема на Linux, в то время как на Mac все работает отлично. Здесь можно проголосовать за фичу.

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

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