From 9b09097fd35e5fef919229bd4a5814c6d493ede2 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Tue, 19 Mar 2024 08:01:58 +0300 Subject: [PATCH] =?UTF-8?q?-=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B3=D1=80=D0=B0=D0=B4=D0=BB=20-=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=20=D0=BD=D0=B0=20java17=20-=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE=20=D0=B8=D0=BC=D1=8F=20?= =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D1=8B=20-=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=83=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2=20sonatype=20-=20?= =?UTF-8?q?=D0=BC=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D1=84=D0=B8=D0=BA=D1=81?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/dependabot.yml | 19 + .github/workflows/{gradle.yml => check.yml} | 2 +- .github/workflows/publish-to-sonatype.yml | 37 ++ .github/workflows/release.yml | 24 - .idea/compiler.xml | 4 +- .idea/inspectionProfiles/Project_Default.xml | 416 ++++++++++++++++++ .idea/misc.xml | 5 +- README.md | 2 + build.gradle.kts | 183 ++++++-- gradle/wrapper/gradle-wrapper.jar | Bin 55190 -> 61608 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 292 +++++++----- gradlew.bat | 56 ++- jitpack.yml | 2 - license/HEADER.txt | 2 +- lombok.config | 1 + .../com/github/_1c_syntax/utils/Absolute.java | 24 +- .../utils/CaseInsensitivePattern.java | 19 +- .../_1c_syntax/utils/GenericInterner.java | 5 +- .../com/github/_1c_syntax/utils/Lazy.java | 5 +- .../_1c_syntax/utils/StringInterner.java | 12 +- .../github/_1c_syntax/utils/AbsoluteTest.java | 2 +- .../_1c_syntax/utils/StringInternerTest.java | 12 +- 23 files changed, 885 insertions(+), 242 deletions(-) create mode 100644 .github/dependabot.yml rename .github/workflows/{gradle.yml => check.yml} (95%) create mode 100644 .github/workflows/publish-to-sonatype.yml delete mode 100644 .github/workflows/release.yml create mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 jitpack.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..7b69fdb --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,19 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "gradle" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" + groups: + freefair: + patterns: + - "io.freefair.*" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/.github/workflows/gradle.yml b/.github/workflows/check.yml similarity index 95% rename from .github/workflows/gradle.yml rename to .github/workflows/check.yml index dbb6080..9b3e83a 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/check.yml @@ -8,7 +8,7 @@ jobs: strategy: fail-fast: false matrix: - java_version: ['11', '13'] + java_version: ['17', '20'] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - uses: actions/checkout@v1 diff --git a/.github/workflows/publish-to-sonatype.yml b/.github/workflows/publish-to-sonatype.yml new file mode 100644 index 0000000..df99ce4 --- /dev/null +++ b/.github/workflows/publish-to-sonatype.yml @@ -0,0 +1,37 @@ +name: Publish to Sonatype + +on: + release: + types: [published] + push: + branches: + - develop + workflow_dispatch: + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: 'liberica' + - name: Publish to Sonatype + run: ./gradlew publishMavenPublicationToSonatypeRepository -PsimplifyVersion + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }} + ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SIGNING_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryPassword: ${{ secrets.GPG_SIGNING_PASSWORD }} + - name: Close repository + if: github.event_name == 'release' + run: ./gradlew closeAndReleaseRepository + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }} + ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }} + ORG_GRADLE_PROJECT_nexusUsername: ${{ secrets.SONATYPE_USERNAME }} + ORG_GRADLE_PROJECT_nexusPassword: ${{ secrets.SONATYPE_PASSWORD }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 8db31e3..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Publish release - -on: - release: - types: [published, edited] - -jobs: - build: - runs-on: ubuntu-latest - name: Publish release - steps: - - name: Checkout source - uses: actions/checkout@v2 - - name: Set up JDK - uses: actions/setup-java@v1 - with: - java-version: 13 - - name: Build with Gradle - run: ./gradlew build - - name: Upload jar to release - uses: AButler/upload-release-assets@v1.0 - with: - files: './build/libs/*.jar' - repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.idea/compiler.xml b/.idea/compiler.xml index ddb96fb..3371446 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,10 +6,12 @@ - + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..6a4f458 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,416 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 29af3ee..fe0b0da 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,7 +1,10 @@ - + + + + \ No newline at end of file diff --git a/README.md b/README.md index 6a2defa..ef77285 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ # 1c-syntax utils + +Common utils for 1c-syntax team java projects diff --git a/build.gradle.kts b/build.gradle.kts index a9154e6..99fe093 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,41 +1,59 @@ -import me.qoomon.gradle.gitversioning.GitVersioningPluginConfig -import me.qoomon.gradle.gitversioning.GitVersioningPluginConfig.CommitVersionDescription -import me.qoomon.gradle.gitversioning.GitVersioningPluginConfig.VersionDescription +import me.qoomon.gitversioning.commons.GitRefType import java.util.Calendar plugins { - java - jacoco - maven + `java-library` `maven-publish` - id("com.github.hierynomus.license") version "0.15.0" - id("io.franzbecker.gradle-lombok") version "3.2.0" - id("me.qoomon.git-versioning") version "2.1.1" + jacoco + signing + id("org.cadixdev.licenser") version "0.6.1" + id("me.qoomon.git-versioning") version "6.4.3" + id("com.gorylenko.gradle-git-properties") version "2.4.1" + id("io.freefair.lombok") version "8.6" + id("io.freefair.javadoc-links") version "8.6" + id("io.freefair.javadoc-utf-8") version "8.6" + id("io.freefair.maven-central.validate-poms") version "8.6" id("com.github.ben-manes.versions") version "0.27.0" + id("ru.vyarus.pom") version "3.0.0" + id("io.codearte.nexus-staging") version "0.30.0" } -group = "com.github.1c-syntax" +group = "io.github.1c-syntax" +gitVersioning.apply { + refs { + considerTagsOnBranches = true + tag("v(?[0-9].*)") { + version = "\${ref.tagVersion}\${dirty}" + } + branch(".+") { + version = "\${ref}-\${commit.short}\${dirty}" + } + } + + rev { + version = "\${commit.short}\${dirty}" + } +} +val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG repositories { mavenCentral() } -val junitVersion = "5.6.0" +val junitVersion = "5.7.0" dependencies { - - compileOnly("org.projectlombok", "lombok", lombok.version) - + compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.3") testImplementation("org.junit.jupiter", "junit-jupiter-api", junitVersion) testRuntimeOnly("org.junit.jupiter", "junit-jupiter-engine", junitVersion) - - testImplementation("org.assertj", "assertj-core", "3.14.0") + testImplementation("org.assertj", "assertj-core", "3.18.1") } java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 withSourcesJar() + withJavadocJar() } tasks.withType { @@ -52,51 +70,128 @@ tasks.test { } reports { - html.isEnabled = true + html.required.set(true) } } - tasks.check { dependsOn(tasks.jacocoTestReport) } tasks.jacocoTestReport { reports { - xml.isEnabled = true - xml.destination = File("$buildDir/reports/jacoco/test/jacoco.xml") + xml.required.set(true) + xml.outputLocation.set(File("$buildDir/reports/jacoco/test/jacoco.xml")) } } license { - header = rootProject.file("license/HEADER.txt") + header(rootProject.file("license/HEADER.txt")) + newLine(false) ext["year"] = "2018-" + Calendar.getInstance().get(Calendar.YEAR) ext["name"] = "Alexey Sosnoviy , Nikita Fedkin " ext["project"] = "1c-syntax utils" - strictCheck = true - mapping("java", "SLASHSTAR_STYLE") exclude("**/*.properties") exclude("**/*.xml") exclude("**/*.json") exclude("**/*.bsl") } -gitVersioning.apply(closureOf { - preferTags = true - branch(closureOf { - pattern = "^(?!v[0-9]+).*" - versionFormat = "\${branch}-\${commit.short}\${dirty}" - }) - tag(closureOf{ - pattern = "v(?[0-9].*)" - versionFormat = "\${tagVersion}\${dirty}" - }) - commit(closureOf{ - versionFormat = "\${commit.short}\${dirty}" - }) -}) - -lombok { - version = "1.18.10" - sha256 = "2836e954823bfcbad45e78c18896e3d01058e6f643749810c608b7005ee7b2fa" -} \ No newline at end of file +tasks.javadoc { + options { + this as StandardJavadocDocletOptions + noComment(false) + } +} + +artifacts { + archives(tasks["jar"]) + archives(tasks["sourcesJar"]) + archives(tasks["javadocJar"]) +} + +signing { + val signingInMemoryKey: String? by project // env.ORG_GRADLE_PROJECT_signingInMemoryKey + val signingInMemoryPassword: String? by project // env.ORG_GRADLE_PROJECT_signingInMemoryPassword + if (signingInMemoryKey != null) { + useInMemoryPgpKeys(signingInMemoryKey, signingInMemoryPassword) + sign(publishing.publications) + } +} + +publishing { + repositories { + maven { + name = "sonatype" + url = if (isSnapshot) + uri("https://s01.oss.sonatype.org/content/repositories/snapshots/") + else + uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") + + val sonatypeUsername: String? by project + val sonatypePassword: String? by project + + credentials { + username = sonatypeUsername // ORG_GRADLE_PROJECT_sonatypeUsername + password = sonatypePassword // ORG_GRADLE_PROJECT_sonatypePassword + } + } + } + publications { + create("maven") { + from(components["java"]) + + if (isSnapshot && project.hasProperty("simplifyVersion")) { + version = findProperty("git.ref.slug") as String + "-SNAPSHOT" + } + + pom { + description.set("Common utils for 1c-syntax team java projects") + url.set("https://github.com/1c-syntax/utils") + licenses { + license { + name.set("GNU LGPL 3") + url.set("https://www.gnu.org/licenses/lgpl-3.0.txt") + distribution.set("repo") + } + } + developers { + developer { + id.set("asosnoviy") + name.set("Alexey Sosnoviy") + email.set("labotamy@gmail.com") + url.set("https://github.com/asosnoviy") + organization.set("1c-syntax") + organizationUrl.set("https://github.com/1c-syntax") + } + developer { + id.set("nixel2007") + name.set("Nikita Fedkin") + email.set("nixel2007@gmail.com") + url.set("https://github.com/nixel2007") + organization.set("1c-syntax") + organizationUrl.set("https://github.com/1c-syntax") + } + developer { + id.set("theshadowco") + name.set("Valery Maximov") + email.set("maximovvalery@gmail.com") + url.set("https://github.com/theshadowco") + organization.set("1c-syntax") + organizationUrl.set("https://github.com/1c-syntax") + } + } + scm { + connection.set("scm:git:git://github.com/1c-syntax/utils.git") + developerConnection.set("scm:git:git@github.com:1c-syntax/utils.git") + url.set("https://github.com/1c-syntax/utils") + } + } + } + } +} + +nexusStaging { + serverUrl = "https://s01.oss.sonatype.org/service/local/" + stagingProfileId = "15bd88b4d17915" // ./gradlew getStagingProfile +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 87b738cbd051603d91cc39de6cb000dd98fe6b02..ccebba7710deaf9f98673a68957ea02138b60d0a 100644 GIT binary patch delta 42200 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
o2DZ2Ov2|N+2(gd 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m"' +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -89,84 +140,105 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" fi +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 6d57edc..93e3f59 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,4 +1,20 @@ -@if "%DEBUG%" == "" @echo off +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -9,19 +25,23 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,38 +65,26 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/jitpack.yml b/jitpack.yml deleted file mode 100644 index 46c8529..0000000 --- a/jitpack.yml +++ /dev/null @@ -1,2 +0,0 @@ -jdk: - - openjdk11 \ No newline at end of file diff --git a/license/HEADER.txt b/license/HEADER.txt index 3fba061..936ab6f 100644 --- a/license/HEADER.txt +++ b/license/HEADER.txt @@ -1,6 +1,6 @@ This file is a part of ${project}. -Copyright © ${year} +Copyright (c) ${year} ${name} and contributors SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/lombok.config b/lombok.config index c7aafa5..6f8b6a6 100644 --- a/lombok.config +++ b/lombok.config @@ -1,3 +1,4 @@ lombok.anyConstructor.addConstructorProperties=true lombok.addLombokGeneratedAnnotation=true lombok.log.fieldName=LOGGER +lombok.extern.findbugs.addSuppressFBWarnings=true diff --git a/src/main/java/com/github/_1c_syntax/utils/Absolute.java b/src/main/java/com/github/_1c_syntax/utils/Absolute.java index 1837645..9c4231b 100644 --- a/src/main/java/com/github/_1c_syntax/utils/Absolute.java +++ b/src/main/java/com/github/_1c_syntax/utils/Absolute.java @@ -1,7 +1,7 @@ /* * This file is a part of 1c-syntax utils. * - * Copyright © 2018-2024 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.utils; +import lombok.NonNull; import lombok.SneakyThrows; import lombok.experimental.UtilityClass; @@ -33,10 +34,13 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Path; +/** + * Методы получения абсолютного пути файла с учетом различных особенностей + */ @UtilityClass public final class Absolute { - public static URI uri(String uri) { + public static URI uri(@NonNull String uri) { try { URL url = new URL(uri); var decodedPath = URLDecoder.decode(url.getPath(), StandardCharsets.UTF_8); @@ -56,34 +60,34 @@ public static URI uri(String uri) { } } - public static URI uri(URI uri) { + public static URI uri(@NonNull URI uri) { var decodedUri = URI.create(uri.getScheme() + ":" + encodePath(uri.getSchemeSpecificPart())); return checkFileAuthorityAndReturnURI(decodedUri); } - public static URI uri(File file) { + public static URI uri(@NonNull File file) { return uri(path(file).toUri()); } - public static Path path(String path) { + public static Path path(@NonNull String path) { return path(Path.of(path)); } - public static Path path(URI uri) { + public static Path path(@NonNull URI uri) { return path(Path.of(uri(uri))); } - public static Path path(Path path) { + public static Path path(@NonNull Path path) { return path(path.toFile()); } @SneakyThrows - public static Path path(File file) { + public static Path path(@NonNull File file) { return file.getCanonicalFile().toPath().toAbsolutePath(); } - private static String encodePath(String path) { + private static String encodePath(@NonNull String path) { return path .replace(" ", "%20") .replace("#", "%23") @@ -98,7 +102,7 @@ private static String encodePath(String path) { ; } - private static URI checkFileAuthorityAndReturnURI(URI uri) { + private static URI checkFileAuthorityAndReturnURI(@NonNull URI uri) { if ("file".equals(uri.getScheme()) && uri.getAuthority() == null) { return path(new File(uri)).toUri(); } diff --git a/src/main/java/com/github/_1c_syntax/utils/CaseInsensitivePattern.java b/src/main/java/com/github/_1c_syntax/utils/CaseInsensitivePattern.java index d7e2124..de18ff9 100644 --- a/src/main/java/com/github/_1c_syntax/utils/CaseInsensitivePattern.java +++ b/src/main/java/com/github/_1c_syntax/utils/CaseInsensitivePattern.java @@ -1,7 +1,7 @@ /* * This file is a part of 1c-syntax utils. * - * Copyright © 2018-2024 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later @@ -22,6 +22,7 @@ package com.github._1c_syntax.utils; +import lombok.NonNull; import lombok.experimental.UtilityClass; import java.util.regex.Pattern; @@ -37,19 +38,13 @@ public class CaseInsensitivePattern { * Compiles the given regular expression into a pattern with CASE_INSENSITIVE and UNICODE_CASE * flags. * - * @param regex - * The expression to be compiled - * - * + * @param regex The expression to be compiled * @return the given regular expression compiled into a pattern with the given flags - * @throws IllegalArgumentException - * If bit values other than those corresponding to the defined - * match flags are set in {@code flags} - * - * @throws PatternSyntaxException - * If the expression's syntax is invalid + * @throws IllegalArgumentException If bit values other than those corresponding to the defined + * match flags are set in {@code flags} + * @throws PatternSyntaxException If the expression's syntax is invalid */ - public static Pattern compile(String regex) { + public static @NonNull Pattern compile(@NonNull String regex) { return Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); } diff --git a/src/main/java/com/github/_1c_syntax/utils/GenericInterner.java b/src/main/java/com/github/_1c_syntax/utils/GenericInterner.java index eaea395..7cf86a2 100644 --- a/src/main/java/com/github/_1c_syntax/utils/GenericInterner.java +++ b/src/main/java/com/github/_1c_syntax/utils/GenericInterner.java @@ -1,7 +1,7 @@ /* * This file is a part of 1c-syntax utils. * - * Copyright © 2018-2024 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later @@ -24,6 +24,9 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +/** + * Реализация интернера + */ public class GenericInterner { private final Map map = new ConcurrentHashMap<>(); diff --git a/src/main/java/com/github/_1c_syntax/utils/Lazy.java b/src/main/java/com/github/_1c_syntax/utils/Lazy.java index 108917e..1f7c76a 100644 --- a/src/main/java/com/github/_1c_syntax/utils/Lazy.java +++ b/src/main/java/com/github/_1c_syntax/utils/Lazy.java @@ -1,7 +1,7 @@ /* * This file is a part of 1c-syntax utils. * - * Copyright © 2018-2024 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later @@ -26,6 +26,9 @@ import static java.util.Objects.requireNonNull; +/** + * Реализация хранения данных с ленивым чтением + */ public final class Lazy { private final Supplier supplier; diff --git a/src/main/java/com/github/_1c_syntax/utils/StringInterner.java b/src/main/java/com/github/_1c_syntax/utils/StringInterner.java index a40ef22..5954f27 100644 --- a/src/main/java/com/github/_1c_syntax/utils/StringInterner.java +++ b/src/main/java/com/github/_1c_syntax/utils/StringInterner.java @@ -1,7 +1,7 @@ /* * This file is a part of 1c-syntax utils. * - * Copyright © 2018-2024 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later @@ -21,9 +21,17 @@ */ package com.github._1c_syntax.utils; +import edu.umd.cs.findbugs.annotations.Nullable; + +/** + * Реализация интернера для строк + */ public class StringInterner extends GenericInterner { @Override - public String intern(String object) { + public String intern(@Nullable String object) { + if (object == null) { + return ""; + } return super.intern(object); } } diff --git a/src/test/java/com/github/_1c_syntax/utils/AbsoluteTest.java b/src/test/java/com/github/_1c_syntax/utils/AbsoluteTest.java index 746e342..ce752ea 100644 --- a/src/test/java/com/github/_1c_syntax/utils/AbsoluteTest.java +++ b/src/test/java/com/github/_1c_syntax/utils/AbsoluteTest.java @@ -1,7 +1,7 @@ /* * This file is a part of 1c-syntax utils. * - * Copyright © 2018-2024 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/utils/StringInternerTest.java b/src/test/java/com/github/_1c_syntax/utils/StringInternerTest.java index 3782c4a..25219c2 100644 --- a/src/test/java/com/github/_1c_syntax/utils/StringInternerTest.java +++ b/src/test/java/com/github/_1c_syntax/utils/StringInternerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of 1c-syntax utils. * - * Copyright © 2018-2024 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later @@ -24,7 +24,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; class StringInternerTest { @@ -38,8 +38,8 @@ public void init() { @Test void testIntern() { //given - String s1 = new String("1"); - String s2 = new String("1"); + String s1 = "1"; + String s2 = "1"; // when var intern1 = interner.intern(s1); @@ -58,8 +58,8 @@ void testIntern() { void testClear() { //given - String s1 = new String("1"); - String s2 = new String("1"); + String s1 = "1"; + String s2 = "1"; interner.intern(s1);