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

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

Подготовка

В первую очередь необходимо установить 1C:EDT (использовалась версия 2025.2.3+30) и IntelliJ IDEA (использовалась версия 2025.3.3). Для разработки плагина 1C:EDT достаточно использовать IntelliJ IDEA c установленным плагином OSGi (использовалась версия 253.28294.251).

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

Создать новый проект. Указать имя и расположение проекта. Язык 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.e1c.g5.v8.dt.check.components.BasicCheck.

package com.skycorvette.example;

import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.ICheckResultAcceptor;
import com.e1c.g5.v8.dt.check.components.BasicCheck;
import com.e1c.g5.v8.dt.check.settings.IssueSeverity;
import org.eclipse.core.runtime.IProgressMonitor;

import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.MODULE;

public class Validator extends BasicCheck<Object> {
    @Override
    public void check(Object object, ICheckResultAcceptor resultAcceptor, ICheckParameters parameters, IProgressMonitor progressMonitor) {
        super.check(object, resultAcceptor, parameters, progressMonitor);
    }

    @Override
    protected void configureCheck(CheckConfigurer checkConfigurer) {
        checkConfigurer.title("Example of verification")
                .description("Example of verification")
                .complexity(CheckComplexity.NORMAL)
                .severity(IssueSeverity.TRIVIAL)
                .module()
                .checkedObjectType(MODULE);
    }

    @Override
    public String getCheckId() {
        return "example";
    }
}
Добавить файл plugin.xml, который описывает, как плагин расширяет возможности 1C:EDT.
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
    <extension point="com.e1c.g5.v8.dt.check.checks">
        <category
                id="com.skycorvette.example"
                description="Examples of checks"
                title="Examples of checks">
        </category>
        <check
                category="com.skycorvette.example"
                class="com.skycorvette.example.Validator">
        </check>
    </extension>
</plugin>
Включить файл plugin.xml в состав сборки. plugin.xml

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

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

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

Открыть Run/Debug Configurations и добавить новую конфигурацию Remote JVM Debug. В конец файла 1cedt.ini отдельной строкой добавить аргументы командной строки для отладки -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005. Запуск и отладка Теперь можно запускать 1C:EDT и подключаться отладчиком IntelliJ IDEA.

Решение проблем

После внесения изменений в файл plugin.xml и пересборки проекта желательно полностью удалять директорию org.eclipse.osgi, расположенную в директории configuration 1C:EDT.

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