- PVSM.RU - https://www.pvsm.ru -
Недавняя статья [1]на Хабре напомнила мне о том, сколько времени я провел пытаясь написать свой плагин к Intellij IDEA. Официальная документация по созданию плагинов хоть и есть, но её неожиданно мало.
В этой статье я расскажу о том, как зарегистрировать свой тип файла в Intellij IDEA. Это может понадобиться если вы пишете свой языковой плагин или хотите запускать внешний редактор для файлов. В качестве примера возьмем файлы Apache JMeter [2] (установка самого JMeter не требуется).
Итак, откроем существующий проект с plugin модулем или создадим новый. Как это сделать можно почитать в упомянутой статье [1]и в официальном туториале [3].
Нам понадобится иконка размером 16x16 пикселей. Сохраним ее в папку /resources/icons
и пометим папку как Source Root. Можно положить иконку прямо в src
.
Каждый тип файла в IntelliJ представлен в виде имплементации интерфейса com.intellij.openapi.fileTypes.FileType
. Создадим собственную реализацию:
public class JMeterFileType implements FileType {
public static final JMeterFileType INSTANCE = new JMeterFileType();
@NotNull @Override
public String getName() { return "JMeter"; }
@NotNull @Override
public String getDescription() { return "JMeter file"; }
@NotNull @Override
public String getDefaultExtension() { return "jmx"; }
@Override
public boolean isBinary() { return false; }
@Override
public boolean isReadOnly() { return false; }
@Override
public Icon getIcon() {
return IconLoader.getIcon("/icons/beaker.png");
}
@Override
public String getCharset(@NotNull VirtualFile file, byte[] bytes) {
return CharsetToolkit.UTF8;
}
}
Назначение методов можно почитать в JavaDoc’ах к интерфейсу [4], оговорю лишь несколько моментов.
INSTANCE
, которое нам скоро понадобится.isReadOnly
возвращает true, то тип файла можно изменить в настройках File > Settings > File Types.isBinary
влияет на то, будет ли файл открываться в текстовом редакторе. Файлы JMeter — это Java объекты, сериализованные в XML с помощью XStream. Руками такие файлы писать особого смысла нет, зато можно отслеживать изменения в системе контроля версий.
Следующий шаг — регистрация типа файла в системе. Для этого нам понадобится наследник класса com.intellij.openapi.fileTypes.FileTypeFactory
:
public class JMeterFileTypeFactory extends FileTypeFactory {
@Override
public void createFileTypes(@NotNull FileTypeConsumer consumer) {
consumer.consume(JMeterFileType.INSTANCE);
}
}
Осталось прописать JMeterFileTypeFactory
в plugin.xml
<idea-plugin version="2">
...
<extensions defaultExtensionNs="com.intellij">
...
<fileTypeFactory implementation="idea.plugin.jmeter.JMeterFileTypeFactory"/>
</extensions>
</idea-plugin>
Готово!
Посмотрим что получилось. Запустим плагин, при этом запустится новый экземпляр Intellij IDEA. Откроем File > Settings > File Types и видим как наш тип файла зарегистрирован:
Создадим новый проект и добавим в него JMeter файл. В дереве проекта видим, что у файла появилась иконка, а сам файл открывается в редакторе как простой текст.
Поскольку JMeter файлы — это обычный XML, давайте добавим подсветку синтаксиса. Делается это одной строчкой в plugins.xml:
<idea-plugin version="2">
...
<extensions defaultExtensionNs="com.intellij">
...
<syntaxHighlighter key="JMeter"
implementationClass="com.intellij.ide.highlighter.XmlFileHighlighter"/>
</extensions>
</idea-plugin>
… ну или почти одной. Здесь:
key
— это значение, возвращаемое JMeterFileType.getName()
.implementationClass
— это имплементация SyntaxHighlighter
.
Существует несколько готовых реализаций подсветки синтаксиса: HTML, Java, Regexp и др. Само собой можно создать свой SyntaxHighlighter
. Но это выходит за рамки статьи.
Запускаем и видим результат:
Подсветка синтаксиса для языковых плагинов немного отличается. Подробно останавливаться не буду. Перечислю только классы, на которые стоит обратить внимание:
Итак, у нас получилось зарегистрировать новый тип файла в Intellij IDEA с иконкой и подсветкой синтаксиса. Больше информации по разработке плагинов можно почерпнуть из официальной документации [5], исходного кода Intellij IDEA [6] или на форуме [7]. Полный код к посту можно найти на GitHub [8].
Автор: Sinclair2K
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/12883
Ссылки в тексте:
[1] статья : http://habrahabr.ru/post/148996
[2] Apache JMeter: http://jmeter.apache.org/
[3] туториале: http://confluence.jetbrains.net/display/IDEADEV/Getting+Started+with+Plugin+Development
[4] интерфейсу: https://github.com/JetBrains/intellij-community/blob/idea/117.798/platform/core-api/src/com/intellij/openapi/fileTypes/FileType.java
[5] официальной документации: http://confluence.jetbrains.net/display/IDEADEV/PluginDevelopment
[6] исходного кода Intellij IDEA: https://github.com/JetBrains/intellij-community
[7] форуме: http://devnet.jetbrains.net/community/idea/open_api_and_plugin_development
[8] найти на GitHub: https://github.com/ponomandr/idea-plugin-tutorial-1
Нажмите здесь для печати.