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

Спешу поделиться хорошей новостью. Сегодня стала доступна 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. Эта опция добавляет в стандартную подсветку уникальные цвета для каждого параметра и локальной переменной. Эта опция выключена по умолчанию, но может быть включена в Settings > Editor > Colors & Fonts > Language Defaults > Semantic highlighting.



Иконки


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

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


Delegate IDE build/run actions to Gradle


Эта новая опция позволяет делегировать такие действия IDE как Build, Build Artifacts и Run напрямую Gradle. Когда эта опция включена, IDE вместо стандартных действий вызывает соответствующие Gradle-таски. Включить эту опцию можно в Settings > Build, Execution, Deployment > Build Tools > Gradle > Runner > Delegate 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 (на английском). Там же можно скачать обновление.

Как всегда, буду рад ответить на любые вопросы.
Поделиться с друзьями
-->

Комментарии (124)


  1. SmartBye
    22.11.2016 16:58
    +1

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

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

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


    1. andreycheptsov
      22.11.2016 17:11
      +1

      В ее поставку уже входит функциональность WebStorm или нет?

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


      1. poxu
        22.11.2016 18:45

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


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


        1. andreycheptsov
          22.11.2016 20:02
          +1

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


        1. andreycheptsov
          22.11.2016 20:06
          +2

          Если коротко, то предусмотрены.


          1. poxu
            23.11.2016 09:07

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


    1. Borz
      22.11.2016 19:00
      +1

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


      1. ookami_kb
        23.11.2016 22:37

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


        1. Borz
          23.11.2016 23:06
          +1

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


  1. moxnoryl
    22.11.2016 17:12
    +5

    Спасибо за такой удобный инструмент для работы


    1. andreycheptsov
      22.11.2016 17:13
      +3

      Передам команде. Вам спасибо за фидбек :)


      1. handicraftsman
        22.11.2016 17:49
        +1

        На чём написаны IDE?


        1. andreycheptsov
          22.11.2016 18:12
          +8

          Java, ну а теперь еще и Kotlin.


          1. handicraftsman
            24.11.2016 19:06
            -5

            Тогда понятно, почему столько ресурсов требует.


  1. TheKnight
    22.11.2016 17:30

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

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

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


    1. andreycheptsov
      22.11.2016 17:42
      +3

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

      По поводу тестов, наверное будет проще посмотреть по коду: https://github.com/JetBrains/intellij-community/blob/master/platform/platform-tests/testSrc/com/intellij/openapi/editor/EditorMultiCaretTest.java
      и другие тесты: *EditorMultiCaret*Test


      1. TheKnight
        22.11.2016 17:50
        +2

        О! Спасибо! Почему то в упор их не мог найти. Ну, теперь то будет чем заняться скучными вечерами)


      1. staticlab
        22.11.2016 21:41

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


      1. igorp1024
        23.11.2016 11:25

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


        1. igorp1024
          23.11.2016 11:29
          +1

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


      1. mosinnik
        23.11.2016 13:12

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

        Что мешает добавить опцию для переключения между старыми и новыми иконками?


        1. andreycheptsov
          23.11.2016 13:14

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


          1. staticlab
            23.11.2016 20:20

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


            1. DragonFire
              24.11.2016 16:42

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


    1. lany
      23.11.2016 02:49
      +2

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

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


      1. TheKnight
        23.11.2016 12:31

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

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

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

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


        1. k12th
          23.11.2016 12:49
          +2

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


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


        1. Yulaw
          23.11.2016 17:41
          +1

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


  1. 23derevo
    22.11.2016 17:35

    andreycheptsov, а что со сьеррой?


    1. andreycheptsov
      22.11.2016 17:42
      +1

      Поддерживается с 2016.2.5


      1. 23derevo
        22.11.2016 20:14

        можно смело обновляться?


        1. andreycheptsov
          22.11.2016 20:41
          +1

          Есть мелкие баги, но ничего серьезного. Основные проблемы были пофикшены.


        1. artspb
          23.11.2016 00:00
          +1

          У нас много кто на Sierra обновился, в том числе и я. Очевидных проблем нет, все работает.


    1. bromzh
      23.11.2016 13:25
      +1

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


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


  1. voddan
    22.11.2016 18:15
    +1

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


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


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

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


    1. andreycheptsov
      22.11.2016 19:08

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

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


      1. andreycheptsov
        22.11.2016 19:13

        По поводу второго

        Это относится к другому комментарию. Прошу прощение.


  1. HangGlider
    22.11.2016 18:39
    +1

    В Black Friday 2016 будете принимать участие?


    1. andreycheptsov
      22.11.2016 19:08
      +1

      Решили не принимать участие.


  1. beTrue
    22.11.2016 19:31
    +6

    Коллеги, большое спасибо вам за проделанную работу, вы очень крутые!!!


    1. andreycheptsov
      22.11.2016 19:45

      Спасибо! Передам коллегам :-)


      1. beTrue
        22.11.2016 20:30
        +1

        передайте плес им максимум респект за поддержку скала-макросов


  1. Ghedeon
    22.11.2016 20:20
    +9

    Так-то у меня характер нордический, не сентиментален и скуп на комплименты, но IDEA это что-то уникальное. Каждый раз, когда думаешь, что дальше некуда, и надеешься, что спустя 7 лет узнал хоть половину фич, прилетает ушат обновлений и ты опять хлопаешь глазами: «Хуясе, и так можно?!».


    1. andreycheptsov
      22.11.2016 20:43
      +1

      Спасибо! Очень приятно было читать :-)


  1. jbubsk
    22.11.2016 21:50
    +4

    За плоские иконки отдельное спасибо, давно ждал!!!


  1. cold147
    22.11.2016 22:09

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


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


  1. k12th
    22.11.2016 22:19

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


    1. Borz
      23.11.2016 01:47

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


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


      1. k12th
        23.11.2016 11:40

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

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


        1. Borz
          23.11.2016 11:50
          +3

          1. k12th
            23.11.2016 11:53

            Спасибо, проголосовал.


  1. DeLuxis
    23.11.2016 10:27

    Не совсем понял по лицензии.
    Если я сейчас покупаю новую лицензию на месяц, то смогу ли я продолжать пользоваться IDE без обновлений после истечения срока подписки?
    И что будет если через полгода я снова куплю лицензию на месяц? IDE обновится? Покупать придется по полной цене?


    1. artspb
      23.11.2016 10:43

      Если Вы купите подписку на месяц, то по истечении ее срока пользоваться IDE будет нельзя. Подписка на год дает возможность пользоваться IDE (версией на момент покупки) и после того, как срок подписки истек.


    1. andreycheptsov
      24.11.2016 18:57
      +1

      Если покупать по-месячно в течении года, вы получаете возможность пользоваться IDE (версией на момент покупки) и после того, как срок подписки истек


  1. shishmakov
    23.11.2016 11:50

    Не написано, поправлен ли Debug при работе с JS в Nashorn?

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


    1. navrocky
      23.11.2016 15:10

      в 2016.2 Ultimate я добивался чтобы оно работало


      1. navrocky
        23.11.2016 15:29

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

        nashorn-polyfill.js:

        //@ sourceURL=src/main/resources/frontend/nashorn-polyfill.js
        var a = 10;
        


        1. shishmakov
          24.11.2016 15:41

          Огромное спасибо!)


  1. osiykm
    23.11.2016 13:17

    Как настроить, чтобы ctrl +s на пустой строке не сбивало табуляцию курсора?
    До ctrl +s
    image
    после
    image
    просто с моей привычкой сохраняться после каждого чиха я задолбаюсь


    1. bromzh
      23.11.2016 13:31

      image


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


      1. osiykm
        26.11.2016 12:12

        Спасибо.


    1. Bringoff
      23.11.2016 13:35
      +2

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


      1. Borz
        23.11.2016 13:43

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


        1. Bringoff
          23.11.2016 13:56

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


      1. Maccimo
        23.11.2016 17:52

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


        1. lany
          24.11.2016 06:18
          +1

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


        1. Bringoff
          24.11.2016 08:44

          к счастью

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


          1. lany
            24.11.2016 08:56
            +4

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


  1. Djaler
    23.11.2016 13:17

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


    1. Borz
      23.11.2016 13:23

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


  1. Vadik912
    23.11.2016 13:18

    Планируется обновление иконок для WebStorm?


    1. andreycheptsov
      23.11.2016 13:18

      Так уже, 2016.3. Нет?


  1. mad_nazgul
    23.11.2016 13:18
    +1

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


    1. Borz
      23.11.2016 13:28

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


    1. moscas
      23.11.2016 13:53

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


      1. Borz
        23.11.2016 15:00

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


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


      1. mad_nazgul
        23.11.2016 16:50

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


        1. Borz
          23.11.2016 17:01

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


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


          1. mad_nazgul
            24.11.2016 07:07
            +1

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


            1. Borz
              24.11.2016 08:22

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


  1. renskiy
    23.11.2016 13:23
    -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()
    


    1. lany
      23.11.2016 14:23

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


      1. renskiy
        23.11.2016 15:21
        -8

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

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


        1. Maccimo
          23.11.2016 18:27
          +7

          Если о багах не писать, то о них никто и не узнает.


          1. renskiy
            23.11.2016 19:06

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


            1. Borz
              23.11.2016 19:44

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


              1. renskiy
                23.11.2016 19:59

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


              1. poxu
                24.11.2016 10:11
                +2

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


    1. andreycheptsov
      23.11.2016 18:17
      +2

      Первая: https://youtrack.jetbrains.com/issue/PY-21575
      Вторая пока не воспроизвелась


      1. renskiy
        23.11.2016 18:59

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


        1. lany
          24.11.2016 06:22
          +2

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


          1. renskiy
            24.11.2016 06:53

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


            1. lany
              24.11.2016 07:06
              +2

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


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


              1. renskiy
                24.11.2016 07:15
                -1

                Согласен, но это все равно не повод не писать тесты


                1. lany
                  24.11.2016 07:22
                  +2

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


    1. proshev
      23.11.2016 18:20

      Какая версия плагина?


      1. renskiy
        23.11.2016 19:01

        2016.3.163.80


  1. Nekitos
    23.11.2016 17:41
    +3

    Все никак не спрошу.

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


    1. Borz
      23.11.2016 18:23
      +2

      давняя боль


      1. Nekitos
        23.11.2016 18:27

        Благодарю! Действительно плохо искал.


    1. andreycheptsov
      23.11.2016 18:25

      http://youtrack.jetbrains.com/issue/IDEA-101953


      1. Nekitos
        23.11.2016 18:28

        Спасибо!


  1. rauch
    23.11.2016 22:31

    > «Как всегда, буду рад ответить на любые вопросы.»

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

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

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


    1. lany
      24.11.2016 06:25

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


      1. rauch
        24.11.2016 09:20

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

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

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


        1. lany
          24.11.2016 09:25
          +1

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


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


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


    1. andreycheptsov
      24.11.2016 18:00
      +2

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


      1. lany
        25.11.2016 16:39
        +2

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


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


  1. radistao
    24.11.2016 12:08
    +4

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


    1. andreycheptsov
      24.11.2016 17:42

      Согласен. Постараюсь.


  1. Akuma
    24.11.2016 21:00
    +2

    Да, с иконками вас задолбают в ближайшее время :)

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


  1. Bringoff
    25.11.2016 10:35

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


    1. andreycheptsov
      25.11.2016 16:22

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


      1. Bringoff
        25.11.2016 19:27

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


  1. Throwable
    25.11.2016 22:03

    Не подскажете, кто теперь насильно вставляет проверки на 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 все работало. Где отключается?


    1. msd
      26.11.2016 01:04

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


      1. dougrinch
        26.11.2016 15:09
        +4

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


  1. dougrinch
    26.11.2016 15:08
    +1

    deleted


  1. 4ex0V
    30.11.2016 12:10

    Скажите, пожалуйста, можно ли как-то включить инспекцию повторного вызова set?

    action.setId();
    ..
    action.setId();
    


  1. wwarlock
    01.12.2016 10:05

    Спасибо за статью.
    Но когда выходят новые версии, то баги не только чинятся, но и добавляются новые.
    Вот как раз сейчас пытаюсь понять кому адресовать проблему.
    Есть такой плагин QAPlug, который прекрасно работает на 2016.2.*, но с выходом 2016.3 начались чудеса вида

    ClassNotFoundException: com.intellij.profile.ApplicationProfileManager
    


    1. Bringoff
      01.12.2016 10:54

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


      1. wwarlock
        01.12.2016 11:00

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


        1. Borz
          01.12.2016 16:24

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


    1. TheKnight
      01.12.2016 20:13
      +1

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