Skip to content

Repository files navigation

utils

Java CIMaven CentralGitHub releaseJavaLicense: LGPL-3.0-or-later

Общие утилиты для java-проектов команды 1c-syntax — небольшие независимые помощники, переиспользуемые в BSL Language Server и смежных проектах.

Библиотека сознательно держит минимальную замкнутость зависимостей и помечена JSpecify@NullMarked (типы считаются non-null, если не аннотированы @Nullable).

Требования

  • Java 21 или новее (сборка таргетится на Java 21; CI прогоняется на Java 21 и 25).

Подключение

Артефакт публикуется в Maven Central под координатами io.github.1c-syntax:utils.

Gradle (Kotlin DSL)

dependencies {
implementation("io.github.1c-syntax:utils:VERSION")
}

Maven

<dependency>
<groupId>io.github.1c-syntax</groupId>
<artifactId>utils</artifactId>
<version>VERSION</version>
</dependency>

Актуальную версию смотрите в релизах или на Maven Central.

Что внутри

Пакет com.github._1c_syntax.utils

КлассНазначение
AbsoluteПриведение файловых путей и URI к каноническому абсолютному виду — стабильный ключ для одного и того же файла независимо от формы записи.
Lazy<T>Потокобезопасное хранилище значения с ленивым однократным вычислением (double-checked locking) и возможностью сброса кэша.
GenericInterner<T>Потокобезопасный интернер значений: один канонический экземпляр на класс эквивалентности — экономия памяти и сравнение по ссылке.
StringInternerИнтернер строк на базе GenericInterner, дополнительно нормализующий null в пустую строку.
CaseInsensitivePatternКомпиляция регулярных выражений без учёта регистра с поддержкой Unicode (важно для кириллицы кода 1С).

Пакет com.github._1c_syntax.utils.downloader

Загрузчик исполняемого файла BSL Language Server из GitHub-релизов (для встраивания в IDE-плагины и другие клиенты).

КлассНазначение
BslLanguageServerDownloaderСкачивает подходящий под ОС ассет последнего релиза, распаковывает его и отдаёт путь к бинарю; кэширует установленную версию и опрашивает GitHub не чаще заданного интервала.
GitHubReleaseClientНаходит последний релиз выбранного канала через GitHub REST API (на java.net.http.HttpClient + gson, без клиентских библиотек GitHub).
BslLanguageServerReleaseChannelКанал релизов: STABLE или PRERELEASE.
DownloadProgressListenerСлушатель прогресса скачивания ассета.

Примеры использования

Каноникализация пути и URI:

Pathpath = Absolute.path("./src/../build/out.txt"); // абсолютный канонический путьURIuri = Absolute.uri("file:///C:/Program%20Files/app"); // нормализованный file:-URI

Ленивое вычисление:

Lazy<List<String>> lines = newLazy<>(() -> readAllLines(file));
List<String> value = lines.getOrCompute(); // вычислится один раз и закэшируетсяlines.clear(); // сбросить кэш

Интернирование:

StringInternerinterner = newStringInterner();
Stringcanonical = interner.intern(name); // равные строки делят один экземпляр

Регистронезависимый поиск с учётом Unicode:

Patternpattern = CaseInsensitivePattern.compile("Процедура");
booleanmatches = pattern.matcher("процедура").matches(); // true

Скачивание BSL Language Server:

varclient = newGitHubReleaseClient(githubToken); // токен может быть nullvardownloader = newBslLanguageServerDownloader(installDir, client, HttpClient.newHttpClient());
Pathbinary = downloader.downloadIfNeeded(BslLanguageServerReleaseChannel.STABLE);

Сборка

Используйте wrapper Gradle:

./gradlew build # сборка, проверки и тесты
./gradlew check # то, что гоняет CI (test + jacoco + javadoc + проверка лицензий)

Заголовки лицензии проверяются плагином license; при необходимости их можно проставить командой ./gradlew licenseFormat.

Лицензия

GNU LGPL 3.0 или новее (SPDX-License-Identifier: LGPL-3.0-or-later).

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages