
Хотите использовать лямбда-выражения, но вынуждены использовать стабильный JRE? Теперь это возможно с утилитой Retrolambda, которая преобразует байткод Java 8 в пригодный для рантаймов Java 7, 6 и 5, позволяя использовать лямбда-выражения и ссылки на методы на этих платформах. Конечно, придется отказаться от улучшенного Java 8 Collections API, но, к счастью, существует множество альтернативных библиотек, работа с которыми упростится благодаря лямбда-выражениям.Читать полностью »
Рубрика «java» - 265
Разработка плагина IntelliJ IDEA. Часть 6
2013-07-23 в 7:51, admin, рубрики: development, intellij idea, java, plugins, ПрограммированиеВ этой части: рефакторинги, форматирование, настройки и другие полезные функции. Предыдущая часть.
Рефакторинг «Переименование»
Операция переименования в IntelliJ IDEA похожа на «Find Usages», IDEA использует те же правила для поиска элементов для переименования и тот же индекс слов для нахождения файлов, в которых могут быть ссылки на элемент, который будет переименован.
Когда выполняется этот рефакторинг, на целевом элементе вызывается метод PsiNamedElement.setName(), а для всех ссылок на него – метод PsiReference.handleElementRename(). Оба метода выполняют одно основное действие – замену нижележащего AST-узла, новым, содержащим введенный пользователем текст. Создание полностью корректного AST бывает довольно сложным, но можно воспользоваться следующим методом: создать фиктивный файл пользовательского языка, содержащий необходимый узел, и затем скопировать его.Читать полностью »
Разработка плагина IntelliJ IDEA. Часть 5
2013-07-21 в 9:36, admin, рубрики: development, intellij idea, java, plugins, ПрограммированиеВ этой части: подсветка, ссылочная система, автодополнение, навигация по коду. Предыдущая часть здесь.
Подсветка синтаксиса и ошибок
Класс, используемый в IDEA для определения, как соответствующий текстовый диапазон должен быть подсвечен, называется TextAttributesKey. Экземпляр этого класса создается для каждого различного типа элементов, которые должны быть подсвечены (ключевые слова, числа, строки, комментарии и т.д.), он определяет атрибуты по-умолчанию, которые применяются к элементам соответствующего типа (например, ключевые слова выделяются полужирным, числа – синим, строки – курсивом и зеленым фоном). Отображение TextAttributesKey на специфические атрибуты, используемые в редакторе, определено классом EditorColorsScheme и может быть настроено пользователем, если плагин предоставляет соответствующий конфигурационный интерфейс. В подсветке может использоваться наложение нескольких TextAttributeKey: например, один ключ может определять начертание, а другой – цвет элемента.Читать полностью »
Библиотека Trove. Коллекции примитивных типов в Java
2013-07-20 в 13:59, admin, рубрики: collections, java, Программирование, метки: collections, javaВ стандартной библиотеке Java отсутствует возможность оперировать коллекциями примитивных типов, таких как int, long и т.д. Стандартный выход — использовать объекты классов Integer, Long и т.д.
Такой подход хорошо работает на небольшом количестве элементов, поскольку, во-первых, при любой операции происходит autoboxing/autounboxing и во-вторых, в коллекции хранятся ссылки на объекты в heap. Объекты в heap не только вносят дополнительный overhead по памяти, но и создают нагрузку на GC.
Есть еще один неочевидный минус объектов в heap — кэширование в современных процессорах. Процессор загружает данные в кэш блоками. В случае последовательной обработки массива, в кэш загружается сразу несколько элементов. В случае же объектов разбросанных по heap, попаданий в кэш будет меньше. Подробнее про кэширование и иерархию памяти здесь.
Библиотека Trove представляет стандартный интерфейс коллекций для работы с примитивными типами. Для большинства применений, коллекции Trove работают быстрее и потребляют меньше памяти.
Читать полностью »
Разработка плагина IntelliJ IDEA. Часть 4
2013-07-20 в 11:57, admin, рубрики: development, intellij idea, java, plugins, ПрограммированиеНаконец добрались до самой мякотки, в этой части — лексический и синтаксический разбор, PSI (Program Structure Interface), стабы (Stubs). Предыдущие части: 1, 2, 3
IntelliJ IDEA это не только Java IDE, но и мощная платформа для построения инструментов разработки для любого языка. Большинство функций IDEA состоят из двух частей: независимой от языка и специфической для конкретного языка программирования. Поэтому поддержка особенностей какого-либо языка не требует особых усилий – необходимо реализовать лишь специфическую часть, а независимая от языка предоставляется платформой. В дополнение, IDEA предоставляет мощный фреймворк, который позволяет реализовывать собственные функции, необходимые при разработке инструментария.
Регистрация типа файла
Первым шагом при разработке плагина специфического языка является регистрация связанного с ним файлового типа. Обычно IDEA определяет тип файла в соответствии с его именем (расширением).
Тип файла специфического языка – это класс, унаследованный от LanguageFileType, который передает экземпляр класса Language в родительский конструктор. Для регистрации типа файла необходимо предоставить реализацию интерфейса FileTypeFactory, зарегистрированную в точке расширения com.intellij.fileTypeFactory:
<extensions defaultExtensionNs="com.intellij">
…
<fileTypeFactory implementation="com.intellij.lang.properties.PropertiesFileTypeFactory"/>
…
</extensions>
Разработка плагина IntelliJ IDEA. Часть 3
2013-07-19 в 18:22, admin, рубрики: development, intellij idea, java, plugins, ПрограммированиеНемного теории о проектах и VFS. Предыдущая часть тут.
Структура проекта
В IntelliJ IDEA проект инкапсулирует все исходные коды, библиотеки, сценарии сборки в едином организационном блоке. Абсолютно все действия в IDEA происходят в контексте проекта. Проект может содержать коллекции модулей и библиотек. В зависимости от логических или функциональных требований, можно создать одномодульный или многомодульный проект.
Модули
Модуль – это отдельная сущность функциональности, которая может быть запущена, протестирована и отлажена независимо.
Модули включают такие вещи как исходные коды, сценарии сборки, юнит-тесты, и т.д. Каждый модуль в проекте может использовать определенный SDK, либо наследовать SDK проекта. Модули могут зависеть от других модулей в проекте.Читать полностью »
Разработка плагина IntelliJ IDEA. Часть 2
2013-07-19 в 14:07, admin, рубрики: development, intellij idea, java, plugins, ПрограммированиеПродолжаем неравный бой с документаций Intellij IDEA. Предыдущая часть находится здесь.
Конфигурационный файл плагина
Вся функциональность, предоставляемая плагином, а также описание и данные об авторе перечисляются в файле plugin.xml.
Рассмотрим структуру файла, в котором присутствуют практически все значимые элементы.
Читать полностью » Разработка плагина IntelliJ IDEA. Часть 1
2013-07-19 в 9:06, admin, рубрики: development, intellij idea, java, plugins, ПрограммированиеЗа последнее время у меня накопилось достаточно материалов по разработке плагинов для IntelliJ IDEA, чем и собираюсь поделиться с читателим.
Среда разработки и инфраструктура
Прежде чем начать программировать плагин стоит рассмотреть устройство среды разработки, поддерживаемые функции и их реализацию, и, разумеется, настройку IDE необходимую для разработки плагинов.
Для разработки плагинов подойдет любая современная версия Intellij IDEA – она уже включает в себя полный набор необходимого инструментария.Читать полностью »
AOP in action. AspectJ (CTW) + Spring + LTW
2013-07-18 в 7:58, admin, рубрики: aop, java, maven, spring, Weblogic, Программирование, разработка, метки: aop, java, maven, spring, WeblogicРешил внедрить АОП логирование на проект и не внедрил. Как и почему, собственно и хочу поделиться.
Я не буду описывать суть и принципы АОП, а опишу только те проблемы, с которыми я столкнулся, и решения которых заняло много времени.
У меня было в распоряжении Spring, WebLogic, google.com и проект, куда я хотел внедрить АОП логирование. Скажу сразу, до этого я никогда не работал с АОП.
Проблема № 1
Spring AOP – использует proxy-based подход.
Если у нас есть класс (СlassA) с методами (methodA, methodB), при этом methodB() вызывает methodA() и аспект (допустим after) который должен выполняться при вызове methodA():
Изучаем Storm Framework. Часть III
2013-07-15 в 13:43, admin, рубрики: BigData, java, storm framework, параллельное программирование, метки: BigData, java, storm frameworkВо второй части статьи рассказывалось о механизмах обнаружения ошибок в процессе обработки.
Обработка завершилась с ошибкой, что делать дальше? Вполне возможно, что потеряна связь с одним из узлов кластера или временно недоступна база данных. В этом случае, нельзя с уверенностью сказать, какие операции выполнились успешно, а какие — нет. Если все операции в цепочке повторно применимы (идемпотентны), например установка флага, то можно просто перезапустить обработку. Если нет, то на помощь приходят механизмы транзакций Storm.
Читать полностью »
