Скриншот IntelliJ IDEA Community Edition в ОС Windows 7
Тип
Apache 2.0 для Community Edition, Проприетарная для Ultimate Edition
IntelliJ IDEA — коммерческая интегрированная cреда разработки программного обеспечения на многих языках программирования, в частности Java, JavaScript, Python и др., разработанная компанией JetBrains.
Содержание
Обзор
Начиная с шестой версии продукта IntelliJ IDEA предоставляет интегрированный инструментарий для разработки графического пользовательского интерфейса.
Смотреть что такое «IntelliJ IDEA» в других словарях:
IntelliJ IDEA — Basisdaten Entwickler JetBrains Aktuelle … Deutsch Wikipedia
IntelliJ IDEA — Infobox Software name = IntelliJ IDEA caption = Demonstration of IntelliJ IDEA collapsible = yes developer = JetBrains latest release version = 7.0.4 latest release date = release date|2008|08|09 latest preview version = 8.0 M1 latest preview… … Wikipedia
IDEA (значения) — IDEA англ. International Data Encryption Algorithm международный алгоритм шифрования данных. IDEA англ. International Debate Education Association Международная образовательная ассоциация «Дебаты». I.D.E.A. … Википедия
Idea — Das Wort IDEA bezeichnet einen kommerziellen Kryptografie Algorithmus, siehe International Data Encryption Algorithm eine integrierte Entwicklungsumgebung für Java Programme, siehe IntelliJ IDEA eine evangelikale Nachrichtenagentur, siehe… … Deutsch Wikipedia
Idea (disambiguation) — An idea is an image existing or formed in the mind.Idea or IDEA or similar may also refer to:Agencies and organizations* IDEA League, a loose alliance of five European universities * Improvement and Development Agency, a United Kingdom government … Wikipedia
IDEA — Das Wort idea bezeichnet: eine evangelikale Nachrichtenagentur, siehe Evangelische Nachrichtenagentur Idea eine Cabrio Studie der Firma Karmann, siehe Karmann Idea Das Wort Idea bezeichnet: das PKW Modell Fiat Idea Das Wort IDEA bezeichnet: einen … Deutsch Wikipedia
Comparison of revision control software — The following is a comparison of revision control software. The following tables includes general and technical information for notable revision control and software configuration management (SCM) software. This is an incomplete list, which may… … Wikipedia
Сравнение IDE — В следующие таблицы включены пакеты программ, которые являются интегрированными средствами разработки. Отдельные компиляторы и отладчики не упомянуты. Возможно, в английском разделе есть более свежая информация. Содержание 1 ActionScript 2 Ада 3 … Википедия
Comparison of integrated development environments — Main article: Integrated development environment The following tables list notable software packages that are nominal IDEs; standalone tools such as source code editors and GUI builders are not included. Contents 1 ActionScript 2 Ada 3 Basic … Wikipedia
Comparison of Continuous Integration Software — Contents 1 About Continuous Integration Software 2 Comparison 3 See also 4 References About Continuous Integra … Wikipedia
Вся мощь IntelliJ IDEA на примере одного языка (в картинках)
Классическая модель разработки любых приложений подразумевает наличие хорошей документации по пользовательскому интерфейсу и API, а также, при необходимости, хорошего покрытия исходного кода комментариями. В этом случае, доработка системы начинается с изучения документации, затем непосредственно изменяется код и, наконец, обновляется вся необходимая информация.
Однако, одна из проблем такого подхода заключается в том, что это значительно удорожает и замедляет сам процесс разработки. Что если всего этого нет? Тогда на помощь приходит IDE, благодаря которой можно изучить текущую логику по “голому” коду.
Когда мы разрабатывали платформу lsFusion со встроенным языком, то у нас было несколько вариантов. Либо изобретать велосипед, и писать с нуля свою собственную IDE, как сделал в свое время 1С, или реализовать плагин к уже существующей. Мы пошли по второму пути, и в этой статье я покажу, что получилось.
Так как сама платформа разработана на Java, то у нас были две основные опции: Eclipse или IDEA. Мы остановились на последнем варианте и не прогадали. Когда мы принимали решение, IDEA еще была недостаточно популярна, но с тех пор, они вырвались в лидеры на рынке, а Eclipse тихонько отстает.
На разработку самого плагина ушло не очень много времени, так как удалось во многом задействовать код, используемый непосредственно при выполнении платформы. Таким образом, мы минимальными усилиями получили очень мощную IDE, во многих аспектах значительно превосходящую по функционалу IDE многих других ERP-платформ (как родных, так и построенных на Eclipse).
Роль IDE в разработке тяжело переоценить. Несмотря на то, что многие разработчики до сих пор используют vim и считают, что так и надо. Эта позиция имеет право на жизнь, если один человек разрабатывает и в дальнейшем поддерживает этот код. Однако, в более крупных проектах, где участвует большое количество людей очень важна их взаимозаменяемость. Сотрудники болеют, уходят в отпуск, увольняются в конце концов. Кроме того, нагрузка по разным проектам неравномерна, и иногда требуется на один из них подключить большее количество людей, чтобы уложиться в короткие сроки. В такие моменты к доработкам приходится подключать новых людей, которым нужно быстро разобраться в том, как в текущий момент работает программа, и внести необходимые изменения. И тут на первый план выходит IDE.
В первую очередь от IDE нам требовалось следующее:
Приведу несколько простых примеров для того, чтобы показать, как это работает на практике.
Поддержка синтаксиса
Плагин умеет подставлять допустимые ключевые слова, возможные свойства, автоматически обнаруживать различные ошибки:
Навигация
Возьмем логику из примера Управление материальными потоками. Предположим, нам нужно посмотреть, где объявляется свойство Цена. Для этого нужно под пользователем с правами администратора навести указатель мыши на заголовок нужной нам колонки:
В появившемся окне сразу видно, в каком модуле это свойство создано (Shipment), какой номер строки в нем (37), таблица в которой хранится (_auto_Shipment_ShipmentDetail), и ряд другой информации.
Чтобы перейти непосредственно к объявлению свойства, нужно начать поиск файла и в появившемся диалоге ввести Shipment:
Затем при помощи Navigate — Line/Column переходим к 37й строке, где видим объявление свойства:
Нажав CTRL+ALT+F7, стоя курсором на нужном свойстве, можно быстро найти все его использования по всем проектам:
В данном случае, первое использование цены идет в расчете суммы по строке. Два последних — это добавление на соответствующие формы.
При необходимости можно включить поиск только по записи в данное свойство, если убрать соответствующую опцию:
Тогда в списке останется только запись в это свойство. Чтобы узнать, какое конкретно значение в него записывается нужно встать курсором на salePrice и нажать Go To Declaration or Usages. Дальше вернутся через Navigation — Back и перейти к объявлению свойства item:
Подводя итог, мы нашли, где объявлено это нужное нам свойство, в каких случаях оно используется, и когда туда идет запись. На видео я делал все действия мышкой, хотя конечно на практике используется исключительно клавиатура. Такая техника позволяет быстро определять текущую реализованную логику системы и вносить в нее изменения, имея полное представление о том, к чему это приведет.
Рефакторинг
Часто бывает ситуации, когда требуется изменить название свойства, класса, формы или любого другого элемента в системе. Для осуществления такого действия нужно стать на этот элемент и нажать Refactor — Rename:
Переименование элемента автоматически изменяет исходный код во всех местах его использования. Кроме того, если создан файл migration.script, туда будут добавлены соответствующие записи. Серверу необходимо знать изменения имен, чтобы, например, автоматически мигрировать данные из одной колонки в другую. Иначе, невозможно отличить переименование от создания нового свойства с другим именем.
Анализ
Перед тем как выполнить рефакторинг, часто бывает необходимо выяснить «что происходит» и «кто все эти люди».
Для этого IDEA, практически из коробки, позволяет просмотреть структуру выбранного класса (доступные для этого класса свойства и действия):
Также, если необходимо составить общую картину происходящего, IDEA позволяет строить различные иерархии:
Все верхние возможности предоставляются IDEA автоматически (с минимальными телодвижениями) после реализации механизма поиска объявлений. Следующий набор возможностей заставил повозиться с плагином немного больше, но все равно значительную часть инфраструктуры предоставила IDEA (не без проблем конечно, но об этом позже).
Визуализация форм
В lsFusion структура и дизайн форм задается в том же коде, что и доменная логика, при помощи специальных конструкций. При этом разные части формы могут быть объявлены в разных модулях, а при запуске сервера будут “сливаться” воедино в зависимости от подключенных модулей.
Чтобы видеть результирующий дизайн можно, конечно, перезапускать сервер, и смотреть результат в клиенте. Но на рестарт сервера требуется определенное время. Плагин же умеет:
При построении формы учитываются только текущий активный модуль и все, от которых он зависит.
Визуально изменять текущий дизайн пока невозможно, так как форма формируется из нескольких блоков кода. При модификации тяжело однозначно определить в каком месте нужно вносить соответствующие изменения. Кроме того, один и тот же элемент может модифицироваться в нескольких блоках кода, и платформа гарантирует, что если один модуль зависит от другого, то его изменения будут применены последними. Однако, в дальнейшем мы планируем добавить определенный функционал по визуальному изменению дизайна.
Метапрограммирование
Иногда возникает потребность создавать однотипный код для различных задач. В lsFusion есть механизм метакодов, который позволяет генерировать код на основе некоторого шаблона. При этом, в случае изменения метакода, будет происходить автоматическая обновление кода. По сути, это автоматический copy/paste с возможностью замены определенных идентификаторов на заданные значения.
Для включения этого механизма нужно сначала активировать его в меню. После этого IDE будет сама автоматически изменять соответствующий код.
При запуске сервера будет использоваться только сгенерированный код. Сами шаблоны META при запуске сервера учитываться не будут.
Кстати, реализация возможности метапрограммирования заставила нас внести еще один вклад в open-source (в данном случае в лице Intellij IDEA). Дело в том, что в ERP метакоды используются достаточно активно, и, соответственно, часто возникает необходимость сгенерировать код / удалить сгенерированный код. Это приводит к большому количеству асинхронных изменений файлов, что, в свою очередь, приводило к весьма своеобразному багу. Проблема в том, что в самом JetBrains его не могли воспроизвести, поэтому все свелось к тому, что нам самим пришлось написать неработающий юнит-тест. Это конечно заняло несколько дней, зато косвенно помогло нам при реализации следующих двух возможностей.
Отладчик
Когда по коду совершенно непонятно что происходит, то приходится обращаться к отладчику. На любой строке императивной логики (действия, события, ограничения) можно поставить breakpoint. Как только выполнение сервера достигнет этой точки, оно будет остановлено и управление перейдет в отладчик. В этот момент можно смотреть watches, а также продолжать выполнение построчно. Слева будет показан stack trace, по которому можно перемещаться как при отладке обычного Java приложения.
При просмотре текущих значений можно обращаться как текущим объектам (например, Shipment s), так и к любым другим объектам из базы (например, Item i). Однако, разработчик сам несет ответственность за добавление в watches данных, считывание которых займет много времени или памяти, и приведет к падению производительности.
Также можно ставить breakpoint’ы на конкретное свойство. Выполнение остановится в любом месте, когда в него будет производится запись:
Это бывает полезно, когда нужно определить какое событие или действие изменяет значение свойства.
Для реализации отладчика мы на самом деле использовали существующий в IDEA Java Debugger. То есть отлаживается платформа как обычное Java приложение, но для lsFusion действий мы создаем proxy java методы и подменяем их отображение на свой код (я так понимаю в IDEA это сделано для поддержки Scala и других оберток над Java). И вот тут был забавный момент. В какой-то момент разработчики IDEA сделали конструктор своего Java Debugger закрытым (private). И если ситуацию с вызовом private методов еще можно обойти через Reflection, то как унаследоваться от класса с private конструктором — непонятно. Но как раз в то время шли разборки с багом из верхнего раздела, и мы «по бартеру» решили попросить людей из JetBrains сделать этот конструктор обратно protected, на что они отреагировали очень оперативно (за что им конечно большое спасибо).
Language Injection
Одна из самых необычных возможностей IDEA — возможность обеспечивать поддержку своего языка в строковых константах других языков. Для этого достаточно сказать IDEA, какие именно строковые константы относятся к твоему языку, дальше IDEA сама автоматически:
Здесь в IDEA тоже был (и сохраняется) небольшой баг. Когда виртуальный файл большой, то если при переходе к использованию IDEA должна перейти на начало «окна внедрения», она на самом деле переходит на конец предыдущего «окна внедрения» (то есть например на предыдущее использование свойства в Java-файле). Существует конечно, простой обход этого бага — создавать по отдельному виртуальному файлу на каждый строковый литерал. Но такой подход тормозит когда использований больше 30, поэтому в этом случае все равно приходится использовать один большой виртуальный файл (с другой стороны, когда использований много, найти правильное, то есть следующее, использование не так уж и сложно). Мы просили исправить этот баг опять-таки в рамках «обмена услугами», и разработчики JetBrains его вроде как пофиксили, но, как позже выяснилось, как-то не так (это еще по коммиту было видно, но мы подумали, что просто не до конца его поняли). Впрочем, у нас к этому багу все уже давно привыкли, благо ситуация с использованием больше 30 элементов в одном файле встречается достаточно редко.
Заключение
В статье описаны только основные варианты использования. В ней также присутствуют возможности по поиску реализаций абстрактных свойств и классов, визуализации зависимостей между модулями и свойствами, автоматической генерации форм на основе xml/json и многое другое. И, конечно же, есть встроенная интеграция с основными системами контроля версий Git и Subversion, а также поддержка Maven и Ant.
Пойдя по пути разработки плагина к IDEA, мы небольшими усилиями получили очень мощную бесплатную интегрированную среду разработки, превосходящую по многим параметрам IDE конкурентов.
В пятницу, 19 февраля, мы выпустили бета-версию IntelliJ IDEA 16. Учитывая то, что с момента выхода IntelliJ IDEA 15 прошло немногим более трех месяцев, вы будете приятно удивлены тем, что мы успели сделать за это время. Мы приглашаем вас скачать свежую версию прямо сейчас и самостоятельно попробовать все улучшения, о самых главных из которых я с удовольствием расскажу далее.
Для Java проектов в Evaluate Expression и Watches теперь можно писать выражения и на Groovy, обладающим более компактным синтаксисом, что делает более удобной, например, работу с коллекциями.
Если текущий поток заблокирован другим остановленным потоком, то IntelliJ IDEA предложит его разблокировать.
Ранее, по нажатию Resume, возобновлялись все запущенные потоки. Теперь можно изменить это поведение, включив опцию Resume only the current thread.
Теперь IntelliJ IDEA предупреждает всякий раз, когда замечает, что исходники не соответствуют выполняемому коду. Это помогает избежать ошибок и сэкономить время.
Интеграция с Git и другими VCS
IntelliJ IDEA теперь поддерживает git worktrees – на случай если вы хотите работать с несколькими ревизиями репозитория одновременно и сэкономить место на диске.
Для Git в Branches popup появились две новые команды: Checkout with Rebase и Rename. Checkout with Rebase позволяет сэкономить время, если вы хотите выполнить эти две операции одну за другой.
Инструменты Diff viewer и Merge dialog стали удобнее за счет подсветки изменений на уровне конкретных частей строки.
В редакторе появился новый инструмент: Move Element Right/Left (Alt + Ctrl + Shift + Arrows или Alt + Cmd + Shift + Arrows для OS X). С его помощью можно менять местами аргументы методов, элементы массивов и атрибуты тегов.
Мы добавили авто-импорт для статических методов и констант (ранее он работал только для классов). Опция Add unambiguous imports on the fly теперь также работает и для статических методов и констант.
Редактор поддерживает арабский, иврит и другие языки, где символы следуют справа налево.
В настройках стилей появилась опция для автоматического добавления пробела в начало комментариев.
При вызове Inline method или Change signature, ссылки на метод (method references) преобразуются в соответствующие лямбда выражения.
IntelliJ IDEA предупредит, если вы вызываете метод get() на java.util.Optional не проверив перед этим с помощью isPresent() содержится ли там значение.
Добавлено много инспекций на использование функциональных интерфейсов, лямбда выражений и Optional.
Если вы используете Guava, IDE предложат Вам заменить FluentIterable, Function, Optional и Predicate их аналогами из Java 8.
Быстрый поиск (speed-search) теперь доступен в окне Terminal, также был улучшен поиск во всплывающем окне Show usages и в окне Find usages.
Интерфейс Log viewer для Git и Mercurial теперь выглядит чуть приятнее.
Теперь модель проекта IntelliJ IDEA полностью совпадает с моделью Gradle: каждый source set представлен в IntelliJ IDEA как отдельный модуль, и поэтому может иметь собственные зависимости (classpath). Это позволило решить огромное количество проблем.
IntelliJ IDEA научилась автоматически импортировать EAR-артефакты из билд-скриптов.
Для Spring Boot проектов добавленны подсказки внутри файлов YML и banner.txt. Аннотация \@SpringApplicationConfiguration учитывается при создании конфигураций запуска для тестов. Для пользовательских свойств конфигурации теперь работает Find usages.
Поддержка Spring MVC сильно улучшилась за счет поддежки аннотации \@EnableWebMvc.
Thymeleaf 3 Beta поддеживается “из коробки”.
Добавлена поддержка пользовательских диалектов: для них теперь доступны те же посказки, что и для стандартных.
Исправленно много проблем с поддержкой Thymeleaf 2.
Профайлер утечек и новые инспекции, появившиеся в Android Studio 1.5, теперь доступны и в IntelliJ IDEA.
Да-да, если вы еще не в курсе (или не верите своим глазам), неделю назад состоялся релиз Kotlin 1.0.
Kotlin совместим с Java 6, 7, 8, Android, и любыми Java фреймворками (такими как Java EE, Spring) и билд-системами (Gradle, Maven). Kotlin можно использовать в существующих Java проектах. С версии 1.0 Kotlin обратно-совместим со своими предыдущими версиямми.
IntelliJ IDEA 16 включает плагиин для Kotlin 1.0.
Ранее на Хабре уже была проведена первая сессия вопросов и ответов.
Работая над Kotlin, мы не забываем и о Scala: комплишен претерпел ряд улучшений. Во-первых, порядок предлагаемых вариантов теперь учитывает такие факторы, как тип символа, историю его использования и контекст. Предпочтение отдается локальным переменным, затем аргументам, затем полям класса, затем методам и т.д. Если в данном контексте ожидается тип, IntelliJ IDEA учитывает это в порядке предложенных вариантов.
Во-вторых, появился комплишен для выражений pattern matching c подсказкой имен свойств case-классов.
Поддержкка ES6 и TypeScript становится лучше с каждым днем. Добавлены рефакторинги Create method, Extract method, Inline method и Introduce field и интеншены Make class abstract, Make public/private и Remove modifier. Неиспользуемые import-выражения теперь подсвечиваются и убираются с помощью Optimize imports. Во время набора кода import-выражения добавляются автоматически.
Добавленна поддерджка TypeScript 1.8.
Для AngularJS 2 добавлен комплишн директив, переменных шаблонов, пользовательских обработчиков событий, путей в templateUrl и styleUrls полях, а также в event, data, и property bindings.
Также IntelliJ IDEA понимает компоненты, определенные с помощью module.component(), добавленного в AngularJS 1.5.
С новым отладчиком для Chrome гораздо лечге отлаживать асинхронный код и код с лямбда выражениями (arrow functions). Для асинхронного кода, стек фреймов включает место вызова асинхронного кода. При добавлении точек остановки, теперь можно выбрать конкреное лямбда выражение.
Также можно отлаживать main и render процессы Electron приложений.
Работа с базами данных
Если вы хотите удалить данные из таблиц, вам поможет новый инструмент: Truncate, который позволяет очень быстро и вне транзакции удалить данные из одной или более таблиц.
И наконец, Docker стал отдельным окном (tool window) и его интерфейс понемногу становится лучше и лучше: теперь правая панель отображает логи и позволяет редактировать настройки контейнеров. Образы и контейнеры теперь показываются раздельно и более понятно. Также мы поддержали Docker Machine.
Если вы хотите чтобы я написал о каких-то из новых фич отдельно (или о каких-то старых фичах), – просите в комментариях, и я с удовольствием напишу. Также буду рад ответить на любые вопросы.