Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Разработка плагина IntelliJ IDEA. Часть 3

Anna | 5.06.2014 | нет комментариев

В IntelliJ IDEA план инкапсулирует все начальные коды, библиотеки, сценарии сборки в цельном организационном блоке. Безусловно все действия в IDEA происходят в контексте плана. План может содержать коллекции модулей и библиотек. В зависимости от логических либо функциональных требований, дозволено сделать одномодульный либо многомодульный план.

Модули

Модуль – это отдельная сущность функциональности, которая может быть запущена, протестирована и отлажена самостоятельно.
Модули включают такие вещи как начальные коды, сценарии сборки, юнит-тесты, и т.д. Всякий модуль в плане может применять определенный SDK, либо наследовать SDK плана. Модули могут зависеть от других модулей в плане.

Библиотеки

Библиотека – это скомпилированный код в архиве (скажем, JAR-файл) от которого зависят модули.
IntelliJ IDEA Community Edition поддерживает три типа библиотек:

  • библиотека модуля – видна только в данном модуле, информация о ней сохраняется в *.iml-файл;
  • библиотека плана – видна внутри каждого плана, информация о ней сохраняется в *.ipr-файл;
  • глобальная библиотека – информация о ней сохраняется в файле applicationLibraries.xml, видимость которого распространяется на все планы.

 

SDK

Всякий план использует Software Development Kit (SDK). Для Java планов существует особый тип SDK, называемый JDK (Java Development Kit). SDK определяет какой API применяется при сборке плана. В многомодульном плане, по-умолчанию, SDK наследуется всеми модулями, но также допустимо определить отдельные SDK для соответствующих модулей.

Facet

Facet – это функциональность, ассоциированная с модулем, уведомляющая как взаимодействовать с содержимым модуля. Модуль может иметь несколько Facets.
В IntelliJ IDEA Ultimate Edition имеется настройка в параметрах плана, разрешающая назначать Facets, в различие от Community Edition, где предназначение Facet доступно лишь из API.

Строение плана

С точки зрения разработчика плагина, конструкция плана выглядит так, как показано на рисунке ниже.
План содержит один либо несколько модулей. Всякий модуль включает начальный код плагина и вызывает упорядоченный комплект сущностей, связанных с SDK и библиотеками. Модуль может иметь комплект Facets.

Работа с файлами планов, модулями, библиотеками

IntelliJ IDEA сберегает конфигурационные данные в XML-файлы. Список этих файлов зависит от формата плана.
Для формата планов, основанного на файле, информация сохраняется в сам файл плана «имя-плагина.ipr». Информация о модулях сохраняется в файлы «имя-модуля.iml», которые создаются для всякого модуля.
Для формата планов, основанного на директории, настройки плана сохраняются в несколько XML-файлов в поддериктории «.idea». Всякий файл ответственен за свой комплект настроек и имеет соответствующее наименование: projectCodeStyle.xml, encodings.xml, vcs.xml и так дальше. Данные модулей сохраняются в *.iml-файлах.
Для того Дабы трудиться с планами и файлами планов существуют несколько интерфейсов и классов:

  • интерфейс Project;
  • отвлеченный класс ProjectRootManager;
  • отвлеченный класс ProjectManager;
  • интерфейс ProjectFileIndex.

IntelliJ IDEA предоставляет следующие классы для работы с модулями:

  • отвлеченный класс ModuleManager;
  • интерфейс Module;
  • отвлеченный класс ModuleRootManager;
  • интерфейс ModuleRootModel;
  • класс ModuleUtil;
  • интерфейс ModifiableModuleModel;
  • интерфейс ModifiableRootModel.

Для приобретения списка библиотек дозволено перечислить все сущности модуля и предпочесть экземпляры интерфейса LibraryOrderEntry. Для приобретения классов, содержащихся в библиотеке дозволено применять способ Library.ModifiableModel.getUrls.
Для работы с facet существуют классы DefaultFacetsProvider и Facet.

Виртуальная файловая система IntelliJ IDEA

Виртуальная файловая система (VFS) – это компонент IntelliJ IDEA, инкапсулирующий множество функций для работы с файлами. Служит для следующих целей:

  • предоставление универсального API для работы с файлами самостоятельно от их физического местоположения (на диске, в архиве, на FTP-сервере и т.д.);
  • отслеживание изменений в файлах и предоставление как ветхой, так и новой версии их содержимого;
  • предоставление вероятности указать дополнительную информацию для файла внутри VFS.

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

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

Все операции по записи – синхронны, т.е. данные записываются на диск неотлагательно.
IntelliJ IDEA исполняет асинхронную операцию полного обновления содержимого при запуске. Также, по-умолчанию, обновление происходит при переключении из иного приложения, но это поведение дозволено настроить на вкладке «Settings | Synchronize files».
Операция синхронизации основана на временных метках, если дата модификации не изменилась, то IDEA не обновляет содержимое файла. По вероятности IntelliJ IDEA использует встроенные в операционную систему наблюдатели за файлами (inotify, epoll и т.д.).

События виртуальной файловой системы

Все метаморфозы, протекающие с виртуальной файловой системой, как итог выполнения операции обновления либо из-за действий пользователя именуются событиями виртуальной файловой системы.
Особенно результативный путь наблюдения за событиями VFS – это реализация интерфейса BulkFileListener и подписка на VirtualFileManager.VFS_CHANGES. Данный API предоставляет список всех изменений, произошедших во время операции обновления, что разрешает изготавливать пакетную обработку. Альтернативный путь – реализация интерфейса VirtualFileListener и регистрация его посредством VirtualFileManager.addFileListener(). Данный вариант разрешает обрабатывать метаморфозы поодиночке.

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

Продолжение следует.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB