Как сделать плагин для 1С:EDT для начинающего Java+1C разработчика. Часть 1

17.10.20

Разработка - EDT

Введение в разработку плагинов для 1С:EDT. Цель: показать, что плагины для 1С:EDT можно делать быстро и легко.

Для кого это может быть полезно:

  • для тех, кто знает, что такое Java, и немного умеет писать на Java;
  • для тех, кто знает, что такое 1С и хочет делать плагины для EDT;
  • даже если вы совсем ничего не знаете про Java, но вам нравится сама идея плагинов EDT – я надеюсь, вы сможете потом это пересмотреть и разобраться во всем самостоятельно.

Содержание:

Что такое target-платформа Eclipse RCP, и как ее использовать

Пример создания плагина с помощью конструктора

Что такое «точки расширения»

Документация для разработчика плагинов EDT

Бонус: два видео по созданию плагинов для 1С:EDT

 

Target-платформа (Eclipse RCP)

 

Рассмотрим, что такое Eclipse.

  • Eclipse еще часто называют Eclipse RCP (Rich Client Platform – богатая клиентская платформа). Подробнее об основных возможностях Eclipse можно прочитать по ссылке https://ru.wikipedia.org/wiki/Eclipse_RCP.
  • На Eclipse сделаны две основные в данном контексте IDE, которые мы будем использовать:
    • JDT (Java Dev Tool);
    • 1C:EDT (1C:Enterprise Dev Tool).
  • Кроме этого на Eclipse сделано гигантское количество приложений – есть ссылка https://en.wikipedia.org/wiki/List_of_Eclipse-based_software, где даже согласно моим знаниям представлены не все приложения на Eclipse.
  • Еще на базе Eclipse сделано очень много проектов, которые включаются в ту или иную сборку/поставку или поставляются как отдельные приложения. По ссылке https://projects.eclipse.org/ можно увидеть 20 страниц проектов – это очень богатая разветвленная сеть, здесь можно что-то взять и переиспользовать потом у себя.

 

Структура Eclipse RCP

 

 

Разберемся, из чего состоит платформа Eclipse RCP. Я не нашел об этом доступной и понятным языком написанной информации, кроме единственной картинки на английском языке, которая чуть-чуть отражает суть. Потом я нарисовал свою картинку – следом покажу.

Платформа Eclipse RCP представляет собой набор фреймворков, таких, как:

  • UI-часть – это:
    • оконная система,
    • SWT (Standard Widget Toolkit) – библиотека стандартных виджетов (кнопки, поля ввода, таблицы и пр.);
    • более высокоуровневая UI-часть – JFace и другие классы, которые делают создание интерфейса более приятным и удобным;
  • система Workspace (вы, как EDT-шники, должны знать, что воркспейс – это отдельный проект);
  • Debug – это отладка;
  • Team – это все, что касается версионирования и работы в команде, сюда относится не только Git, но и другие варианты версионирования и взаимодействия;
  • и большая система хэлпа.

Это – базовая часть, которая относится к платформе Eclipse.

На основе платформы Eclipse сделаны:

  • JDT (Java Development Tools);
  • для JDT реализована система разработки плагинов PDE (Plug-in Development Environment);
  • и здесь справа еще нарисованы ваши «Инструмент 1», «Инструмент 2» и «Инструмент 3».

 

Что такое 1С:EDT и JDT

 

 

Давайте попробуем перенести все это на EDT и JDT.

На Инфостарте есть замечательная статья, где коллега-первопроходец рассказывает, как установить target-платформу внутрь EDT и разрабатывать плагины внутри самой EDT. Большое спасибо, что автор не постеснялся, рассказал, как сделать первый плагин – я знаю, что некоторые ребята научились на этом делать плагины. Но я бы не сказал, что он выбрал правильный путь для разработки, и теперь попытаюсь рассказать со своей колокольни, как разрабатывать плагины, и что собой представляют 1С:EDT и JDT.

Итак, у нас есть:

  • Java Runtime Environment, необходимая для исполнения Java-приложений;
  • какая-то часть Eclipse Platform;
  • JDT – среда для разработки на Java и PDE, позволяющая разрабатывать плагины для нее;
  • отдельно идет EDT – она относится только к Eclipse Platform и никакого отношения к JDT не имеет.
  • и точно так же любые ваши приложения (ваши DT), которых может быть очень много – они все используют какую-то часть платформы Eclipse и не имеют прямого отношения к JDT или к EDT.

 

 

Поэтому сборки, которые сделаны на основе платформы Eclipse или каких-то компонентов, могут собираться по-разному.

Здесь на слайде обведено, как собирается стандартная JDT.

 

 

А вот так собирается и поставляется EDT – это немного неточно, поскольку сама Java Runtime не входит в состав поставки, но используется EDT так, как показано на слайде.

 

 

Какая-нибудь другая DT будет тоже включать платформу (или какую-то ее часть) и какие-то еще дополнительные инструменты и собираться соответствующим образом.

 

 

Нас сегодня интересует часть, которая показана на слайде, потому что плагины для EDT мы будем разрабатывать именно на платформе JDT, используя PDE и опираясь на возможности target-платформы.

Соответственно, target-платформа (целевая платформа) – это EDT вместе с Eclipse Platform.

Именно для нее мы будем разрабатывать плагин, используя PDE и JDT.

 

Окружение разработчика

 

 

Для разработки плагина EDT необходимо установить :

  • Java11 – неважно, чьей она сборки, но нам нужна полная сборка с Open JFX.
  • Дальше нужно установить Eclipse IDE. На официальном сайте Eclipse несколько вариантов установщиков для Java, которые компонуются с разным количеством инструментов. Вариант выбора – это всего лишь набор компонент, которые вы ставите при первой установке. Все остальное можно доставить отдельно, и получится ровно та же поставка:
    • У меня используется Eclipse IDE for Committers – это Eclipse JDT и PDE вместе взятые, больше там ничего особого нет.
    • Есть еще Eclipse for RCP and RAP Developers – он тоже подходит, у него единственное отличие – это редактор XML и какие-то дополнительные возможности для XML, но для наших задач это сегодня не нужно.
  • Кроме этого нам потребуются плагины:
    • Enhanced Class Decompiler – заменяет стандартный декомпайлер от Eclipse и делает просмотр скомпилированных классов более удобным;
    • PDE Source Lookup – позволяет автоматически подтягивать исходники, которые есть в публичных репозиториях;
    • Sonarlint – 1С-ники должны знать, что это такое;
    • ResourceBundle Editor – реализует UI интерфейс для редактирования property-файлов Java (файлов свойств, которые нужны для локализации на нескольких интерфейсах);
    • и несколько других плагинов, которые можно использовать, а можно и не использовать.

 

Где взять target-платформу

 

Target-платформу, которая входит в состав EDT, со всеми ее компонентами можно взять по ссылкам https://edt.1c.ru/releases/sapphire/2020.2/ или https://edt.1c.ru/releases/sapphire/2020.3/. Эти ссылки можно найти в примере плагина для EDT на GitHub.

 

 

В профиле компании «1С» на GitHub есть репозиторий dt-example-plugins с примером плагина для EDT.

В свойстве «repository» файла default.target находится ссылка на репозиторий текущей target-платформы – я ее просто отсюда скопировал.

 

 

Эту ссылку в репозитории регулярно обновляют, по этому же адресу лежит и платформа 2020.3.

 

Установка target-платформы

 

Теперь, когда вам в общих чертах понятно, что target-платформа – это список бандлов, которые входят в состав EDT, давайте разберемся, как с этой сборкой работать.

 

 

Создадим новый проект.

 

 

В данном случае, нам нужен просто обычный проект Project (он находится в группе General).

 

 

Проект, содержащий target-платформу, в мире Eclipse обычно называется target. Или можно с префиксом вашего текущего проекта, и в конце target. В данном случае у нас один проект в репозитории, поэтому назовем его просто target.

 

 

Чтобы добавить в этот проект target-платформу, нам нужно опять вызвать мастер создания (File-New-Other).

 

 

В мастере создания раскрыть группу Plug-in Development (здесь находятся все необходимые компоненты для того, чтобы создавать плагины) и выбрать здесь Target Definition – это как раз наша target-платформа.

 

 

Разместим ее в нашем текущем проекте и назовем default.

В разделе инициализации оставим переключатель «Nothing Start with an empty target definition» (стартовать с пустой target-платформой). Другие варианты нужны, если мы разрабатываем для самой JDT (например, можно использовать текущую запущенную платформу как базу для нашей будущей платформы).

 

 

У нас открывается пустой редактор Target Definition. В списке Locations добавляем элемент и указываем, что будем брать target-платформу с определенного сайта.

 

 

Здесь в поле Work with мы вбиваем адрес, откуда будет скачиваться target-платформа – в нашем случае, это https://edt.1c.ru/releases/sapphire/2020.3/.

Поскольку платформа является платной, нам необходимо ввести логин и пароль, после чего начнется скачивание всей основной информации о target-платформе.

 

 

Информация скачалась, но в таблице доступных бандлов мы здесь ничего не видим. Это потому, что в текущей публикации нет никаких категорий для бандлов, а у нас стоит галочка «Разобрать по категориям».

Снимаем эту галочку и видим абсолютно все, что входит в нашу target-платформу.

 

 

Нажимаем кнопку «Select All» и выбираем здесь все – хуже от этого не будет.

Сразу могу обратить ваше внимание на галочку «Include required software» (включать обязательный софт, который требуется другим компонентам). Ее нужно снять, иначе, если вдруг какой-нибудь зависимости в этой target-платформе нет, она не скачается. Такое поведение часто встречается – например, у репозиториев maven.

И нажимаем кнопку «Finish» – этим действием мы говорим, что для нашего воркспейса сейчас необходимо скачать всю target-платформу, которая есть на определенном сайте (этот сайт для разных версий EDT меняется).

Здесь важный момент – та версия Eclipse, на которой мы сейчас разрабатываем в JDT, не обязана совпадать с целевой target-платформой, поэтому я вначале рассказал о том, что я выбрал 2020.03 JDT, но внутри target-платформы для EDT на самом деле платформа Eclipse другой версии. И возможно, когда-нибудь при каких-то обстоятельствах вы можете напороться на то, что различающиеся платформы текущего Eclipse и EDT приведут к каким-нибудь странностям. В нашем примере ничего плохого не будет, но просто на будущее советую внимательнее изучить, что такое версии target-платформы, как их отдельно скачать, как скачать определенную версию JDT. Я специально не стал на это сегодня обращать внимание – есть куча вариантов с разными возможностями, мы сейчас на них останавливаться не будем. Пока нам для сегодняшнего примера вариант с отличающейся в JDT версией Eclipse от нашей target-платформы ничем мешать не будет, но этот момент нужно помнить и учитывать, что когда-то это может сыграть определенную роль.

 

 

Дальше нам нужно нажать кнопку «Reload Target Platform», которая применяет текущую скачанную target-платформу из этого файла и делает ее активной в нашем воркспейсе.

 

 

После того как мы скачали target-платформу, нам нужно настроить конфигурацию отладки и вообще конфигурацию запуска.

 

 

Мы создаем конфигурацию отладки – ее нужно отнаследовать от пункта «Eclipse Application» в дереве конфигураций запуска.

 

 

Из того, что нужно еще дополнительно настроить отдельно – нужно выбрать здесь в пункте «Run as product» значение com._1c.g5.v8.dt.product.application.rcp. В остальном – все стандартно.

 

 

Обратите внимание на галочку «Clear the configuration area before launching» – она должна стоять, это обычно помогает.

 

 

Убедитесь, что в поле «Execution environment» стоит нужная JDK 11-й версии.

И можно запускать отладку по кнопке Debug.

 

 

Первый запуск говорит, что есть какие-то проблемы с локализационными фрагментами. Но они нам не важны, поэтому будем игнорировать эти диагностики. Нажимаем «Continue».

 

 

Стартует проект с демо-примером – мы проверили, что target-платформа запускается, и в ней можно использовать  отладку.

 

Пример создания плагина с помощью конструктора

 

Напомню, мы хотели реализовать плагин с помощью конструктора. Давайте сделаем это, чтобы вы поняли, насколько быстро и легко создать плагин.

 

 

В Eclipse есть очень много разных конструкторов, которые позволят вам создать самые различные плагины, используя возможности target-платформы Eclipse.

 

 

Может быть и EDT когда-нибудь будет выпускать свои примеры, а пока что для создания проекта плагина у нас есть возможность использовать стандартные шаблоны Eclipse. Создадим в мастере новый проект с типом Plug-in Project.

 

 

Назовем его test-ui.

 

 

На втором шаге все настройки оставим стандартно, нас это сейчас не интересует.

 

 

На третьем шаге есть некоторое количество шаблонов, которые генерируют готовые плагины – их выбор доступен при включенной галочке «Create a plug-in using one of the templates».

 

 

При выборе пункта «Custom plug-in wizard» мы можем выбрать и даже скомбинировать различные примеры.

 

 

Также в этом окне мы можем выбрать пример команды «Hello, World Command» – справа показано описание того, что этот пример делает и как это реализовано.

Это усложненный пример простой команды, запускаемой из меню – он специально сделан более сложно для того, чтобы показать все особенности того, как можно использовать команды в UI.

 

 

Оставляем все по умолчанию и нажимаем кнопку Finish.

 

 

У нас создался проект плагина test-ui – давайте его сразу и запустим.

Этот пример реализует добавление пункта меню и команды, при вызове которой открывается диалоговое окно. На примере этого плагина мы посмотрим, как происходит встраивание нашего кода в IDE.

 

 

У нас появился пункт меню Sample Menu, и в него добавилась команда Sample Command

 

 

При нажатии на эту команду мы получаем диалоговое окно с надписью «Hello, Eclipse world».

 

Что такое «точки расширения»

 

Давайте теперь разберемся, как все это работает изнутри.

 

 

В файле SampleHandler у нас есть обработчик команды, в котором вызывается метод MessageDialog.openInformation() – при этом создается определенный класс UI-диалога, этот диалог открывается, и в нем выводится «Hello, Eclipse World».

 

 

По кнопке F3 можно перейти в исходники и посмотреть, что на самом деле запускает эта фабрика.

 

 

Здесь видно, как она создает MessageDialog и открывает его.

Как это подключается в нашу систему?

Eclipse, как и любая расширяемая система, построена на определенных механизмах расширения. Вариант того, как коннектить между собой какие-то определенные компоненты, в Eclipse называется «Точки расширения» (ExtentionPoints). Это очень богатый механизм, который позволяет сделать очень многое – в Eclipse Platform есть огромное количество точек расширения для UI, куда можно встроиться.

Поскольку EDT построено на Eclipse Platform, соответственно, мы уже можем использовать все точки расширения UI, описанные для Eclipse Platform. В данном случае мы не задействовали ничего абсолютно специфичного для EDT, а задействовали только часть, которая относится к самой платформе.

 

 

В этом списке выведены используемые точки расширения. И мы сюда добавляем какие-то данные, которые зачитывают механизм точек расширения.

 

 

Чтобы нам добавить в наш плагин еще какую-то точку расширения, мы можем нажать в этом списке Add и поискать здесь, что нам нужно.

 

 

Можно снять галочку «Show only extension points from the required plug-ins», и тогда мы будем искать по всем доступным точкам расширения, а не только по тем точкам расширения, для которых у нашего плагина в target-платформе есть зависимость – это очень важно, мы этот момент потом рассмотрим.

 

 

В точках расширения описывается то, что и как мы делаем, и по каждой точке расширения можно открыть справку.

 

 

Не по всем точкам расширения справка написана хорошо. Это не касается Eclipse или EDT, а зависит только от того, может ли разработчик конкретной функциональности писать справку или не может. Часто бывает такое, что читаешь, и не понимаешь. Поэтому иногда приходится гуглить.

В интернете очень много примеров того, как это использовать. Но тут важно понимать, что вы ищете, и какие вопросы писать. Например, по запросу «как расширить меню в EDT» вы ничего не найдете. Но если вы напишете «Eclipse UI commands extension point», примеров будет очень много.

Как вы видите, все это может помочь нам при написании плагинов для EDT.

 

 

Итак, мы сначала регистрируем нашу команду:

  • у нее есть какой-то идентификатор;
  • принадлежность к категории;
  • здесь можно указать обработчик по умолчанию и т.д.

В этом примере нам обработчик по умолчанию указывать не нужно – обработчик команды регистрируется отдельно, чтобы показать, что любой обработчик команды можно переопределить. Вы можете взять какую-нибудь стандартную уже существующую команду и переопределить ее обработчик. Например, навесить на команду Ctrl+C (Ctrl+V) какое-то свое поведение в своей форме. Или в зависимости от какой-нибудь панельки, которую вы добавляете к себе из какого-то другого плагина, переопределить поведение какой-нибудь чужой команды.

Как видите, возможности в UI получаются очень богатые и сложные, поэтому есть и простой вариант, а есть и посложнее.

 

 

Биндинги – это сочетания клавиш на клавиатуре, на которые будет реагировать ваша команда. Их также можно переопределять, дополнять и т.д.

 

 

После регистрации команды можно указать, в каких меню она должна отображаться,.

И здесь тоже, прочитав справку от EDT, можно найти информацию о том, где должна отображаться ваша зарегистрированная команда, как заполнять значения параметров меню и нашей команды – можно добавлять сюда еще всякие параметры для UI-редактирования и т.д.

 

 

Как мы видим, наша команда отображается на тулбаре и в дополнительном меню.

 

Документация для разработчика плагинов для 1C:EDT

 

Теперь давайте разберемся с документацией для разработчика плагинов для 1С:EDT.

Часто на канале EDT меня спрашивают: «Почему разработчики не поставляют документацию?»

 

 

На самом деле поставляют, и она очень большая. Она всегда идет в поставке вместе с EDT в файле index.html, который находится в папке plugin-development\documentation-html.

В ней несколько больших разделов, а также приведены все основные ссылки, прочитав которые вы почерпнете много важного и полезного.

Сегодня мы будем обращать внимание в основном на два раздела:

  • раздел «Модель встроенного языка», поскольку наш сегодняшний пример – это валидация;
  • и раздел «Возможности по работе со встроенным языком».

 

 

В частности, нас интересует описание точек расширения встроенного языка.

 

 

Понятно, что, если вы в первый раз столкнулись с точками расширения, представленной здесь информации мало. Но разобравшись с тем, что такое точки расширения, и как ими пользоваться – информации, представленной здесь, оказывается достаточно, чтобы продолжить работу.

Конечно, для компании, которая выпускает EDT, написание документации – это деньги, которые придется потратить вместо исправления ошибок или новой нужной функциональности. И поскольку это сейчас не в приоритете, документация в EDT в таком спартанском виде.

Но эта документация вполне приличная, ее хватает на все ближайшие задачи.

 

 

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

Эта информация может понадобиться в частности для валидации модели данных BSL-модуля.

 

 

Кроме этого, есть пример плагина dt-example-plugins, который дает дополнительные знания о модели взаимодействия, редактировании модуля и т.д.

 

Бонус: два видео по созданию плагинов для 1С:EDT

 


Что такое таргет-платформа Eclipse и как с ней работать

 


Создание плагина для 1С:EDT с помощью конструктора

 

В следующей части рассмотрим создание плагина проверок/валидаций для 1С:EDT.

 

****************

Статья подготовлена совместно с редакцией Инфостарта на основе серии обучающих видео по созданию плагинов для 1С:EDT.

java EDT plugin новичок обучение tutorial

См. также

EDT Программист Бесплатно (free)

Новый механизм отладки в 1С: Предприятие значительно упрощает процесс отладки приложений на пустой базе данных. Он позволяет разработчикам подключаться к базе данных, предоставленной пользователем или бизнесом, и отлаживать конфигурацию без необходимости иметь все данные у себя. Этот механизм особенно полезен для отладки внешней обработки обмена данными в Enterprise Data, где используется множество баз источников данных. Настройка сервера отладки и подключение к нему через EDT позволяет разработчикам эффективно перехватывать сеансы и отлаживать базы данных, которые не находятся в их проекте.

20.09.2024    7781    kraspila    25    

3

EDT Групповая разработка (Git, хранилище) Программист Платформа 1С v8.3 Бесплатно (free)

Заказчики любят EDT+Git за прозрачность и контроль качества. А у разработчиков есть две основные причины не любить EDT – это тормоза и глюки. Расскажем о том, что нужно учесть команде при переходе на EDT+Git.

14.08.2024    7636    lekot    34    

8

DevOps и автоматизация разработки EDT Бесплатно (free)

Даже в рамках одной компании подходы к организации командной разработки могут отличаться: методикой работы с ветками, организацией тестовых и разработческих контуров, параллельным использованием хранилищ или полным переходом на Git. Расскажем, какие варианты распределения серверных стендов и организации CI/CD выбрали для своих команд тимлиды двух отделов, и как у них происходило внедрение 1С:EDT.

05.09.2023    1892    WhatIsLoveMakoveev    0    

5

DevOps и автоматизация разработки EDT Программист Бесплатно (free)

Использование EDT дает преимущества даже для тех, кто до сих пор остается в конфигураторе. Достаточно настроить разбор основного хранилища разработки в GitConverter и автоматизировать CI на GitLab с помощью скриптов на 1С:Исполнителе. Статья о том, как задействовать для кодовой базы проекта валидацию EDT, используя встроенный механизм GitLab Code Quality, и генерировать дымовые тесты для Vanessa Automation.

23.08.2023    5961    doublesun    25    

37

EDT Тестирование QA Программист Бесплатно (free)

EDT позволяет не только полноценно использовать гитфлоу при разработке – изолировать код по веткам в рамках задач и анализировать мерж-реквесты, но и нативно запускать тесты, а также видеть покрытие кода прямо в редакторе. Расскажем о том, как получить от 1С-разработки в EDT максимум пользы и автоматизировать сборку поставки из EDT с помощью Jenkins.

19.07.2023    4862    yukon    12    

40

EDT Программист Россия Бесплатно (free)

Проблема не активирующегося контекста проекта в EDT и вариант ее обхода.

12.12.2022    2835    AntonChausov    2    

6

EDT Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

EDT позволяет работать с кодовой базой конфигураций напрямую – использовать GIT, помещать изменения в ветки и запускать тесты до попадания в основную кодовую базу, чтобы добиться «зеленых ночных сборок» для конфигурации. Разработчик из компании «Первый БИТ» Валерий Дыков на конференции Infostart Event 2021 Post Apocalypse рассказал, как безболезненно перейти на EDT и получить преимущества работы с GIT, продолжая работать в конфигураторе.

01.09.2022    10440    Begemoth80    21    

42

EDT Механизмы платформы 1С Программист Платформа 1С v8.3 Россия Абонемент ($m)

Внешняя обработка позволяет выполнять выборочную выгрузку и загрузку объектов конфигурации 1С.

1 стартмани

26.08.2022    4577    10    user1041830    4    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ktb 629 17.10.20 23:32 Сейчас в теме
2. D_astana 110 18.10.20 09:53 Сейчас в теме
3. TuneSoft 247 18.10.20 16:14 Сейчас в теме
Круто.
Очень длинная статья.
А можно вкратце в комментарии уточнить для чего нужно создавать плагин для EDT?
4. marmyshev 348 18.10.20 17:44 Сейчас в теме
(3) много разных идей - например сделать интеграцию с вашей системой управления, сделать проверки кода, какие-либо инструменты обработки кода/метаданных по правилам.
Смысл в том, что теперь можно сделать очень многое в дополнение у стандартному инструментарию.

Как пример - расширение 1C:Language Tool, или плагин 1C:SSL-support
Irwin; TuneSoft; +2 Ответить
6. Darklight 33 19.10.20 09:19 Сейчас в теме
(3)Например, чтобы EDT некоторые функции из Снегопата
Вот тут некоторые расширения самого Снегопата

Или Турбоконфа...

А можно сделать и ещё более интересное - например альтернативный редактор Форм или Макетов, свои средства анализа и рефакторинга кода, свой препроцессор, или даже свой компилятор/конвертер кода....

Например, я бы сделал плагин для управления метаданными (и кодом) с анализом "функциональных опций" - чтобы в зависимости от выставленных опций - в ИБ попадали те-или иные куски метаданных и программного кода - в зависимости от установленных опций для этой ИБ. Например, для какой-то ИБ может использоваться некое измерение регистра (целого списка регистров), а для остальных - не использоваться - так вот в остальных это измерение можно сразу исключить из регистра, как и программный код (в т.ч. запросов) его получающий/обрабатывающий/записывающий/отображающий (естественно - всё это должно быть соотвествующим образом помечено).

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

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

Много чего ещё можно придумать! Автору большое спасибо за статью!
8. marmyshev 348 19.10.20 09:55 Сейчас в теме
(6) прикольные идеи! Когда начнёшь что-то делать?))) приходи на канал по разработке плагинов...
9. Darklight 33 19.10.20 12:58 Сейчас в теме
(8)Идей у меня очень много, как и открытых проектов. Но до разработки плагинов ещё не дорос - надеюсь данный цикл статей мне в этом поспособствует.

Но... язык Java мне не нравится - сейчас я изучаю язык Kotlin - если буду писать плагины для Eclipse - то уже на Kotlin

Вот бы ещё тему интеграции с платформой 1С: Предприятие 8 разобрать (от интеграции с агентом 1С-конфигуратора, до написания собственного агента отладчика) - вообще шикардос было бы!
11. user907889 20.10.20 13:33 Сейчас в теме
(9)
Но... язык Java мне не нравится - сейчас я изучаю язык Kotlin - если буду писать плагины для Eclipse - то уже на Kotlin

А чем же вам насолила Java? Я конечно не претендую на открытие истины, но даже сами разработчики Котлин рекомендуют сначала изучать Java Core и прочие банальности, в потом уже учить Котлин...
12. Darklight 33 20.10.20 17:22 Сейчас в теме
(11)"изучать Java Core" против этого пожелания ничего не имею.
Но программировать на Java желания нет - уж больно он кривой какой-то (а примеры на Java я на 90% и так разобрать смогу, а IDEA умеет их конвертировать на лету в Kotlin; а библиотеку JVM разберу уже походу изучения Koltin).

Имею опыт программирования на Delphi, C++ и C# - если C++ конечно куда хуже, чем Java (но это разные области программирования), то C# куда более продуманный язык, чем Java, хотя и Java и C# многое тянут из парадигм С++ - и много из этого давно устарело или попросту мне не нравится! Delphi - уже тоже устарел (а его продолжение - язык Oxigene так и не стал популярным, но многие языки тянут из него разные удачные парадигмы, в т.ч. Kotlin).

Kotlin же более универсальный язык (и это прекрасно) - позволяющий делать многие вещи по-современному, кратко и приятно, почти без того, что мне не нравится во многих ЯП, включая C# и Java.
Да и программировать на нём можно не только под JVM, но и под JS, и под Native (кроcс-платформенный через LLVM), жаль нет поддержки .NET/MONO - ибо эта платформа мощнее, чем JVM. Но, уверен, это тоже со временем будет!
А значит можно изучить один язык - и писать на нём под разные платформы - это же очень продуктивно!

Даже "1С Исполнитель" равняется на Kotlin (или на Oxigene - это как посмотреть), так что парадигмы (стиль) программирования Kotlin явно будут полезны к изучению и для 1С программистов - может таковым станет язык 1С в будущей инкарнации платформы 1С.
А не станет.... ну так поможем этому альтернативным путём (есть у меня тут крутые идеи)!

Я не говорю, что Kotlin - Это идеальный язык. Но, он точно лучше чем Java и полностью с ним совместим!

Ранее мне так же нравился язык Scala - но сейчас уже больше нравится Kotlin (и уже больше, чем C# или Delphi, но платформа .NET Мне всё-таки нравится больше, чем JVM, но вряд ли на много больше...)
14. user907889 20.10.20 19:05 Сейчас в теме
(12) прыгаете от Scala к Kotlin, C# и Delphi, не очень понятно чем именно не нравится Java, но это личное дело каждого, так что дело ваше. Уже десяток лет предрекают смерть Java, но она все еще самый популярный язык. Что касается Котлин, пробовал переписать свой проект на него и сильно застрял, может слишком много синтаксического сахара?
16. Darklight 33 20.10.20 21:11 Сейчас в теме
(14)
но это личное дело каждого

Вот я и не спорю с этим. Но я написал - что считаю Java ужен синтаксическим динозавром. Одно только отсутствие Свойств у классов в Java уже напрягает - не меньше, чем в С++. А в Kotlin наоборот - нет полей, только свойства - ну и это хорошо - архитектура упрощается - не нужно думать, что объявить полем, а что свойством, не нужно заботиться о методах доступа (там где это не нужно), легко объявлять немутабельные свойства. Про технику делегирования свойств в Kotlin так вообще молчу - крутень полная!

Сейчас модно продвигать синергию объектного и функционального подходов к программированию - Java застрял в начале XXI века, а Kotlin лишь немногим уступает Scala и Nemerle в функциональных возможностях в императивном коде. Но лямбды в Котлине замечательны (хотя есть ещё куда расти), как и инструкции-выражения (хотя по тернарному оператору сравнения я всё-таки скучаю, как и про продвинутому паттерн мэтчингу). А вот кортежи и их деконструкция, всё же, намного лучше реализованы в C#, а в Java все ещё хуже чем в Kotlin

Нуллабельные тип в Java завезли (правда синтаксис объявления через дженерик-"Опции" ужасен). А вот нуллабельных экспресс операторов вроде бы до сих пор нет! А в Kotlin можно как с ними, так и без них - если нулабельный тип проверен в условии - то в ветве к нем можно напрямую обращаться без предупреждений; аналогично с проверкой на тип в условии - в теле можно обращаться уже как бы к приведённому типу не выполняя приведения).

Рефлексия Kotlin равняется на C# (который равнялся на Delphi RTTI), а в Java тут всё очень ограничено JVM (впрочем этот JVM ограничивает и Kotlin, в C# и .NET рефлексия и её неявные возможности при использовании библиотек - просто превосходны)!

Работа а аргументами функций в Kotlin тоже очень современная - тут и именованные аргументы и бесконечные списки аргументов - этого нет в Java

В Java один класс - один файл - все собирается в пакеты (орчень неудобно и ограничено). Kotlin ушёл чуть дальше - тут в файле может быть куча классов - файлы далее собираются в пакеты.
В C#, правда, ещё круче - есть пространства имён - вещь превосходная, и сборки, из которых уже собираются библиотеки, которые подключаются к проекту (со всеми зависимостями), но в файлах импортируются пространства имён консолидировано - не нужно заморачиваться с подключенными библиотеками, нужно знать только пространства имён - причём их даже импортировать не обязательно - можно обращаться сразу по полному пути к нужному типу (возможно указывая имя сборки)) - это позволяет в одно и то же простнаство имён включать типы из разных библиотек и сборок!

И т.д. Java очень устарел - я не знаю ни одной фишки Java, ради которой на нём этом ЯП стоит программировать - разве что создавать оболочки API вот в таких вот специфических проектах плагинов к каким-то JVM программам (как EDT) - вынося всю логику в отдельно компилируемые пакеты на Kotlin.

Что касается Котлин, пробовал переписать свой проект на него и сильно застрял, может слишком много синтаксического сахара?

Всё новое не так просто принимается, как уже готовое и привычное!

Я, вот тоже, когда-то очень не любил C# - но платформа MS Dot NET Framework меня сразу пленила (я тогда программировал на Delphi под Windows (и на 1С 7.7), и грезил Linux и мобильными приложениями для КПК).
С# мне не нравился своей сишностью - уж очень многое он почерпнул из ненавистного мной С++ (как и Java - которую я не стал изучать по той же причине).
И тут вышел Delphi for .net (и далее Prism) - я просто "писал кипятком от счастья" (книжка по такому делфи у меня до сих пор на рабочем столе лежит - автора К. Пачеко - гениальная книжка).

Но позже, увы это направление объектного паскаля загнулось, переродившись в Oxigene - но так и не сыскало популярности!
Зато мелкомягкие вкладывали кучу бабла в развитие .NET, VB.NET и C# (и даже пытались переманить джавистов через J# - правда неудачно). Платформа.NET пухла крутейшими фишками (правда кросплатформенность была слабой - даже с Mono) - C# бурно развивался. И даже тогда я решил перейти с Delphi на Scala (который тогда компилировался и под JVM и под .NET) - красота синергии императивного и функционального стиля программирования меня просто поразила!

Но в итоге C# победил сражение за моё внимание (Scala остался почти таким же непопулярным как Delphi и Oxigene) - такие фишки как джнерики, асинхронные таски, динамические классы, нулабельные типы и операторы мне казались вершиной искусства императивного программирования + лямбды + замыкания (вот недавно к кривоватым делегатам наконец добавились и функции высшего порядка и операции над ними в функциональном стиле) + скоро добавятся и составные типы (в F# уже есть, хотя в Scala они есть уже очень давно, надеюсь со временем появятся и в Kotlin), трейты как в Scala уже есть и в C# (интерфейсы с реализацией по умолчанию).

Но всё-таки C#, как и Java во многом - это наследие С++
Вот Python не стал тянуть этот груз - и набирает высокую популярность! Rust тоже не стал тянуть - тоже набирает популярность!
Как и Kotlin - не тянет устаревшие парадигмы - впитал лучшее (но, увы, не всё) от Delphi/Oxigene, Python, Scala, Nemerle и C#, Java - и выдал красивый, легко изучаемый и легко читаемый синтаксис! Разочарует вот только ориентир на закрытость классов по умолчанию и регистрозависимость, ну и кортежи тут тоже реализованы так себе! Trait'ов тоже нет (они же интерфейсы с реализацией по умолчанию - хотя, уверен, появятся со временем, или может уже есть - и я что-то не знаю).

Ну и кросплатформенность на Kolin куда более интересная, чем на Java или C#
Поддержка LLVM от создателя ЯП - это очень широкие возможности кроосплатформенности!
17. user907889 21.10.20 06:20 Сейчас в теме
(16)

Судя по вашим ошибочным замечаниям вы совсем не знакомы с Java. Что касается ваших рассуждений, они слишком религиозны и страстны.
Лично я писал проекты и на Delphi и C#, и не питаю никаких чувств, в C# заинтересовал Xamarin, но не более. В данный момент пишу большие сложные проекты на Java и специально убил несколько дней на переход на Kotlin, пришлось отказаться, т.к. нужно было слишком много чего менять в архитектуре в худшую сторону. Но я уверен, что и Котлин для своих целей, например как разработка Android приложений как и Питон для обработки данных и C++ для систем и игр, найдет свое применение.
Спасибо за ответы и удачи.
18. Darklight 33 21.10.20 11:06 Сейчас в теме
(17)
вы совсем не знакомы с Java

Да я и не говорил, что знаю Java
Интересно, где я заблуждаюсь в недостатках Java (хотелось бы услышать мнение знатока Java)?

Что касается ваших рассуждений, они слишком религиозны и страстны

Ну... наверное да... парадигмы программирования уже можно причислять к религиозным воззрениям - тут холивор за холивором. Но лично я о вкусах не спорю, и свои взгляды не навязываю, хотя и имею очень глубокие и давно прорабатываемые взгляды на программирование - и Kotlin им удовлетворяет лишь отчасти.

Более того, в последний год я даже начал формировать совершенно новые взгляды - которым практически не удовлетворяет ни один ныне существующий ЯП - это взгляды, нацеленные в будущее - во вторую половину XXI века, когда в IT будут "править бал" совсем иные методологии разработки, чем сейчас (но всё основано на технологиях, которые доступны уже сейчас).

А насчёт страстности - вроде бы старался написать предыдущий комментарий сдержанно - возможно просто дело было поздним вечером и я просто уже очень устал, и особо не обращал внимание на то, как складывается текст комментария. Я не хотел его никак эмоционально окрашивать!


специально убил несколько дней на переход на Kotlin

Это смешно! Так можно с любым языком убить несколько дней - чтобы потом сказать, что язык - говно!
В любой язык (если есть желание серьёзно его использовать, а не писать критику после поверхностного знакомства) нужно углубляться, и углубляться не менее года (правда не в режиме 100% посвящения времени только новому ЯП)!
Ещё - очень нужно обязательно прочитать целиком правильную книгу по языку (и разобрать на практике примеры из неё, попробовать сделать на основе их что-то своё, а не тупо набрать готовый текст).
Например для C# (как пример - т.к. эта тема мне хорошо известна) есть великая книга (не для начинающих)
"C# in Depth" (Jon Skeet)
Ещё отличная книга "C# 8.0 in a Nutshell" (Joseph Albahari)
"More Effective C# (Includes Content Update Program): 50 Specific Ways to Improve Your C#" (Bill Wagner)
"CLR via C #" (Jeffrey Richter)
"C# 6.0 Cookbook: Solutions for C# Developers" (Jay Hilyard , Stephen Teilhet)
Без этих книг углубляться в C# бессмысленно. А ведь ещё есть книги по отдельным технологиям.

Как и для Java (тут могу конечно ошибаться, привожу на вскидку) тоже есть свои библии (не для начинающих)
"Java Language Features: With Modules, Streams, Threads, I/O, and Lambda Expressions"(Kishori Sharan)
"Java 9 Revealed: For Early Adoption and Migration"(Kishori Sharan)
"Java in a Nutshell: A Desktop Quick Reference" (Benjamin J. Evans)
"Effective Java" (Joshua Bloch)
"The Java Virtual Machine Specification" ( Tim Lindholm, Frank Yellin)
"Java Cookbook: Problems and Solutions for Java Developers " (Ian F. Darwin)
"Modern Java Recipes: Simple Solutions to Difficult Problems in Java 8 and 9" (Ken Kousen)
"Modern Java in Action: Lambdas, streams, functional and reactive programming" (Raoul-Gabriel Urma)
И ещё куча книг по отдельным технологиям

По Kotlin пока ещё такого разнообразия - но кое-что почитать тоже нужно
Kotlin In-Depth [Vol-I]: A Comprehensive Guide to Modern Multi-Paradigm Language (Aleksei Sedunov)
Kotlin In-depth [Vol-II]: A comprehensive guide to modern multi-paradigm language (Aleksei Sedunov)
"Hands-On Design Patterns with Kotlin: Build scalable applications using traditional, reactive, and concurrent design patterns in Kotlin" (Alexey Soshin)
"Programming Kotlin: Create Elegant, Expressive, and Performant JVM and Android Applications" (Venkat Subramaniam)
"Kotlin Cookbook: A Problem-Focused Approach" (Ken Kousen)
"Kotlin in Action" (Dmitry Jemerov, Svetlana Isakova)
И ещё куча книг по программированию под Android на Kotlin (Ибо там этот язык стал официальным)

Книг по Kotlin Native пока нет вообще - соответственно тема кроссплатформенности пока не особо освещена (только оф документация и редкие статьи в интернете! Корутины тоже пока не особо освещены - а это одна из важных технологий Kotlin (наряду с продвинутыми лямбдами).
Как и тема программирования, скажем под Node.js на Kotlin

Но я уверен, что и Котлин для своих целей, например как разработка Android

Думаю, что у Kotlin есть более широкое будущее - но оно пока туманно! Язык ещё слишком молод
19. user907889 21.10.20 11:57 Сейчас в теме
(18)
Да я и не говорил, что знаю Java

Рассуждаете он незнакомом предмете называя его устаревшим, это странно.

(18)
Интересно, где я заблуждаюсь в недостатках Java (хотелось бы услышать мнение знатока Java)?

Почти во всем, отдельно объяснять нет ни времени ни желания.

(18)
парадигмы программирования уже можно причислять к религиозным воззрениям

С профессиональной точки зрения большая ошибка.

(18)
Так можно с любым языком убить несколько дней - чтобы потом сказать, что язык - говно!

Где я сказал что Котлин говно? Я лишь привел пример своего опыта, что на Котлин тяжело было перевести сложный проект. С Котлин работал в Android.

На этом я прекращаю нашу дискуссия за незнанием вами темы.
Удачи.
21. Darklight 33 21.10.20 13:43 Сейчас в теме
(19)
ассуждаете он незнакомом предмете называя его устаревшим, это странно.

Считайте это лично моим мнением, основанном на прочтении ряда других ресурсов, проведённом сравнении функциональности, и опыте разработки на других языках. Я не навязываю своё мнение - это только мои взгляды.
При этом я дал им хоть какое-то обоснование. В отличии от Вас - Вы не стали конструктивно защищать ЯП Java. Но я не хочу с Вами спорить.
Почти во всем, отдельно объяснять нет ни времени ни желания.

Это Ваше право.

(19)

парадигмы программирования уже можно причислять к религиозным воззрениям

С профессиональной точки зрения большая ошибка.

Это сложный философский вопрос...

Где я сказал что Котлин говно? Я лишь привел пример своего опыта, что на Котлин тяжело было перевести сложный проект. С Котлин работал в Android.

Согласен, погорячился - не говорли. Любой проект переводить с одного ЯП на другой сложно соразмерно сложности проекта помноженно поделённо на средства автоматизации этого перевода кратно отношению опыта программирования на этих двух ЯП и глубины знания самого проекта!

Эта идея сама по себе была обречена на провал.

Во-первых -Вы как минимум (я так думаю) ещё не очень глубоко знали возможности Kotlin (не "набили руку") и инструментарий по переводу (ну а может эти средства ещё не достаточно развиты - и нужно просто подождать).

Во-вторых, браться переволить сразу сложный проект - это сама по себе ошибка - это всегда будет эпик фейл! Нужно начинать с более мелких проектов

В-третьих, как это и советуют разработчики Kotlin, не надо сразу пытаться перевести весь проект на Kotlin. Лучше переводить постепенно. Java и Kotlin условно полностью совместимы. Можно просто потихоньку начинать писать новые пакеты не на Java а на Kotlin и подключать их к тому же проекту. И переводить на Kolin не всё подряд - а отдельные небольшие части (дабы тут Java изначально имеет очень мелкую детализацию исходников - с разбиением один клкасс -
один файл).

В-четвёртых, можно стараться применять средства авто конвертирования отдельных блоков кода из Java в Kotlin - и дальше вносить уже правки.

В-пятых, всё-таки сначала лучше разрабатывать, параллельно с Java, на Kotlin хотя бы небольшие доп. проекты, чтобы набить руку, подъизучить язык, теорию и практику. Хотя бы годик другой - прежде, чем браться за доработки и тем более тотальные переносы крупных проектов с Java на Kotlin

Я бы вообще не стал бы браться за крупные проекты (если изначально не ставить цель делать их именно, и условно безальтернативно, на Kotlin) - пока не выйдет хотя бы версия Koltin выше чем 2.0 (сейчас 1.4 - языку мене 10 лет после релиза 1.0). Вот, по опыту C# - пока не вышел C# 3.0 - он вообще был гадким утёнком. А мощь он стал набирать только с версии C# 6.0 (до этого он меня даже не особо привлекал, ну кроме платформы .NET).

Но, нумерация версий Kotlin всё-таки, другая. Думаю, актуальную 1.4 версию, всё-таки, стоит сравнивать по развитию с C# 3.0 (сравнение очень "притянуто за уши", т.к. в Kotlin есть многое, что есть в C# 7.0, он же всё-таки равнялся на актуальные фишки в языках программирования; поэтому это просто указание этапа развития - с прогнозированием дальнейших объёмов роста ЯП Koltin; C# шёл к версии 3.0 от финального релиза 1.0 около 5 лет, а до актуальной версии 8.0 потом ещё почти 14 лет - немалый срок и немалые инвестиции).

В общем ждём дальнейшего развития ЯП Kotlin - хотя бы версию 1.6, 1.7 (на это потребуется года 3-4) - ну а там, глядишь, и 2.0, 2.1 появятся. Пока - это всё-таки ещё не мейнстрим язык, скорее полуэкспериментальный! Тут нет таких больших финансовых вложений, какие делала компания Микрософт в C# - язык развивается не быстро (примерно так же как Java)

И ещё - многие мигрируют на Kotlin ещё и на фоне комерциализации Java компанией Oracle (и судебными разбирательствами оной с компанией Google). Да - есть сторонние рантаймы JVM - но язык то тот же, вон у гугла тоже был свой рантайм, а с Ораклом судиться пришлось! Вот тут нужно быть поаккуратнее с таким гигантом.
Поэтому, например, Микрософт сразу выпустила новую инкарнацию .NET Core и C# 8 под лицензией Apache License 2.0 и с открытым исходным кодом - чтобы развеять опасения сообщества, что нечто подобное произойдёт и с Микрософт.
И Kotlin JetBrains выпустили под лицензией Apache License 2.0 и компилятор открыт

Ну и, разрабатывать мобильныеприложения для Android будет удобнее на Kotlin - это тоже будет подстёгивать использовать его, вместо Java. А позже подтянется Kotlin Native и Kotlin JS.

Со временем это всё может потеснить и Java не только с мобильных платформ, Java EE c пьедестала самого популярного языка для бакэнд разработок! Но на это ещё уйдут десятилетия...
starik-2005; +1 Ответить
5. pavel06 2 18.10.20 19:26 Сейчас в теме
Про платность target-платформы Вы упомянули.
ИТС-подписка подходит с ее паролем или надо отдельно платить? И сколько?
7. marmyshev 348 19.10.20 09:52 Сейчас в теме
(5) если в доступе ИТС у вас есть само приложение EDT - то доступ к таргет-платформе это тоже самое по сути. Только в другом формате.
Можно даже установленную EDT использовать в качестве таргет-платформы (способ сложнее и менее удобный, но всё же), но я бы не рекомендовал для реальных разработок...
10. user907889 20.10.20 13:31 Сейчас в теме
А зачем OpenJFX? Что там пишется на JavaFX?
13. marmyshev 348 20.10.20 18:43 Сейчас в теме
(10) JavaFX используется в работе самой EDT - это требование для запуска (из документации к EDT).
Собственно без JFX запустить как бы можно, но везде и правильно работать оно не будет.
15. user907889 20.10.20 19:08 Сейчас в теме
(13) Я это к тому, что JavaFX мертвая технология GUI несущая тяжесть в проект, по сути ей нечего делать в EDT, т.к. Eclipse написан на SWT - Swing.
20. marmyshev 348 21.10.20 13:06 Сейчас в теме
(15) JavaFX создана чтобы заменить Swing, к тому же - в эклипс-платформе (и в EDT соответственно) нет свинга. А по поводу "мертвости" технологии https://en.wikipedia.org/wiki/JavaFX - я бы усомнился :) в этом году только 2 мажорных релиза...
23. user907889 21.10.20 14:26 Сейчас в теме
(20) JavaFX к сожалению устарела морально
22. Darklight 33 21.10.20 13:55 Сейчас в теме
(15)(15)Тутсодержательно всё разъяснено по поводуJavaFX как технологии. Ну а для EDT - она просо нужна по системным требованиям
24. Darklight 33 21.10.20 14:43 Сейчас в теме
(22тут описаны актуальные проблемы JavaFX
25. frkbvfnjh 805 17.03.23 15:26 Сейчас в теме
В итоге писать то на чем можно? Только на Java и ее диалектах? На Delphi и C# никак что ли?
Оставьте свое сообщение