Разработка 1C:EDT Plugin в IntelliJ IDEA

Не обязательно использовать Eclipse RCP, особенно если больше по душе IntelliJ IDEA. В этом нет ничего сложного.

Подготовка

В первую очередь необходимо установить 1C:EDT (использовалась версия 2022.2.5+10) и IntelliJ IDEA (использовалась версия 2023.1.2 (Community Edition)). Для разработки плагина 1C:EDT достаточно использовать IntelliJ IDEA CE c установленным плагином OSGi (использовалась версия 231.8109.90).

Создание проекта

Создать новый проект. Указать имя и расположение проекта. Язык Java, система сборки IntelliJ. Пример кода в проект не добавлять. Создание проекта

Добавление библиотеки 1C:EDT

Открыть Project Structure и выбрать Libraries. Структура проекта Добавить новую Java библиотеку, выбрав путь к директории plugins из директории установки 1C:EDT. Добавление бибилиотеки

Класс активатор

Активатор не является обязательным классом, но в дальнейшем он все таки понадобится. Лучше создать его заранее, так как он управляет жизненным циклом плагина и потребуется для получения экземпляра плагина. В директории src необходимо создать Package com.skycorvette.example и в него добавить Java Class Activator, расширяющий реализацию класса org.eclipse.core.runtime.Plugin.

package com.skycorvette.example;

import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleContext;

public class Activator extends Plugin {
    @Override
    public void start(BundleContext context) throws Exception {
        super.start(context);
    }

    @Override
    public void stop(BundleContext context) throws Exception {
        super.stop(context);
    }
}

Структура файлов проекта

<root>
└─── src
     └── com.skycorvette.example
         └── Activator.java

Настройка OSGi

Открыть Project Structure и выбрать Modules. Добавление OSGi Добавить модуль OSGi и заполнить Manifest Generation.

Symbolic name: com.skycorvette.example;singleton:=true
Bundle activator: com.skycorvette.example.Activator
Bundle version: 1.0.0.1
Additional properties:
    Bundle-Vendor: Sky Corvette Team
    Bundle-Name: Example

Манифест В директории установки 1C:EDT рядом с директорией plugins создать директорию dropins. Если доступ на запись в данную директорию ограничен, необходимо предоставить. Указать расположение результирующего файла плагина, выбрав путь к созданной директории dropins. Результирующий файл

Проверка плагина в 1C:EDT

Собрать проект, запустить 1C:EDT и открыть окно About 1C:Enterprise Development Tools, нажать кнопку Installation Details и перейти к разделу Plug-ins. Проверить, что плагин присутствует в списке. Пока плагин ничего не делает.

Точка расширения

Пришло время реализовать в плагине функциональность, расширяющую возможности 1C:EDT. Например, валидацию в модулях встроенного языка. Для этого необходимо создать Java Class Validator, реализующий интерфейс com._1c.g5.v8.dt.bsl.validation.IExternalBslValidator. Интерфейс IExternalBslValidator объявлен устаревшим, так как существует новый механизм проверок. Используется только для демонстрации возможностей.

package com.skycorvette.example;

import com._1c.g5.v8.dt.bsl.validation.CustomValidationMessageAcceptor;
import com._1c.g5.v8.dt.bsl.validation.IExternalBslValidator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.util.CancelIndicator;

public class Validator implements IExternalBslValidator {
    @Override
    public boolean needValidation(EObject eObject) {
        return false;
    }

    @Override
    public void validate(EObject object, CustomValidationMessageAcceptor messageAcceptor, CancelIndicator monitor) {
        IExternalBslValidator.super.validate(object, messageAcceptor, monitor);
    }
}
Добавить файл plugin.xml, который описывает, как плагин расширяет возможности 1C:EDT.
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
    <extension point="com._1c.g5.v8.dt.bsl.externalBslValidator">
        <externalValidator
                class="com.skycorvette.example.Validator">
        </externalValidator>
    </extension>
</plugin>
Включить файл plugin.xml в состав сборки. plugin.xml

Результирующая структура файлов проекта

<root>
├─── src
│    └── com.skycorvette.example
│        ├── Activator.java
│        └── Validator.java
└─── plugin.xml

Запуск и отладка

Открыть Run/Debug Configurations и добавить новую конфигурацию JAR Application. В качестве Path to JAR указать файл org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar, расположенный в директории plugins установки 1C:EDT. Для MacOS указать VM options -XstartOnFirstThread. Запуск и отладка Теперь можно запускать 1C:EDT из IntelliJ IDEA и использовать отладку.

Комментарии и вопросы в telegram