From d191676c37f41a1d70d7ebb8b49c886354d0430e Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 16 Apr 2021 16:16:24 -0700 Subject: [PATCH 001/238] Add sdkman env file --- .sdkmanrc | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .sdkmanrc diff --git a/.sdkmanrc b/.sdkmanrc new file mode 100644 index 00000000..59f306d1 --- /dev/null +++ b/.sdkmanrc @@ -0,0 +1,3 @@ +# Enable auto-env through the sdkman_auto_env config +# Add key=value pairs of SDKs to use below +java=11.0.10.hs-adpt From 235279e134aee809fbc1c315cf70b10af5888182 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 19 Apr 2021 11:13:34 -0700 Subject: [PATCH 002/238] Migrate update site to repo.spring.io Closes gh-263 --- README.adoc | 2 +- ci/pipeline.yml | 3 -- ci/scripts/publish-eclipse-update-site.sh | 40 +++++++++++------------ ci/tasks/publish-eclipse-update-site.yml | 4 +-- 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/README.adoc b/README.adoc index bf682083..8ed831de 100644 --- a/README.adoc +++ b/README.adoc @@ -193,7 +193,7 @@ You can also add a `.eclipse/eclipse.properties` file to customize the following To install the plugin use the `io.spring.javaformat.eclipse.site` zip file. You can download the latest version from https://repo.spring.io/release/io/spring/javaformat/io.spring.javaformat.eclipse.site/{release-version}[repo.spring.io] -or use the https://dl.bintray.com/spring/javaformat-eclipse/[update site]. +or use the https://repo.spring.io/javaformat-eclipse-update-site/[update site]. === IntelliJ IDEA The IntelliJ IDEA plugin provides custom formatter support for IntelliJ IDEA. diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 83adb6f8..37de773b 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -200,9 +200,6 @@ jobs: - task: publish-eclipse-update-site image: ci-image file: git-repo/ci/tasks/publish-eclipse-update-site.yml - params: - BINTRAY_USERNAME: ((bintray-username)) - BINTRAY_API_KEY: ((bintray-api-key)) groups: - name: "builds" jobs: ["build"] diff --git a/ci/scripts/publish-eclipse-update-site.sh b/ci/scripts/publish-eclipse-update-site.sh index 507ee3fa..3f36c96a 100755 --- a/ci/scripts/publish-eclipse-update-site.sh +++ b/ci/scripts/publish-eclipse-update-site.sh @@ -9,25 +9,23 @@ groupId=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].i version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) echo "Publishing ${buildName}/${buildNumber} to Eclipse Update Site" -# We need to push twice for some reason otherwise we get out of date versions -for i in {1..2}; do - curl \ - -s \ - --connect-timeout 240 \ - --max-time 2700 \ - -u ${BINTRAY_USERNAME}:${BINTRAY_API_KEY} \ - -f \ - -X PUT \ - -T "artifactory-repo/io/spring/javaformat/io.spring.javaformat.eclipse.site/${version}/io.spring.javaformat.eclipse.site-${version}.zip" \ - "https://api.bintray.com/content/spring/javaformat-eclipse/update-site/${version}/${version}/site.zip?explode=1&publish=1" > /dev/null || { echo "Failed to publish" >&2; exit 1; } - releasedVersions=$( curl -f -X GET https://api.bintray.com/packages/spring/javaformat-eclipse/update-site | jq -r '.versions[]' ) - sleep 30 -done - -respositories="" +curl \ + -s \ + --connect-timeout 240 \ + --max-time 2700 \ + -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ + -f \ + -H "X-Explode-Archive: true" + -X PUT \ + -T "artifactory-repo/io/spring/javaformat/io.spring.javaformat.eclipse.site/${version}/io.spring.javaformat.eclipse.site-${version}.zip" \ + "https://repo.spring.io/javaformat-eclipse-update-site/${version}" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + +releasedVersions=$( curl -s -f -X GET https://repo.spring.io/api/storage/javaformat-eclipse-update-site | jq -r '.children[] | .uri' | cut -c 2- | grep '\d.*' | sort -V ) + +repositories="" while read -r releasedVersion; do echo "Adding repository for ${releasedVersion}" - respositories="${respositories}https://dl.bintray.com/spring/javaformat-eclipse/${releasedVersion}p2" + repositories="${repositories}https://repo.spring.io/javaformat-eclipse-update-site/${releasedVersion}p2" done <<< "${releasedVersions}" pushd git-repo > /dev/null @@ -38,21 +36,21 @@ curl \ -s \ --connect-timeout 240 \ --max-time 2700 \ - -u ${BINTRAY_USERNAME}:${BINTRAY_API_KEY} \ + -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ -f \ -X PUT \ -T "target/repository/content.jar" \ - "https://api.bintray.com/content/spring/javaformat-eclipse/content.jar" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + "https://repo.spring.io/javaformat-eclipse-update-site" > /dev/null || { echo "Failed to publish" >&2; exit 1; } curl \ -s \ --connect-timeout 240 \ --max-time 2700 \ - -u ${BINTRAY_USERNAME}:${BINTRAY_API_KEY} \ + -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ -f \ -X PUT \ -T "target/repository/artifacts.jar" \ - "https://api.bintray.com/content/spring/javaformat-eclipse/artifacts.jar" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + "https://repo.spring.io/javaformat-eclipse-update-site" > /dev/null || { echo "Failed to publish" >&2; exit 1; } popd > /dev/null diff --git a/ci/tasks/publish-eclipse-update-site.yml b/ci/tasks/publish-eclipse-update-site.yml index 080e429f..d1b72e42 100644 --- a/ci/tasks/publish-eclipse-update-site.yml +++ b/ci/tasks/publish-eclipse-update-site.yml @@ -4,7 +4,7 @@ inputs: - name: git-repo - name: artifactory-repo params: - BINTRAY_USERNAME: - BINTRAY_API_KEY: + ARTIFACTORY_USERNAME: ((artifactory-username)) + ARTIFACTORY_PASSWORD: ((artifactory-password)) run: path: git-repo/ci/scripts/publish-eclipse-update-site.sh From d85b891ab4bcf8e86432f7c3605bd396d337c6fe Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 19 Apr 2021 11:47:17 -0700 Subject: [PATCH 003/238] Fix update site to repo.spring.io CI See gh-263 --- ci/scripts/publish-eclipse-update-site-pom-template.xml | 2 +- ci/scripts/publish-eclipse-update-site.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ci/scripts/publish-eclipse-update-site-pom-template.xml b/ci/scripts/publish-eclipse-update-site-pom-template.xml index 859a3101..6ee635e0 100755 --- a/ci/scripts/publish-eclipse-update-site-pom-template.xml +++ b/ci/scripts/publish-eclipse-update-site-pom-template.xml @@ -25,7 +25,7 @@ -##respositories## +##repositories## ${project.build.directory}/repository true diff --git a/ci/scripts/publish-eclipse-update-site.sh b/ci/scripts/publish-eclipse-update-site.sh index 3f36c96a..528e7774 100755 --- a/ci/scripts/publish-eclipse-update-site.sh +++ b/ci/scripts/publish-eclipse-update-site.sh @@ -15,10 +15,10 @@ curl \ --max-time 2700 \ -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ -f \ - -H "X-Explode-Archive: true" + -H "X-Explode-Archive: true" \ -X PUT \ -T "artifactory-repo/io/spring/javaformat/io.spring.javaformat.eclipse.site/${version}/io.spring.javaformat.eclipse.site-${version}.zip" \ - "https://repo.spring.io/javaformat-eclipse-update-site/${version}" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + "https://repo.spring.io/javaformat-eclipse-update-site/${version}/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } releasedVersions=$( curl -s -f -X GET https://repo.spring.io/api/storage/javaformat-eclipse-update-site | jq -r '.children[] | .uri' | cut -c 2- | grep '\d.*' | sort -V ) @@ -29,7 +29,7 @@ while read -r releasedVersion; do done <<< "${releasedVersions}" pushd git-repo > /dev/null -sed "s|##respositories##|${respositories}|" ci/scripts/publish-eclipse-update-site-pom-template.xml > publish-eclipse-update-site-pom.xml +sed "s|##repositories##|${repositories}|" ci/scripts/publish-eclipse-update-site-pom-template.xml > publish-eclipse-update-site-pom.xml run_maven -f publish-eclipse-update-site-pom.xml clean package || { echo "Failed to publish" >&2; exit 1; } curl \ From 961882160b973dd12b420db08ca3ec3796ef344f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 19 Apr 2021 11:56:23 -0700 Subject: [PATCH 004/238] Fix update site to repo.spring.io CI See gh-263 --- ci/scripts/publish-eclipse-update-site.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/scripts/publish-eclipse-update-site.sh b/ci/scripts/publish-eclipse-update-site.sh index 528e7774..a025096a 100755 --- a/ci/scripts/publish-eclipse-update-site.sh +++ b/ci/scripts/publish-eclipse-update-site.sh @@ -40,7 +40,7 @@ curl \ -f \ -X PUT \ -T "target/repository/content.jar" \ - "https://repo.spring.io/javaformat-eclipse-update-site" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } curl \ -s \ @@ -50,7 +50,7 @@ curl \ -f \ -X PUT \ -T "target/repository/artifacts.jar" \ - "https://repo.spring.io/javaformat-eclipse-update-site" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } popd > /dev/null From 8a6df3eff10860aadf046b505e0d30967a916b5e Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 21 Apr 2021 16:38:56 -0700 Subject: [PATCH 005/238] Fix NoSuchMethodError when using Buildship 3.1.5 Support both Collection and Map values from `modelProvider.fetchModels` so that the plugin can work with Builship 3.1.5. Fixes gh-260 --- .../gradle/GradleProjectSettingsConfigurator.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java index 2f2b25b3..adcc9bf6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.util.Collection; import java.util.LinkedHashSet; +import java.util.Map; import java.util.Optional; import java.util.Set; @@ -76,8 +77,7 @@ private void configureProject(IProject project, IProgressMonitor monitor) throws Optional build = workspace.getBuild(project); if (build.isPresent()) { ModelProvider modelProvider = ((InternalGradleBuild) build.get()).getModelProvider(); - Collection rootProjects = modelProvider.fetchModels(EclipseProject.class, - FetchStrategy.FORCE_RELOAD, this.tokenSource, monitor); + Collection rootProjects = getRootProjects(monitor, modelProvider); EclipseProject eclipseProject = findProjectByName(rootProjects, project.getName()); if (hasSpringFormatPlugin(eclipseProject)) { ProjectSettingsFilesLocator locator = new ProjectSettingsFilesLocator(getSearchFolders(rootProjects)); @@ -86,6 +86,13 @@ private void configureProject(IProject project, IProgressMonitor monitor) throws } } + @SuppressWarnings("unchecked") + private Collection getRootProjects(IProgressMonitor monitor, ModelProvider modelProvider) { + Object models = modelProvider.fetchModels(EclipseProject.class, + FetchStrategy.FORCE_RELOAD, this.tokenSource, monitor); + return (Collection) ((models instanceof Map) ? ((Map) models).values() : models); + } + private EclipseProject findProjectByName(Iterable candidates, String name) { for (EclipseProject candidate : candidates) { if (name.equals(candidate.getName())) { From 9c85d8aca900808d6a15d647c42009597787ee86 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 21 Apr 2021 16:47:31 -0700 Subject: [PATCH 006/238] Formatting --- .../io.spring.javaformat.eclipse/plugin.xml | 52 ++++++++----------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml index bdcdc212..d606bf8d 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml @@ -8,34 +8,28 @@ name="Spring"> - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + From ec2f6feca5ebb1e45e5eef081fcf2e658f359483 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 21 Apr 2021 16:57:44 -0700 Subject: [PATCH 007/238] Upgrade to Eclipse 2021.3 Closes gh-267 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 73b7b48b..3b88cb4b 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ ${basedir} UTF-8 1.8 - https://download.eclipse.org/releases/2020-12/202012161000/ + https://download.eclipse.org/releases/2021-03/202103171000/ https://dl.bintray.com/eclipse-cs/eclipse-cs/8.35.0 true 1.8.1 From b831695402d21f020fa64e0aaea4077062d210b9 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 21 Apr 2021 22:47:28 -0700 Subject: [PATCH 008/238] Polish README --- README.adoc | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/README.adoc b/README.adoc index 8ed831de..c6b4a8d8 100644 --- a/README.adoc +++ b/README.adoc @@ -2,7 +2,9 @@ :checkstyle-version: 8.32 == Spring Java Format -=== What is this? + + +=== What is This? A set of plugins that can be applied to any Java project to provide a consistent "`Spring`" style. The set currently consists of: @@ -13,10 +15,13 @@ Since the aim of this project is to provide consistency, each plugin is not gene You need to change your code to match the required conventions. You can't configure the plugin conventions to match your style! + + === Maven -==== Source Formatting + +==== Source Formatting For source formatting, add the `spring-javaformat-maven-plugin` to your `build` plugins as follows: [source,xml,indent=0,subs="normal"] @@ -71,8 +76,9 @@ NOTE: The source formatter does not fundamentally change your code. For example, it will not change the order of import statements. It is effectively limited to adding or removing whitespace and line feeds. -=== Checkstyle + +=== Checkstyle To enforce checksyle conventions add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: [source,xml,indent=0,subs="normal"] @@ -114,8 +120,12 @@ To enforce checksyle conventions add the checkstyle plugin and include a depende ---- + + === Gradle + + ==== Source Formatting For source formatting, add the `spring-javaformat-gradle-plugin` to your `build` plugins as follows: @@ -145,6 +155,8 @@ tasks.withType(io.spring.javaformat.gradle.CheckTask) { } ---- + + ==== Checkstyle To enforce checksyle conventions add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: @@ -175,6 +187,7 @@ Your `checkstyle.xml` file should look then like this: ---- + === Eclipse The Eclipse plugin provides a custom formatter implementation and automatically applies project specific settings. The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script. @@ -195,6 +208,8 @@ You can download the latest version from https://repo.spring.io/release/io/spring/javaformat/io.spring.javaformat.eclipse.site/{release-version}[repo.spring.io] or use the https://repo.spring.io/javaformat-eclipse-update-site/[update site]. + + === IntelliJ IDEA The IntelliJ IDEA plugin provides custom formatter support for IntelliJ IDEA. The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script. @@ -204,15 +219,21 @@ You can use the standard `code` -> `reformat code` action to format the code. To install the plugin use the `spring-javaformat-intellij-idea-plugin` jar file. You can download the latest version from https://repo.spring.io/release/io/spring/javaformat/spring-javaformat-intellij-idea-plugin/{release-version}[repo.spring.io]. -=== About the conventions + + +=== About the Conventions Most of the coding conventions and style comes from the Spring Framework and Spring Boot projects. Spring Framework manually formats code, where as Spring Boot uses automatic formatting. + + === Tips Formatting and Checkstyle alone are not enough to produce truly consistent code. Here are some tips that we've found useful when developing Spring Boot. -==== Excluding specific checks + + +==== Excluding Specific Checks If you want most `SpringChecks` but need to exclude one or two, you can do something like this in your `checkstyle.xml`: [source,xml,indent=0] @@ -228,7 +249,9 @@ If you want most `SpringChecks` but need to exclude one or two, you can do somet ---- -==== Disabling formatting for blocks of code + + +==== Disabling Formatting For Blocks of Code Some code isn't particularly amenable to automatic formatting. For example, Spring Security configurations often work better when manually formatted. @@ -243,6 +266,8 @@ If you need to disable formatting for a specific block of code you can enclose i // @formatter:on ---- + + ==== Wrapping The source formatter uses 120 chars for wrapping. This aims to strike a balance between making use of available horizontal space in your IDE and avoiding unwanted additional @@ -254,11 +279,15 @@ code bunched up to the right of your screen you should take that as a signal to "`extract method`" refactor. Extracting small private methods will improve formatting and it helps when reading the code and debugging. + + ==== Whitespace Keeping whitespace lines out of method bodies can help make the code easier to scan. If blank lines are only included between methods it becomes easier to see the overall structure of the class. If you find you need whitespace inside your method, consider if extracting a private method might give a better result. + + ==== Comments Try to add javadoc for each public method and constant. Private methods shouldn't generally need javadoc, unless it provides a natural place to document unusual behavior. @@ -266,11 +295,15 @@ Private methods shouldn't generally need javadoc, unless it provides a natural p The checkstyle rules will enforce that all public classes have javadoc. They will also ensure that `@author` tags are well formed. + + ==== Final Private members should be `final` whenever possible. Local variable and parameters should generally not be explicitly declared as final since it adds so much noise. -==== Read-down methods, fields and parameters + + +==== Read-down Methods, Fields and Parameters Methods don't need to be organized by scope. There's no need to group all `private`, `protected` and `public` methods together. Instead try to make your code easy to read when scanning the file from top to bottom. From 354632a98a1eb83ae1e08a09e82c090b331c4407 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 20 Apr 2021 17:58:56 -0700 Subject: [PATCH 009/238] Support space indentation option Update the formatter and checkstyle rules to allow indentation with spaces rather than tabs. Closes gh-269 --- README.adoc | 14 +++ .../ProjectPropertiesTests.java | 11 +- .../ProjectSettingsFileTests.java | 10 +- .../ProjectSettingsFilesLocatorTests.java | 44 ++++++- .../META-INF/MANIFEST.MF | 1 + .../build.properties | 6 +- .../io.spring.javaformat.eclipse/plugin.xml | 9 +- .../io.spring.javaformat.eclipse/pom.xml | 6 + .../formatter/SpringCodeFormatter.java | 13 +- .../formatter/SpringCodeFormatterSpaces.java | 34 ++++++ .../formatter/SpringCodeFormatterTabs.java | 34 ++++++ .../GradleProjectSettingsConfigurator.java | 6 +- .../projectsettings/ProjectProperties.java | 31 +---- .../projectsettings/ProjectSettingsFile.java | 47 +++++-- .../projectsettings/ProjectSettingsFiles.java | 21 +++- .../ProjectSettingsFilesLocator.java | 27 +++- .../javaformat/gradle/FormatterTask.java | 6 +- .../javaformat/gradle/FormatTaskTests.java | 13 +- .../format-spaces/.springjavaformatconfig | 1 + .../test/resources/format-spaces/build.gradle | 10 ++ .../src/main/java/simple/Simple.java | 15 +++ .../intellij/codestyle/SpringReformatter.java | 8 +- .../codestyle/SpringReformatterTests.java | 7 +- .../it/apply-spaces/.springjavaformatconfig | 1 + .../src/it/apply-spaces/pom.xml | 29 +++++ .../src/main/java/simple/Simple.java | 14 +++ .../src/it/apply-spaces/verify.groovy | 1 + .../io/spring/format/maven/ApplyMojo.java | 6 +- .../io/spring/format/maven/FormatMojo.java | 10 +- .../io/spring/format/maven/ValidateMojo.java | 6 +- .../io/spring/format/maven/VerifyApply.java | 14 ++- spring-javaformat/pom.xml | 1 + .../spring-javaformat-checkstyle/pom.xml | 5 + .../check/SpringLeadingWhitespaceCheck.java | 88 ++++++++++++++ .../checkstyle/check/messages.properties | 1 + .../checkstyle/spring-checkstyle.xml | 23 ++-- .../check/LeadingWhitespaceSpaces.txt | 2 + .../resources/check/LeadingWhitespaceTabs.txt | 2 + .../config/LeadingWhitespaceSpaces.xml | 11 ++ .../source/LeadingWhitespaceSpaces.java | 31 +++++ .../source/LeadingWhitespaceTabs.java | 31 +++++ .../spring-javaformat-config/pom.xml | 15 +++ .../config/DefaultJavaFormatConfig.java | 37 ++++++ .../javaformat/config/IndentationStyle.java | 36 ++++++ .../javaformat/config/JavaFormatConfig.java | 115 ++++++++++++++++++ .../config/PropertiesJavaFormatConfig.java | 57 +++++++++ .../pom.xml | 5 + .../spring-javaformat-formatter/pom.xml | 5 + .../javaformat/formatter/FileFormatter.java | 8 +- .../javaformat/formatter/Formatter.java | 54 +++++--- .../formatter/AbstractFormatterTests.java | 20 ++- .../formatter/FileFormatterTests.java | 19 +-- .../javaformat/formatter/FormatterTests.java | 9 +- .../src/test/resources/config/spaces.txt | 1 + .../src/test/resources/expected/spaces.txt | 90 ++++++++++++++ .../src/test/resources/source/spaces.txt | 90 ++++++++++++++ 56 files changed, 1087 insertions(+), 124 deletions(-) create mode 100644 spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterSpaces.java create mode 100644 spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterTabs.java create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/.springjavaformatconfig create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/build.gradle create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/src/main/java/simple/Simple.java create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/.springjavaformatconfig create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/pom.xml create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/src/main/java/simple/Simple.java create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/verify.groovy create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceSpaces.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabs.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/LeadingWhitespaceSpaces.xml create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java create mode 100644 spring-javaformat/spring-javaformat-config/pom.xml create mode 100644 spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java create mode 100644 spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java create mode 100644 spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java create mode 100644 spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/test/resources/config/spaces.txt create mode 100644 spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/spaces.txt create mode 100644 spring-javaformat/spring-javaformat-formatter/src/test/resources/source/spaces.txt diff --git a/README.adoc b/README.adoc index c6b4a8d8..892078f2 100644 --- a/README.adoc +++ b/README.adoc @@ -227,6 +227,20 @@ Spring Framework manually formats code, where as Spring Boot uses automatic form +=== Indenting With Spaces +By default tabs are used for indenting formatted code. +We strongly recommend that this default is not changed, especially for official Spring projects. +If, however, you feel that you can't live with tabs then switching to spaces is the one configuration option that we do support. + +To use spaces rather than tabs, add a file called `.springjavaformatconfig` to the root of your project with the following content: + +[source,properties] +---- +indentation-style=spaces +---- + + + === Tips Formatting and Checkstyle alone are not enough to produce truly consistent code. Here are some tips that we've found useful when developing Spring Boot. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java index 561f7917..85780b50 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,8 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; +import io.spring.javaformat.config.JavaFormatConfig; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -75,15 +77,16 @@ public void addFromEmptyFolderUsesDefaults() throws IOException { @Test public void getModifiedContentReplacesCopyrightYear() throws IOException { + String year = "2016-2020"; File folder = this.temp.newFolder(); File file = new File(folder, "eclipse.properties"); - writeProperties(file, "2016-2020"); + writeProperties(file, year); ProjectProperties properties = new ProjectProperties(); properties.addFromFolder(folder); ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); ProjectSettingsFile prefs = getFile(files, "org.eclipse.jdt.ui.prefs"); - String content = loadContent(properties.getModifiedContent(prefs)); - assertThat(content).contains("Copyright 2016-2020 the original author or authors"); + String content = loadContent(properties.getModifiedContent(prefs).getContent(JavaFormatConfig.DEFAULT)); + assertThat(content).contains("Copyright " + year + " the original author or authors"); } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java index 50108817..e691a234 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,8 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; +import io.spring.javaformat.config.JavaFormatConfig; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -43,14 +45,16 @@ public void fromFileAdaptsFile() throws Exception { writeText(file, "test"); ProjectSettingsFile projectSettingsFile = ProjectSettingsFile.fromFile(file); assertThat(projectSettingsFile.getName()).isEqualTo(file.getName()); - assertThat(projectSettingsFile.getContent()).hasSameContentAs(new ByteArrayInputStream("test".getBytes())); + assertThat(projectSettingsFile.getContent(JavaFormatConfig.DEFAULT)) + .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); } @Test public void fromClasspathResourceAdaptsResource() throws Exception { ProjectSettingsFile projectSettingsFile = ProjectSettingsFile.fromClasspath(getClass(), "test.txt"); assertThat(projectSettingsFile.getName()).isEqualTo("test.txt"); - assertThat(projectSettingsFile.getContent()).hasSameContentAs(new ByteArrayInputStream("test".getBytes())); + assertThat(projectSettingsFile.getContent(JavaFormatConfig.DEFAULT)) + .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); } private void writeText(File file, String s) throws FileNotFoundException { diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java index 326fa114..d29834f4 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,14 +19,18 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.io.PrintWriter; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Properties; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; +import io.spring.javaformat.config.JavaFormatConfig; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -66,11 +70,45 @@ public void locateSettingsFilesWhenMultipleFoldersFindsInEarliest() throws Excep ProjectSettingsFiles files = new ProjectSettingsFilesLocator(folder1, folder2).locateSettingsFiles(); Map found = new LinkedHashMap<>(); files.iterator().forEachRemaining((f) -> found.put(f.getName(), f)); - assertThat(found.get("foo.prefs").getContent()).hasSameContentAs(new ByteArrayInputStream("foo1".getBytes())); - assertThat(found.get("org.eclipse.jdt.core.prefs").getContent()) + assertThat(found.get("foo.prefs").getContent(JavaFormatConfig.DEFAULT)) + .hasSameContentAs(new ByteArrayInputStream("foo1".getBytes())); + assertThat(found.get("org.eclipse.jdt.core.prefs").getContent(JavaFormatConfig.DEFAULT)) .hasSameContentAs(new ByteArrayInputStream("core2".getBytes())); } + @Test + public void jdtCorePrefsFormatterWhenDefaultShouldUseTabs() throws IOException { + ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); + ProjectSettingsFile file = get(files, "org.eclipse.jdt.core.prefs"); + try (InputStream content = file.getContent(JavaFormatConfig.DEFAULT)) { + Properties properties = new Properties(); + properties.load(content); + assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) + .isEqualTo("io.spring.javaformat.eclipse.formatter"); + } + } + + @Test + public void jdtCorePrefsFormatterWhenSpacesShouldUseSpaces() throws IOException { + ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); + ProjectSettingsFile file = get(files, "org.eclipse.jdt.core.prefs"); + try (InputStream content = file.getContent(JavaFormatConfig.SPACES)) { + Properties properties = new Properties(); + properties.load(content); + assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) + .isEqualTo("io.spring.javaformat.eclipse.formatter.spaces"); + } + } + + private ProjectSettingsFile get(ProjectSettingsFiles files, String name) { + for (ProjectSettingsFile file : files) { + if (file.getName().equals(name)) { + return file; + } + } + return null; + } + private void writeFile(File folder, String name) throws IOException { writeFile(folder, name, name); } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 3df040bf..76c70809 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -20,6 +20,7 @@ Require-Bundle: org.eclipse.ui, net.sf.eclipsecs.core;resolution:=optional Bundle-ClassPath: ., lib/spring-javaformat-formatter-eclipse.jar, + lib/spring-javaformat-config.jar, lib/spring-javaformat-formatter.jar, lib/spring-javaformat-checkstyle.jar Bundle-ActivationPolicy: lazy diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties index c17f7a77..0457dd52 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties @@ -3,7 +3,7 @@ bin.includes = META-INF/,\ .,\ plugin.xml,\ lifecycle-mapping-metadata.xml,\ - lib/spring-javaformat-formatter-eclipse.jar,\ + lib/spring-javaformat-checkstyle.jar,\ + lib/spring-javaformat-config.jar,\ lib/spring-javaformat-formatter.jar,\ - lib/spring-javaformat-checkstyle.jar - + lib/spring-javaformat-formatter-eclipse.jar diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml index d606bf8d..b930b584 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml @@ -3,9 +3,14 @@ + name="Spring (tab indented)"> + + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index af14bb77..7d1b1034 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -16,6 +16,12 @@ + + io.spring.javaformat + spring-javaformat-config + runtime + ${project.version} + io.spring.javaformat spring-javaformat-formatter diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java index fc0862da..01d5499e 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,16 +22,21 @@ import org.eclipse.jface.text.IRegion; import org.eclipse.text.edits.TextEdit; +import io.spring.javaformat.config.JavaFormatConfig; import io.spring.javaformat.formatter.Formatter; /** - * Eclipse {@link CodeFormatter} for Spring formatting. + * Eclipse {@link CodeFormatter} base class for Spring formatting. * * @author Phillip Webb */ -public class SpringCodeFormatter extends CodeFormatter { +public abstract class SpringCodeFormatter extends CodeFormatter { - private Formatter delegate = new Formatter(); + private final Formatter delegate; + + public SpringCodeFormatter(JavaFormatConfig javaFormatConfig) { + this.delegate = new Formatter(javaFormatConfig); + } @Override public TextEdit format(int kind, String source, int offset, int length, int indentationLevel, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterSpaces.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterSpaces.java new file mode 100644 index 00000000..ad46f4d7 --- /dev/null +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterSpaces.java @@ -0,0 +1,34 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.eclipse.formatter; + +import org.eclipse.jdt.core.formatter.CodeFormatter; + +import io.spring.javaformat.config.JavaFormatConfig; + +/** + * Eclipse {@link CodeFormatter} for Spring formatting with spaces. + * + * @author Phillip Webb + */ +public class SpringCodeFormatterSpaces extends SpringCodeFormatter { + + public SpringCodeFormatterSpaces() { + super(JavaFormatConfig.SPACES); + } + +} diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterTabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterTabs.java new file mode 100644 index 00000000..091a910d --- /dev/null +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterTabs.java @@ -0,0 +1,34 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.eclipse.formatter; + +import org.eclipse.jdt.core.formatter.CodeFormatter; + +import io.spring.javaformat.config.JavaFormatConfig; + +/** + * Eclipse {@link CodeFormatter} for Spring formatting with tabs. + * + * @author Phillip Webb + */ +public class SpringCodeFormatterTabs extends SpringCodeFormatter { + + public SpringCodeFormatterTabs() { + super(JavaFormatConfig.DEFAULT); + } + +} diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java index adcc9bf6..d21fe831 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -88,8 +88,8 @@ private void configureProject(IProject project, IProgressMonitor monitor) throws @SuppressWarnings("unchecked") private Collection getRootProjects(IProgressMonitor monitor, ModelProvider modelProvider) { - Object models = modelProvider.fetchModels(EclipseProject.class, - FetchStrategy.FORCE_RELOAD, this.tokenSource, monitor); + Object models = modelProvider.fetchModels(EclipseProject.class, FetchStrategy.FORCE_RELOAD, this.tokenSource, + monitor); return (Collection) ((models instanceof Map) ? ((Map) models).values() : models); } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java index d6cfc61e..9cb095f0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,15 +16,9 @@ package io.spring.javaformat.eclipse.projectsettings; -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.StringWriter; -import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Collections; @@ -74,26 +68,13 @@ private void addFromProperties(Properties properties) { }); } - public InputStream getModifiedContent(ProjectSettingsFile file) throws IOException { + public ProjectSettingsFile getModifiedContent(ProjectSettingsFile file) throws IOException { if (file.getName().equals("org.eclipse.jdt.ui.prefs")) { - String content = loadContent(file); - content = content.replace("Copyright the original author or authors", - "Copyright " + get(COPYRIGHT_YEAR) + " the original author or authors"); - return new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)); - } - return file.getContent(); - } - - private String loadContent(ProjectSettingsFile file) throws IOException { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getContent()))) { - StringWriter writer = new StringWriter(); - char[] buffer = new char[4096]; - int read = 0; - while ((read = reader.read(buffer)) >= 0) { - writer.write(buffer, 0, read); - } - return writer.toString(); + return file.withUpdatedContent( + (javaFormatConfig, content) -> content.replace("Copyright the original author or authors", + "Copyright " + get(COPYRIGHT_YEAR) + " the original author or authors")); } + return file; } String get(String name) { diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java index c7570b80..d07f1cf9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,10 +16,18 @@ package io.spring.javaformat.eclipse.projectsettings; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; +import java.util.function.BiFunction; + +import io.spring.javaformat.config.JavaFormatConfig; /** * A project settings file that can be copied to the project {@code .settings} folder. @@ -32,7 +40,7 @@ final class ProjectSettingsFile { private final ContentSupplier contentSupplier; - private ProjectSettingsFile(String name, ContentSupplier contentSupplier) { + ProjectSettingsFile(String name, ContentSupplier contentSupplier) { this.name = name; this.contentSupplier = contentSupplier; } @@ -48,11 +56,34 @@ public String getName() { /** * Return a new {@link InputStream} that can be used to access the content of the * file. + * @param javaFormatConfig the java format config to apply * @return the file contents * @throws IOException if the file cannot be opened */ - public InputStream getContent() throws IOException { - return this.contentSupplier.getContent(); + public InputStream getContent(JavaFormatConfig javaFormatConfig) throws IOException { + return this.contentSupplier.getContent(javaFormatConfig); + } + + /** + * Return a new {@link ProjectSettingsFile} where the original content is updated by + * the given operation. + * @param operation the operation to update the content + * @return a new {@link ProjectSettingsFile} instance + */ + public ProjectSettingsFile withUpdatedContent(BiFunction operation) { + return new ProjectSettingsFile(this.name, (javaFormatConfig) -> { + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(this.contentSupplier.getContent(javaFormatConfig)))) { + StringWriter writer = new StringWriter(); + char[] buffer = new char[4096]; + int read = 0; + while ((read = reader.read(buffer)) >= 0) { + writer.write(buffer, 0, read); + } + String content = operation.apply(javaFormatConfig, writer.toString()); + return new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)); + } + }); } /** @@ -61,7 +92,7 @@ public InputStream getContent() throws IOException { * @return a new {@link ProjectSettingsFile} */ public static ProjectSettingsFile fromFile(File file) { - return new ProjectSettingsFile(file.getName(), () -> new FileInputStream(file)); + return new ProjectSettingsFile(file.getName(), (javaFormatConfig) -> new FileInputStream(file)); } /** @@ -71,13 +102,13 @@ public static ProjectSettingsFile fromFile(File file) { * @return a new {@link ProjectSettingsFile} */ public static ProjectSettingsFile fromClasspath(Class sourceClass, String name) { - return new ProjectSettingsFile(name, () -> sourceClass.getResourceAsStream(name)); + return new ProjectSettingsFile(name, (javaFormatConfig) -> sourceClass.getResourceAsStream(name)); } @FunctionalInterface - private interface ContentSupplier { + interface ContentSupplier { - InputStream getContent() throws IOException; + InputStream getContent(JavaFormatConfig javaFormatConfig) throws IOException; } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java index 270cf025..8ece5dfb 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package io.spring.javaformat.eclipse.projectsettings; import java.io.BufferedInputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -28,8 +29,11 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; +import io.spring.javaformat.config.JavaFormatConfig; + /** * A collection of {@link ProjectSettingsFile project setting files}. * @@ -64,9 +68,11 @@ public Iterator iterator() { * @throws CoreException on eclipse file creation failure */ public void applyToProject(IProject project, IProgressMonitor monitor) throws IOException, CoreException { + JavaFormatConfig javaFormatConfig = getJavaFormatConfig(project); for (ProjectSettingsFile file : this) { + file = this.projectProperties.getModifiedContent(file); IFile destination = project.getFile(".settings/" + file.getName()); - try (InputStream content = this.projectProperties.getModifiedContent(file)) { + try (InputStream content = file.getContent(javaFormatConfig)) { if (!destination.exists()) { destination.create(new BufferedInputStream(content), true, monitor); } @@ -77,4 +83,15 @@ public void applyToProject(IProject project, IProgressMonitor monitor) throws IO } } + private JavaFormatConfig getJavaFormatConfig(IProject project) { + try { + IPath location = project.getLocation(); + File file = (location != null) ? location.toFile() : null; + return JavaFormatConfig.findFrom(file); + } + catch (Exception ex) { + return JavaFormatConfig.DEFAULT; + } + } + } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java index 78385a60..3d942316 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,9 @@ import java.util.LinkedHashMap; import java.util.Map; +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaFormatConfig; + /** * Locates project settings files to be applied to projects. * @@ -29,9 +32,11 @@ */ public class ProjectSettingsFilesLocator { + private static final String JDT_CORE_PREFS = "org.eclipse.jdt.core.prefs"; + private static final String[] SOURCE_FOLDERS = { "eclipse", ".eclipse" }; - private static final String[] DEFAULT_FILES = { "org.eclipse.jdt.core.prefs", "org.eclipse.jdt.ui.prefs" }; + private static final String[] DEFAULT_FILES = { JDT_CORE_PREFS, "org.eclipse.jdt.ui.prefs" }; private final File[] searchFolders; @@ -52,11 +57,27 @@ public ProjectSettingsFiles locateSettingsFiles() throws IOException { } } for (String file : DEFAULT_FILES) { - putIfAbsent(files, ProjectSettingsFile.fromClasspath(getClass(), file)); + putIfAbsent(files, getDefaultSettingsFile(file)); } return new ProjectSettingsFiles(files.values(), projectProperties); } + private ProjectSettingsFile getDefaultSettingsFile(String file) { + ProjectSettingsFile settingsFile = ProjectSettingsFile.fromClasspath(getClass(), file); + if (settingsFile.getName().equals(JDT_CORE_PREFS)) { + settingsFile = settingsFile.withUpdatedContent(this::updateFormatter); + } + return settingsFile; + } + + private String updateFormatter(JavaFormatConfig javaFormatConfig, String content) { + if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { + return content.replace("org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter", + "org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.spaces"); + } + return content; + } + private void add(ProjectProperties projectProperties, Map files, File folder) throws IOException { if (folder.exists() && folder.isDirectory()) { diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatterTask.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatterTask.java index d3ed5e9c..a4a1bcf5 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatterTask.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatterTask.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.SourceTask; +import io.spring.javaformat.config.JavaFormatConfig; import io.spring.javaformat.formatter.FileEdit; import io.spring.javaformat.formatter.FileFormatter; @@ -58,7 +59,8 @@ public void setEncoding(String encoding) { * @return the file edits */ protected final Stream formatFiles() { - FileFormatter formatter = new FileFormatter(); + JavaFormatConfig javaFormatConfig = JavaFormatConfig.findFrom(getProject().getProjectDir()); + FileFormatter formatter = new FileFormatter(javaFormatConfig); Charset encoding = (getEncoding() != null ? Charset.forName(getEncoding()) : Charset.defaultCharset()); return formatter.formatFiles(getSource().getFiles(), encoding); } diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index cbd2c623..1fe2202e 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,7 +45,16 @@ public void checkOk() throws IOException { assertThat(result.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File formattedFile = new File(this.gradleBuild.getProjectDir(), "src/main/java/simple/Simple.java"); String formattedContent = new String(Files.readAllBytes(formattedFile.toPath())); - assertThat(formattedContent).contains("class Simple {"); + assertThat(formattedContent).contains("class Simple {").contains(" public static void main"); + } + + @Test + public void checkSpacesOk() throws IOException { + BuildResult result = this.gradleBuild.source("src/test/resources/format-spaces").build("format"); + assertThat(result.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + File formattedFile = new File(this.gradleBuild.getProjectDir(), "src/main/java/simple/Simple.java"); + String formattedContent = new String(Files.readAllBytes(formattedFile.toPath())); + assertThat(formattedContent).contains("class Simple {").contains(" public static void main"); } } diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/.springjavaformatconfig b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/.springjavaformatconfig new file mode 100644 index 00000000..881903b2 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/.springjavaformatconfig @@ -0,0 +1 @@ +indentation-style=spaces diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/build.gradle new file mode 100644 index 00000000..d6ca2f32 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/build.gradle @@ -0,0 +1,10 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/src/main/java/simple/Simple.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/src/main/java/simple/Simple.java new file mode 100644 index 00000000..83b618ce --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/format-spaces/src/main/java/simple/Simple.java @@ -0,0 +1,15 @@ +package simple; + +/** + * Simple. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // Main method + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java index c03360ab..e9bf5965 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ import org.eclipse.jface.text.IRegion; import org.eclipse.text.edits.TextEdit; +import io.spring.javaformat.config.JavaFormatConfig; import io.spring.javaformat.formatter.Formatter; /** @@ -101,8 +102,9 @@ private void throwNotWritableException(PsiElement element) throws IncorrectOpera } private void reformat(PsiFile file, Collection ranges, Document document) { - if (document != null) { - Formatter formatter = new Formatter(); + if (document != null && file.getVirtualFile() != null) { + JavaFormatConfig javaFormatConfig = JavaFormatConfig.findFrom(file.getVirtualFile().toNioPath()); + Formatter formatter = new Formatter(javaFormatConfig); String source = document.getText(); IRegion[] regions = EclipseRegionAdapter.asArray(ranges); TextEdit edit = formatter.format(source, regions, NORMALIZED_LINE_SEPARATOR); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java index e321d9a9..ae672b49 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.util.IncorrectOperationException; @@ -62,11 +63,15 @@ public class SpringReformatterTests { @Mock private PsiFile file; + @Mock + VirtualFile virtualFile; + private Collection ranges = Arrays.asList(new TextRange(10, 20)); @Before public void setup() { MockitoAnnotations.initMocks(this); + given(this.file.getVirtualFile()).willReturn(this.virtualFile); this.reformatter = new TestSpringReformatter(() -> this.project, () -> this.application, () -> this.documentManager); } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/.springjavaformatconfig b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/.springjavaformatconfig new file mode 100644 index 00000000..881903b2 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/.springjavaformatconfig @@ -0,0 +1 @@ +indentation-style=spaces diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/pom.xml new file mode 100644 index 00000000..252e99b8 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + io.spring.javaformat + apply + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + 1.8 + 1.8 + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + apply + + + + + + + diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/src/main/java/simple/Simple.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/src/main/java/simple/Simple.java new file mode 100644 index 00000000..10016e5d --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/src/main/java/simple/Simple.java @@ -0,0 +1,14 @@ +package simple; + +/** + * Simple. + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // Main method + } + +} diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/verify.groovy b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/verify.groovy new file mode 100644 index 00000000..644be98b --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-spaces/verify.groovy @@ -0,0 +1 @@ +new io.spring.format.maven.VerifyApply().verify(basedir, true) diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java index 5eb92040..a519102b 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,6 @@ import org.apache.maven.plugins.annotations.Mojo; import io.spring.javaformat.formatter.FileEdit; -import io.spring.javaformat.formatter.FileFormatter; import io.spring.javaformat.formatter.FileFormatterException; /** @@ -41,8 +40,7 @@ public class ApplyMojo extends FormatMojo { protected void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException { try { - FileFormatter formatter = new FileFormatter(); - formatter.formatFiles(files, encoding, lineSeparator).filter(FileEdit::hasEdits).forEach(this::save); + getFormatter().formatFiles(files, encoding, lineSeparator).filter(FileEdit::hasEdits).forEach(this::save); } catch (FileFormatterException ex) { throw new MojoExecutionException("Unable to format file " + ex.getFile(), ex); diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java index 87f8c3c6..5e7e85c8 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,6 +37,9 @@ import org.codehaus.plexus.util.DirectoryScanner; import org.codehaus.plexus.util.FileUtils; +import io.spring.javaformat.config.JavaFormatConfig; +import io.spring.javaformat.formatter.FileFormatter; + /** * Base class for formatter Mojo. * @@ -184,4 +187,9 @@ private boolean hasLength(Object[] array) { protected abstract void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException; + protected final FileFormatter getFormatter() { + JavaFormatConfig javaFormatConfig = JavaFormatConfig.findFrom(this.project.getBasedir()); + return new FileFormatter(javaFormatConfig); + } + } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index 6f4f772a..534fb7f7 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,6 @@ import org.apache.maven.plugins.annotations.Parameter; import io.spring.javaformat.formatter.FileEdit; -import io.spring.javaformat.formatter.FileFormatter; /** * Validates that source formatting matches the required style. @@ -51,8 +50,7 @@ protected void execute(List files, Charset encoding, String lineSeparator) getLog().debug("skipping validation as per configuration."); return; } - FileFormatter formatter = new FileFormatter(); - List problems = formatter.formatFiles(files, encoding, lineSeparator).filter(FileEdit::hasEdits) + List problems = getFormatter().formatFiles(files, encoding, lineSeparator).filter(FileEdit::hasEdits) .map(FileEdit::getFile).collect(Collectors.toList()); if (!problems.isEmpty()) { StringBuilder message = new StringBuilder("Formatting violations found in the following files:\n"); diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index 94df14bb..65fc2ec0 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,10 +38,19 @@ public void verify(File base) throws IOException { verify(base, LF); } + public void verify(File base, boolean spaces) throws IOException { + verify(base, LF, spaces); + } + public void verify(File base, String lineSeparator) throws IOException { + verify(base, lineSeparator, false); + } + + public void verify(File base, String lineSeparator, boolean spaces) throws IOException { String formated = new String(Files.readAllBytes(base.toPath().resolve(JAVA_FILE)), StandardCharsets.UTF_8); + String indent = (!spaces) ? " " : " "; assertThat(formated).contains("Simple." + lineSeparator + " *" + lineSeparator + " * @author") - .contains("public class Simple {"); + .contains("public class Simple {").contains(indent + "public static void main"); } public static void main(String[] args) throws IOException { @@ -49,4 +58,5 @@ public static void main(String[] args) throws IOException { "/Users/pwebb/projects/spring-javaformat/code/spring-javaformat-maven/spring-javaformat-maven-plugin/target/it/apply-line-separator"), "\r"); } + } diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index a95f707a..c33c8351 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -31,6 +31,7 @@ + spring-javaformat-config spring-javaformat-checkstyle spring-javaformat-formatter-eclipse-rewriter spring-javaformat-formatter-eclipse-runtime diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index f9156117..e9f790c2 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -14,6 +14,11 @@ + + io.spring.javaformat + spring-javaformat-config + ${project.version} + com.puppycrawl.tools checkstyle diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java new file mode 100644 index 00000000..188e6781 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java @@ -0,0 +1,88 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.checkstyle.check; + +import java.io.File; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.FileContents; +import com.puppycrawl.tools.checkstyle.api.FileText; + +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaFormatConfig; + +/** + * Checks that leading whitespace matches the expected indentation style. + * + * @author Phillip Webb + */ +public class SpringLeadingWhitespaceCheck extends AbstractSpringCheck { + + private static final Pattern PATTERN = Pattern.compile("^([\\ \\t]+)\\S"); + + private static final Map INDENTATION_STYLE_PATTERN; + static { + Map indentationStylePatterns = new HashMap<>(); + indentationStylePatterns.put(IndentationStyle.TABS, Pattern.compile("\\t*")); + indentationStylePatterns.put(IndentationStyle.SPACES, Pattern.compile("\\ *")); + INDENTATION_STYLE_PATTERN = Collections.unmodifiableMap(indentationStylePatterns); + } + + private IndentationStyle indentationStyle; + + @Override + public int[] getAcceptableTokens() { + return NO_REQUIRED_TOKENS; + } + + @Override + public void beginTree(DetailAST rootAST) { + super.beginTree(rootAST); + FileContents fileContents = getFileContents(); + FileText fileText = fileContents.getText(); + File file = fileText.getFile(); + if (file == null) { + return; + } + IndentationStyle indentationStyle = (this.indentationStyle != null) ? this.indentationStyle + : JavaFormatConfig.findFrom(file.getParentFile()).getIndentationStyle(); + for (int i = 0; i < fileText.size(); i++) { + String line = fileText.get(i); + int lineNo = i + 1; + Matcher matcher = PATTERN.matcher(line); + boolean found = matcher.find(0); + while (found + && fileContents.hasIntersectionWithComment(lineNo, matcher.start(0), lineNo, matcher.end(0) - 1)) { + found = matcher.find(matcher.end(0)); + } + if (found && !INDENTATION_STYLE_PATTERN.get(indentationStyle).matcher(matcher.group(1)).matches()) { + log(lineNo, "leadingwhitespace.incorrect", indentationStyle.toString().toLowerCase()); + } + } + } + + public void setIndentationStyle(String indentationStyle) { + this.indentationStyle = (indentationStyle != null && !"".equals(indentationStyle)) + ? IndentationStyle.valueOf(indentationStyle.toUpperCase()) : null; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 1129bcd7..b32ec8a7 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -26,3 +26,4 @@ methodvisibility.publicMethod=Method ''{0}'' in private class should not be publ nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\". ternary.equalOperator=Ternary operation should use != when testing. ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\" +leadingwhitespace.incorrect=Indentation should be performed with {0} only. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index ad3fa9fc..ac2e3b31 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -97,11 +97,11 @@ - + - + - + @@ -117,21 +117,15 @@ - - - - - - - + + - - + + @@ -163,7 +157,8 @@ + - + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceSpaces.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceSpaces.txt new file mode 100644 index 00000000..23d7767e --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceSpaces.txt @@ -0,0 +1,2 @@ ++Indentation should be performed with spaces only. [SpringLeadingWhitespace] ++1 error diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabs.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabs.txt new file mode 100644 index 00000000..3a32b527 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabs.txt @@ -0,0 +1,2 @@ ++Indentation should be performed with tabs only. [SpringLeadingWhitespace] ++1 error diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/LeadingWhitespaceSpaces.xml b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/LeadingWhitespaceSpaces.xml new file mode 100644 index 00000000..0070d582 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/LeadingWhitespaceSpaces.xml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java new file mode 100644 index 00000000..88621291 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java @@ -0,0 +1,31 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Leading whitepace expects only tabs. + * + * @author Phillip Webb + */ +public class LeadingWhitespaceSpaces { + + /** + * Comments are ignored. + */ + public void hello() { + System.out.println("World"); + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java new file mode 100644 index 00000000..dda09ef0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java @@ -0,0 +1,31 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Leading whitepace expects only tabs. + * + * @author Phillip Webb + */ +public class LeadingWhitespaceTabs { + + /** + * Comments are ignored. + */ + public void hello() { + System.out.println("World"); + } + +} diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml new file mode 100644 index 00000000..6b4ea591 --- /dev/null +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -0,0 +1,15 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat + 0.0.28-SNAPSHOT + + spring-javaformat-config + Spring JavaFormat Config + + ${basedir}/../.. + + diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java new file mode 100644 index 00000000..b838fef0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java @@ -0,0 +1,37 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.config; + +/** + * Default {@link JavaFormatConfig} implementation used when no config file is found. + * + * @author Phillip Webb + */ +class DefaultJavaFormatConfig implements JavaFormatConfig { + + private final IndentationStyle indentationStyle; + + DefaultJavaFormatConfig(IndentationStyle indentationStyle) { + this.indentationStyle = indentationStyle; + } + + @Override + public IndentationStyle getIndentationStyle() { + return this.indentationStyle; + } + +} diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java new file mode 100644 index 00000000..7477b099 --- /dev/null +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java @@ -0,0 +1,36 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.config; + +/** + * Indentation styles that can be used. + * + * @author Phillip Webb + */ +public enum IndentationStyle { + + /** + * Indent with tabs. + */ + TABS, + + /** + * Indent with spaces. + */ + SPACES + +} diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java new file mode 100644 index 00000000..8ba18779 --- /dev/null +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java @@ -0,0 +1,115 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.config; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Path; + +/** + * Support for the {@code .springjavaformatconfig} file that can be used to apply settings + * on a per-project basis. + * + * @author Phillip Webb + */ +public interface JavaFormatConfig { + + /** + * {@link JavaFormatConfig} using {@link IndentationStyle#TABS}. + */ + JavaFormatConfig TABS = new DefaultJavaFormatConfig(IndentationStyle.TABS); + + /** + * {@link JavaFormatConfig} using {@link IndentationStyle#SPACES}. + */ + JavaFormatConfig SPACES = new DefaultJavaFormatConfig(IndentationStyle.SPACES); + + /** + * The default {@link JavaFormatConfig}. + */ + JavaFormatConfig DEFAULT = TABS; + + /** + * Return the indentation style that should be used with the project. + * @return the indentation style + */ + IndentationStyle getIndentationStyle(); + + /** + * Find and load a {@code .springjavaformatconfig} by searching from the given file. + * @param path the file or directory to search from + * @return a loaded {@link JavaFormatConfig} or {@link #DEFAULT} if no + * {@code .springjavaformatconfig} file is found + */ + static JavaFormatConfig findFrom(Path path) { + return findFrom((path != null) ? path.toFile() : (File) null); + } + + /** + * Find and load a {@code .springjavaformatconfig} by searching from the given file. + * @param file the file or directory to search from + * @return a loaded {@link JavaFormatConfig} or {@link #DEFAULT} if no + * {@code .springjavaformatconfig} file is found + */ + static JavaFormatConfig findFrom(File file) { + if (file != null && file.isFile()) { + return findFrom(file.getParentFile()); + } + try { + while (file != null) { + File candidate = new File(file, ".springjavaformatconfig"); + if (candidate.exists() && candidate.isFile()) { + return load(candidate); + } + file = file.getParentFile(); + } + } + catch (Exception ex) { + } + return DEFAULT; + } + + /** + * Load a {@link JavaFormatConfig} from the given file. + * @param file the file to load + * @return the loaded config + */ + static JavaFormatConfig load(File file) { + try { + return PropertiesJavaFormatConfig.load(file); + } + catch (IOException ex) { + throw new IllegalStateException(ex); + } + } + + /** + * Load a {@link JavaFormatConfig} from the given input stream. + * @param inputStream the input stream to load + * @return the loaded config + */ + static JavaFormatConfig load(InputStream inputStream) { + try { + return PropertiesJavaFormatConfig.load(inputStream); + } + catch (IOException ex) { + throw new IllegalStateException(ex); + } + } + +} diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java new file mode 100644 index 00000000..52170c30 --- /dev/null +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java @@ -0,0 +1,57 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.config; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +/** + * {@link JavaFormatConfig} backed by a properties file. + * + * @author Phillip Webb + */ +class PropertiesJavaFormatConfig implements JavaFormatConfig { + + private final Properties properties; + + PropertiesJavaFormatConfig(Properties properties) { + this.properties = properties; + } + + @Override + public IndentationStyle getIndentationStyle() { + Object value = this.properties.get("indentation-style"); + return (value != null) ? IndentationStyle.valueOf(value.toString().toUpperCase().trim()) + : DEFAULT.getIndentationStyle(); + } + + static JavaFormatConfig load(File file) throws IOException { + try (InputStream inputStream = new FileInputStream(file)) { + return load(inputStream); + } + } + + static JavaFormatConfig load(InputStream inputStream) throws IOException { + Properties properties = new Properties(); + properties.load(inputStream); + return new PropertiesJavaFormatConfig(properties); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 3933b016..4091b23a 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -94,6 +94,11 @@ + + io.spring.javaformat + spring-javaformat-config + ${project.version} + io.spring.javaformat spring-javaformat-formatter diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 9cc901b1..2980656c 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -15,6 +15,11 @@ + + io.spring.javaformat + spring-javaformat-config + ${project.version} + io.spring.javaformat spring-javaformat-formatter-eclipse diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java index 2a440155..9642ec12 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,8 @@ import org.eclipse.text.edits.TextEdit; +import io.spring.javaformat.config.JavaFormatConfig; + /** * A code formatter designed to work with {@link File Files}. * @@ -43,6 +45,10 @@ public FileFormatter(FormatterOption... options) { this(new Formatter(options)); } + public FileFormatter(JavaFormatConfig javaFormatConfig, FormatterOption... options) { + this(new Formatter(javaFormatConfig, options)); + } + public FileFormatter(Formatter formatter) { Optional.ofNullable(formatter).orElseThrow(() -> new IllegalArgumentException("Formatter must not be null")); this.formatter = formatter; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 96455699..6b93ec99 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,8 @@ import org.eclipse.jface.text.IRegion; import org.eclipse.text.edits.TextEdit; +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaFormatConfig; import io.spring.javaformat.formatter.eclipse.ExtendedCodeFormatter; import io.spring.javaformat.formatter.eclipse.Preparator; import io.spring.javaformat.formatter.preparator.Preparators; @@ -56,15 +58,17 @@ public class Formatter extends CodeFormatter { */ public static final String DEFAULT_LINE_SEPARATOR = null; + private static final FormatterOption[] EMPTY_OPTIONS = {}; + private final Set options; - private CodeFormatter delegate = new DelegateCodeFormatter(); + private final CodeFormatter delegate; /** * Create a new formatter instance. */ public Formatter() { - this.options = Collections.emptySet(); + this(JavaFormatConfig.DEFAULT, EMPTY_OPTIONS); } /** @@ -72,6 +76,16 @@ public Formatter() { * @param options formatter options */ public Formatter(FormatterOption... options) { + this(JavaFormatConfig.DEFAULT, options); + } + + /** + * Create a new formatter instance. + * @param javaFormatConfig the java format config to use + * @param options formatter options + */ + public Formatter(JavaFormatConfig javaFormatConfig, FormatterOption... options) { + this.delegate = new DelegateCodeFormatter(javaFormatConfig); this.options = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(options))); } @@ -185,29 +199,41 @@ private T nlsSafe(Supplier formatted) { @SuppressWarnings({ "unchecked", "rawtypes" }) private static class DelegateCodeFormatter extends ExtendedCodeFormatter { - static Map OPTIONS; + private final Map appliedOptions; + + DelegateCodeFormatter(JavaFormatConfig javaFormatConfig) { + this(loadOptions(javaFormatConfig)); + } + + DelegateCodeFormatter(Map options) { + super(options); + this.appliedOptions = options; + Preparators.forEach(this::addPreparator); + } + + @Override + public void setOptions(Map options) { + super.setOptions(this.appliedOptions); + } - static { + private static Map loadOptions(JavaFormatConfig javaFormatConfig) { try { Properties properties = new Properties(); try (InputStream inputStream = Formatter.class.getResourceAsStream("formatter.prefs")) { properties.load(inputStream); - OPTIONS = (Map) Collections.unmodifiableMap(properties); } + applyConfig(properties, javaFormatConfig); + return (Map) Collections.unmodifiableMap(properties); } catch (IOException ex) { throw new IllegalStateException(ex); } } - DelegateCodeFormatter() { - super(OPTIONS); - Preparators.forEach(this::addPreparator); - } - - @Override - public void setOptions(Map options) { - super.setOptions(OPTIONS); + private static void applyConfig(Properties properties, JavaFormatConfig javaFormatConfig) { + if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { + properties.put("org.eclipse.jdt.core.formatter.tabulation.char", "space"); + } } } diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index fc5cf1c5..6819a018 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package io.spring.javaformat.formatter; import java.io.File; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; @@ -25,7 +26,11 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; +import io.spring.javaformat.config.JavaFormatConfig; + /** + * Base class for formatter tests. + * * @author Phillip Webb */ @RunWith(Parameterized.class) @@ -35,9 +40,12 @@ public abstract class AbstractFormatterTests { private final File expected; - public AbstractFormatterTests(File source, File expected) { + private final JavaFormatConfig config; + + public AbstractFormatterTests(File source, File expected, File config) throws IOException { this.source = source; this.expected = expected; + this.config = (!config.exists()) ? JavaFormatConfig.DEFAULT : JavaFormatConfig.load(config); } protected final File getSource() { @@ -48,6 +56,10 @@ protected final File getExpected() { return this.expected; } + protected final JavaFormatConfig getConfig() { + return this.config; + } + protected final void print(String name, String content) { System.out.println(name + ":"); System.out.println(); @@ -66,13 +78,15 @@ protected static Collection files(String expectedOverride) { Collection files = new ArrayList<>(); File sourceDir = new File("src/test/resources/source"); File expectedDir = new File("src/test/resources/expected"); + File configDir = new File("src/test/resources/config"); File expectedOverrideDir = new File("src/test/resources/" + expectedOverride); for (File source : sourceDir.listFiles((dir, name) -> !name.startsWith("."))) { File expected = new File(expectedOverrideDir, source.getName()); if (!expected.exists()) { expected = new File(expectedDir, source.getName()); } - files.add(new Object[] { source, expected }); + File config = new File(configDir, source.getName()); + files.add(new Object[] { source, expected, config }); } return files; } diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java index 21d30df1..6e1e75c5 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package io.spring.javaformat.formatter; import java.io.File; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collection; @@ -27,7 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** - * Tests for FileFormatter. + * Tests for {@link FileFormatter}. * * @author Phillip Webb */ @@ -35,28 +36,28 @@ public class FileFormatterTests extends AbstractFormatterTests { private static final boolean RUNNING_ON_WINDOWS = System.getProperty("os.name").toLowerCase().contains("win"); - public FileFormatterTests(File source, File expected) { - super(source, expected); + public FileFormatterTests(File source, File expected, File config) throws IOException { + super(source, expected, config); } @Test public void formatFilesFromIteratorShouldFormatFile() throws Exception { - FileEdit edit = new FileFormatter().formatFiles(Arrays.asList(getSource()), StandardCharsets.UTF_8).findFirst() - .get(); + FileEdit edit = new FileFormatter(getConfig()).formatFiles(Arrays.asList(getSource()), StandardCharsets.UTF_8) + .findFirst().get(); assertThat(edit.getFormattedContent()).isEqualTo(read(getExpected())); } @Test public void formatFilesFromStreamShouldFormatFile() throws Exception { - FileEdit edit = new FileFormatter().formatFiles(Arrays.asList(getSource()).stream(), StandardCharsets.UTF_8) - .findFirst().get(); + FileEdit edit = new FileFormatter(getConfig()) + .formatFiles(Arrays.asList(getSource()).stream(), StandardCharsets.UTF_8).findFirst().get(); assertThat(edit.getFormattedContent()).isEqualTo(read(getExpected())); } @Test public void formatFileShouldFormatFile() throws Exception { File source = getSource(); - FileEdit edit = new FileFormatter().formatFile(source, StandardCharsets.UTF_8); + FileEdit edit = new FileFormatter(getConfig()).formatFile(source, StandardCharsets.UTF_8); String formattedContent = edit.getFormattedContent(); String expected = read(getExpected()); if (!RUNNING_ON_WINDOWS) { diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java index 1f64f02c..77b52a53 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package io.spring.javaformat.formatter; import java.io.File; +import java.io.IOException; import java.util.Collection; import org.eclipse.jface.text.Document; @@ -32,8 +33,8 @@ */ public class FormatterTests extends AbstractFormatterTests { - public FormatterTests(File source, File expected) { - super(source, expected); + public FormatterTests(File source, File expected, File config) throws IOException { + super(source, expected, config); } @Test @@ -54,7 +55,7 @@ public void format() throws Exception { private String format(String sourceContent) throws Exception { IDocument document = new Document(sourceContent); - TextEdit textEdit = new Formatter().format(sourceContent); + TextEdit textEdit = new Formatter(getConfig()).format(sourceContent); textEdit.apply(document); return document.get(); } diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/config/spaces.txt b/spring-javaformat/spring-javaformat-formatter/src/test/resources/config/spaces.txt new file mode 100644 index 00000000..2588c596 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/test/resources/config/spaces.txt @@ -0,0 +1 @@ +indentation-style=spaces \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/spaces.txt b/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/spaces.txt new file mode 100644 index 00000000..f2133b38 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/spaces.txt @@ -0,0 +1,90 @@ +/* + * Copyright 2012-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.context.TypeExcludeFilter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.ComponentScan.Filter; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.core.annotation.AliasFor; + +/** + * Indicates a {@link Configuration configuration} class that declares one or more + * {@link Bean @Bean} methods and also triggers {@link EnableAutoConfiguration + * auto-configuration} and {@link ComponentScan component scanning}. This is a convenience + * annotation that is equivalent to declaring {@code @Configuration}, + * {@code @EnableAutoConfiguration} and {@code @ComponentScan}. + * + * @author Phillip Webb + * @author Stephane Nicoll + * @since 1.2.0 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@SpringBootConfiguration +@EnableAutoConfiguration +@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class)) +public @interface SpringBootApplication { + + /** + * Exclude specific auto-configuration classes such that they will never be applied. + * @return the classes to exclude + */ + Class[] exclude() default {}; + + /** + * Exclude specific auto-configuration class names such that they will never be + * applied. + * @return the class names to exclude + * @since 1.3.0 + */ + String[] excludeName() default {}; + + /** + * Base packages to scan for annotated components. Use {@link #scanBasePackageClasses} + * for a type-safe alternative to String-based package names. + * @return base packages to scan + * @since 1.3.0 + */ + @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") + String[] scanBasePackages() default {}; + + /** + * Type-safe alternative to {@link #scanBasePackages} for specifying the packages to + * scan for annotated components. The package of each class specified will be scanned. + *

+ * Consider creating a special no-op marker class or interface in each package that + * serves no purpose other than being referenced by this attribute. + * @return base packages to scan + * @since 1.3.0 + */ + @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses") + Class[] scanBasePackageClasses() default {}; + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/spaces.txt b/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/spaces.txt new file mode 100644 index 00000000..e370bf0e --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/spaces.txt @@ -0,0 +1,90 @@ +/* + * Copyright 2012-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.context.TypeExcludeFilter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.ComponentScan.Filter; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.core.annotation.AliasFor; + +/** + * Indicates a {@link Configuration configuration} class that declares one or more + * {@link Bean @Bean} methods and also triggers {@link EnableAutoConfiguration + * auto-configuration} and {@link ComponentScan component scanning}. This is a convenience + * annotation that is equivalent to declaring {@code @Configuration}, + * {@code @EnableAutoConfiguration} and {@code @ComponentScan}. + * + * @author Phillip Webb + * @author Stephane Nicoll + * @since 1.2.0 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@SpringBootConfiguration +@EnableAutoConfiguration +@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class)) +public @interface SpringBootApplication { + + /** + * Exclude specific auto-configuration classes such that they will never be applied. + * @return the classes to exclude + */ + Class[] exclude() default {}; + + /** + * Exclude specific auto-configuration class names such that they will never be + * applied. + * @return the class names to exclude + * @since 1.3.0 + */ + String[] excludeName() default {}; + + /** + * Base packages to scan for annotated components. Use {@link #scanBasePackageClasses} + * for a type-safe alternative to String-based package names. + * @return base packages to scan + * @since 1.3.0 + */ + @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") + String[] scanBasePackages() default {}; + + /** + * Type-safe alternative to {@link #scanBasePackages} for specifying the packages to + * scan for annotated components. The package of each class specified will be scanned. + *

+ * Consider creating a special no-op marker class or interface in each package that + * serves no purpose other than being referenced by this attribute. + * @return base packages to scan + * @since 1.3.0 + */ + @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses") + Class[] scanBasePackageClasses() default {}; + +} From e27db534fd62f71d24f6fa700139418391211aa5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 22 Apr 2021 10:48:01 -0700 Subject: [PATCH 010/238] Polish CONTRIBUTING --- CONTRIBUTING.adoc | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 4979277d..2d9cd525 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -3,27 +3,37 @@ Spring Java Format is released under the Apache 2.0 license. If you would like to contribute something, or simply want to hack on the code this document should help you get started. + + == Code of Conduct This project adheres to the Contributor Covenant link:CODE_OF_CONDUCT.adoc[code of conduct]. By participating, you are expected to uphold this code. Please report unacceptable behavior to spring-code-of-conduct@pivotal.io. + + == Sign the Contributor License Agreement Before we accept a non-trivial patch or pull request we will need you to https://cla.pivotal.io/sign/spring[sign the Contributor License Agreement]. Signing the contributor's agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions, and you will get an author credit if we do. Active contributors might be asked to join the core team, and given the ability to merge pull requests. -== Working with the code + + +== Working With the Code If you don't have an IDE preference we would recommend that you use https://spring.io/tools/sts[Spring Tools Suite] or https://eclipse.org[Eclipse] when working with the code. We use the https://eclipse.org/m2e/[M2Eclipse] eclipse plugin for maven support. Other IDEs and tools should also work without issue. -=== Building from source + + +=== Building From Source To build the source you will need to install JDK 1.8. -==== Default build + + +==== Default Build The project can be built from the root directory using the standard maven command: [indent=0] @@ -33,7 +43,9 @@ The project can be built from the root directory using the standard maven comman NOTE: You may need to increase the amount of memory available to Maven by setting a `MAVEN_OPTS` environment variable with the value `-Xmx512m` -=== Importing into eclipse + + +=== Importing Into Eclipse You can import the code into any Eclipse based distribution as long as it had the https://eclipse.org/m2e/[M2Eclipse] eclipse plugin. If you don't already have m2eclipse installed it is available from the "Eclipse marketplace". @@ -46,10 +58,14 @@ Once imported, you can apply eclipse settings by running: NOTE: You'll need to close the `spring-javaformat-formatter-eclipse` and `spring-javaformat-formatter-eclipse-runtime` projects following import since they contain rewritten packages that aren't supported by the IDE -=== Importing into other IDEs + + +=== Importing Into Other IDEs Maven is well supported by most Java IDEs. Refer to your vendor documentation. -== Understanding the code + + +== Understanding the Code There are quite a few moving parts to this project and the build is quite complex. At the top level there are 5 projects: From 1777be2aff4a776ddd59982df64dabc484a4ad48 Mon Sep 17 00:00:00 2001 From: Tadaya Tsuyukubo Date: Tue, 20 Apr 2021 14:26:08 -0700 Subject: [PATCH 011/238] Add instruction to setup code in IntelliJ IDEA Add `Importing into IntelliJ IDEA` section to CONTRIBUTING.adoc. Also, add when IntelliJ IDEA plugin is enabled on README.adoc. See gh-266 --- CONTRIBUTING.adoc | 100 +++++++++++++++++- README.adoc | 9 ++ src/asciidoc/images/setup-idea-dependency.png | Bin 0 -> 466280 bytes src/asciidoc/images/setup-idea-library.png | Bin 0 -> 358752 bytes .../images/setup-idea-plugin-module.png | Bin 0 -> 353231 bytes src/asciidoc/images/setup-idea-plugin-sdk.png | Bin 0 -> 623982 bytes 6 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 src/asciidoc/images/setup-idea-dependency.png create mode 100644 src/asciidoc/images/setup-idea-library.png create mode 100644 src/asciidoc/images/setup-idea-plugin-module.png create mode 100644 src/asciidoc/images/setup-idea-plugin-sdk.png diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 2d9cd525..3ce458bc 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -29,7 +29,7 @@ should also work without issue. === Building From Source -To build the source you will need to install JDK 1.8. +To build the source you will need to install JDK 11. @@ -58,6 +58,104 @@ Once imported, you can apply eclipse settings by running: NOTE: You'll need to close the `spring-javaformat-formatter-eclipse` and `spring-javaformat-formatter-eclipse-runtime` projects following import since they contain rewritten packages that aren't supported by the IDE +=== Importing into IntelliJ IDEA + +You can import the code as a maven project into IntelliJ IDEA. + +==== Module dependencies + +When IntelliJ IDEA parses `pom.xml`, it automatically creates inter-module dependencies if dependent libraries are coming from other modules within the project. +However, when dependent modules perform repackaging (e.g. `spring-javaformat-formatter-eclipse-runtime` module), the current module cannot resolve all classes by module dependencies because repackaging(shade & binary manipulation) moves around classes. +Therefore, you need to manually update the dependencies from the module to the produced jars. + +Following modules perform repackaging. + +* `spring-javaformat-formatter-eclipse` +* `spring-javaformat-formatter-eclipse-runtime` + +Modules that depend on these modules need jar dependencies instead of module dependencies. + +===== Setting up jar dependencies + +The following steps define jar-based project libraries on IDE and add them to the modules that need jar dependencies. + +*Add a jar file-based project library* + +* "Project Settings" -> "Libraries" +* Click "+" sign, then select "Java" +* Specify the jar file + +For example, you can specifie the jar file in the target directory(`/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/target/spring-javaformat-formatter-eclipse-runtime-0.0.28-SNAPSHOT.jar`) +or one in the local maven repository(`~/.m2/repository/io/spring/javaformat/spring-javaformat-formatter-eclipse-runtime/0.0.28-SNAPSHOT/spring-javaformat-formatter-eclipse-runtime-0.0.28-SNAPSHOT.jar`). + +image::src/asciidoc/images/setup-idea-library.png[Setup IntelliJ IDEA library] + +*Add library dependencies to modules* + +* "Project Settings" -> "Modules" +* Select a module that depends on repackaging modules +* Click "+" sign and "2 Library" +* "Choose Libraries" and select necessary libraries that have added in the previous step +* Move up the added libraries higher than the module dependencies (or remove the module dependencies) + +image::src/asciidoc/images/setup-idea-dependency.png[Setup IntelliJ IDEA Dependencies] + + +=== Setting up IntelliJ IDEA plugin development + +==== Download images + +To develop the `spring-javaformat-intellij-idea-plugin` module, you need an IntelliJ IDEA application on your local machine. + +* Open the `pom.xml` in `spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime`. +* Check `intellij.binary` and `intellij.source` properties to find out the appropriate IntelliJ IDEA version. +* Download the binary from the url in `intellij.binary`. + +(For OSX, replace the `.tar.gz` to `.dmg` to download the image file.) +* Install the image to the local machine +* Download the source files from github specified in `intellij.source` and unzip it. + +==== Setup SDK + +* Open "Project Structure" - "Platform Settings" - "SDKs" +* Click "+" sign, "Add Intellij Platform Plugin SDK..." +* Specify the installed intellij image. (`/applications/IntelliJ IDEA CE` for OSX) +* On the right panel, "Sourcepath", Click "+" sign, specify unzipped intellij source directory +* Specify "Sandbox Home" directory + +image::src/asciidoc/images/setup-idea-plugin-sdk.png[Setup IntelliJ IDEA Plugin SDK] + +Please see the https://plugins.jetbrains.com/docs/intellij/setting-up-environment.html[IntelliJ IDEA reference] for how to setup a plugin development in details. + +==== Convert to Plugin Module + +The imported `spring-javaformat-intellij-idea-plugin` module is recognized as a java module. +This needs to be converted to a plugin module. + +* Open `spring-javaformat-intellij-idea-plugin.iml` in `spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin` +* Change `type="JAVA_MODULE"` to `type="PLUGIN_MODULE"` ++ +[indent=0,xml] +---- + +---- ++ +Reference https://stackoverflow.com/questions/18278440/how-to-import-and-run-existing-plugins-from-intellij-community-edition-repo[how to convert existing module to a plugin module] + +* Open "Project Structure" - "Modules" +* Check `spring-javaformat-intellij-idea-plugin` icon turns to a plugin icon +* "Plugin Deployment" - "Path to META-INF/plugin.xml" +* Specify `spring-javaformat/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources` + +image::src/asciidoc/images/setup-idea-plugin-module.png[Setup IntelliJ IDEA Plugin Module] + + +=== Setting up Gradle plugin development + +`spring-javaformat-gradle-plugin` module is a gradle plugin and requires gradle related classes. + +To add gradle classes, convert this module to a gradle project. + +* On the project pain, right-click `build.gradle` in `spring-javaformat-gradle-plugin` module +* Select "Import Gradle Project" === Importing Into Other IDEs diff --git a/README.adoc b/README.adoc index 892078f2..8b060380 100644 --- a/README.adoc +++ b/README.adoc @@ -221,6 +221,15 @@ You can download the latest version from https://repo.spring.io/release/io/sprin +==== Enable the Plugin +The plugin is automatically enabled when one or more of the following conditions match: + +* `.springformat` file exists +* For maven based project, `spring-javaformat-maven-plugin` plugin is defined in `pom.xml` +* For gradle based project, `io.spring.javaformat` plugin is applied + + + === About the Conventions Most of the coding conventions and style comes from the Spring Framework and Spring Boot projects. Spring Framework manually formats code, where as Spring Boot uses automatic formatting. diff --git a/src/asciidoc/images/setup-idea-dependency.png b/src/asciidoc/images/setup-idea-dependency.png new file mode 100644 index 0000000000000000000000000000000000000000..06958617f015dfe738af2e6d71d80ef9544a7455 GIT binary patch literal 466280 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 >4H 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

-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∋ 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 literal 0 HcmV?d00001 diff --git a/src/asciidoc/images/setup-idea-library.png b/src/asciidoc/images/setup-idea-library.png new file mode 100644 index 0000000000000000000000000000000000000000..d3563c7c9bae914db83a41e782f499a3aaf1e7d8 GIT binary patch literal 358752 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⪙{Z9D&@@dHP)rCuJ8e83h?Zr&2#zT_LIx@nz7&F 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

kI4GD*SRN9d~b2{sANH18|b8L3G|koUHC$N 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≀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 K(}E}ZzW)d7H3lO9 literal 0 HcmV?d00001 diff --git a/src/asciidoc/images/setup-idea-plugin-module.png b/src/asciidoc/images/setup-idea-plugin-module.png new file mode 100644 index 0000000000000000000000000000000000000000..694a1370b534ad34ec09a5d35239a5a098bdef04 GIT binary patch literal 353231 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 ^IUz9WOIF8Tc*nq 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 *AmB`f_~j^q{oN)ee6 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�Pn;Ir6nwu`4vlkH>`#+ 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 gwtV{w<FyYj7&-)o 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

Loz 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�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
SeZK_jp&5t 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

oTMy@f@S2HZB*~AX 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

(C66sV{IShu;s~ti7HbV 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

22a^hR30NNex8%G` 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≫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

^4&#(08gm7i#kZ(7wvl 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 Date: Thu, 22 Apr 2021 10:44:35 -0700 Subject: [PATCH 012/238] Polish 'Add instruction to setup code in IntelliJ IDEA' See gh-266 --- .../images/setup-idea-dependency.png | Bin .../images/setup-idea-library.png | Bin .../images/setup-idea-plugin-module.png | Bin .../images/setup-idea-plugin-sdk.png | Bin CONTRIBUTING.adoc | 46 ++++++++++-------- 5 files changed, 27 insertions(+), 19 deletions(-) rename {src/asciidoc => .github}/images/setup-idea-dependency.png (100%) rename {src/asciidoc => .github}/images/setup-idea-library.png (100%) rename {src/asciidoc => .github}/images/setup-idea-plugin-module.png (100%) rename {src/asciidoc => .github}/images/setup-idea-plugin-sdk.png (100%) diff --git a/src/asciidoc/images/setup-idea-dependency.png b/.github/images/setup-idea-dependency.png similarity index 100% rename from src/asciidoc/images/setup-idea-dependency.png rename to .github/images/setup-idea-dependency.png diff --git a/src/asciidoc/images/setup-idea-library.png b/.github/images/setup-idea-library.png similarity index 100% rename from src/asciidoc/images/setup-idea-library.png rename to .github/images/setup-idea-library.png diff --git a/src/asciidoc/images/setup-idea-plugin-module.png b/.github/images/setup-idea-plugin-module.png similarity index 100% rename from src/asciidoc/images/setup-idea-plugin-module.png rename to .github/images/setup-idea-plugin-module.png diff --git a/src/asciidoc/images/setup-idea-plugin-sdk.png b/.github/images/setup-idea-plugin-sdk.png similarity index 100% rename from src/asciidoc/images/setup-idea-plugin-sdk.png rename to .github/images/setup-idea-plugin-sdk.png diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 3ce458bc..055b745e 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -58,14 +58,16 @@ Once imported, you can apply eclipse settings by running: NOTE: You'll need to close the `spring-javaformat-formatter-eclipse` and `spring-javaformat-formatter-eclipse-runtime` projects following import since they contain rewritten packages that aren't supported by the IDE -=== Importing into IntelliJ IDEA + +=== Importing Into IntelliJ IDEA You can import the code as a maven project into IntelliJ IDEA. -==== Module dependencies + +==== Module Dependencies When IntelliJ IDEA parses `pom.xml`, it automatically creates inter-module dependencies if dependent libraries are coming from other modules within the project. -However, when dependent modules perform repackaging (e.g. `spring-javaformat-formatter-eclipse-runtime` module), the current module cannot resolve all classes by module dependencies because repackaging(shade & binary manipulation) moves around classes. +However, when dependent modules perform repackaging (e.g. `spring-javaformat-formatter-eclipse-runtime` module), the current module cannot resolve all classes by module dependencies because repackaging (shade & binary manipulation) moves around classes. Therefore, you need to manually update the dependencies from the module to the produced jars. Following modules perform repackaging. @@ -75,19 +77,21 @@ Following modules perform repackaging. Modules that depend on these modules need jar dependencies instead of module dependencies. -===== Setting up jar dependencies + +===== Setting up Jar Dependencies The following steps define jar-based project libraries on IDE and add them to the modules that need jar dependencies. *Add a jar file-based project library* * "Project Settings" -> "Libraries" * Click "+" sign, then select "Java" -* Specify the jar file + -For example, you can specifie the jar file in the target directory(`/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/target/spring-javaformat-formatter-eclipse-runtime-0.0.28-SNAPSHOT.jar`) +* Specify the jar file + +For example, you can specify the jar file in the target directory(`/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/target/spring-javaformat-formatter-eclipse-runtime-0.0.28-SNAPSHOT.jar`) or one in the local maven repository(`~/.m2/repository/io/spring/javaformat/spring-javaformat-formatter-eclipse-runtime/0.0.28-SNAPSHOT/spring-javaformat-formatter-eclipse-runtime-0.0.28-SNAPSHOT.jar`). -image::src/asciidoc/images/setup-idea-library.png[Setup IntelliJ IDEA library] +image::.github/images/setup-idea-library.png[Setup IntelliJ IDEA library] *Add library dependencies to modules* @@ -97,47 +101,50 @@ image::src/asciidoc/images/setup-idea-library.png[Setup IntelliJ IDEA library] * "Choose Libraries" and select necessary libraries that have added in the previous step * Move up the added libraries higher than the module dependencies (or remove the module dependencies) -image::src/asciidoc/images/setup-idea-dependency.png[Setup IntelliJ IDEA Dependencies] +image::.github/images/setup-idea-dependency.png[Setup IntelliJ IDEA Dependencies] -=== Setting up IntelliJ IDEA plugin development -==== Download images +=== Setting up IntelliJ IDEA Plugin Development + +==== Download Images To develop the `spring-javaformat-intellij-idea-plugin` module, you need an IntelliJ IDEA application on your local machine. * Open the `pom.xml` in `spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime`. * Check `intellij.binary` and `intellij.source` properties to find out the appropriate IntelliJ IDEA version. -* Download the binary from the url in `intellij.binary`. + +* Download the binary from the url in `intellij.binary`. (For OSX, replace the `.tar.gz` to `.dmg` to download the image file.) * Install the image to the local machine * Download the source files from github specified in `intellij.source` and unzip it. -==== Setup SDK + +==== Setup SDK * Open "Project Structure" - "Platform Settings" - "SDKs" * Click "+" sign, "Add Intellij Platform Plugin SDK..." * Specify the installed intellij image. (`/applications/IntelliJ IDEA CE` for OSX) * On the right panel, "Sourcepath", Click "+" sign, specify unzipped intellij source directory * Specify "Sandbox Home" directory -image::src/asciidoc/images/setup-idea-plugin-sdk.png[Setup IntelliJ IDEA Plugin SDK] +image::.github/images/setup-idea-plugin-sdk.png[Setup IntelliJ IDEA Plugin SDK] Please see the https://plugins.jetbrains.com/docs/intellij/setting-up-environment.html[IntelliJ IDEA reference] for how to setup a plugin development in details. -==== Convert to Plugin Module + +==== Convert to Plugin Module The imported `spring-javaformat-intellij-idea-plugin` module is recognized as a java module. This needs to be converted to a plugin module. * Open `spring-javaformat-intellij-idea-plugin.iml` in `spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin` * Change `type="JAVA_MODULE"` to `type="PLUGIN_MODULE"` -+ -[indent=0,xml] + +[source,xml] ---- ---- -+ + Reference https://stackoverflow.com/questions/18278440/how-to-import-and-run-existing-plugins-from-intellij-community-edition-repo[how to convert existing module to a plugin module] * Open "Project Structure" - "Modules" @@ -145,11 +152,11 @@ Reference https://stackoverflow.com/questions/18278440/how-to-import-and-run-exi * "Plugin Deployment" - "Path to META-INF/plugin.xml" * Specify `spring-javaformat/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources` -image::src/asciidoc/images/setup-idea-plugin-module.png[Setup IntelliJ IDEA Plugin Module] +image::.github/images/setup-idea-plugin-module.png[Setup IntelliJ IDEA Plugin Module] -=== Setting up Gradle plugin development +=== Setting up Gradle Plugin Development `spring-javaformat-gradle-plugin` module is a gradle plugin and requires gradle related classes. To add gradle classes, convert this module to a gradle project. @@ -158,6 +165,7 @@ To add gradle classes, convert this module to a gradle project. * Select "Import Gradle Project" + === Importing Into Other IDEs Maven is well supported by most Java IDEs. Refer to your vendor documentation. From f3b2a77920fcf6cb9bd2ea7a00fe2762366695a8 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 22 Apr 2021 13:46:58 -0700 Subject: [PATCH 013/238] Rewrite NSL class to drop System.getProperty call Update `EclipseRewriter` so that the NSL class is rewritten to remove the System.getProperty("osgi.nls.warnings") call. This update should allow us to support Gradle's configuration caching feature. Closes gh-262 --- .../eclipse/rewrite/EclipseRewriter.java | 72 +++++++++++++++++-- .../javaformat/formatter/FileFormatter.java | 8 +-- .../javaformat/formatter/Formatter.java | 45 ++---------- .../javaformat/formatter/FormatterOption.java | 31 -------- 4 files changed, 72 insertions(+), 84 deletions(-) delete mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FormatterOption.java diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index 9086d63f..e1851616 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; +import java.util.function.Function; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; @@ -72,20 +73,30 @@ public void rewrite(String file) throws IOException { } private void rewrite(FileSystem zip) throws IOException { - Path path = zip.getPath("org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.class"); - ClassWriter writer = new ClassWriter(0); + rewrite(zip, "org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.class", + DefaultCodeFormatterManipulator::new); + rewrite(zip, "org/eclipse/osgi/util/NLS$1.class", NlsManipulator::new); + } + + private void rewrite(FileSystem zip, String name, Function manipulator) + throws IOException { + ClassWriter classWriter = new ClassWriter(0); + Path path = zip.getPath(name); try (InputStream in = Files.newInputStream(path)) { - DefaultCodeFormatterManipulator manipulator = new DefaultCodeFormatterManipulator(writer); ClassReader reader = new ClassReader(in); - reader.accept(manipulator, 0); + reader.accept(manipulator.apply(classWriter), 0); } - Files.copy(new ByteArrayInputStream(writer.toByteArray()), path, StandardCopyOption.REPLACE_EXISTING); + Files.copy(new ByteArrayInputStream(classWriter.toByteArray()), path, StandardCopyOption.REPLACE_EXISTING); } public static void main(String[] args) throws Exception { new EclipseRewriter().rewrite(args[0]); } + /** + * {@link ClassVisitor} to make some fields and methods from + * {@code DefaultCodeFormatter} public. + */ private static class DefaultCodeFormatterManipulator extends ClassVisitor { DefaultCodeFormatterManipulator(ClassVisitor visitor) { @@ -111,6 +122,10 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si } + /** + * {@link MethodVisitor} to make some fields and methods from + * {@code DefaultCodeFormatter} public. + */ private static class DefaultCodeFormatterMethodManipulator extends MethodVisitor { DefaultCodeFormatterMethodManipulator(MethodVisitor mv) { @@ -127,4 +142,49 @@ public void visitMethodInsn(int opcode, String owner, String name, String desc, } + /** + * {@link ClassVisitor} to update the {@code NLS} class so it doesn't use a System + * property to disable warning messages. + */ + private static class NlsManipulator extends ClassVisitor { + + NlsManipulator(ClassVisitor visitor) { + super(Opcodes.ASM5, visitor); + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + if ("run".equals(name) && desc.contains("Boolean")) { + return new NslMethodManipulator(super.visitMethod(access, name, desc, signature, exceptions)); + } + return super.visitMethod(access, name, desc, signature, exceptions); + } + + } + + /** + * {@link MethodVisitor} to update the {@code NLS} class so it doesn't use a System + * property to disable warning messages. + */ + private static class NslMethodManipulator extends MethodVisitor { + + private final MethodVisitor methodVisitor; + + NslMethodManipulator(MethodVisitor mv) { + super(Opcodes.ASM5, null); + this.methodVisitor = mv; + } + + @Override + public void visitEnd() { + MethodVisitor mv = this.methodVisitor; + mv.visitCode(); + mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Boolean", "TRUE", "Ljava/lang/Boolean;"); + mv.visitInsn(Opcodes.ARETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + } + + } + } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java index 9642ec12..fe93fe9a 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java @@ -41,12 +41,8 @@ public FileFormatter() { this(new Formatter()); } - public FileFormatter(FormatterOption... options) { - this(new Formatter(options)); - } - - public FileFormatter(JavaFormatConfig javaFormatConfig, FormatterOption... options) { - this(new Formatter(javaFormatConfig, options)); + public FileFormatter(JavaFormatConfig javaFormatConfig) { + this(new Formatter(javaFormatConfig)); } public FileFormatter(Formatter formatter) { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 6b93ec99..5a00240e 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -18,13 +18,9 @@ import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; import java.util.Collections; -import java.util.HashSet; import java.util.Map; import java.util.Properties; -import java.util.Set; -import java.util.function.Supplier; import org.eclipse.jdt.core.formatter.CodeFormatter; import org.eclipse.jface.text.IRegion; @@ -58,35 +54,21 @@ public class Formatter extends CodeFormatter { */ public static final String DEFAULT_LINE_SEPARATOR = null; - private static final FormatterOption[] EMPTY_OPTIONS = {}; - - private final Set options; - private final CodeFormatter delegate; /** * Create a new formatter instance. */ public Formatter() { - this(JavaFormatConfig.DEFAULT, EMPTY_OPTIONS); - } - - /** - * Create a new formatter instance. - * @param options formatter options - */ - public Formatter(FormatterOption... options) { - this(JavaFormatConfig.DEFAULT, options); + this(JavaFormatConfig.DEFAULT); } /** * Create a new formatter instance. * @param javaFormatConfig the java format config to use - * @param options formatter options */ - public Formatter(JavaFormatConfig javaFormatConfig, FormatterOption... options) { + public Formatter(JavaFormatConfig javaFormatConfig) { this.delegate = new DelegateCodeFormatter(javaFormatConfig); - this.options = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(options))); } /** @@ -134,9 +116,7 @@ public TextEdit format(String source, int offset, int length, String lineSeparat @Override public TextEdit format(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator) { - return nlsSafe(() -> { - return this.delegate.format(kind, source, offset, length, indentationLevel, lineSeparator); - }); + return this.delegate.format(kind, source, offset, length, indentationLevel, lineSeparator); } /** @@ -162,7 +142,7 @@ public TextEdit format(String source, IRegion[] regions, String lineSeparator) { @Override public TextEdit format(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator) { - return nlsSafe(() -> this.delegate.format(kind, source, regions, indentationLevel, lineSeparator)); + return this.delegate.format(kind, source, regions, indentationLevel, lineSeparator); } @Override @@ -175,23 +155,6 @@ public void setOptions(Map options) { this.delegate.setOptions(options); } - private T nlsSafe(Supplier formatted) { - if (this.options.contains(FormatterOption.SHOW_NLS_WARNINGS)) { - return formatted.get(); - } - String nlsWarnings = System.getProperty("osgi.nls.warnings"); - try { - System.setProperty("osgi.nls.warnings", "ignore"); - return formatted.get(); - } - finally { - if (nlsWarnings != null) { - System.setProperty("osgi.nls.warnings", nlsWarnings); - } - } - - } - /** * Internal delegate code formatter to apply Spring {@literal formatter.prefs} and add * {@link Preparator Preparators}. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FormatterOption.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FormatterOption.java deleted file mode 100644 index 5b2504ef..00000000 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FormatterOption.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2017-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.javaformat.formatter; - -/** - * Options that can be used to configure a {@link Formatter}. - * - * @author Phillip Webb - */ -public enum FormatterOption { - - /** - * Show Eclipse NLS warnings. - */ - SHOW_NLS_WARNINGS - -} From e4e57ba95a71edd56ecd2cf4c9f66b8c1bec65d5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 22 Apr 2021 19:21:33 -0700 Subject: [PATCH 014/238] Fix javadoc build issues See gh-269 --- .../io.spring.javaformat.eclipse/pom.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 7d1b1034..7fd0e577 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -41,7 +41,18 @@ org.apache.maven.plugins maven-javadoc-plugin - **/*SpringCodeFormatter.java + + + io.spring.javaformat + spring-javaformat-config + ${project.version} + + + io.spring.javaformat + spring-javaformat-formatter + ${project.version} + + From 9a485f84de0ac251fb04ec918bec8280cfeb14e8 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 19 Apr 2021 21:11:30 -0700 Subject: [PATCH 015/238] Rework CI pipeline --- ci/config/release-scripts.yml | 10 ++ ci/images/ci-image/Dockerfile | 4 +- ci/images/get-docker-url.sh | 5 + ci/images/get-jdk-url.sh | 17 ++ ci/images/setup.sh | 21 ++- ci/parameters.yml | 18 +- ci/pipeline.yml | 238 +++++++++++++++++++-------- ci/scripts/generate-changelog.sh | 11 ++ ci/scripts/generate-release-notes.sh | 14 -- ci/scripts/promote.sh | 73 +------- ci/scripts/stage.sh | 36 ++-- ci/scripts/sync-to-maven-central.sh | 17 +- ci/tasks/build-ci-image.yml | 26 +++ ci/tasks/build-project.yml | 3 +- ci/tasks/generate-changelog.yml | 17 ++ ci/tasks/generate-release-notes.yml | 17 -- ci/tasks/promote.yml | 14 +- ci/tasks/stage.yml | 2 + ci/tasks/sync-to-maven-central.yml | 16 -- 19 files changed, 319 insertions(+), 240 deletions(-) create mode 100644 ci/config/release-scripts.yml create mode 100755 ci/images/get-docker-url.sh create mode 100755 ci/images/get-jdk-url.sh create mode 100755 ci/scripts/generate-changelog.sh delete mode 100755 ci/scripts/generate-release-notes.sh create mode 100644 ci/tasks/build-ci-image.yml create mode 100644 ci/tasks/generate-changelog.yml delete mode 100644 ci/tasks/generate-release-notes.yml delete mode 100644 ci/tasks/sync-to-maven-central.yml diff --git a/ci/config/release-scripts.yml b/ci/config/release-scripts.yml new file mode 100644 index 00000000..d31f8cba --- /dev/null +++ b/ci/config/release-scripts.yml @@ -0,0 +1,10 @@ +logging: + level: + io.spring.concourse: DEBUG +spring: + main: + banner-mode: off +sonatype: + exclude: + - 'build-info\.json' + - '.*\.zip' diff --git a/ci/images/ci-image/Dockerfile b/ci/images/ci-image/Dockerfile index 669b31eb..0fa33ae7 100644 --- a/ci/images/ci-image/Dockerfile +++ b/ci/images/ci-image/Dockerfile @@ -1,6 +1,8 @@ -FROM ubuntu:bionic-20181018 +FROM ubuntu:focal-20210401 ADD setup.sh /setup.sh +ADD get-jdk-url.sh /get-jdk-url.sh +ADD get-docker-url.sh /get-docker-url.sh RUN ./setup.sh ENV JAVA_HOME /opt/openjdk diff --git a/ci/images/get-docker-url.sh b/ci/images/get-docker-url.sh new file mode 100755 index 00000000..221b3462 --- /dev/null +++ b/ci/images/get-docker-url.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e + +version="20.10.6" +echo "https://download.docker.com/linux/static/stable/x86_64/docker-$version.tgz"; diff --git a/ci/images/get-jdk-url.sh b/ci/images/get-jdk-url.sh new file mode 100755 index 00000000..c539e19d --- /dev/null +++ b/ci/images/get-jdk-url.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -e + +case "$1" in + java8) + echo "https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz" + ;; + java11) + echo "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz" + ;; + java16) + echo "https://github.com/AdoptOpenJDK/openjdk16-binaries/releases/download/jdk-16%2B36/OpenJDK16-jdk_x64_linux_hotspot_16_36.tar.gz" + ;; + *) + echo $"Unknown java version" + exit 1 +esac diff --git a/ci/images/setup.sh b/ci/images/setup.sh index 67b4550a..52574521 100755 --- a/ci/images/setup.sh +++ b/ci/images/setup.sh @@ -4,18 +4,19 @@ set -ex ########################################################### # UTILS ########################################################### - +export DEBIAN_FRONTEND=noninteractive apt-get update -apt-get install --no-install-recommends -y ca-certificates net-tools libxml2-utils git curl libudev1 libxml2-utils iptables iproute2 jq +apt-get install --no-install-recommends -y tzdata ca-certificates net-tools libxml2-utils git curl libudev1 libxml2-utils iptables iproute2 jq fontconfig +ln -fs /usr/share/zoneinfo/UTC /etc/localtime +dpkg-reconfigure --frontend noninteractive tzdata rm -rf /var/lib/apt/lists/* - -curl https://raw.githubusercontent.com/spring-io/concourse-java-scripts/v0.0.2/concourse-java.sh > /opt/concourse-java.sh - +curl https://raw.githubusercontent.com/spring-io/concourse-java-scripts/v0.0.4/concourse-java.sh > /opt/concourse-java.sh +curl --output /opt/concourse-release-scripts.jar https://repo.spring.io/release/io/spring/concourse/releasescripts/concourse-release-scripts/0.3.2/concourse-release-scripts-0.3.2.jar ########################################################### # JAVA ########################################################### -JDK_URL="https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.9%2B11.1/OpenJDK11U-jdk_x64_linux_hotspot_11.0.9_11.tar.gz" +JDK_URL=$( ./get-jdk-url.sh java11 ) mkdir -p /opt/openjdk cd /opt/openjdk @@ -23,18 +24,16 @@ curl -L ${JDK_URL} | tar zx --strip-components=1 test -f /opt/openjdk/bin/java test -f /opt/openjdk/bin/javac - ########################################################### # DOCKER ########################################################### - cd / -curl -L https://download.docker.com/linux/static/stable/x86_64/docker-18.06.1-ce.tgz | tar zx +DOCKER_URL=$( ./get-docker-url.sh ) +curl -L ${DOCKER_URL} | tar zx mv /docker/* /bin/ chmod +x /bin/docker* - export ENTRYKIT_VERSION=0.4.0 curl -L https://github.com/progrium/entrykit/releases/download/v${ENTRYKIT_VERSION}/entrykit_${ENTRYKIT_VERSION}_Linux_x86_64.tgz | tar zx chmod +x entrykit && \ mv entrykit /bin/entrykit && \ -entrykit --symlink +entrykit --symlink \ No newline at end of file diff --git a/ci/parameters.yml b/ci/parameters.yml index 1c908148..d4564cd2 100644 --- a/ci/parameters.yml +++ b/ci/parameters.yml @@ -1,8 +1,10 @@ -github-repo: "https://github.com/spring-io/spring-javaformat.git" -github-repo-name: "spring-io/spring-javaformat" -docker-hub-organization: "springci" -artifactory-server: "https://repo.spring.io" -branch: "master" -build-name: "spring-javaformat" -bintray-subject: "spring" -bintray-repo: "jars" +project: spring-javaformat +branch: main +milestone: 0.0.x +github-owner: spring-io +github-repository: spring-javaformat +docker-hub-ci-organization: springci +ci-image: spring-javaformat-ci +artifactory-server: https://repo.spring.io +build-name: spring-javaformat +task-timeout: 2h00m diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 37de773b..81dde281 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -1,46 +1,73 @@ +anchors: + github-release-source: &github-release-source + owner: ((github-owner)) + repository: ((github-repository)) + access_token: ((github-ci-release-token)) + artifactory-repo-put-params: &artifactory-repo-put-params + signing_key: ((signing-key)) + signing_passphrase: ((signing-passphrase)) + repo: libs-snapshot-local + folder: distribution-repository + build_uri: https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME} + build_number: ${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME} + disable_checksum_uploads: true + threads: 8 resource_types: - name: artifactory-resource type: registry-image source: repository: springio/artifactory-resource - tag: 0.0.8 + tag: "0.0.14" - name: pull-request type: registry-image source: - repository: jtarchie/pr + repository: teliaoss/github-pr-resource resources: - name: git-repo type: git icon: github source: - uri: ((github-repo)) + uri: https://github.com/((github-owner))/((github-repository)).git username: ((github-username)) password: ((github-password)) branch: ((branch)) - ignore_paths: ["ci/images/*"] - name: git-pull-request type: pull-request icon: source-pull source: access_token: ((github-ci-pull-request-token)) - repo: ((github-repo-name)) - base: ((branch)) + repository: ((github-owner))/((github-repository)) + base_branch: ((branch)) ignore_paths: ["ci/*"] +- name: github-pre-release + type: github-release + icon: briefcase-download-outline + source: + <<: *github-release-source + pre_release: true + release: false +- name: github-release + type: github-release + icon: briefcase-download + source: + <<: *github-release-source + pre_release: false + release: true - name: ci-images-git-repo type: git - icon: github-circle + icon: github source: - uri: ((github-repo)) + uri: https://github.com/((github-owner))/((github-repository)).git branch: ((branch)) paths: ["ci/images/*"] - name: ci-image type: registry-image icon: docker source: - repository: ((docker-hub-organization))/ci-image username: ((docker-hub-username)) password: ((docker-hub-password)) - tag: ((branch)) + tag: ((milestone)) + repository: ((docker-hub-ci-organization))/((ci-image)) - name: artifactory-repo type: artifactory-resource icon: package-variant @@ -49,22 +76,20 @@ resources: username: ((artifactory-username)) password: ((artifactory-password)) build_name: ((build-name)) -- name: github-release - type: github-release - icon: briefcase-download - source: - owner: spring-io - repository: spring-javaformat - access_token: ((github-ci-release-token)) jobs: - name: build-ci-images plan: - get: ci-images-git-repo trigger: true + - get: git-repo + - task: build-ci-image + privileged: true + file: git-repo/ci/tasks/build-ci-image.yml + output_mapping: + image: ci-image - put: ci-image params: - build: ci-images-git-repo/ci/images - dockerfile: ci-images-git-repo/ci/images/ci-image/Dockerfile + image: ci-image/image.tar - name: build serial: true public: true @@ -72,20 +97,18 @@ jobs: - get: ci-image - get: git-repo trigger: true - - do: - - task: build-project - privileged: true - timeout: 1h30m - image: ci-image - file: git-repo/ci/tasks/build-project.yml + - task: build-project + image: ci-image + privileged: true + timeout: ((task-timeout)) + file: git-repo/ci/tasks/build-project.yml + params: + BRANCH: ((branch)) - put: artifactory-repo - params: &artifactory-params - repo: libs-snapshot-local - build_number: "${BUILD_ID}" - folder: distribution-repository - build_uri: "https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}" - build_number: "${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME}" - disable_checksum_uploads: true + params: + <<: *artifactory-repo-put-params + get_params: + threads: 8 - name: build-pull-requests serial: true public: true @@ -101,9 +124,9 @@ jobs: path: git-repo status: pending - task: build-project - timeout: 1h30m image: ci-image file: git-repo/ci/tasks/build-pr-project.yml + timeout: ((task-timeout)) on_success: put: git-pull-request params: @@ -114,6 +137,42 @@ jobs: params: path: git-repo status: failure +- name: stage-milestone + serial: true + plan: + - get: ci-image + - get: git-repo + trigger: false + - task: stage + image: ci-image + file: git-repo/ci/tasks/stage.yml + params: + RELEASE_TYPE: M + - put: artifactory-repo + params: + <<: *artifactory-repo-put-params + repo: libs-staging-local + - put: git-repo + params: + repository: stage-git-repo +- name: stage-rc + serial: true + plan: + - get: ci-image + - get: git-repo + trigger: false + - task: stage + image: ci-image + file: git-repo/ci/tasks/stage.yml + params: + RELEASE_TYPE: RC + - put: artifactory-repo + params: + <<: *artifactory-repo-put-params + repo: libs-staging-local + - put: git-repo + params: + repository: stage-git-repo - name: stage-release serial: true plan: @@ -127,11 +186,63 @@ jobs: RELEASE_TYPE: RELEASE - put: artifactory-repo params: - <<: *artifactory-params + <<: *artifactory-repo-put-params repo: libs-staging-local - put: git-repo params: repository: stage-git-repo +- name: promote-milestone + serial: true + plan: + - get: ci-image + - get: git-repo + trigger: false + - get: artifactory-repo + trigger: false + passed: [stage-milestone] + params: + download_artifacts: false + save_build_info: true + - task: promote + image: ci-image + file: git-repo/ci/tasks/promote.yml + params: + RELEASE_TYPE: M + - task: generate-changelog + file: git-repo/ci/tasks/generate-changelog.yml + params: + RELEASE_TYPE: M + - put: github-pre-release + params: + name: generated-changelog/tag + tag: generated-changelog/tag + body: generated-changelog/changelog.md +- name: promote-rc + serial: true + plan: + - get: ci-image + - get: git-repo + trigger: false + - get: artifactory-repo + trigger: false + passed: [stage-rc] + params: + download_artifacts: false + save_build_info: true + - task: promote + image: ci-image + file: git-repo/ci/tasks/promote.yml + params: + RELEASE_TYPE: RC + - task: generate-changelog + file: git-repo/ci/tasks/generate-changelog.yml + params: + RELEASE_TYPE: RC + - put: github-pre-release + params: + name: generated-changelog/tag + tag: generated-changelog/tag + body: generated-changelog/changelog.md - name: promote-release serial: true plan: @@ -142,50 +253,35 @@ jobs: trigger: false passed: [stage-release] params: + download_artifacts: true save_build_info: true - task: promote image: ci-image file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: RELEASE - ARTIFACTORY_SERVER: ((artifactory-server)) - ARTIFACTORY_USERNAME: ((artifactory-username)) - ARTIFACTORY_PASSWORD: ((artifactory-password)) - BINTRAY_USERNAME: ((bintray-username)) - BINTRAY_API_KEY: ((bintray-api-key)) - BINTRAY_SUBJECT: ((bintray-subject)) - BINTRAY_REPO: ((bintray-repo)) -- name: sync-to-maven-central + SONATYPE_USER_TOKEN: ((sonatype-username)) + SONATYPE_PASSWORD_TOKEN: ((sonatype-password)) +- name: create-github-release serial: true plan: - get: ci-image - get: git-repo - trigger: false - get: artifactory-repo - trigger: false + trigger: true passed: [promote-release] params: + download_artifacts: false save_build_info: true - - task: sync-to-maven-central - image: ci-image - file: git-repo/ci/tasks/sync-to-maven-central.yml - params: - BINTRAY_USERNAME: ((bintray-username)) - BINTRAY_API_KEY: ((bintray-api-key)) - BINTRAY_SUBJECT: ((bintray-subject)) - BINTRAY_REPO: ((bintray-repo)) - SONATYPE_USER_TOKEN: ((sonatype-user-token)) - SONATYPE_PASSWORD_TOKEN: ((sonatype-user-token-password)) - - task: generate-release-notes - file: git-repo/ci/tasks/generate-release-notes.yml - params: - GITHUB_USERNAME: ((github-username)) - GITHUB_TOKEN: ((github-ci-release-token)) + - task: generate-changelog + file: git-repo/ci/tasks/generate-changelog.yml + params: + RELEASE_TYPE: "RELEASE" - put: github-release params: - name: generated-release-notes/tag - tag: generated-release-notes/tag - body: generated-release-notes/release-notes.md + name: generated-changelog/tag + tag: generated-changelog/tag + body: generated-changelog/changelog.md - name: publish-eclipse-update-site serial: true plan: @@ -194,18 +290,18 @@ jobs: trigger: false - get: artifactory-repo trigger: false - passed: [sync-to-maven-central] + passed: [promote-release] params: save_build_info: true - task: publish-eclipse-update-site image: ci-image file: git-repo/ci/tasks/publish-eclipse-update-site.yml groups: -- name: "builds" - jobs: ["build"] -- name: "releases" - jobs: ["stage-release", "promote-release", "sync-to-maven-central", "publish-eclipse-update-site"] -- name: "ci-images" - jobs: ["build-ci-images"] -- name: "pull-requests" - jobs: ["build-pull-requests"] +- name: builds + jobs: [build] +- name: releases + jobs: [stage-milestone, stage-rc, stage-release, promote-milestone, promote-rc, promote-release, create-github-release, publish-eclipse-update-site] +- name: ci-images + jobs: [build-ci-images] +- name: pull-requests + jobs: [build-pull-requests] diff --git a/ci/scripts/generate-changelog.sh b/ci/scripts/generate-changelog.sh new file mode 100755 index 00000000..1e4b6e5b --- /dev/null +++ b/ci/scripts/generate-changelog.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e + +version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) + +java -jar /github-changelog-generator.jar \ + --changelog.repository=spring-io/spring-javaformat \ + ${version} generated-changelog/changelog.md + +echo ${version} > generated-changelog/version +echo v${version} > generated-changelog/tag diff --git a/ci/scripts/generate-release-notes.sh b/ci/scripts/generate-release-notes.sh deleted file mode 100755 index 50333908..00000000 --- a/ci/scripts/generate-release-notes.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -set -e - -version=$( cat version/version ) - -java -jar /github-release-notes-generator.jar \ - --releasenotes.github.username=${GITHUB_USERNAME} \ - --releasenotes.github.password=${GITHUB_TOKEN} \ - --releasenotes.github.organization=spring-io \ - --releasenotes.github.repository=spring-javaformat \ - ${version} generated-release-notes/release-notes.md - -echo ${version} > generated-release-notes/version -echo v${version} > generated-release-notes/tag diff --git a/ci/scripts/promote.sh b/ci/scripts/promote.sh index f555e16a..30c3ace1 100755 --- a/ci/scripts/promote.sh +++ b/ci/scripts/promote.sh @@ -2,75 +2,18 @@ set -e source $(dirname $0)/common.sh +CONFIG_DIR=git-repo/ci/config -buildName=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.name' ) -buildNumber=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.number' ) -groupId=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/\(.*\):.*:.*/\1/' ) version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) +export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json -if [[ ${RELEASE_TYPE} = "M" ]]; then - targetRepo="libs-milestone-local" -elif [[ ${RELEASE_TYPE} = "RC" ]]; then - targetRepo="libs-milestone-local" -elif [[ ${RELEASE_TYPE} = "RELEASE" ]]; then - targetRepo="libs-release-local" -else - echo "Unknown release type ${RELEASE_TYPE}" >&2; exit 1; -fi - -echo "Promoting ${buildName}/${buildNumber} to ${targetRepo}" - -curl \ - -s \ - --connect-timeout 240 \ - --max-time 900 \ - -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ - -H "Content-type:application/json" \ - -d "{\"status\": \"staged\", \"sourceRepo\": \"libs-staging-local\", \"targetRepo\": \"${targetRepo}\"}" \ - -f \ - -X \ - POST "${ARTIFACTORY_SERVER}/api/build/promote/${buildName}/${buildNumber}" > /dev/null || { echo "Failed to promote" >&2; exit 1; } - -if [[ ${RELEASE_TYPE} = "RELEASE" ]]; then - curl \ - -s \ - --connect-timeout 240 \ - --max-time 2700 \ - -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ - -H "Content-type:application/json" \ - -d "{\"sourceRepos\": [\"libs-release-local\"], \"targetRepo\" : \"spring-distributions\", \"async\":\"true\"}" \ - -f \ - -X \ - POST "${ARTIFACTORY_SERVER}/api/build/distribute/${buildName}/${buildNumber}" > /dev/null || { echo "Failed to distribute" >&2; exit 1; } - - echo "Waiting for artifacts to be published" - artifactsPublished=false - WAIT_TIME=5 - counter=0 - while [ $artifactsPublished == "false" ] && [ $counter -lt 120 ]; do - result=$( curl -s https://api.bintray.com/packages/"${BINTRAY_SUBJECT}"/"${BINTRAY_REPO}"/"${groupId}" ) - versions=$( echo "$result" | jq -r '.versions' ) - exists=$( echo "$versions" | grep "$version" -o || true ) - if [ "$exists" = "$version" ]; then - artifactsPublished=true - fi - counter=$(( counter + 1 )) - sleep $WAIT_TIME - done - if [[ $artifactsPublished = "false" ]]; then - echo "Failed to publish" - exit 1 - else - curl \ - -s \ - -u ${BINTRAY_USERNAME}:${BINTRAY_API_KEY} \ - -H "Content-Type: application/json" \ - -d '[ { "name": "gradle-plugin", "values": ["io.spring.javaformat:io.spring.javaformat:spring-javaformat-gradle-plugin"] } ]' \ - -X POST \ - https://api.bintray.com/packages/${BINTRAY_SUBJECT}/${BINTRAY_REPO}/${groupId}/versions/${version}/attributes > /dev/null || { echo "Failed to add attributes" >&2; exit 1; } - fi -fi +java -jar /opt/concourse-release-scripts.jar \ + --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ + publishToCentral $RELEASE_TYPE $BUILD_INFO_LOCATION artifactory-repo || { exit 1; } +java -jar /opt/concourse-release-scripts.jar \ + --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ + promote $RELEASE_TYPE $BUILD_INFO_LOCATION || { exit 1; } echo "Promotion complete" diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index cd61a0b7..56c29979 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -13,11 +13,17 @@ git clone git-repo stage-git-repo > /dev/null pushd stage-git-repo > /dev/null snapshotVersion=$( xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml ) -if [[ ${RELEASE_TYPE} = "RELEASE" ]]; then - stageVersion=$( strip_snapshot_suffix $snapshotVersion) +if [[ $RELEASE_TYPE = "M" ]]; then + stageVersion=$( get_next_milestone_release $snapshotVersion) + nextVersion=$snapshotVersion +elif [[ $RELEASE_TYPE = "RC" ]]; then + stageVersion=$( get_next_rc_release $snapshotVersion) + nextVersion=$snapshotVersion +elif [[ $RELEASE_TYPE = "RELEASE" ]]; then + stageVersion=$( get_next_release $snapshotVersion) nextVersion=$( bump_version_number $snapshotVersion) else - echo "Unknown release type ${RELEASE_TYPE}" >&2; exit 1; + echo "Unknown release type $RELEASE_TYPE" >&2; exit 1; fi echo "Staging ${stageVersion} (next version will be ${nextVersion})" @@ -33,16 +39,18 @@ git tag -a "v${stageVersion}" -m"Release v${stageVersion}" > /dev/null run_maven clean deploy -U -Dfull -DaltDeploymentRepository=distribution::default::file://${repository} git reset --hard HEAD^ > /dev/null -echo "Setting next development version (v$nextVersion)" -run_maven versions:set -DnewVersion=$nextVersion -DgenerateBackupPoms=false -run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -sed -i "s/:release-version:.*/:release-version: ${stageVersion}/g" README.adoc -sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle -sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle -sed -i "s|.*|${nextVersion}|" samples/spring-javaformat-maven-sample/pom.xml -git add -u . > /dev/null -git commit -m"Next development version (v${nextVersion})" > /dev/null - -echo "DONE" +if [[ $nextVersion != $snapshotVersion ]]; then + echo "Setting next development version (v$nextVersion)" + run_maven versions:set -DnewVersion=$nextVersion -DgenerateBackupPoms=false + run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata + sed -i "s/:release-version:.*/:release-version: ${stageVersion}/g" README.adoc + sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle + sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle + sed -i "s|.*|${nextVersion}|" samples/spring-javaformat-maven-sample/pom.xml + git add -u . > /dev/null + git commit -m"Next development version (v${nextVersion})" > /dev/null +fi; popd > /dev/null + +echo "Staging Complete" diff --git a/ci/scripts/sync-to-maven-central.sh b/ci/scripts/sync-to-maven-central.sh index 0692c057..f691b9f9 100755 --- a/ci/scripts/sync-to-maven-central.sh +++ b/ci/scripts/sync-to-maven-central.sh @@ -1,20 +1,7 @@ #!/bin/bash -set -e -buildName=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.name' ) -buildNumber=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.number' ) -groupId=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/\(.*\):.*:.*/\1/' ) +export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) +java -jar /opt/concourse-release-scripts.jar syncToCentral "RELEASE" $BUILD_INFO_LOCATION || { exit 1; } -echo "Syncing ${buildName}/${buildNumber} to Maven Central" - curl \ - -s \ - --connect-timeout 240 \ - --max-time 2700 \ - -u ${BINTRAY_USERNAME}:${BINTRAY_API_KEY} \ - -H "Content-Type: application/json" -d "{\"username\": \"${SONATYPE_USER_TOKEN}\", \"password\": \"${SONATYPE_PASSWORD_TOKEN}\"}" \ - -f \ - -X \ - POST "https://api.bintray.com/maven_central_sync/${BINTRAY_SUBJECT}/${BINTRAY_REPO}/${groupId}/versions/${version}" > /dev/null || { echo "Failed to sync" >&2; exit 1; } echo "Sync complete" -echo $version > version/version \ No newline at end of file diff --git a/ci/tasks/build-ci-image.yml b/ci/tasks/build-ci-image.yml new file mode 100644 index 00000000..3be4ab9e --- /dev/null +++ b/ci/tasks/build-ci-image.yml @@ -0,0 +1,26 @@ +--- +platform: linux +image_resource: + type: registry-image + source: + repository: vito/oci-build-task +inputs: +- name: ci-images-git-repo +outputs: +- name: image +caches: +- path: ci-image-cache +params: + CONTEXT: ci-images-git-repo/ci/images + DOCKERFILE: ci-images-git-repo/ci/images/ci-image/Dockerfile + DOCKER_HUB_AUTH: ((docker-hub-auth)) +run: + path: /bin/sh + args: + - "-c" + - | + mkdir -p /root/.docker + cat > /root/.docker/config.json < Date: Fri, 23 Apr 2021 03:09:38 +0000 Subject: [PATCH 016/238] Next development version (v0.0.29-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml | 4 ++-- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 31 files changed, 34 insertions(+), 34 deletions(-) diff --git a/README.adoc b/README.adoc index 8b060380..52c6cf32 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.27 +:release-version: 0.0.28 :checkstyle-version: 8.32 == Spring Java Format diff --git a/pom.xml b/pom.xml index 3b88cb4b..fa98ae38 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 21c68224..29f20872 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.28-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.29-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.28-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.29-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 087c1c5e..aa2d4e3d 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index d51222db..86ed24b8 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.28.qualifier" + version="0.0.29.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index d4db7ecf..f5039c04 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index faffc9c8..d93e1dd8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 18f3ea8d..44acae69 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index ecef0a85..79852ef1 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index d53a3e8b..5247c801 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.28.qualifier +Bundle-Version: 0.0.29.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit;bundle-version="4.12" Bundle-ClassPath: ., diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 9395f1d7..f84b974e 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 76c70809..1e3703f9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.28.qualifier +Bundle-Version: 0.0.29.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 7fd0e577..0d6daac9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 516f3480..5e5432b2 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 39a20504..0c1072a1 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 2dc61d25..f1ed0bfd 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 3c84cf2c..63e9898f 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 2a969d7b..e4ce8d3b 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 98cd4ff8..06328c29 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index c61276b9..f5913ecc 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index e0d126c3..090c0b7b 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index c33c8351..ef4fc06b 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index e9f790c2..d1f2ef3d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 6b4ea591..ca7d7a65 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 375ff534..c24fd3b4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF index 29092e4f..cdeb7cc4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime Bundle-SymbolicName: spring-javaformat-formatter-eclipse-runtime -Bundle-Version: 0.0.28.qualifier +Bundle-Version: 0.0.29.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index ffa833eb..70f67cf9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-formatter-eclipse-runtime eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml index 2a784927..17d44d69 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-formatter-eclipse Spring JavaFormat Eclipse @@ -17,7 +17,7 @@ io.spring.javaformat spring-javaformat-formatter-eclipse-runtime - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT true diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 4091b23a..05370141 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index c1bc50d0..fd758fb5 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 2980656c..16b92c8e 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.28-SNAPSHOT + 0.0.29-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From a2cd33bba8397f0f8f76a5278f8439355b11ae55 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 22 Apr 2021 20:16:48 -0700 Subject: [PATCH 017/238] Fix CI --- ci/pipeline.yml | 24 +++++++++++++++++++++--- ci/tasks/build-ci-image.yml | 1 - ci/tasks/build-project.yml | 2 -- ci/tasks/generate-changelog.yml | 5 +---- ci/tasks/promote.yml | 9 --------- ci/tasks/publish-eclipse-update-site.yml | 3 --- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 81dde281..71cb383b 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -12,6 +12,15 @@ anchors: build_number: ${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME} disable_checksum_uploads: true threads: 8 + sonatype-task-params: &sonatype-task-params + SONATYPE_USERNAME: ((sonatype-username)) + SONATYPE_PASSWORD: ((sonatype-password)) + SONATYPE_URL: ((sonatype-url)) + SONATYPE_STAGING_PROFILE_ID: ((sonatype-staging-profile-id)) + artifactory-task-params: &artifactory-task-params + ARTIFACTORY_SERVER: ((artifactory-server)) + ARTIFACTORY_USERNAME: ((artifactory-username)) + ARTIFACTORY_PASSWORD: ((artifactory-password)) resource_types: - name: artifactory-resource type: registry-image @@ -85,6 +94,8 @@ jobs: - task: build-ci-image privileged: true file: git-repo/ci/tasks/build-ci-image.yml + params: + DOCKER_HUB_AUTH: ((docker-hub-auth)) output_mapping: image: ci-image - put: ci-image @@ -208,10 +219,13 @@ jobs: file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: M + <<: *artifactory-task-params - task: generate-changelog file: git-repo/ci/tasks/generate-changelog.yml params: RELEASE_TYPE: M + GITHUB_USERNAME: ((github-username)) + GITHUB_TOKEN: ((github-ci-release-token)) - put: github-pre-release params: name: generated-changelog/tag @@ -234,6 +248,7 @@ jobs: file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: RC + <<: *artifactory-task-params - task: generate-changelog file: git-repo/ci/tasks/generate-changelog.yml params: @@ -260,8 +275,8 @@ jobs: file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: RELEASE - SONATYPE_USER_TOKEN: ((sonatype-username)) - SONATYPE_PASSWORD_TOKEN: ((sonatype-password)) + <<: *artifactory-task-params + <<: *sonatype-task-params - name: create-github-release serial: true plan: @@ -276,7 +291,7 @@ jobs: - task: generate-changelog file: git-repo/ci/tasks/generate-changelog.yml params: - RELEASE_TYPE: "RELEASE" + RELEASE_TYPE: RELEASE - put: github-release params: name: generated-changelog/tag @@ -296,6 +311,9 @@ jobs: - task: publish-eclipse-update-site image: ci-image file: git-repo/ci/tasks/publish-eclipse-update-site.yml + params: + ARTIFACTORY_USERNAME: ((artifactory-username)) + ARTIFACTORY_PASSWORD: ((artifactory-password)) groups: - name: builds jobs: [build] diff --git a/ci/tasks/build-ci-image.yml b/ci/tasks/build-ci-image.yml index 3be4ab9e..18f97c02 100644 --- a/ci/tasks/build-ci-image.yml +++ b/ci/tasks/build-ci-image.yml @@ -13,7 +13,6 @@ caches: params: CONTEXT: ci-images-git-repo/ci/images DOCKERFILE: ci-images-git-repo/ci/images/ci-image/Dockerfile - DOCKER_HUB_AUTH: ((docker-hub-auth)) run: path: /bin/sh args: diff --git a/ci/tasks/build-project.yml b/ci/tasks/build-project.yml index 7e51a501..50ba5c79 100644 --- a/ci/tasks/build-project.yml +++ b/ci/tasks/build-project.yml @@ -7,8 +7,6 @@ outputs: caches: - path: maven - path: gradle -params: - BRANCH: run: path: bash args: diff --git a/ci/tasks/generate-changelog.yml b/ci/tasks/generate-changelog.yml index f918e2cf..f797c6cb 100644 --- a/ci/tasks/generate-changelog.yml +++ b/ci/tasks/generate-changelog.yml @@ -7,11 +7,8 @@ image_resource: tag: '0.0.6' inputs: - name: git-repo -- name: version +- name: artifactory-repo outputs: - name: generated-changelog -params: - GITHUB_USERNAME: ((github-username)) - GITHUB_TOKEN: ((github-ci-release-token)) run: path: git-repo/ci/scripts/generate-changelog.sh diff --git a/ci/tasks/promote.yml b/ci/tasks/promote.yml index ca02f4dd..92b92c34 100644 --- a/ci/tasks/promote.yml +++ b/ci/tasks/promote.yml @@ -3,14 +3,5 @@ platform: linux inputs: - name: git-repo - name: artifactory-repo -params: - RELEASE_TYPE: - SONATYPE_USER_TOKEN: - SONATYPE_PASSWORD_TOKEN: - SONATYPE_URL: ((sonatype-url)) - SONATYPE_STAGING_PROFILE_ID: ((sonatype-staging-profile-id)) - ARTIFACTORY_SERVER: ((artifactory-server)) - ARTIFACTORY_USERNAME: ((artifactory-username)) - ARTIFACTORY_PASSWORD: ((artifactory-password)) run: path: git-repo/ci/scripts/promote.sh diff --git a/ci/tasks/publish-eclipse-update-site.yml b/ci/tasks/publish-eclipse-update-site.yml index d1b72e42..78b15b72 100644 --- a/ci/tasks/publish-eclipse-update-site.yml +++ b/ci/tasks/publish-eclipse-update-site.yml @@ -3,8 +3,5 @@ platform: linux inputs: - name: git-repo - name: artifactory-repo -params: - ARTIFACTORY_USERNAME: ((artifactory-username)) - ARTIFACTORY_PASSWORD: ((artifactory-password)) run: path: git-repo/ci/scripts/publish-eclipse-update-site.sh From 1a94ea4976b60a559e3fab2ef9ecffe64d575392 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 25 May 2021 15:03:41 -0700 Subject: [PATCH 018/238] Fix publish script --- ci/scripts/publish-eclipse-update-site.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/scripts/publish-eclipse-update-site.sh b/ci/scripts/publish-eclipse-update-site.sh index a025096a..761f74c3 100755 --- a/ci/scripts/publish-eclipse-update-site.sh +++ b/ci/scripts/publish-eclipse-update-site.sh @@ -20,7 +20,7 @@ curl \ -T "artifactory-repo/io/spring/javaformat/io.spring.javaformat.eclipse.site/${version}/io.spring.javaformat.eclipse.site-${version}.zip" \ "https://repo.spring.io/javaformat-eclipse-update-site/${version}/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } -releasedVersions=$( curl -s -f -X GET https://repo.spring.io/api/storage/javaformat-eclipse-update-site | jq -r '.children[] | .uri' | cut -c 2- | grep '\d.*' | sort -V ) +releasedVersions=$( curl -s -f -X GET https://repo.spring.io/api/storage/javaformat-eclipse-update-site | jq -r '.children[] | .uri' | cut -c 2- | grep '[0-9].*' | sort -V ) repositories="" while read -r releasedVersion; do From aecaeeaf10cc8b33e8bf8682f29c4ea2b87c0a4e Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 28 Jul 2021 08:29:48 +0200 Subject: [PATCH 019/238] Fix links to IDE plugins Closes gh-279 --- README.adoc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.adoc b/README.adoc index 52c6cf32..fbfb6836 100644 --- a/README.adoc +++ b/README.adoc @@ -205,11 +205,10 @@ You can also add a `.eclipse/eclipse.properties` file to customize the following To install the plugin use the `io.spring.javaformat.eclipse.site` zip file. You can download the latest version from -https://repo.spring.io/release/io/spring/javaformat/io.spring.javaformat.eclipse.site/{release-version}[repo.spring.io] +https://repo1.maven.org/maven2/io/spring/javaformat/io.spring.javaformat.eclipse.site/{release-version}[Maven Central] or use the https://repo.spring.io/javaformat-eclipse-update-site/[update site]. - === IntelliJ IDEA The IntelliJ IDEA plugin provides custom formatter support for IntelliJ IDEA. The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script. @@ -217,7 +216,7 @@ A Spring Java Format icon (image:spring-javaformat-intellij-idea/spring-javaform You can use the standard `code` -> `reformat code` action to format the code. To install the plugin use the `spring-javaformat-intellij-idea-plugin` jar file. -You can download the latest version from https://repo.spring.io/release/io/spring/javaformat/spring-javaformat-intellij-idea-plugin/{release-version}[repo.spring.io]. +You can download the latest version from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-intellij-idea-plugin/{release-version}[Maven Central]. From 8b58d256562d3ca4c142b1f857ba764484223ddb Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 21 Sep 2021 10:26:37 +0100 Subject: [PATCH 020/238] Move away from Bintray for Eclipse-CS update site Closes gh-285 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fa98ae38..ec445ecb 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://dl.bintray.com/eclipse-cs/eclipse-cs/8.35.0 + https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 1.0b3 From 528bfef6b495da645afd45e8f7c855f4b2dd207c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 23 Sep 2021 17:38:31 +0100 Subject: [PATCH 021/238] Upgrade to Checkstyle 8.45.1 Closes gh-275 --- README.adoc | 2 +- pom.xml | 2 +- .../javaformat/checkstyle/SpringChecks.java | 10 +++++----- .../checkstyle/filter/CheckFilter.java | 10 +++++----- .../filter/RequiresOuterThisFilter.java | 16 ++++++++-------- .../checkstyle/AssertionsAuditListener.java | 6 +++--- .../test/resources/source/SpringApplication.java | 2 +- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/README.adoc b/README.adoc index fbfb6836..0f9d65de 100644 --- a/README.adoc +++ b/README.adoc @@ -1,5 +1,5 @@ :release-version: 0.0.28 -:checkstyle-version: 8.32 +:checkstyle-version: 8.45.1 == Spring Java Format diff --git a/pom.xml b/pom.xml index ec445ecb..5f334894 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ 1.0b3 5.2 3.8.0 - 8.32 + 8.45.1 3.4 2.4.21 3.5.0 diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java index 8209e030..c006edcb 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,7 +38,7 @@ import com.puppycrawl.tools.checkstyle.api.ExternalResourceHolder; import com.puppycrawl.tools.checkstyle.api.FileSetCheck; import com.puppycrawl.tools.checkstyle.api.FileText; -import com.puppycrawl.tools.checkstyle.api.LocalizedMessage; +import com.puppycrawl.tools.checkstyle.api.Violation; import com.puppycrawl.tools.checkstyle.filters.SuppressFilterElement; import io.spring.javaformat.checkstyle.check.SpringHeaderCheck; @@ -135,11 +135,11 @@ public void beginProcessing(String charset) { @Override protected void processFiltered(File file, FileText fileText) throws CheckstyleException { - SortedSet messages = new TreeSet<>(); + SortedSet violations = new TreeSet<>(); for (FileSetCheck check : this.checks) { - messages.addAll(check.process(file, fileText)); + violations.addAll(check.process(file, fileText)); } - addMessages(messages); + addViolations(violations); } @Override diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java index bdfac6fa..5e83fccf 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ import com.puppycrawl.tools.checkstyle.api.Configuration; import com.puppycrawl.tools.checkstyle.api.Context; import com.puppycrawl.tools.checkstyle.api.DetailAST; -import com.puppycrawl.tools.checkstyle.api.LocalizedMessage; +import com.puppycrawl.tools.checkstyle.api.Violation; /** * Base class for {@link AbstractCheck checks} that act as a filter for a single child. @@ -100,14 +100,14 @@ public boolean isCommentNodesRequired() { } @Override - public SortedSet getMessages() { - return this.check.getMessages(); + public SortedSet getViolations() { + return this.check.getViolations(); } @Override public void beginTree(DetailAST rootAST) { this.check.setFileContents(getFileContents()); - this.check.clearMessages(); + this.check.clearViolations(); this.check.beginTree(rootAST); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java index 949bb599..e12e8b4f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ import com.puppycrawl.tools.checkstyle.TreeWalkerAuditEvent; import com.puppycrawl.tools.checkstyle.TreeWalkerFilter; -import com.puppycrawl.tools.checkstyle.api.LocalizedMessage; +import com.puppycrawl.tools.checkstyle.api.Violation; /** * {@link TreeWalkerFilter} that can used to relax the {@code 'this.'} requirement when @@ -35,9 +35,9 @@ public class RequiresOuterThisFilter implements TreeWalkerFilter { @Override public boolean accept(TreeWalkerAuditEvent event) { - LocalizedMessage message = event.getLocalizedMessage(); - if ("require.this.variable".equals(message.getKey())) { - Object[] args = getArgs(message); + Violation violation = event.getViolation(); + if ("require.this.variable".equals(violation.getKey())) { + Object[] args = getArgs(violation); String prefex = (args.length > 1 ? Objects.toString(args[1]) : null); if (prefex != null && prefex.length() > 0) { return false; @@ -46,12 +46,12 @@ public boolean accept(TreeWalkerAuditEvent event) { return true; } - private Object[] getArgs(LocalizedMessage message) { + private Object[] getArgs(Violation violation) { if (ARGS_FIELD == null) { throw new IllegalStateException("Unable to extract message args"); } try { - return (Object[]) ARGS_FIELD.get(message); + return (Object[]) ARGS_FIELD.get(violation); } catch (Exception ex) { return null; @@ -60,7 +60,7 @@ private Object[] getArgs(LocalizedMessage message) { private static Field getArgsField() { try { - Field field = LocalizedMessage.class.getDeclaredField("args"); + Field field = Violation.class.getDeclaredField("args"); field.setAccessible(true); return field; } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java index 92105e06..afa28e14 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java @@ -27,8 +27,8 @@ import com.puppycrawl.tools.checkstyle.Definitions; import com.puppycrawl.tools.checkstyle.api.AuditEvent; import com.puppycrawl.tools.checkstyle.api.AuditListener; -import com.puppycrawl.tools.checkstyle.api.LocalizedMessage; import com.puppycrawl.tools.checkstyle.api.SeverityLevel; +import com.puppycrawl.tools.checkstyle.api.Violation; import static org.assertj.core.api.Assertions.assertThat; @@ -110,8 +110,8 @@ private void recordLevel(AuditEvent event) { } private void recordLocalizedMessage(String message, String... args) { - recordMessage(new LocalizedMessage(0, Definitions.CHECKSTYLE_BUNDLE, message, args, null, - LocalizedMessage.class, null).getMessage()); + recordMessage(new Violation(0, Definitions.CHECKSTYLE_BUNDLE, message, args, null, + Violation.class, null).getViolation()); } private void recordMessage(String message) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java index d64f298e..69f5fab0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java @@ -935,8 +935,8 @@ public void setMainApplicationClass(Class mainApplicationClass) { /** * Returns whether this {@link SpringApplication} is running within a web environment. * @return {@code true} if running within a web environment, otherwise {@code false}. - * @see #setWebEnvironment(boolean) * @deprecated since 2.0.0 in favor of {@link #getWebApplicationType()} + * @see #setWebEnvironment(boolean) */ @Deprecated public boolean isWebEnvironment() { From f57832d88d94fc262bdcf7d32020b1d8e6447786 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 21 Sep 2021 09:12:47 +0100 Subject: [PATCH 022/238] Upgrade to Eclipse 2021-09 2021-09 requires Java 11 so the version of ASM has been upgraded to one that supports Java 11 bytecode and EclipseRewriter has been updated to use the matching ASM API version. 2021-09 also contains an updated version of the NLS class that we rewrite to remove a call to System.getProperty. Previously, this call was done in an isolated fashion in the run method of an anonmyous inner-class. It's now been updated [1] to use a lamdba which results in the call to System.getProperty now being part of the class's static initializer. This commit rewrites this to retain the existing initialization of EMPTY_ARGS and ASSIGNED fields while updating the initialization of ignoreWarnings to replace the System.getProperty call with a hardcoded true value. Closes gh-277 [1] https://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.java?id=ba6205dab1f857fe87cf5985f03c1b5e88797064 --- pom.xml | 4 +-- .../eclipse/rewrite/EclipseRewriter.java | 26 +++++++++++++------ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 5f334894..337e551f 100644 --- a/pom.xml +++ b/pom.xml @@ -31,12 +31,12 @@ ${basedir} UTF-8 1.8 - https://download.eclipse.org/releases/2021-03/202103171000/ + https://download.eclipse.org/releases/2021-09/202109151000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 1.0b3 - 5.2 + 7.3.1 3.8.0 8.45.1 3.4 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index e1851616..3450a4dc 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -42,6 +42,7 @@ * Internal build utility used to rewrite eclipse runtime classes. * * @author Phillip Webb + * @author Andy Wilkinson */ public final class EclipseRewriter { @@ -75,7 +76,7 @@ public void rewrite(String file) throws IOException { private void rewrite(FileSystem zip) throws IOException { rewrite(zip, "org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.class", DefaultCodeFormatterManipulator::new); - rewrite(zip, "org/eclipse/osgi/util/NLS$1.class", NlsManipulator::new); + rewrite(zip, "org/eclipse/osgi/util/NLS.class", NlsManipulator::new); } private void rewrite(FileSystem zip, String name, Function manipulator) @@ -100,7 +101,7 @@ public static void main(String[] args) throws Exception { private static class DefaultCodeFormatterManipulator extends ClassVisitor { DefaultCodeFormatterManipulator(ClassVisitor visitor) { - super(Opcodes.ASM5, visitor); + super(Opcodes.ASM7, visitor); } @Override @@ -129,7 +130,7 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si private static class DefaultCodeFormatterMethodManipulator extends MethodVisitor { DefaultCodeFormatterMethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM5, mv); + super(Opcodes.ASM7, mv); } @Override @@ -149,12 +150,12 @@ public void visitMethodInsn(int opcode, String owner, String name, String desc, private static class NlsManipulator extends ClassVisitor { NlsManipulator(ClassVisitor visitor) { - super(Opcodes.ASM5, visitor); + super(Opcodes.ASM7, visitor); } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if ("run".equals(name) && desc.contains("Boolean")) { + if ("".equals(name)) { return new NslMethodManipulator(super.visitMethod(access, name, desc, signature, exceptions)); } return super.visitMethod(access, name, desc, signature, exceptions); @@ -171,7 +172,7 @@ private static class NslMethodManipulator extends MethodVisitor { private final MethodVisitor methodVisitor; NslMethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM5, null); + super(Opcodes.ASM7, null); this.methodVisitor = mv; } @@ -179,9 +180,18 @@ private static class NslMethodManipulator extends MethodVisitor { public void visitEnd() { MethodVisitor mv = this.methodVisitor; mv.visitCode(); + mv.visitInsn(Opcodes.ICONST_0); + mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object"); + mv.visitFieldInsn(Opcodes.PUTSTATIC, "org/eclipse/osgi/util/NLS", "EMPTY_ARGS", "[Ljava/lang/Object;"); mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Boolean", "TRUE", "Ljava/lang/Boolean;"); - mv.visitInsn(Opcodes.ARETURN); - mv.visitMaxs(1, 1); + mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false); + mv.visitFieldInsn(Opcodes.PUTSTATIC, "org/eclipse/osgi/util/NLS", "ignoreWarnings", "Z"); + mv.visitTypeInsn(Opcodes.NEW, "java/lang/Object"); + mv.visitInsn(Opcodes.DUP); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "", "()V", false); + mv.visitFieldInsn(Opcodes.PUTSTATIC, "org/eclipse/osgi/util/NLS", "ASSIGNED", "Ljava/lang/Object;"); + mv.visitInsn(Opcodes.RETURN); + mv.visitMaxs(2, 0); mv.visitEnd(); } From dad5fec5c019c7f8dbade9af802876aff7bc4dbf Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 24 Sep 2021 11:22:00 +0100 Subject: [PATCH 023/238] Revert "Upgrade to Eclipse 2021-09" This reverts commit f57832d88d94fc262bdcf7d32020b1d8e6447786. See gh-277 --- pom.xml | 4 +-- .../eclipse/rewrite/EclipseRewriter.java | 26 ++++++------------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index 337e551f..5f334894 100644 --- a/pom.xml +++ b/pom.xml @@ -31,12 +31,12 @@ ${basedir} UTF-8 1.8 - https://download.eclipse.org/releases/2021-09/202109151000/ + https://download.eclipse.org/releases/2021-03/202103171000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 1.0b3 - 7.3.1 + 5.2 3.8.0 8.45.1 3.4 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index 3450a4dc..e1851616 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -42,7 +42,6 @@ * Internal build utility used to rewrite eclipse runtime classes. * * @author Phillip Webb - * @author Andy Wilkinson */ public final class EclipseRewriter { @@ -76,7 +75,7 @@ public void rewrite(String file) throws IOException { private void rewrite(FileSystem zip) throws IOException { rewrite(zip, "org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.class", DefaultCodeFormatterManipulator::new); - rewrite(zip, "org/eclipse/osgi/util/NLS.class", NlsManipulator::new); + rewrite(zip, "org/eclipse/osgi/util/NLS$1.class", NlsManipulator::new); } private void rewrite(FileSystem zip, String name, Function manipulator) @@ -101,7 +100,7 @@ public static void main(String[] args) throws Exception { private static class DefaultCodeFormatterManipulator extends ClassVisitor { DefaultCodeFormatterManipulator(ClassVisitor visitor) { - super(Opcodes.ASM7, visitor); + super(Opcodes.ASM5, visitor); } @Override @@ -130,7 +129,7 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si private static class DefaultCodeFormatterMethodManipulator extends MethodVisitor { DefaultCodeFormatterMethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM7, mv); + super(Opcodes.ASM5, mv); } @Override @@ -150,12 +149,12 @@ public void visitMethodInsn(int opcode, String owner, String name, String desc, private static class NlsManipulator extends ClassVisitor { NlsManipulator(ClassVisitor visitor) { - super(Opcodes.ASM7, visitor); + super(Opcodes.ASM5, visitor); } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if ("".equals(name)) { + if ("run".equals(name) && desc.contains("Boolean")) { return new NslMethodManipulator(super.visitMethod(access, name, desc, signature, exceptions)); } return super.visitMethod(access, name, desc, signature, exceptions); @@ -172,7 +171,7 @@ private static class NslMethodManipulator extends MethodVisitor { private final MethodVisitor methodVisitor; NslMethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM7, null); + super(Opcodes.ASM5, null); this.methodVisitor = mv; } @@ -180,18 +179,9 @@ private static class NslMethodManipulator extends MethodVisitor { public void visitEnd() { MethodVisitor mv = this.methodVisitor; mv.visitCode(); - mv.visitInsn(Opcodes.ICONST_0); - mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object"); - mv.visitFieldInsn(Opcodes.PUTSTATIC, "org/eclipse/osgi/util/NLS", "EMPTY_ARGS", "[Ljava/lang/Object;"); mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Boolean", "TRUE", "Ljava/lang/Boolean;"); - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false); - mv.visitFieldInsn(Opcodes.PUTSTATIC, "org/eclipse/osgi/util/NLS", "ignoreWarnings", "Z"); - mv.visitTypeInsn(Opcodes.NEW, "java/lang/Object"); - mv.visitInsn(Opcodes.DUP); - mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "", "()V", false); - mv.visitFieldInsn(Opcodes.PUTSTATIC, "org/eclipse/osgi/util/NLS", "ASSIGNED", "Ljava/lang/Object;"); - mv.visitInsn(Opcodes.RETURN); - mv.visitMaxs(2, 0); + mv.visitInsn(Opcodes.ARETURN); + mv.visitMaxs(1, 1); mv.visitEnd(); } From c95ab16ab9091db4010e2d33f5994c9c25adce0c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 24 Sep 2021 11:33:16 +0100 Subject: [PATCH 024/238] Upgrade to Eclipse 2021-06 Closes gh-286 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5f334894..1fd82a32 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ ${basedir} UTF-8 1.8 - https://download.eclipse.org/releases/2021-03/202103171000/ + https://download.eclipse.org/releases/2021-06/202106161001/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 From 6c87701bd34203ef4ac537b6eba9bd9a5026bbd3 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 27 Sep 2021 15:49:59 +0100 Subject: [PATCH 025/238] Allow static import of repackaged REST Docs Rest Assured methods Closes gh-287 --- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index d2d3be63..e0b2eef4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -63,6 +63,8 @@ public class SpringAvoidStaticImportCheck extends AvoidStaticImportCheck { excludes.add("org.springframework.restdocs.operation.preprocess.Preprocessors.*"); excludes.add("org.springframework.restdocs.payload.PayloadDocumentation.*"); excludes.add("org.springframework.restdocs.request.RequestDocumentation.*"); + excludes.add("org.springframework.restdocs.restassured.operation.preprocess.RestAssuredPreprocessors.*"); + excludes.add("org.springframework.restdocs.restassured.RestAssuredRestDocumentation.*"); excludes.add("org.springframework.restdocs.restassured3.operation.preprocess.RestAssuredPreprocessors.*"); excludes.add("org.springframework.restdocs.restassured3.RestAssuredRestDocumentation.*"); excludes.add("org.springframework.restdocs.snippet.Attributes.*"); From 492d2f58c79e596bcee3ec1ff73d5f6010f8207b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 27 Sep 2021 17:59:43 +0100 Subject: [PATCH 026/238] Revert "Upgrade to Eclipse 2021-06" This reverts commit c95ab16ab9091db4010e2d33f5994c9c25adce0c. See gh-286 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1fd82a32..5f334894 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ ${basedir} UTF-8 1.8 - https://download.eclipse.org/releases/2021-06/202106161001/ + https://download.eclipse.org/releases/2021-03/202103171000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 From 9a07516384d1e64a52583535e29eee722cc909dc Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 27 Sep 2021 20:02:43 -0700 Subject: [PATCH 027/238] Fix IndexOutOfBoundsException when running on mismatched Eclipse Update `spring-javaformat-formatter-elcipse` so that all of `org.eclipse.jdt` is shaded into `io.spring.javaformat.eclipse.jdt`. This update ensures that the version of the AST parsing classes are aligned with the version of the formatter. Prior to this commit the misalignment would cause `IndexOutOfBounds` exceptions. Fixes gh-288 --- .../spring/javaformat/eclipse/Activator.java | 9 +- .../gradle/testkit/GradleBuild.java | 4 +- .../checkstyle/AssertionsAuditListener.java | 6 +- .../pom.xml | 6 +- .../javaformat/formatter/Formatter.java | 8 +- .../preparator/CodeLineBreakPreparator.java | 29 +- .../JavadocLineBreakPreparator.java | 29 +- .../formatter/preparator/Preparators.java | 4 +- .../javaformat/formatter/formatter.prefs | 708 +++++++++--------- 9 files changed, 404 insertions(+), 399 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java index 199c2e0c..8bc17fcf 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,8 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; +import io.spring.javaformat.eclipse.jdt.core.JavaCore; + /** * The activator class controls the plug-in life cycle. * @@ -33,17 +35,22 @@ public class Activator extends AbstractUIPlugin { private static Activator plugin; + private JavaCore javaCore; + public Activator() { + this.javaCore = new JavaCore(); } @Override public void start(BundleContext context) throws Exception { super.start(context); plugin = this; + this.javaCore.start(context); } @Override public void stop(BundleContext context) throws Exception { + this.javaCore.stop(context); plugin = null; super.stop(context); } diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java index 61e7653f..0bd06a7a 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,8 +40,8 @@ import org.junit.runners.model.Statement; import org.xml.sax.InputSource; +import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; import io.spring.javaformat.formatter.Formatter; -import io.spring.javaformat.formatter.eclipse.Preparator; import io.spring.javaformat.org.eclipse.jdt.core.formatter.CodeFormatter; /** diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java index afa28e14..6b6daeb6 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -110,8 +110,8 @@ private void recordLevel(AuditEvent event) { } private void recordLocalizedMessage(String message, String... args) { - recordMessage(new Violation(0, Definitions.CHECKSTYLE_BUNDLE, message, args, null, - Violation.class, null).getViolation()); + recordMessage(new Violation(0, Definitions.CHECKSTYLE_BUNDLE, message, args, null, Violation.class, null) + .getViolation()); } private void recordMessage(String message) { diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml index 17d44d69..410e0744 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml @@ -50,14 +50,14 @@ io.spring.javaformat:spring-javaformat-formatter-eclipse-runtime - org/eclipse/jdt/internal/formatter/** + org/eclipse/jdt/** - org.eclipse.jdt.internal.formatter - io.spring.javaformat.formatter.eclipse + org.eclipse.jdt + io.spring.javaformat.eclipse.jdt false diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 5a00240e..569d68d4 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -22,14 +22,14 @@ import java.util.Map; import java.util.Properties; -import org.eclipse.jdt.core.formatter.CodeFormatter; import org.eclipse.jface.text.IRegion; import org.eclipse.text.edits.TextEdit; import io.spring.javaformat.config.IndentationStyle; import io.spring.javaformat.config.JavaFormatConfig; -import io.spring.javaformat.formatter.eclipse.ExtendedCodeFormatter; -import io.spring.javaformat.formatter.eclipse.Preparator; +import io.spring.javaformat.eclipse.jdt.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.internal.formatter.ExtendedCodeFormatter; +import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; import io.spring.javaformat.formatter.preparator.Preparators; /** @@ -195,7 +195,7 @@ private static Map loadOptions(JavaFormatConfig javaFormatConfig private static void applyConfig(Properties properties, JavaFormatConfig javaFormatConfig) { if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { - properties.put("org.eclipse.jdt.core.formatter.tabulation.char", "space"); + properties.put("io.spring.javaformat.eclipse.jdt.core.formatter.tabulation.char", "space"); } } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/CodeLineBreakPreparator.java index 07134c56..dafba177 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,20 +16,19 @@ package io.spring.javaformat.formatter.preparator; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ASTVisitor; -import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; -import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration; -import org.eclipse.jdt.core.dom.EnumDeclaration; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jdt.core.dom.SimpleName; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jdt.core.formatter.CodeFormatter; -import org.eclipse.jdt.internal.compiler.parser.TerminalTokens; - -import io.spring.javaformat.formatter.eclipse.Preparator; -import io.spring.javaformat.formatter.eclipse.Token; -import io.spring.javaformat.formatter.eclipse.TokenManager; +import io.spring.javaformat.eclipse.jdt.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.core.dom.AbstractTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.core.dom.AnnotationTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.core.dom.EnumDeclaration; +import io.spring.javaformat.eclipse.jdt.core.dom.FieldDeclaration; +import io.spring.javaformat.eclipse.jdt.core.dom.SimpleName; +import io.spring.javaformat.eclipse.jdt.core.dom.TypeDeclaration; +import io.spring.javaformat.eclipse.jdt.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.internal.formatter.TokenManager; /** * {@link Preparator} to fine tune curly-brace line breaks. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/JavadocLineBreakPreparator.java index 7cf4e50c..28c670a8 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,20 +20,19 @@ import java.util.Collections; import java.util.List; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ASTVisitor; -import org.eclipse.jdt.core.dom.Comment; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Javadoc; -import org.eclipse.jdt.core.dom.TagElement; -import org.eclipse.jdt.core.dom.TextElement; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jdt.core.formatter.CodeFormatter; -import org.eclipse.jdt.internal.compiler.parser.TerminalTokens; - -import io.spring.javaformat.formatter.eclipse.Preparator; -import io.spring.javaformat.formatter.eclipse.Token; -import io.spring.javaformat.formatter.eclipse.TokenManager; +import io.spring.javaformat.eclipse.jdt.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.core.dom.Comment; +import io.spring.javaformat.eclipse.jdt.core.dom.CompilationUnit; +import io.spring.javaformat.eclipse.jdt.core.dom.Javadoc; +import io.spring.javaformat.eclipse.jdt.core.dom.TagElement; +import io.spring.javaformat.eclipse.jdt.core.dom.TextElement; +import io.spring.javaformat.eclipse.jdt.core.dom.TypeDeclaration; +import io.spring.javaformat.eclipse.jdt.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.internal.formatter.TokenManager; /** * {@link Preparator} to fine tune Javadoc whitespace. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/Preparators.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/Preparators.java index 20f795a1..3757a0b3 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/Preparators.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/Preparators.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import java.util.function.Consumer; -import io.spring.javaformat.formatter.eclipse.Preparator; +import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; /** * {@link Preparator} instances that can be added. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/formatter.prefs index 8ca6bd7b..24b74b10 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/formatter.prefs +++ b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/formatter.prefs @@ -1,354 +1,354 @@ -org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false -org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false -org.eclipse.jdt.core.formatter.align_with_spaces=false -org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 -org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 -org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 -org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 -org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 -org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 -org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false -org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=false -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false -org.eclipse.jdt.core.formatter.comment.indent_root_tags=false -org.eclipse.jdt.core.formatter.comment.indent_tag_description=false -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=90 -org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true -org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true -org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off -org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert -org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.join_lines_in_comments=true -org.eclipse.jdt.core.formatter.join_wrapped_lines=true -org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false -org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false -org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false -org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.lineSplit=120 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_on_off_tags=true -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true -org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true -org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true -org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true -org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true -org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true -org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true -org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true -org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true -org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true -org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +io.spring.javaformat.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +io.spring.javaformat.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +io.spring.javaformat.eclipse.jdt.core.formatter.align_type_members_on_columns=false +io.spring.javaformat.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +io.spring.javaformat.eclipse.jdt.core.formatter.align_with_spaces=false +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_assignment=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_after_package=1 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_field=0 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_method=1 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_package=0 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +io.spring.javaformat.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_block_comments=true +io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_header=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_html=true +io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_line_comments=true +io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_source_code=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.indent_root_tags=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.indent_tag_description=false +io.spring.javaformat.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.comment.line_length=90 +io.spring.javaformat.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +io.spring.javaformat.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +io.spring.javaformat.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +io.spring.javaformat.eclipse.jdt.core.formatter.compact_else_if=true +io.spring.javaformat.eclipse.jdt.core.formatter.continuation_indentation=2 +io.spring.javaformat.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +io.spring.javaformat.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +io.spring.javaformat.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +io.spring.javaformat.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +io.spring.javaformat.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +io.spring.javaformat.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +io.spring.javaformat.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +io.spring.javaformat.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +io.spring.javaformat.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +io.spring.javaformat.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +io.spring.javaformat.eclipse.jdt.core.formatter.indent_empty_lines=false +io.spring.javaformat.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +io.spring.javaformat.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +io.spring.javaformat.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +io.spring.javaformat.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +io.spring.javaformat.eclipse.jdt.core.formatter.indentation.size=4 +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +io.spring.javaformat.eclipse.jdt.core.formatter.join_lines_in_comments=true +io.spring.javaformat.eclipse.jdt.core.formatter.join_wrapped_lines=true +io.spring.javaformat.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +io.spring.javaformat.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +io.spring.javaformat.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +io.spring.javaformat.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +io.spring.javaformat.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +io.spring.javaformat.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +io.spring.javaformat.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +io.spring.javaformat.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +io.spring.javaformat.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +io.spring.javaformat.eclipse.jdt.core.formatter.lineSplit=120 +io.spring.javaformat.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +io.spring.javaformat.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +io.spring.javaformat.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +io.spring.javaformat.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +io.spring.javaformat.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +io.spring.javaformat.eclipse.jdt.core.formatter.tabulation.char=tab +io.spring.javaformat.eclipse.jdt.core.formatter.tabulation.size=4 +io.spring.javaformat.eclipse.jdt.core.formatter.use_on_off_tags=true +io.spring.javaformat.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +io.spring.javaformat.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true From 39631f9210fbe82e750af1e71958d732d7556ecb Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 28 Sep 2021 11:05:01 -0700 Subject: [PATCH 028/238] Update copyright year of changed files --- .../src/test/resources/source/SpringApplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java index 69f5fab0..0dd10214 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 6f2d08576162b345844e52a9fdd993dafd679b8e Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 28 Sep 2021 15:52:59 -0700 Subject: [PATCH 029/238] Upgrade to Tycho 2.4 Closes gh-292 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5f334894..2326ce5e 100644 --- a/pom.xml +++ b/pom.xml @@ -50,8 +50,8 @@ 1.2 1.16.0 3.0.3 - 2.1.0 - 2.1.0 + 2.4.0 + 2.4.0 From 81fbdc53658f367175878c05345bf28f6edf6e7e Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 28 Sep 2021 16:04:32 -0700 Subject: [PATCH 030/238] Upgrade to JUnit 5 Closes gh-290 --- pom.xml | 10 +-- .../META-INF/MANIFEST.MF | 3 +- .../javaformat/eclipse/MessagesTests.java | 2 +- .../ProjectPropertiesTests.java | 36 ++++---- .../ProjectSettingsFileTests.java | 11 ++- .../ProjectSettingsFilesLocatorTests.java | 20 ++--- .../ProjectSettingsFilesTests.java | 16 ++-- .../javaformat/gradle/CheckTaskTests.java | 21 ++--- .../javaformat/gradle/FormatTaskTests.java | 9 +- .../gradle/testkit/GradleBuild.java | 85 ++++++++----------- .../gradle/testkit/GradleBuildExtension.java | 54 ++++++++++++ .../DelegatingCodeStyleManagerTests.java | 7 +- .../EclipseDocumentAdapterTests.java | 2 +- .../codestyle/EclipseRegionAdapterTests.java | 2 +- .../SpringCodeStyleManagerTests.java | 8 +- .../codestyle/SpringReformatterTests.java | 16 ++-- .../checkstyle/SpringChecksTests.java | 37 +++----- .../SpringConfigurationLoaderTests.java | 2 +- .../formatter/AbstractFormatterTests.java | 70 ++++++++------- .../javaformat/formatter/FileEditTests.java | 17 ++-- .../formatter/FileFormatterTests.java | 48 +++++------ .../javaformat/formatter/FormatterTests.java | 42 ++++----- 22 files changed, 270 insertions(+), 248 deletions(-) create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java diff --git a/pom.xml b/pom.xml index 2326ce5e..00a6d272 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ ${maven-core.version} 3.5 3.6.28 - 4.13.1 + 5.8.1 3.21.0-GA 1.2 1.16.0 @@ -445,8 +445,8 @@ - junit - junit + org.junit.jupiter + junit-jupiter ${junit.version} @@ -550,8 +550,8 @@ - junit - junit + org.junit.jupiter + junit-jupiter test diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 5247c801..1590027d 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -6,7 +6,8 @@ Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests Bundle-Version: 0.0.29.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 -Require-Bundle: org.junit;bundle-version="4.12" +Require-Bundle: org.junit, + org.junit.jupiter.api Bundle-ClassPath: ., lib/assertj-core.jar, lib/byte-buddy-agent.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java index db7e978c..1911a981 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java @@ -17,7 +17,7 @@ package io.spring.javaformat.eclipse; import org.eclipse.osgi.util.NLS; -import org.junit.Test; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java index 85780b50..68bc7e1f 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java @@ -26,9 +26,8 @@ import java.util.Properties; import java.util.stream.Collectors; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import io.spring.javaformat.config.JavaFormatConfig; @@ -41,36 +40,36 @@ */ public class ProjectPropertiesTests { - @Rule - public TemporaryFolder temp = new TemporaryFolder(); + @TempDir + public File temp; @Test public void addFromFolderAddsEclipseProperties() throws IOException { - File folder = this.temp.newFolder(); - File file = new File(folder, "eclipse.properties"); + File file = new File(this.temp, "eclipse.properties"); writeProperties(file, "2018"); ProjectProperties properties = new ProjectProperties(); - properties.addFromFolder(folder); + properties.addFromFolder(this.temp); assertThat(properties.get("copyright-year")).isEqualTo("2018"); } @Test public void addFromFolderWhenAlreadySetDoesNotOverwrite() throws IOException { ProjectProperties properties = new ProjectProperties(); - File folder = this.temp.newFolder(); - writeProperties(new File(folder, "eclipse.properties"), "2018"); - properties.addFromFolder(folder); - folder = this.temp.newFolder(); - writeProperties(new File(folder, "eclipse.properties"), "2017"); - properties.addFromFolder(folder); + File folder1 = new File(this.temp, "1"); + folder1.mkdirs(); + writeProperties(new File(folder1, "eclipse.properties"), "2018"); + properties.addFromFolder(folder1); + File folder2 = new File(this.temp, "2"); + folder2.mkdirs(); + writeProperties(new File(folder2, "eclipse.properties"), "2017"); + properties.addFromFolder(folder2); assertThat(properties.get("copyright-year")).isEqualTo("2018"); } @Test public void addFromEmptyFolderUsesDefaults() throws IOException { ProjectProperties properties = new ProjectProperties(); - File folder = this.temp.newFolder(); - properties.addFromFolder(folder); + properties.addFromFolder(this.temp); String currentYear = String.valueOf(LocalDate.now().getYear()); assertThat(properties.get("copyright-year")).isEqualTo(currentYear); } @@ -78,11 +77,10 @@ public void addFromEmptyFolderUsesDefaults() throws IOException { @Test public void getModifiedContentReplacesCopyrightYear() throws IOException { String year = "2016-2020"; - File folder = this.temp.newFolder(); - File file = new File(folder, "eclipse.properties"); + File file = new File(this.temp, "eclipse.properties"); writeProperties(file, year); ProjectProperties properties = new ProjectProperties(); - properties.addFromFolder(folder); + properties.addFromFolder(this.temp); ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); ProjectSettingsFile prefs = getFile(files, "org.eclipse.jdt.ui.prefs"); String content = loadContent(properties.getModifiedContent(prefs).getContent(JavaFormatConfig.DEFAULT)); diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java index e691a234..4a0f3128 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java @@ -21,9 +21,8 @@ import java.io.FileNotFoundException; import java.io.PrintWriter; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import io.spring.javaformat.config.JavaFormatConfig; @@ -36,12 +35,12 @@ */ public class ProjectSettingsFileTests { - @Rule - public TemporaryFolder temp = new TemporaryFolder(); + @TempDir + public File temp; @Test public void fromFileAdaptsFile() throws Exception { - File file = this.temp.newFile(); + File file = new File(this.temp, "file"); writeText(file, "test"); ProjectSettingsFile projectSettingsFile = ProjectSettingsFile.fromFile(file); assertThat(projectSettingsFile.getName()).isEqualTo(file.getName()); diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java index d29834f4..9c537d79 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java @@ -25,9 +25,8 @@ import java.util.Map; import java.util.Properties; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import io.spring.javaformat.config.JavaFormatConfig; @@ -40,8 +39,8 @@ */ public class ProjectSettingsFilesLocatorTests { - @Rule - public TemporaryFolder temp = new TemporaryFolder(); + @TempDir + public File temp; @Test public void locateSettingsFilesWhenNoFoldersShouldReturnDefault() throws IOException { @@ -52,19 +51,18 @@ public void locateSettingsFilesWhenNoFoldersShouldReturnDefault() throws IOExcep @Test public void locateSettingsFilesOnlyFindPrefs() throws Exception { - File folder = this.temp.newFolder(); - writeFile(folder, "foo.prefs"); - writeFile(folder, "bar.notprefs"); - ProjectSettingsFiles files = new ProjectSettingsFilesLocator(folder).locateSettingsFiles(); + writeFile(this.temp, "foo.prefs"); + writeFile(this.temp, "bar.notprefs"); + ProjectSettingsFiles files = new ProjectSettingsFilesLocator(this.temp).locateSettingsFiles(); assertThat(files.iterator()).extracting(ProjectSettingsFile::getName).containsOnly("org.eclipse.jdt.core.prefs", "org.eclipse.jdt.ui.prefs", "foo.prefs"); } @Test public void locateSettingsFilesWhenMultipleFoldersFindsInEarliest() throws Exception { - File folder1 = this.temp.newFolder(); + File folder1 = new File(this.temp, "1"); writeFile(folder1, "foo.prefs", "foo1"); - File folder2 = this.temp.newFolder(); + File folder2 = new File(this.temp, "2"); writeFile(folder2, "foo.prefs", "foo2"); writeFile(folder2, "org.eclipse.jdt.core.prefs", "core2"); ProjectSettingsFiles files = new ProjectSettingsFilesLocator(folder1, folder2).locateSettingsFiles(); diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java index 61bca52a..36c0f76c 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java @@ -16,15 +16,15 @@ package io.spring.javaformat.eclipse.projectsettings; +import java.io.File; import java.io.InputStream; import java.util.Collections; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -40,19 +40,21 @@ */ public class ProjectSettingsFilesTests { - @Rule - public TemporaryFolder temp = new TemporaryFolder(); + @TempDir + public File temp; @Test public void iteratorIteratesFiles() throws Exception { - ProjectSettingsFile file = ProjectSettingsFile.fromFile(this.temp.newFile()); + ProjectSettingsFile file = ProjectSettingsFile.fromFile(new File(this.temp, "file.prefs")); ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); assertThat(files).containsOnly(file); } @Test public void applyToProjectCopiesToDotSettings() throws Exception { - ProjectSettingsFile file = ProjectSettingsFile.fromFile(this.temp.newFile("foo.prefs")); + File prefsFile = new File(this.temp, "foo.prefs"); + prefsFile.createNewFile(); + ProjectSettingsFile file = ProjectSettingsFile.fromFile(prefsFile); ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); IProject project = mock(IProject.class); IProgressMonitor monitor = mock(IProgressMonitor.class); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index cf67809b..654774ae 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -27,11 +27,12 @@ import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.TaskOutcome; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; import io.spring.javaformat.gradle.testkit.GradleBuild; +import io.spring.javaformat.gradle.testkit.GradleBuildExtension; import static org.assertj.core.api.Assertions.assertThat; @@ -40,13 +41,13 @@ * * @author Phillip Webb */ +@ExtendWith(GradleBuildExtension.class) public class CheckTaskTests { - @Rule - public final GradleBuild gradleBuild = new GradleBuild(); + @TempDir + public File temp; - @Rule - public final TemporaryFolder temp = new TemporaryFolder(); + public GradleBuild gradleBuild; @Test public void checkOk() throws IOException { @@ -65,11 +66,11 @@ public void whenFirstInvocationSucceedsThenSecondInvocationIsUpToDate() throws I @Test public void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSucceeds() throws IOException { - copyFolder(new File("src/test/resources/check-ok").toPath(), this.temp.getRoot().toPath()); - GradleBuild gradleBuild = this.gradleBuild.source(this.temp.getRoot()); + copyFolder(new File("src/test/resources/check-ok").toPath(), this.temp.toPath()); + GradleBuild gradleBuild = this.gradleBuild.source(this.temp); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - Files.write(new File(this.temp.getRoot(), "src/main/java/simple/Simple.java").toPath(), + Files.write(new File(this.temp, "src/main/java/simple/Simple.java").toPath(), Collections.singletonList("// A change to the file"), StandardOpenOption.APPEND); result = gradleBuild.build("--debug", "check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index 1fe2202e..82c1ad7a 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -22,10 +22,11 @@ import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.TaskOutcome; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import io.spring.javaformat.gradle.testkit.GradleBuild; +import io.spring.javaformat.gradle.testkit.GradleBuildExtension; import static org.assertj.core.api.Assertions.assertThat; @@ -34,10 +35,10 @@ * * @author Phillip Webb */ +@ExtendWith(GradleBuildExtension.class) public class FormatTaskTests { - @Rule - public final GradleBuild gradleBuild = new GradleBuild(); + public GradleBuild gradleBuild; @Test public void checkOk() throws IOException { diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java index 0bd06a7a..64682a63 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,11 +19,13 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Arrays; +import java.util.Comparator; import java.util.List; import java.util.stream.Stream; @@ -31,28 +33,25 @@ import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathFactory; -import org.gradle.internal.impldep.com.google.common.base.Charsets; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.GradleRunner; -import org.junit.rules.TemporaryFolder; -import org.junit.rules.TestRule; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; +import org.gradle.util.GradleVersion; import org.xml.sax.InputSource; +import io.spring.javaformat.eclipse.jdt.core.formatter.CodeFormatter; import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; import io.spring.javaformat.formatter.Formatter; -import io.spring.javaformat.org.eclipse.jdt.core.formatter.CodeFormatter; + +import static org.assertj.core.api.Assertions.assertThat; /** - * A {@link TestRule} for running a Gradle build using {@link GradleRunner}. + * A {@code GradleBuild} is used to run a Gradle build using {@link GradleRunner}. * * @author Andy Wilkinson + * @author Scott Frederick * @author Phillip Webb */ -public class GradleBuild implements TestRule { - - private final TemporaryFolder temp = new TemporaryFolder(); +public class GradleBuild { private File source; @@ -60,44 +59,15 @@ public class GradleBuild implements TestRule { private String gradleVersion; - @Override - public Statement apply(Statement base, Description description) { - return this.temp.apply(new Statement() { - - @Override - public void evaluate() throws Throwable { - before(); - try { - base.evaluate(); - } - finally { - after(); - } - } - - }, description); - } - - private void before() throws IOException { - this.projectDir = this.temp.newFolder(); - } - - private void after() { - GradleBuild.this.source = null; - } - - private String getPluginClasspath() { - return absolutePath("build/classes/java/main") + "," + absolutePath("build/resources/main") + "," - + pathOfJarContaining(Formatter.class) + "," + pathOfJarContaining(Preparator.class) + "," - + pathOfJarContaining(CodeFormatter.class); - } + private GradleVersion expectDeprecationWarnings; - private String absolutePath(String path) { - return new File(path).getAbsolutePath(); + void before() throws IOException { + this.projectDir = Files.createTempDirectory("gradle-").toFile(); } - private String pathOfJarContaining(Class type) { - return type.getProtectionDomain().getCodeSource().getLocation().getPath(); + void after() throws IOException { + this.source = null; + Files.walk(this.projectDir.toPath()).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete); } public GradleBuild source(String source) { @@ -114,7 +84,12 @@ public GradleBuild source(File source) { public BuildResult build(String... arguments) { try { - return prepareRunner(arguments).build(); + BuildResult result = prepareRunner(arguments).build(); + if (this.expectDeprecationWarnings == null || (this.gradleVersion != null + && this.expectDeprecationWarnings.compareTo(GradleVersion.version(this.gradleVersion)) > 0)) { + assertThat(result.getOutput()).doesNotContain("Deprecated").doesNotContain("deprecated"); + } + return result; } catch (Exception ex) { throw new RuntimeException(ex); @@ -135,7 +110,7 @@ public GradleRunner prepareRunner(String... arguments) throws IOException { File buildFile = new File(this.projectDir, "build.gradle"); String scriptContent = new String(Files.readAllBytes(buildFile.toPath())).replace("{version}", getSpringFormatVersion()); - Files.write(buildFile.toPath(), scriptContent.getBytes(Charsets.UTF_8)); + Files.write(buildFile.toPath(), scriptContent.getBytes(StandardCharsets.UTF_8)); GradleRunner gradleRunner = GradleRunner.create().withProjectDir(this.projectDir).withDebug(true); if (this.gradleVersion != null) { gradleRunner.withGradleVersion(this.gradleVersion); @@ -148,6 +123,20 @@ public GradleRunner prepareRunner(String... arguments) throws IOException { return gradleRunner.withArguments(allArguments); } + private String getPluginClasspath() { + return absolutePath("build/classes/java/main") + "," + absolutePath("build/resources/main") + "," + + pathOfJarContaining(Formatter.class) + "," + pathOfJarContaining(Preparator.class) + "," + + pathOfJarContaining(CodeFormatter.class); + } + + private String absolutePath(String path) { + return new File(path).getAbsolutePath(); + } + + private String pathOfJarContaining(Class type) { + return type.getProtectionDomain().getCodeSource().getLocation().getPath(); + } + private void copyFolder(Path source, Path target) throws IOException { try (Stream stream = Files.walk(source)) { stream.forEach((child) -> { diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java new file mode 100644 index 00000000..c2266d6e --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java @@ -0,0 +1,54 @@ +/* + * Copyright 2017-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.gradle.testkit; + +import java.lang.reflect.Field; + +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.Extension; +import org.junit.jupiter.api.extension.ExtensionContext; + +/** + * An {@link Extension} for managing the lifecycle of a {@link GradleBuild} stored in a + * field named {@code gradleBuild}. + * + * @author Andy Wilkinson + * @author Scott Frederick + * @author Phillip Webb + */ +public class GradleBuildExtension implements BeforeEachCallback, AfterEachCallback { + + @Override + public void beforeEach(ExtensionContext context) throws Exception { + extractGradleBuild(context).before(); + } + + @Override + public void afterEach(ExtensionContext context) throws Exception { + extractGradleBuild(context).after(); + } + + private GradleBuild extractGradleBuild(ExtensionContext context) throws Exception { + Object testInstance = context.getRequiredTestInstance(); + Field gradleBuildField = testInstance.getClass().getDeclaredField("gradleBuild"); + gradleBuildField.setAccessible(true); + GradleBuild gradleBuild = (GradleBuild) gradleBuildField.get(testInstance); + return gradleBuild; + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java index c923538d..0bbf49c8 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java @@ -29,8 +29,8 @@ import com.intellij.psi.codeStyle.ChangedRangesInfo; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.util.ThrowableRunnable; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -76,8 +76,7 @@ public class DelegatingCodeStyleManagerTests { @Mock private ChangedRangesInfo changedRangesInfo; - @Before - @Test + @BeforeEach public void setup() { MockitoAnnotations.initMocks(this); this.delegating = new DelegatingCodeStyleManager(this.delegate); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java index 04ed0c06..a5354fe3 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java @@ -17,7 +17,7 @@ package io.spring.format.formatter.intellij.codestyle; import com.intellij.openapi.editor.Document; -import org.junit.Test; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java index 753bf559..69ab5a2d 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java @@ -21,7 +21,7 @@ import com.intellij.openapi.util.TextRange; import org.eclipse.jface.text.IRegion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java index 5139b8e6..5f15b001 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java @@ -24,13 +24,13 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleManager; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import static org.mockito.Matchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; @@ -52,7 +52,7 @@ public class SpringCodeStyleManagerTests { @Mock private PsiFile file; - @Before + @BeforeEach public void setup() { MockitoAnnotations.initMocks(this); this.styleManager = new SpringCodeStyleManager(this.delegate, this.springReformatter); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java index ae672b49..a37ddce7 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java @@ -28,13 +28,12 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.util.IncorrectOperationException; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -46,9 +45,6 @@ */ public class SpringReformatterTests { - @Rule - public ExpectedException thrown = ExpectedException.none(); - @Mock private Project project; @@ -68,7 +64,7 @@ public class SpringReformatterTests { private Collection ranges = Arrays.asList(new TextRange(10, 20)); - @Before + @BeforeEach public void setup() { MockitoAnnotations.initMocks(this); given(this.file.getVirtualFile()).willReturn(this.virtualFile); @@ -92,8 +88,8 @@ public void reformatShouldCommitAllDocuments() throws Exception { @Test public void reformatWhenFileIsNotWriteableShouldThrow() throws Exception { - this.thrown.expect(IncorrectOperationException.class); - this.reformatter.reformat(this.file, this.ranges); + assertThatExceptionOfType(IncorrectOperationException.class) + .isThrownBy(() -> this.reformatter.reformat(this.file, this.ranges)); } @Test diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index 692d2134..1293d001 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -40,10 +40,8 @@ import com.puppycrawl.tools.checkstyle.api.CheckstyleException; import com.puppycrawl.tools.checkstyle.api.Configuration; import com.puppycrawl.tools.checkstyle.api.RootModule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import org.xml.sax.InputSource; /** @@ -51,7 +49,6 @@ * * @author Phillip Webb */ -@RunWith(Parameterized.class) public class SpringChecksTests { private static final boolean RUNNING_ON_WINDOWS = System.getProperty("os.name").toLowerCase().contains("win"); @@ -64,20 +61,15 @@ public class SpringChecksTests { private static final File DEFAULT_CONFIG = new File(CONFIGS_DIR, "default-checkstyle-configuration.xml"); - private final Parameter parameter; - - public SpringChecksTests(Parameter parameter) throws Exception { - this.parameter = parameter; - } - - @Test - public void processHasExpectedResults() throws Exception { + @ParameterizedTest + @MethodSource("paramaters") + public void processHasExpectedResults(Parameter parameter) throws Exception { Locale previousLocale = Locale.getDefault(); Locale.setDefault(Locale.ENGLISH); - Configuration configuration = loadConfiguration(); + Configuration configuration = loadConfiguration(parameter); RootModule rootModule = createRootModule(configuration); try { - processAndCheckResults(rootModule); + processAndCheckResults(parameter, rootModule); } finally { rootModule.destroy(); @@ -85,8 +77,8 @@ public void processHasExpectedResults() throws Exception { } } - private Configuration loadConfiguration() throws Exception { - try (InputStream inputStream = new FileInputStream(this.parameter.getConfigFile())) { + private Configuration loadConfiguration(Parameter parameter) throws Exception { + try (InputStream inputStream = new FileInputStream(parameter.getConfigFile())) { Configuration configuration = ConfigurationLoader.loadConfiguration(new InputSource(inputStream), new PropertiesExpander(new Properties()), IgnoredModulesOptions.EXECUTE, ThreadModeSettings.SINGLE_THREAD_MODE_INSTANCE); @@ -103,12 +95,12 @@ private RootModule createRootModule(Configuration configuration) throws Checksty return rootModule; } - private void processAndCheckResults(RootModule rootModule) throws CheckstyleException { - rootModule.addListener(this.parameter.getAssertionsListener()); + private void processAndCheckResults(Parameter parameter, RootModule rootModule) throws CheckstyleException { + rootModule.addListener(parameter.getAssertionsListener()); if (!RUNNING_ON_WINDOWS) { - printDebugInfo(this.parameter.getSourceFile()); + printDebugInfo(parameter.getSourceFile()); } - rootModule.process(Arrays.asList(this.parameter.getSourceFile())); + rootModule.process(Arrays.asList(parameter.getSourceFile())); } private void printDebugInfo(File file) throws CheckstyleException { @@ -119,8 +111,7 @@ private void printDebugInfo(File file) throws CheckstyleException { } } - @Parameters(name = "{0}") - public static Collection files() throws IOException { + public static Collection paramaters() throws IOException { return Arrays.stream(SOURCES_DIR.list((dir, name) -> !name.startsWith("."))).sorted().map(Parameter::new) .collect(Collectors.toList()); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index cbca2fe7..059db83c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -28,7 +28,7 @@ import com.puppycrawl.tools.checkstyle.TreeWalker; import com.puppycrawl.tools.checkstyle.api.FileSetCheck; import org.assertj.core.extractor.Extractors; -import org.junit.Test; +import org.junit.jupiter.api.Test; import io.spring.javaformat.checkstyle.check.SpringHeaderCheck; import io.spring.javaformat.checkstyle.check.SpringImportOrderCheck; diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index 6819a018..09a397a7 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -17,15 +17,11 @@ package io.spring.javaformat.formatter; import java.io.File; -import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; import java.util.Collection; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - import io.spring.javaformat.config.JavaFormatConfig; /** @@ -33,33 +29,8 @@ * * @author Phillip Webb */ -@RunWith(Parameterized.class) public abstract class AbstractFormatterTests { - private final File source; - - private final File expected; - - private final JavaFormatConfig config; - - public AbstractFormatterTests(File source, File expected, File config) throws IOException { - this.source = source; - this.expected = expected; - this.config = (!config.exists()) ? JavaFormatConfig.DEFAULT : JavaFormatConfig.load(config); - } - - protected final File getSource() { - return this.source; - } - - protected final File getExpected() { - return this.expected; - } - - protected final JavaFormatConfig getConfig() { - return this.config; - } - protected final void print(String name, String content) { System.out.println(name + ":"); System.out.println(); @@ -74,8 +45,8 @@ protected final String read(File file) throws Exception { return new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8); } - protected static Collection files(String expectedOverride) { - Collection files = new ArrayList<>(); + protected static Item[] items(String expectedOverride) { + Collection files = new ArrayList<>(); File sourceDir = new File("src/test/resources/source"); File expectedDir = new File("src/test/resources/expected"); File configDir = new File("src/test/resources/config"); @@ -86,9 +57,42 @@ protected static Collection files(String expectedOverride) { expected = new File(expectedDir, source.getName()); } File config = new File(configDir, source.getName()); - files.add(new Object[] { source, expected, config }); + files.add(new Item(source, expected, config)); + } + return files.toArray(new Item[0]); + } + + static class Item { + + private final File source; + + private final File expected; + + private final JavaFormatConfig config; + + Item(File source, File expected, File config) { + this.source = source; + this.expected = expected; + this.config = (!config.exists()) ? JavaFormatConfig.DEFAULT : JavaFormatConfig.load(config); + } + + public File getSource() { + return this.source; } - return files; + + public File getExpected() { + return this.expected; + } + + public JavaFormatConfig getConfig() { + return this.config; + } + + @Override + public String toString() { + return this.source.getName(); + } + } } diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java index 872af875..4f4be1a0 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java @@ -24,10 +24,9 @@ import java.nio.file.StandardCopyOption; import org.eclipse.text.edits.TextEdit; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import static org.assertj.core.api.Assertions.assertThat; @@ -40,8 +39,8 @@ public class FileEditTests { private static final Charset UTF_8 = StandardCharsets.UTF_8; - @Rule - public TemporaryFolder temp = new TemporaryFolder(); + @TempDir + public File temp; private File source; @@ -51,10 +50,10 @@ public class FileEditTests { private FileEdit fileEdit; - @Before + @BeforeEach public void setup() throws IOException { - this.source = this.temp.newFile("source.txt"); - this.expected = this.temp.newFile("expected.txt"); + this.source = new File(this.temp, "source.txt"); + this.expected = new File(this.temp, "expected.txt"); Files.copy(new File("src/test/resources/source/javadoc-top.txt").toPath(), this.source.toPath(), StandardCopyOption.REPLACE_EXISTING); Files.copy(new File("src/test/resources/expected/javadoc-top.txt").toPath(), this.expected.toPath(), diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java index 6e1e75c5..116e734b 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java @@ -17,13 +17,11 @@ package io.spring.javaformat.formatter; import java.io.File; -import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Arrays; -import java.util.Collection; -import org.junit.Test; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import static org.assertj.core.api.Assertions.assertThat; @@ -36,30 +34,29 @@ public class FileFormatterTests extends AbstractFormatterTests { private static final boolean RUNNING_ON_WINDOWS = System.getProperty("os.name").toLowerCase().contains("win"); - public FileFormatterTests(File source, File expected, File config) throws IOException { - super(source, expected, config); + @ParameterizedTest + @MethodSource("items") + public void formatFilesFromIteratorShouldFormatFile(Item files) throws Exception { + FileEdit edit = new FileFormatter(files.getConfig()) + .formatFiles(Arrays.asList(files.getSource()), StandardCharsets.UTF_8).findFirst().get(); + assertThat(edit.getFormattedContent()).isEqualTo(read(files.getExpected())); } - @Test - public void formatFilesFromIteratorShouldFormatFile() throws Exception { - FileEdit edit = new FileFormatter(getConfig()).formatFiles(Arrays.asList(getSource()), StandardCharsets.UTF_8) - .findFirst().get(); - assertThat(edit.getFormattedContent()).isEqualTo(read(getExpected())); + @ParameterizedTest + @MethodSource("items") + public void formatFilesFromStreamShouldFormatFile(Item item) throws Exception { + FileEdit edit = new FileFormatter(item.getConfig()) + .formatFiles(Arrays.asList(item.getSource()).stream(), StandardCharsets.UTF_8).findFirst().get(); + assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); } - @Test - public void formatFilesFromStreamShouldFormatFile() throws Exception { - FileEdit edit = new FileFormatter(getConfig()) - .formatFiles(Arrays.asList(getSource()).stream(), StandardCharsets.UTF_8).findFirst().get(); - assertThat(edit.getFormattedContent()).isEqualTo(read(getExpected())); - } - - @Test - public void formatFileShouldFormatFile() throws Exception { - File source = getSource(); - FileEdit edit = new FileFormatter(getConfig()).formatFile(source, StandardCharsets.UTF_8); + @ParameterizedTest + @MethodSource("items") + public void formatFileShouldFormatFile(Item item) throws Exception { + File source = item.getSource(); + FileEdit edit = new FileFormatter(item.getConfig()).formatFile(source, StandardCharsets.UTF_8); String formattedContent = edit.getFormattedContent(); - String expected = read(getExpected()); + String expected = read(item.getExpected()); if (!RUNNING_ON_WINDOWS) { System.out.println(source); System.out.println("----- got"); @@ -71,9 +68,8 @@ public void formatFileShouldFormatFile() throws Exception { assertThat(formattedContent).isEqualTo(expected); } - @Parameters(name = "{0}") - public static Collection files() { - return AbstractFormatterTests.files(null); + public static Item[] items() { + return items(null); } } diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java index 77b52a53..e5db7baf 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java @@ -16,15 +16,13 @@ package io.spring.javaformat.formatter; -import java.io.File; -import java.io.IOException; -import java.util.Collection; - import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.text.edits.TextEdit; -import org.junit.Test; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import io.spring.javaformat.config.JavaFormatConfig; import static org.assertj.core.api.Assertions.assertThat; @@ -33,36 +31,32 @@ */ public class FormatterTests extends AbstractFormatterTests { - public FormatterTests(File source, File expected, File config) throws IOException { - super(source, expected, config); - } - - @Test - public void format() throws Exception { - String sourceContent = read(getSource()); - String expectedContent = read(getExpected()); - String formattedContent = format(sourceContent); + @ParameterizedTest + @MethodSource("items") + public void format(Item item) throws Exception { + String sourceContent = read(item.getSource()); + String expectedContent = read(item.getExpected()); + String formattedContent = format(item.getConfig(), sourceContent); if (!expectedContent.equals(formattedContent)) { - System.out.println("Formatted " + getSource() + " does not match " + getExpected()); - print("Source " + getSource(), sourceContent); - print("Expected +" + getExpected(), expectedContent); + System.out.println("Formatted " + item.getSource() + " does not match " + item.getExpected()); + print("Source " + item.getSource(), sourceContent); + print("Expected +" + item.getExpected(), expectedContent); print("Got", formattedContent); System.out.println("========================================"); assertThat(expectedContent).isEqualTo(formattedContent) - .describedAs("Formatted content does not match for " + getSource()); + .describedAs("Formatted content does not match for " + item.getSource()); } } - private String format(String sourceContent) throws Exception { + private String format(JavaFormatConfig config, String sourceContent) throws Exception { IDocument document = new Document(sourceContent); - TextEdit textEdit = new Formatter(getConfig()).format(sourceContent); + TextEdit textEdit = new Formatter(config).format(sourceContent); textEdit.apply(document); return document.get(); } - @Parameters(name = "{0}") - public static Collection files() { - return AbstractFormatterTests.files("FormatterTests-expected"); + public static Item[] items() { + return items("FormatterTests-expected"); } } From a40fa14ba99f799f416c6498334a6bb4a8b19727 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 28 Sep 2021 16:05:13 -0700 Subject: [PATCH 031/238] Update copyright year of changed files --- .../src/io/spring/javaformat/eclipse/MessagesTests.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFilesTests.java | 2 +- .../test/java/io/spring/javaformat/gradle/CheckTaskTests.java | 2 +- .../java/io/spring/javaformat/gradle/testkit/GradleBuild.java | 2 +- .../spring/javaformat/gradle/testkit/GradleBuildExtension.java | 2 +- .../intellij/codestyle/DelegatingCodeStyleManagerTests.java | 2 +- .../intellij/codestyle/EclipseDocumentAdapterTests.java | 2 +- .../formatter/intellij/codestyle/EclipseRegionAdapterTests.java | 2 +- .../intellij/codestyle/SpringCodeStyleManagerTests.java | 2 +- .../java/io/spring/javaformat/checkstyle/SpringChecksTests.java | 2 +- .../javaformat/checkstyle/SpringConfigurationLoaderTests.java | 2 +- .../test/java/io/spring/javaformat/formatter/FileEditTests.java | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java index 1911a981..32020b10 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java index 36c0f76c..c73112e3 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index 654774ae..3fb167fb 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java index 64682a63..11426e15 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java index c2266d6e..d5b1cc80 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java index 0bbf49c8..2f543745 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java index a5354fe3..4d9b4b4d 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java index 69ab5a2d..b281ad5c 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java index 5f15b001..f2f67554 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index 1293d001..6eb6f653 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 059db83c..7415277f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java index 4f4be1a0..59c6d57a 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 8e6be0fcbd6c420587e73588fe607d60e8a1d5ca Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 28 Sep 2021 16:55:11 -0700 Subject: [PATCH 032/238] Refine tag regex to deal with {@code ...} text Update `AT_TAG_PATTERN` regex in `SpringJavadocCheck` so that text with `{@code ...}` escapes aren't considered. Fixes gh-291 --- .../checkstyle/check/SpringJavadocCheck.java | 4 +-- ...cMethodEmptyLineBeforeTagWithStarAtEnd.txt | 1 + ...MethodEmptyLineBeforeTagWithStarAtEnd.java | 33 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index 68dc99a0..dd600f53 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -56,7 +56,7 @@ public class SpringJavadocCheck extends AbstractSpringCheck { private static final Pattern SINCE_TAG_PATTERN = Pattern.compile("@since\\s+(.*)"); - private static final Pattern AT_TAG_PATTERN = Pattern.compile("@\\w+\\s+.*"); + private static final Pattern AT_TAG_PATTERN = Pattern.compile("[^{]@\\w+\\s+.*"); private static final Pattern NON_JAVADOC_COMMENT = Pattern.compile("\\(non-Javadoc\\)", Pattern.CASE_INSENSITIVE); diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java new file mode 100644 index 00000000..a6704c45 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Javadoc with white space. + * @param this is a valid param + * @author Sushant Kumar Singh + */ +public class JavadocMethodEmptyLineBeforeTagWithStarAtEnd { + + /** + * First paragraph. + * + *

Second paragraph contains an asterisk in a code element: {@code *}. + * @since 1.0 + */ + public void test() { + } + +} From 30765833d2695e6fecb0717a9a56aa2ab8f0eb08 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 28 Sep 2021 17:10:31 -0700 Subject: [PATCH 033/238] Add a separate import group for jakarta imports Closes gh-289 --- .../projectsettings/org.eclipse.jdt.ui.prefs | 2 +- .../check/SpringImportOrderCheck.java | 2 +- .../test/resources/check/ImportOrderValid.txt | 1 + .../resources/source/ImportOrderValid.java | 41 +++++++++++++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/ImportOrderValid.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs index af9117f9..12065c54 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs @@ -64,7 +64,7 @@ formatter_settings_version=13 org.eclipse.jdt.ui.exception.name=e org.eclipse.jdt.ui.gettersetter.use.is=true org.eclipse.jdt.ui.ignorelowercasenames=true -org.eclipse.jdt.ui.importorder=java;javax;;org.springframework;\#; +org.eclipse.jdt.ui.importorder=java;javax;jakarta;;org.springframework;\#; org.eclipse.jdt.ui.javadoc=true org.eclipse.jdt.ui.keywordthis=false org.eclipse.jdt.ui.ondemandthreshold=9999 diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java index 5c80479d..d8ccae3b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java @@ -39,7 +39,7 @@ public SpringImportOrderCheck() { } public void setProjectRootPackage(String projectRootPackage) { - setGroups("java", "/^javax?\\./", "*", projectRootPackage); + setGroups("java", "/^javax?\\./", "/^jakarta?\\./", "*", projectRootPackage); } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/ImportOrderValid.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/ImportOrderValid.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/ImportOrderValid.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java new file mode 100644 index 00000000..14711cd6 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java @@ -0,0 +1,41 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example; + +import java.util.Objects; + +import javax.annotation.Nonnull; + +import jakarta.servlet.Servlet; + +/** + * Custom pacakge with valid imports. + * + * @author Phillip Webb + */ +public final class ImportOrderValid { + + private ImportOrderValid() { + } + + @Nonnull + public static void main(String[] args) { + Objects.nonNull(null); + Servlet s = null; + } + +} From 9a74ac0bb084e74c465f000c3e0f32818b07331a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 28 Sep 2021 21:42:35 -0700 Subject: [PATCH 034/238] Add formatter integration tests for Java 8, 11 and 17 Closes gh-293 --- pom.xml | 35 +++++- .../spring-javaformat-formatter/pom.xml | 26 +++++ .../javaformat/formatter/FormatterApp.java | 44 ++++++++ .../formatter/FormatterIntegrationTests.java | 103 ++++++++++++++++++ .../javaformat/formatter/JavaContainer.java | 32 ++++++ 5 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java diff --git a/pom.xml b/pom.xml index 00a6d272..5e1f1abb 100644 --- a/pom.xml +++ b/pom.xml @@ -41,6 +41,7 @@ 8.45.1 3.4 2.4.21 + 2.14.1 3.5.0 ${maven-core.version} 3.5 @@ -49,6 +50,7 @@ 3.21.0-GA 1.2 1.16.0 + 1.16.0 3.0.3 2.4.0 2.4.0 @@ -445,9 +447,26 @@ - org.junit.jupiter - junit-jupiter - ${junit.version} + org.apache.logging.log4j + log4j-api + ${log4j.version} + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + + + org.junit + junit-bom + 5.8.1 + pom + import com.puppycrawl.tools @@ -545,6 +564,16 @@ picocontainer ${picocontainer.version} + + org.testcontainers + testcontainers + ${testcontainers.version} + + + org.testcontainers + junit-jupiter + ${testcontainers.version} + diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 16b92c8e..dd20cffe 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -32,5 +32,31 @@ ${project.version} provided + + + org.apache.logging.log4j + log4j-api + test + + + org.apache.logging.log4j + log4j-core + test + + + org.apache.logging.log4j + log4j-slf4j-impl + test + + + org.testcontainers + testcontainers + test + + + org.testcontainers + junit-jupiter + test + diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java new file mode 100644 index 00000000..9d42c932 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java @@ -0,0 +1,44 @@ +/* + * Copyright 2017-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter; + +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.text.edits.TextEdit; + +/** + * Test app used to format something in a test container. + * + * @author Phillip Webb + */ +public final class FormatterApp { + + private FormatterApp() { + } + + public static void main(String[] args) throws Exception, BadLocationException { + Formatter formatter = new Formatter(); + String source = "public class Test {}"; + TextEdit edit = formatter.format(source); + IDocument document = new Document(source); + edit.apply(document); + String formatted = document.get(); + System.out.println(formatted); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java new file mode 100644 index 00000000..a570261d --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -0,0 +1,103 @@ +/* + * Copyright 2017-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.output.ToStringConsumer; +import org.testcontainers.containers.startupcheck.OneShotStartupCheckStrategy; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.MountableFile; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests to ensure the formatter can run in different JVM versions. + * + * @author Phillip Webb + */ +@Testcontainers(disabledWithoutDocker = true) +public class FormatterIntegrationTests { + + @ParameterizedTest + @ValueSource(strings = { "8", "11", "17" }) + void formatCode(String version) throws Exception { + try (JavaContainer container = new JavaContainer(version)) { + ToStringConsumer output = new ToStringConsumer(); + container.withStartupCheckStrategy(new OneShotStartupCheckStrategy().withTimeout(Duration.ofMinutes(5))); + container.withLogConsumer(output); + String classpath = withCopyClasspathToContainer(container); + String applicationClassName = FormatterApp.class.getName(); + container.withCommand("java -cp " + classpath + " " + applicationClassName); + container.start(); + assertThat(output.toUtf8String()).isEqualTo("public class Test {\n\n}\n"); + } + } + + private String withCopyClasspathToContainer(JavaContainer container) throws IOException { + List classpath = new ArrayList<>(); + for (String entry : System.getProperty("java.class.path").split(File.pathSeparator)) { + if (entry.contains("spring-javaformat")) { + classpath.add(withCopyClasspathEntryToContainer(container, entry)); + } + } + return classpath.stream().collect(Collectors.joining(":")); + } + + private String withCopyClasspathEntryToContainer(JavaContainer container, String entry) throws IOException { + if (entry.endsWith(".jar")) { + return withCopyClasspathJarToContainer(container, new File(entry)); + } + return withCopyClasspathFolderToContainer(container, new File(entry)); + } + + private String withCopyClasspathJarToContainer(JavaContainer container, File jarFile) { + container.withCopyFileToContainer(MountableFile.forHostPath(jarFile.toPath()), "/app/" + jarFile.getName()); + return "/app/" + jarFile.getName(); + } + + private String withCopyClasspathFolderToContainer(JavaContainer container, File classesFolder) throws IOException { + String name = classesFolder.getName(); + Path source = classesFolder.toPath(); + try (Stream stream = Files.walk(source)) { + stream.forEach((child) -> { + try { + Path relative = source.relativize(child); + if (!child.toFile().isDirectory()) { + String containerPath = "/app/" + name + "/" + relative; + container.withCopyFileToContainer(MountableFile.forHostPath(child), containerPath); + } + } + catch (Exception ex) { + throw new IllegalStateException(ex); + } + }); + } + return "/app/" + name; + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java new file mode 100644 index 00000000..0784bbd6 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter; + +import org.testcontainers.containers.GenericContainer; + +/** + * {@link GenericContainer} for Java. + * + * @author Phillip Webb + */ +public class JavaContainer extends GenericContainer { + + public JavaContainer(String version) { + super("bellsoft/liberica-openjdk-debian:" + version); + } + +} From 5f33b3b450e56d3a75a990a46821c36dea82c2d2 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 29 Sep 2021 17:51:52 +0100 Subject: [PATCH 035/238] Log in to DockerHub to increase rate limit Closes gh-295 --- ci/pipeline.yml | 7 +++++++ ci/scripts/common.sh | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 71cb383b..2e77cbe7 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -21,6 +21,9 @@ anchors: ARTIFACTORY_SERVER: ((artifactory-server)) ARTIFACTORY_USERNAME: ((artifactory-username)) ARTIFACTORY_PASSWORD: ((artifactory-password)) + docker-hub-task-params: &docker-hub-task-params + DOCKER_HUB_USERNAME: ((docker-hub-username)) + DOCKER_HUB_PASSWORD: ((docker-hub-password)) resource_types: - name: artifactory-resource type: registry-image @@ -114,6 +117,7 @@ jobs: timeout: ((task-timeout)) file: git-repo/ci/tasks/build-project.yml params: + <<: *docker-hub-task-params BRANCH: ((branch)) - put: artifactory-repo params: @@ -158,6 +162,7 @@ jobs: image: ci-image file: git-repo/ci/tasks/stage.yml params: + <<: *docker-hub-task-params RELEASE_TYPE: M - put: artifactory-repo params: @@ -176,6 +181,7 @@ jobs: image: ci-image file: git-repo/ci/tasks/stage.yml params: + <<: *docker-hub-task-params RELEASE_TYPE: RC - put: artifactory-repo params: @@ -194,6 +200,7 @@ jobs: image: ci-image file: git-repo/ci/tasks/stage.yml params: + <<: *docker-hub-task-params RELEASE_TYPE: RELEASE - put: artifactory-repo params: diff --git a/ci/scripts/common.sh b/ci/scripts/common.sh index 0198d39a..8eea3f79 100644 --- a/ci/scripts/common.sh +++ b/ci/scripts/common.sh @@ -1,4 +1,9 @@ source /opt/concourse-java.sh setup_symlinks + +if [[ -n $DOCKER_HUB_USERNAME ]]; then + docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD +fi + cleanup_maven_repo "io.spring.javaformat" From c18dc7d87e05ed777b72e3be019429d01501dde1 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 29 Sep 2021 18:40:41 +0100 Subject: [PATCH 036/238] Try to fix javadoc generation on CI See gh-288 --- .../io.spring.javaformat.eclipse/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 0d6daac9..9fc3fde6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -52,6 +52,11 @@ spring-javaformat-formatter ${project.version} + + io.spring.javaformat + spring-javaformat-formatter-eclipse + ${project.version} + From 98434a8881243906e342c333a6cb99bd26be8417 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 29 Sep 2021 11:02:21 +0100 Subject: [PATCH 037/238] Upgrade to IntelliJ IDEA 2021.2 Closes gh-294 --- .../formatter/intellij/SpringFormat.java | 4 +- .../codestyle/DelegatingCodeStyleManager.java | 9 +-- .../codestyle/SpringCodeStyleManager.java | 11 +-- .../intellij/codestyle/SpringReformatter.java | 4 +- .../codestyle/monitor/GradleMonitor.java | 7 +- .../DelegatingCodeStyleManagerTests.java | 6 +- .../SpringCodeStyleManagerTests.java | 8 ++- .../pom.xml | 68 ++----------------- 8 files changed, 35 insertions(+), 82 deletions(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java index 876ee9eb..79a76382 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -65,6 +65,7 @@ public class SpringFormat { private PropertiesComponent properties; protected SpringFormat(Project project) { + logger.info("Initializing Spring Format for project " + project.getName()); this.project = project; this.statusIndicator = new StatusIndicator(project); this.properties = PropertiesComponent.getInstance(project); @@ -84,6 +85,7 @@ private void dispose() { } private void update(State state) { + logger.info("Updating state of " + this.project.getName() + " to " + state); this.lock.lock(); try { CodeStyleManager manager = CodeStyleManager.getInstance(this.project); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java index e448617e..c133d872 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -105,15 +105,10 @@ public void reformatText(PsiFile file, int startOffset, int endOffset) throws In } @Override - public void reformatText(PsiFile file, Collection ranges) throws IncorrectOperationException { + public void reformatText(PsiFile file, Collection ranges) throws IncorrectOperationException { this.delegate.reformatText(file, ranges); } - @Override - public void reformatTextWithContext(PsiFile file, Collection ranges) throws IncorrectOperationException { - this.delegate.reformatTextWithContext(file, ranges); - } - @Override public void reformatTextWithContext(PsiFile file, ChangedRangesInfo info) throws IncorrectOperationException { this.delegate.reformatTextWithContext(file, info); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java index 505687ac..56b94ab5 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiFile; +import com.intellij.psi.codeStyle.ChangedRangesInfo; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.util.IncorrectOperationException; @@ -51,16 +52,16 @@ public void reformatText(PsiFile file, int startOffset, int endOffset) throws In } @Override - public void reformatText(PsiFile file, Collection ranges) throws IncorrectOperationException { + public void reformatText(PsiFile file, Collection ranges) throws IncorrectOperationException { reformat(file, () -> ranges, () -> super.reformatText(file, ranges)); } @Override - public void reformatTextWithContext(PsiFile file, Collection ranges) throws IncorrectOperationException { - reformat(file, () -> ranges, () -> super.reformatTextWithContext(file, ranges)); + public void reformatTextWithContext(PsiFile file, ChangedRangesInfo info) throws IncorrectOperationException { + reformat(file, () -> info.allChangedRanges, () -> super.reformatTextWithContext(file, info)); } - private void reformat(PsiFile file, Supplier> ranges, Runnable delegate) { + private void reformat(PsiFile file, Supplier> ranges, Runnable delegate) { if (this.springReformatter.canReformat(file)) { this.springReformatter.reformat(file, ranges.get()); } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java index e9bf5965..be1ceed0 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java @@ -75,7 +75,7 @@ public boolean canReformat(PsiFile file) { return JAVA_FILE_TYPE.equals(file.getFileType()); } - public void reformat(PsiFile file, Collection ranges) { + public void reformat(PsiFile file, Collection ranges) { this.application.get().assertWriteAccessAllowed(); this.documentManager.get().commitAllDocuments(); if (!file.isWritable()) { @@ -101,7 +101,7 @@ private void throwNotWritableException(PsiElement element) throws IncorrectOpera CoreBundle.message("cannot.modify.a.read.only.file", virtualFile.getPresentableUrl())); } - private void reformat(PsiFile file, Collection ranges, Document document) { + private void reformat(PsiFile file, Collection ranges, Document document) { if (document != null && file.getVirtualFile() != null) { JavaFormatConfig javaFormatConfig = JavaFormatConfig.findFrom(file.getVirtualFile().toNioPath()); Formatter formatter = new Formatter(javaFormatConfig); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java index 6620dd01..f2bbc62e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ import java.util.Collection; import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.model.DataNode; import com.intellij.openapi.externalSystem.model.ExternalProjectInfo; import com.intellij.openapi.externalSystem.model.task.TaskData; @@ -38,6 +39,8 @@ */ public class GradleMonitor extends Monitor { + private static final Logger logger = Logger.getInstance(GradleMonitor.class); + private static final String FORMAT_TASK = "io.spring.javaformat.gradle.FormatTask"; public GradleMonitor(Project project, Trigger trigger) { @@ -47,6 +50,7 @@ public GradleMonitor(Project project, Trigger trigger) { } private void check() { + logger.info("Checking " + getProject().getName() + " for use of Spring Java Format"); ProjectDataManager projectDataManager = ServiceManager.getService(ProjectDataManager.class); boolean hasFormatPlugin = hasFormatPlugin( projectDataManager.getExternalProjectsData(getProject(), GradleConstants.SYSTEM_ID)); @@ -56,6 +60,7 @@ private void check() { private boolean hasFormatPlugin(Collection projectInfos) { for (ExternalProjectInfo projectInfo : projectInfos) { if (hasFormatPlugin(projectInfo.getExternalProjectStructure())) { + logger.info(projectInfo + " uses Spring Java Format"); return true; } } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java index 2f543745..b8ab5809 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java @@ -31,10 +31,12 @@ import com.intellij.util.ThrowableRunnable; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -133,7 +135,9 @@ public void reformatTextWithRangeCollectionShouldCallDelegate() throws Exception @Test public void reformatTextWithContextShouldCallDelegate() throws Exception { this.delegating.reformatTextWithContext(this.file, this.ranges); - verify(this.delegate).reformatTextWithContext(this.file, this.ranges); + ArgumentCaptor changedRanges = ArgumentCaptor.forClass(ChangedRangesInfo.class); + verify(this.delegate).reformatTextWithContext(eq(this.file), changedRanges.capture()); + assertThat(changedRanges.getValue().allChangedRanges).containsExactlyElementsOf(this.ranges); } @Test diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java index f2f67554..60eccd22 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java @@ -23,13 +23,17 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiFile; +import com.intellij.psi.codeStyle.ChangedRangesInfo; import com.intellij.psi.codeStyle.CodeStyleManager; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; @@ -96,7 +100,9 @@ public void reformatTextWithContextWhenCantFormatShouldCallDelegate() { given(this.springReformatter.canReformat(any())).willReturn(false); Collection ranges = Arrays.asList(new TextRange(10, 20)); this.styleManager.reformatTextWithContext(this.file, ranges); - verify(this.delegate).reformatTextWithContext(this.file, ranges); + ArgumentCaptor changedRanges = ArgumentCaptor.forClass(ChangedRangesInfo.class); + verify(this.delegate).reformatTextWithContext(eq(this.file), changedRanges.capture()); + assertThat(changedRanges.getValue().allChangedRanges).containsExactlyElementsOf(ranges); } @Test diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 06328c29..b8360c60 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -13,9 +13,9 @@ Spring JavaFormat IntelliJ IDEA Runtime ${basedir}/../.. - https://download.jetbrains.com/idea/ideaIC-2020.3.tar.gz - https://github.com/JetBrains/intellij-community/archive/idea/203.5981.155.zip - idea-IC-203.5981.155 + https://download.jetbrains.com/idea/ideaIC-2021.2.tar.gz + https://github.com/JetBrains/intellij-community/archive/idea/212.4746.92.zip + idea-IC-212.4746.92 @@ -112,15 +112,6 @@ - - - @@ -193,57 +184,6 @@ true - - install-intellij-platform-util-ui - install - false - - install-file - - - ${project.build.directory}/intellij/platform-util-ui.jar - ${project.build.directory}/intellij-source/platform-util-ui-sources.zip - io.spring.javaformat.intellij.idea - platform-util-ui - ${project.version} - jar - true - - - - install-intellij-extensions - install - false - - install-file - - - ${project.build.directory}/intellij/extensions.jar - ${project.build.directory}/intellij-source/extensions-sources.zip - io.spring.javaformat.intellij.idea - extensions - ${project.version} - jar - true - - - - install-intellij-platform-service-container - install - false - - install-file - - - ${project.build.directory}/intellij/platform-serviceContainer.jar - ${project.build.directory}/intellij-source/platform-service-container-sources.zip - io.spring.javaformat.intellij.idea - platform-service-container - ${project.version} - jar - true - - install-intellij-idea install @@ -301,7 +241,7 @@ install-file - ${project.build.directory}/intellij/gradle-common.jar + ${project.build.directory}/intellij/gradle.jar ${project.build.directory}/intellij-source/gradle-sources.zip io.spring.javaformat.intellij.idea gradle From b89c40257cc0edae5ef162f693a14ea448915e7c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 29 Sep 2021 13:59:06 -0700 Subject: [PATCH 038/238] Fix clashing module names Closes gh-296 --- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index f5039c04..001d82b2 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -10,7 +10,7 @@ io.spring.javaformat.eclipse.feature eclipse-feature - Spring JavaFormat Eclipse Feature + Spring JavaFormat Eclipse Plugin Feature ${basedir}/../.. 11 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 79852ef1..2d8016a0 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -10,7 +10,7 @@ io.spring.javaformat.eclipse.site eclipse-repository - Spring JavaFormat Eclipse Site + Spring JavaFormat Eclipse Plugin Site ${basedir}/../.. 11 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 1590027d..191c6cfd 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Fragment-Host: io.spring.javaformat.eclipse Bundle-ManifestVersion: 2 -Bundle-Name: Spring Java Format Tests +Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests Bundle-Version: 0.0.29.qualifier diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 1e3703f9..0ece7b2d 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -1,6 +1,6 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 -Bundle-Name: Spring Java Format +Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse Bundle-Version: 0.0.29.qualifier diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 9fc3fde6..a7389191 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -10,7 +10,7 @@ io.spring.javaformat.eclipse eclipse-plugin - Spring JavaFormat Eclipse + Spring JavaFormat Eclipse Plugin ${basedir}/../.. From 69aa7d1c78915d48b67bb19001a0e9cd5d27ddec Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 29 Sep 2021 18:18:59 -0700 Subject: [PATCH 039/238] Formatting --- .../intellij/codestyle/SpringCodeStyleManagerTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java index 60eccd22..cfe25a39 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java @@ -100,7 +100,7 @@ public void reformatTextWithContextWhenCantFormatShouldCallDelegate() { given(this.springReformatter.canReformat(any())).willReturn(false); Collection ranges = Arrays.asList(new TextRange(10, 20)); this.styleManager.reformatTextWithContext(this.file, ranges); - ArgumentCaptor changedRanges = ArgumentCaptor.forClass(ChangedRangesInfo.class); + ArgumentCaptor changedRanges = ArgumentCaptor.forClass(ChangedRangesInfo.class); verify(this.delegate).reformatTextWithContext(eq(this.file), changedRanges.capture()); assertThat(changedRanges.getValue().allChangedRanges).containsExactlyElementsOf(ranges); } From ddbaea97df81581953d2becc9900aa3e0c5fb338 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 29 Sep 2021 18:19:02 -0700 Subject: [PATCH 040/238] Don't set jdt compiler/compliance versions in Eclipse plugin Remove jdt compiler/compliance version preference and update `ProjectSettingsFiles` to keep existing values. Closes gh-278 --- .../ProjectPropertiesTests.java | 1 - .../ProjectSettingsFilesTests.java | 48 +++++++++++++++-- .../projectsettings/ProjectSettingsFiles.java | 53 ++++++++++++++++++- .../org.eclipse.jdt.core.prefs | 3 -- 4 files changed, 96 insertions(+), 9 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java index 68bc7e1f..0c7ed16b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java @@ -85,7 +85,6 @@ public void getModifiedContentReplacesCopyrightYear() throws IOException { ProjectSettingsFile prefs = getFile(files, "org.eclipse.jdt.ui.prefs"); String content = loadContent(properties.getModifiedContent(prefs).getContent(JavaFormatConfig.DEFAULT)); assertThat(content).contains("Copyright " + year + " the original author or authors"); - } private ProjectSettingsFile getFile(ProjectSettingsFiles files, String name) { diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java index c73112e3..cdc6b297 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java @@ -16,8 +16,13 @@ package io.spring.javaformat.eclipse.projectsettings; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.IOException; import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.util.Collections; import org.eclipse.core.resources.IFile; @@ -28,8 +33,11 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.will; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -51,18 +59,50 @@ public void iteratorIteratesFiles() throws Exception { } @Test - public void applyToProjectCopiesToDotSettings() throws Exception { - File prefsFile = new File(this.temp, "foo.prefs"); - prefsFile.createNewFile(); - ProjectSettingsFile file = ProjectSettingsFile.fromFile(prefsFile); + public void applyToProjectWithoutFileCopiesToDotSettings() throws Exception { + ProjectSettingsFile file = createPrefsFile(); + ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); + IProject project = mock(IProject.class); + IProgressMonitor monitor = mock(IProgressMonitor.class); + IFile projectFile = mock(IFile.class); + given(project.getFile(".settings/foo.prefs")).willReturn(projectFile); + given(projectFile.exists()).willReturn(false); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + will((invocation) -> { + invocation.getArgument(0, InputStream.class).transferTo(out); + return null; + }).given(projectFile).create(any(), anyBoolean(), any()); + files.applyToProject(project, monitor); + verify(projectFile).create(any(), eq(true), any()); + assertThat(out.toString(StandardCharsets.UTF_8)).isEqualTo("y=z\n"); + } + + @Test + public void applyToProjectWithFileMergesToDotSettings() throws Exception { + ProjectSettingsFile file = createPrefsFile(); ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); IProject project = mock(IProject.class); IProgressMonitor monitor = mock(IProgressMonitor.class); IFile projectFile = mock(IFile.class); given(project.getFile(".settings/foo.prefs")).willReturn(projectFile); given(projectFile.exists()).willReturn(true); + given(projectFile.getContents(true)) + .willReturn(new ByteArrayInputStream("a=b\n".getBytes(StandardCharsets.UTF_8))); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + will((invocation) -> { + invocation.getArgument(0, InputStream.class).transferTo(out); + return null; + }).given(projectFile).setContents((InputStream) any(), anyInt(), any()); files.applyToProject(project, monitor); verify(projectFile).setContents((InputStream) any(), eq(1), eq(monitor)); + assertThat(out.toString(StandardCharsets.UTF_8)).isEqualTo("a=b\ny=z\n"); + } + + private ProjectSettingsFile createPrefsFile() throws IOException { + File prefsFile = new File(this.temp, "foo.prefs"); + Files.copy(new ByteArrayInputStream("y=z\n".getBytes(StandardCharsets.UTF_8)), prefsFile.toPath()); + ProjectSettingsFile file = ProjectSettingsFile.fromFile(prefsFile); + return file; } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java index 8ece5dfb..c7480cf6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java @@ -17,13 +17,22 @@ package io.spring.javaformat.eclipse.projectsettings; import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; +import java.util.Comparator; import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; +import java.util.TreeSet; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -77,12 +86,30 @@ public void applyToProject(IProject project, IProgressMonitor monitor) throws IO destination.create(new BufferedInputStream(content), true, monitor); } else { - destination.setContents(new BufferedInputStream(content), IResource.FORCE, monitor); + Properties properties = new OrderedProperties(); + try (InputStream existingContent = destination.getContents(true)) { + if (existingContent != null) { + properties.load(existingContent); + } + } + properties.load(content); + destination.setContents( + new ByteArrayInputStream(stripTimestamp(properties).getBytes(StandardCharsets.UTF_8)), + IResource.FORCE, monitor); } } } } + private String stripTimestamp(Properties properties) throws IOException { + try (ByteArrayOutputStream output = new ByteArrayOutputStream()) { + properties.store(output, null); + String string = output.toString(StandardCharsets.UTF_8); + String separator = System.getProperty("line.separator"); + return string.substring(string.indexOf(separator) + separator.length()); + } + } + private JavaFormatConfig getJavaFormatConfig(IProject project) { try { IPath location = project.getLocation(); @@ -94,4 +121,28 @@ private JavaFormatConfig getJavaFormatConfig(IProject project) { } } + static class OrderedProperties extends Properties { + + private static final long serialVersionUID = 1L; + + @Override + public Set> entrySet() { + Set> set = new TreeSet>(new MapEntryKeyComparator()); + set.addAll(super.entrySet()); + return set; + }; + + } + + private static class MapEntryKeyComparator implements Comparator> { + + @Override + public int compare(Entry o1, Entry o2) { + Object k1 = o1.getKey(); + Object k2 = o2.getKey(); + return String.valueOf(k1).compareTo(String.valueOf(k2)); + } + + } + } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 2d9540f2..49efadcb 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -11,9 +11,7 @@ org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -104,7 +102,6 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.processAnnotations=disabled -org.eclipse.jdt.core.compiler.source=1.8 org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 From 99cec0ccc0b39a064773474897529ce34effa26f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 29 Sep 2021 18:32:00 -0700 Subject: [PATCH 041/238] Rename and relocate Gradle task classes Use idiomatic naming for the 'format' and 'checkFormat' tasks. Closes gh-271 --- .../gradle/SpringJavaFormatPlugin.java | 22 +++++++++++-------- .../CheckFormat.java} | 6 ++--- .../{FormatTask.java => tasks/Format.java} | 6 ++--- .../gradle/{ => tasks}/FormatterTask.java | 7 ++++-- .../javaformat/gradle/CheckTaskTests.java | 3 ++- .../javaformat/gradle/FormatTaskTests.java | 3 ++- 6 files changed, 28 insertions(+), 19 deletions(-) rename spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/{CheckTask.java => tasks/CheckFormat.java} (94%) rename spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/{FormatTask.java => tasks/Format.java} (90%) rename spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/{ => tasks}/FormatterTask.java (93%) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index 4bf4c437..2b382728 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,10 @@ import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.SourceSet; +import io.spring.javaformat.gradle.tasks.CheckFormat; +import io.spring.javaformat.gradle.tasks.Format; +import io.spring.javaformat.gradle.tasks.FormatterTask; + /** * Spring Format Gradle Plugin. * @@ -42,10 +46,10 @@ public void apply(Project project) { private void addSourceTasks() { this.project.getPlugins().withType(JavaBasePlugin.class, (plugin) -> { - Task formatAll = this.project.task(FormatTask.NAME); - formatAll.setDescription(FormatTask.DESCRIPTION); - Task checkAll = this.project.task(CheckTask.NAME); - checkAll.setDescription(CheckTask.DESCRIPTION); + Task formatAll = this.project.task(Format.NAME); + formatAll.setDescription(Format.DESCRIPTION); + Task checkAll = this.project.task(CheckFormat.NAME); + checkAll.setDescription(CheckFormat.DESCRIPTION); this.project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkAll); this.project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets() .all((sourceSet) -> addSourceTasks(sourceSet, checkAll, formatAll)); @@ -53,17 +57,17 @@ private void addSourceTasks() { } private void addSourceTasks(SourceSet sourceSet, Task checkAll, Task formatAll) { - CheckTask checkTask = addSourceTask(sourceSet, CheckTask.class, CheckTask.NAME, CheckTask.DESCRIPTION); + CheckFormat checkTask = addFormatterTask(sourceSet, CheckFormat.class, CheckFormat.NAME, + CheckFormat.DESCRIPTION); checkTask.setReportLocation( new File(this.project.getBuildDir(), "reports/format/" + sourceSet.getName() + "/check-format.txt")); checkAll.dependsOn(checkTask); - FormatTask formatSourceSet = addSourceTask(sourceSet, FormatTask.class, FormatTask.NAME, - FormatTask.DESCRIPTION); + Format formatSourceSet = addFormatterTask(sourceSet, Format.class, Format.NAME, Format.DESCRIPTION); formatSourceSet.conventionMapping("encoding", () -> "UTF-8"); formatAll.dependsOn(formatSourceSet); } - private T addSourceTask(SourceSet sourceSet, Class taskType, String name, + private T addFormatterTask(SourceSet sourceSet, Class taskType, String name, String desc) { String taskName = sourceSet.getTaskName(name, null); T task = this.project.getTasks().create(taskName, taskType); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/CheckTask.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java similarity index 94% rename from spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/CheckTask.java rename to spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index d5a645fc..42bb7057 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/CheckTask.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.javaformat.gradle; +package io.spring.javaformat.gradle.tasks; import java.io.File; import java.io.IOException; @@ -40,7 +40,7 @@ * @author Phillip Webb */ @CacheableTask -public class CheckTask extends FormatterTask { +public class CheckFormat extends FormatterTask { /** * The name of the task. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatTask.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java similarity index 90% rename from spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatTask.java rename to spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java index 9e529e69..591377c5 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatTask.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.javaformat.gradle; +package io.spring.javaformat.gradle.tasks; import java.io.IOException; @@ -29,7 +29,7 @@ * * @author Phillip Webb */ -public class FormatTask extends FormatterTask { +public class Format extends FormatterTask { /** * The name of the task. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatterTask.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java similarity index 93% rename from spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatterTask.java rename to spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java index a4a1bcf5..64486ee2 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/FormatterTask.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.javaformat.gradle; +package io.spring.javaformat.gradle.tasks; import java.nio.charset.Charset; import java.util.stream.Stream; @@ -32,10 +32,13 @@ * * @author Phillip Webb */ -abstract class FormatterTask extends SourceTask { +public abstract class FormatterTask extends SourceTask { private String encoding; + FormatterTask() { + } + /** * Get the file encoding in use. * @return the encoding the file encoding diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index 3fb167fb..f8938dca 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -31,13 +31,14 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; +import io.spring.javaformat.gradle.tasks.CheckFormat; import io.spring.javaformat.gradle.testkit.GradleBuild; import io.spring.javaformat.gradle.testkit.GradleBuildExtension; import static org.assertj.core.api.Assertions.assertThat; /** - * Tests for {@link CheckTask}. + * Tests for {@link CheckFormat}. * * @author Phillip Webb */ diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index 82c1ad7a..d3271c9f 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -25,13 +25,14 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import io.spring.javaformat.gradle.tasks.Format; import io.spring.javaformat.gradle.testkit.GradleBuild; import io.spring.javaformat.gradle.testkit.GradleBuildExtension; import static org.assertj.core.api.Assertions.assertThat; /** - * Tests for {@link FormatTask}. + * Tests for {@link Format}. * * @author Phillip Webb */ From ef1b91c6f84c55af38812dabf3fb391d46f2e929 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 29 Sep 2021 18:33:31 -0700 Subject: [PATCH 042/238] Update copyright year of changed files --- .../javaformat/checkstyle/check/SpringImportOrderCheck.java | 2 +- .../src/test/resources/source/ImportOrderValid.java | 2 +- .../test/java/io/spring/javaformat/formatter/FormatterApp.java | 2 +- .../spring/javaformat/formatter/FormatterIntegrationTests.java | 2 +- .../test/java/io/spring/javaformat/formatter/JavaContainer.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java index d8ccae3b..bf75dcc4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java index 14711cd6..3aecd999 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java index 9d42c932..6de19753 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index a570261d..0a405b67 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java index 0784bbd6..9632f95e 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 923d93182ecf9e0ce4848c88f5cf4741528dccb3 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 30 Sep 2021 08:30:54 +0100 Subject: [PATCH 043/238] Align IDEA plugin's Gradle detection with renamed tasks See gh-271 --- .../formatter/intellij/codestyle/monitor/GradleMonitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java index f2bbc62e..a90c9ce6 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java @@ -41,7 +41,7 @@ public class GradleMonitor extends Monitor { private static final Logger logger = Logger.getInstance(GradleMonitor.class); - private static final String FORMAT_TASK = "io.spring.javaformat.gradle.FormatTask"; + private static final String FORMAT_TASK = "io.spring.javaformat.gradle.tasks.Format"; public GradleMonitor(Project project, Trigger trigger) { super(project, trigger); From c4ff8319eeb19cc44b650d675ce23a4c37b4c4df Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 30 Sep 2021 09:40:09 +0100 Subject: [PATCH 044/238] Fix IDEA plugin's build Remove dependencies on modules that no longer exist. Add new dependency for annotations jar that provides ApiStatus class. Closes gh-294 --- .../pom.xml | 14 +------------- .../pom.xml | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index e4ce8d3b..0a77630a 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -42,7 +42,7 @@ io.spring.javaformat.intellij.idea - extensions + annotations ${project.version} provided @@ -58,18 +58,6 @@ ${project.version} provided - - io.spring.javaformat.intellij.idea - platform-util-ui - ${project.version} - provided - - - io.spring.javaformat.intellij.idea - platform-service-container - ${project.version} - provided - io.spring.javaformat.intellij.idea util diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index b8360c60..fc6738c2 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -133,6 +133,22 @@ org.apache.maven.plugins maven-install-plugin + + install-intellij-annotations + install + false + + install-file + + + ${project.build.directory}/intellij/annotations.jar + io.spring.javaformat.intellij.idea + annotations + ${project.version} + jar + true + + install-intellij-platform-api install From f58bc482e3ca03c139b77e3a391e94337bc8654e Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 5 Oct 2021 11:33:40 +0100 Subject: [PATCH 045/238] Add Slack notifications to CI Closes gh-297 --- ci/pipeline.yml | 52 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 2e77cbe7..86f2cb13 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -24,6 +24,18 @@ anchors: docker-hub-task-params: &docker-hub-task-params DOCKER_HUB_USERNAME: ((docker-hub-username)) DOCKER_HUB_PASSWORD: ((docker-hub-password)) + slack-fail-params: &slack-fail-params + text: > + :concourse-failed: + silent: true + icon_emoji: ":concourse:" + username: concourse-ci + slack-success-params: &slack-success-params + text: > + :concourse-succeeded: + silent: true + icon_emoji: ":concourse:" + username: concourse-ci resource_types: - name: artifactory-resource type: registry-image @@ -34,6 +46,11 @@ resource_types: type: registry-image source: repository: teliaoss/github-pr-resource +- name: slack-notification + type: registry-image + source: + repository: cfcommunity/slack-notification-resource + tag: latest resources: - name: git-repo type: git @@ -88,6 +105,11 @@ resources: username: ((artifactory-username)) password: ((artifactory-password)) build_name: ((build-name)) +- name: slack-alert + type: slack-notification + icon: slack + source: + url: ((slack-webhook-url)) jobs: - name: build-ci-images plan: @@ -111,19 +133,33 @@ jobs: - get: ci-image - get: git-repo trigger: true - - task: build-project - image: ci-image - privileged: true - timeout: ((task-timeout)) - file: git-repo/ci/tasks/build-project.yml - params: - <<: *docker-hub-task-params - BRANCH: ((branch)) + - do: + - task: build-project + image: ci-image + privileged: true + timeout: ((task-timeout)) + file: git-repo/ci/tasks/build-project.yml + params: + <<: *docker-hub-task-params + BRANCH: ((branch)) + on_failure: + do: + - put: slack-alert + params: + <<: *slack-fail-params - put: artifactory-repo params: <<: *artifactory-repo-put-params get_params: threads: 8 + on_failure: + do: + - put: slack-alert + params: + <<: *slack-fail-params + - put: slack-alert + params: + <<: *slack-success-params - name: build-pull-requests serial: true public: true From bdd170a40faba5a4214af9d5ca94861291d3e010 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 5 Oct 2021 13:47:43 +0100 Subject: [PATCH 046/238] Use a token for GitHub authentication --- ci/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 86f2cb13..b4334fd4 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -58,7 +58,7 @@ resources: source: uri: https://github.com/((github-owner))/((github-repository)).git username: ((github-username)) - password: ((github-password)) + password: ((github-ci-release-token)) branch: ((branch)) - name: git-pull-request type: pull-request From 3afac8361d90d916a0ed5fec4ad0a3ce66eb2dcf Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 5 Oct 2021 14:27:55 +0100 Subject: [PATCH 047/238] Use renamed Spring Builds account to create tag when staging --- ci/scripts/stage.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 56c29979..21fc79d5 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -30,8 +30,8 @@ echo "Staging ${stageVersion} (next version will be ${nextVersion})" run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -git config user.name "Spring Buildmaster" > /dev/null -git config user.email "buildmaster@springframework.org" > /dev/null +git config user.name "Spring Builds" > /dev/null +git config user.email "spring-builds@users.noreply.github.com" > /dev/null git add pom.xml > /dev/null git commit -m"Release v${stageVersion}" > /dev/null git tag -a "v${stageVersion}" -m"Release v${stageVersion}" > /dev/null From 1460e05ece8b5fb3099fbfafbc6e57044e60d319 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Tue, 5 Oct 2021 13:45:27 +0000 Subject: [PATCH 048/238] Next development version (v0.0.30-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml | 4 ++-- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 31 files changed, 34 insertions(+), 34 deletions(-) diff --git a/README.adoc b/README.adoc index 0f9d65de..4caf5166 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.28 +:release-version: 0.0.29 :checkstyle-version: 8.45.1 == Spring Java Format diff --git a/pom.xml b/pom.xml index 5e1f1abb..49dcb734 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 29f20872..01d1e583 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.29-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.30-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.29-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.30-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index aa2d4e3d..71515b8d 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 86ed24b8..b0609664 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.29.qualifier" + version="0.0.30.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 001d82b2..05c9cf96 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index d93e1dd8..636fa69a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 44acae69..f4fc36c7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 2d8016a0..1833b3c1 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 191c6cfd..526b45e2 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.29.qualifier +Bundle-Version: 0.0.30.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit, org.junit.jupiter.api diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index f84b974e..04fa31e5 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 0ece7b2d..fe56d4d5 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.29.qualifier +Bundle-Version: 0.0.30.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index a7389191..cd7bbff7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 5e5432b2..7a44c53c 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 0c1072a1..c9e767f8 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index f1ed0bfd..0248dbf8 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 63e9898f..04d4b323 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 0a77630a..96296809 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index fc6738c2..ef59e6e4 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index f5913ecc..c0489d44 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 090c0b7b..8c8abe98 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index ef4fc06b..ba3beae4 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index d1f2ef3d..39ab2b35 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index ca7d7a65..6a2f9144 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index c24fd3b4..0e297c74 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF index cdeb7cc4..fc7d7bc3 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime Bundle-SymbolicName: spring-javaformat-formatter-eclipse-runtime -Bundle-Version: 0.0.29.qualifier +Bundle-Version: 0.0.30.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 70f67cf9..fad60353 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-formatter-eclipse-runtime eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml index 410e0744..0101b9c3 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-formatter-eclipse Spring JavaFormat Eclipse @@ -17,7 +17,7 @@ io.spring.javaformat spring-javaformat-formatter-eclipse-runtime - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT true diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 05370141..faa66633 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index fd758fb5..344ec3e4 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index dd20cffe..ee0b91bb 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.29-SNAPSHOT + 0.0.30-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 4f53faf3c7847656d7f95c2039099eb42fe20498 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 5 Oct 2021 12:08:44 -0700 Subject: [PATCH 049/238] Polish --- .../javaformat/formatter/AbstractFormatterTests.java | 6 +++--- .../spring/javaformat/formatter/FileFormatterTests.java | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index 09a397a7..6f06893e 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -46,7 +46,7 @@ protected final String read(File file) throws Exception { } protected static Item[] items(String expectedOverride) { - Collection files = new ArrayList<>(); + Collection items = new ArrayList<>(); File sourceDir = new File("src/test/resources/source"); File expectedDir = new File("src/test/resources/expected"); File configDir = new File("src/test/resources/config"); @@ -57,9 +57,9 @@ protected static Item[] items(String expectedOverride) { expected = new File(expectedDir, source.getName()); } File config = new File(configDir, source.getName()); - files.add(new Item(source, expected, config)); + items.add(new Item(source, expected, config)); } - return files.toArray(new Item[0]); + return items.toArray(new Item[0]); } static class Item { diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java index 116e734b..dc49c4f6 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java @@ -36,10 +36,10 @@ public class FileFormatterTests extends AbstractFormatterTests { @ParameterizedTest @MethodSource("items") - public void formatFilesFromIteratorShouldFormatFile(Item files) throws Exception { - FileEdit edit = new FileFormatter(files.getConfig()) - .formatFiles(Arrays.asList(files.getSource()), StandardCharsets.UTF_8).findFirst().get(); - assertThat(edit.getFormattedContent()).isEqualTo(read(files.getExpected())); + public void formatFilesFromIteratorShouldFormatFile(Item item) throws Exception { + FileEdit edit = new FileFormatter(item.getConfig()) + .formatFiles(Arrays.asList(item.getSource()), StandardCharsets.UTF_8).findFirst().get(); + assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); } @ParameterizedTest From 6e8ef1b885f53937019cf0a1d9331d90a7f202df Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 4 Oct 2021 12:25:37 -0700 Subject: [PATCH 050/238] Upgrade to ASM7 Closes gh-299 --- pom.xml | 2 +- .../eclipse/rewrite/EclipseRewriter.java | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 49dcb734..a1fad503 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,7 @@ true 1.8.1 1.0b3 - 5.2 + 7.3.1 3.8.0 8.45.1 3.4 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index e1851616..6288616b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -100,7 +100,7 @@ public static void main(String[] args) throws Exception { private static class DefaultCodeFormatterManipulator extends ClassVisitor { DefaultCodeFormatterManipulator(ClassVisitor visitor) { - super(Opcodes.ASM5, visitor); + super(Opcodes.ASM7, visitor); } @Override @@ -129,7 +129,7 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si private static class DefaultCodeFormatterMethodManipulator extends MethodVisitor { DefaultCodeFormatterMethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM5, mv); + super(Opcodes.ASM7, mv); } @Override @@ -143,13 +143,13 @@ public void visitMethodInsn(int opcode, String owner, String name, String desc, } /** - * {@link ClassVisitor} to update the {@code NLS} class so it doesn't use a System - * property to disable warning messages. + * {@link ClassVisitor} to update the {@code NLS} class so it doesn't use a + * System property to disable warning messages. */ private static class NlsManipulator extends ClassVisitor { NlsManipulator(ClassVisitor visitor) { - super(Opcodes.ASM5, visitor); + super(Opcodes.ASM7, visitor); } @Override @@ -163,15 +163,15 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si } /** - * {@link MethodVisitor} to update the {@code NLS} class so it doesn't use a System - * property to disable warning messages. + * {@link MethodVisitor} to update the {@code NLS} class so it doesn't use a + * System property to disable warning messages. */ private static class NslMethodManipulator extends MethodVisitor { private final MethodVisitor methodVisitor; NslMethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM5, null); + super(Opcodes.ASM7, null); this.methodVisitor = mv; } From ee6e054a52f592e0174fb13a70f5e25785087ff3 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 4 Oct 2021 10:15:27 -0700 Subject: [PATCH 051/238] Upgrade to Eclipse 2021-09 and support Eclipse 2021-03 Restructure codebase to support Eclipse 2021-03 (compatible with Java 8) and Eclipse 2021-09 (requires Java 11) simultaneously. By default the Eclipse 2021-09 formatter is used. This commit changes the default Java baseline of the formatter to Java 11, however, Java 8 is still supported if a custom `.springjavaformatconfig` is defined with a `java-baseline` property of `8`. Closes gh-277 --- README.adoc | 13 + pom.xml | 15 +- .../ProjectSettingsFilesLocatorTests.java | 8 +- .../io.spring.javaformat.eclipse/plugin.xml | 24 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- .../SpringCodeFormatterJdk11Spaces.java | 36 ++ .../SpringCodeFormatterJdk11Tabs.java | 36 ++ ...ava => SpringCodeFormatterJdk8Spaces.java} | 8 +- ....java => SpringCodeFormatterJdk8Tabs.java} | 8 +- .../ProjectSettingsFilesLocator.java | 15 +- .../org.eclipse.jdt.core.prefs | 2 +- spring-javaformat-eclipse/pom.xml | 12 + .../gradle/testkit/GradleBuild.java | 5 +- spring-javaformat/pom.xml | 9 +- .../config/DefaultJavaFormatConfig.java | 10 +- .../javaformat/config/JavaBaseline.java} | 24 +- .../javaformat/config/JavaFormatConfig.java | 24 +- .../config/PropertiesJavaFormatConfig.java | 7 + .../META-INF/MANIFEST.MF | 12 + .../build.properties | 0 .../pom.xml | 197 ++++++++++ .../META-INF/MANIFEST.MF | 6 +- .../build.properties | 4 + .../pom.xml | 197 ++++++++++ .../pom.xml | 12 +- .../formatter/ExtendedCodeFormatter.java | 2 +- .../jdt/internal/formatter/Preparator.java | 2 +- .../pom.xml | 72 ++++ .../formatter/ExtendedCodeFormatter.java | 126 +++++++ .../jdt/internal/formatter/Preparator.java | 61 +++ .../eclipse/rewrite/EclipseRewriter.java | 93 ++++- .../pom.xml | 171 ++------- .../.factorypath | 50 +++ .../pom.xml | 31 ++ .../javaformat/formatter/FormatterApp.java | 7 +- .../spring-javaformat-formatter-tests/pom.xml | 64 ++++ .../formatter/AbstractFormatterTests.java | 20 +- .../javaformat/formatter/FileEditTests.java | 0 .../formatter/FileFormatterTests.java | 0 .../formatter/FormatterIntegrationTests.java | 35 +- .../javaformat/formatter/FormatterTests.java | 0 .../javaformat/formatter/JavaContainer.java | 0 .../javadoc-top-add.txt | 0 .../src/test/resources/config/spaces.txt | 0 .../expected/annotation-attributes.txt | 15 + .../expected/complex-annotation-gh-78.txt | 0 .../resources/expected/complex-annotation.txt | 0 .../src/test/resources/expected/complex.txt | 2 +- .../resources/expected/enum-constructor.txt | 0 .../resources/expected/javadoc-nested.txt | 0 .../test/resources/expected/javadoc-param.txt | 0 .../resources/expected/javadoc-top-add.txt | 0 .../resources/expected/javadoc-top-empty.txt | 0 .../test/resources/expected/javadoc-top.txt | 0 .../expected/linebreak-classbraces.txt | 0 .../linebreak-fields-comment-above.txt | 0 .../expected/linebreak-fields-comments.txt | 0 .../resources/expected/linebreak-fields.txt | 0 .../expected/linebreak-interface.txt | 0 .../resources/expected/linebreak-trailing.txt | 0 .../test/resources/expected/method-wrap.txt | 0 .../src/test/resources/expected/simple.txt | 0 .../src/test/resources/expected/spaces.txt | 0 .../resources/expected/static-initializer.txt | 0 .../src/test/resources/expected/typical.txt} | 0 .../source/annotation-attributes.txt | 9 + .../source/complex-annotation-gh-78.txt | 0 .../resources/source/complex-annotation.txt | 0 .../src/test/resources/source/complex.txt | 2 +- .../resources/source/enum-constructor.txt | 0 .../test/resources/source/javadoc-nested.txt | 0 .../test/resources/source/javadoc-param.txt | 0 .../test/resources/source/javadoc-top-add.txt | 0 .../resources/source/javadoc-top-empty.txt | 0 .../src/test/resources/source/javadoc-top.txt | 0 .../source/linebreak-classbraces.txt | 0 .../source/linebreak-fields-comment-above.txt | 0 .../source/linebreak-fields-comments.txt | 0 .../resources/source/linebreak-fields.txt | 0 .../resources/source/linebreak-interface.txt | 0 .../resources/source/linebreak-trailing.txt | 0 .../src/test/resources/source/method-wrap.txt | 0 .../src/test/resources/source/simple.txt | 0 .../src/test/resources/source/spaces.txt} | 2 +- .../resources/source/static-initializer.txt | 0 .../src/test/resources/source/typical.txt | 2 +- .../spring-javaformat-formatter/pom.xml | 33 +- .../javaformat/formatter/Formatter.java | 86 ++--- .../eclipse/EclipseCodeFormatter.java | 39 ++ .../javaformat/formatter/eclipse/Options.java | 71 ++++ .../eclipse/CodeLineBreakPreparator.java | 121 ++++++ .../eclipse/EclipseJdk11CodeFormatter.java | 53 +++ .../eclipse/JavadocLineBreakPreparator.java | 132 +++++++ .../eclipse}/CodeLineBreakPreparator.java | 28 +- .../eclipse/EclipseJdk8CodeFormatter.java | 53 +++ .../eclipse}/JavadocLineBreakPreparator.java | 28 +- .../formatter/eclipse/formatter.prefs | 354 ++++++++++++++++++ .../javaformat/formatter/formatter.prefs | 354 ------------------ 98 files changed, 2082 insertions(+), 722 deletions(-) create mode 100644 spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java create mode 100644 spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java rename spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/{SpringCodeFormatterSpaces.java => SpringCodeFormatterJdk8Spaces.java} (75%) rename spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/{SpringCodeFormatterTabs.java => SpringCodeFormatterJdk8Tabs.java} (75%) rename spring-javaformat/{spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/Preparators.java => spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java} (60%) create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF rename spring-javaformat/{spring-javaformat-formatter-eclipse-runtime => spring-javaformat-formatter-eclipse-jdk11}/build.properties (100%) create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml rename spring-javaformat/{spring-javaformat-formatter-eclipse-runtime => spring-javaformat-formatter-eclipse-jdk8}/META-INF/MANIFEST.MF (76%) create mode 100755 spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/build.properties create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml rename spring-javaformat/{spring-javaformat-formatter-eclipse => spring-javaformat-formatter-eclipse-jdt-jdk11}/pom.xml (84%) rename spring-javaformat/{spring-javaformat-formatter-eclipse => spring-javaformat-formatter-eclipse-jdt-jdk11}/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java (98%) rename spring-javaformat/{spring-javaformat-formatter-eclipse => spring-javaformat-formatter-eclipse-jdt-jdk11}/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java (96%) create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java create mode 100644 spring-javaformat/spring-javaformat-formatter-shader/.factorypath create mode 100644 spring-javaformat/spring-javaformat-formatter-test-support/pom.xml rename spring-javaformat/{spring-javaformat-formatter/src/test => spring-javaformat-formatter-test-support/src/main}/java/io/spring/javaformat/formatter/FormatterApp.java (80%) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/pom.xml rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java (77%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/java/io/spring/javaformat/formatter/FileEditTests.java (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java (74%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/java/io/spring/javaformat/formatter/FormatterTests.java (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/java/io/spring/javaformat/formatter/JavaContainer.java (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/FormatterTests-expected/javadoc-top-add.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/config/spaces.txt (100%) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/annotation-attributes.txt rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/complex-annotation-gh-78.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/complex-annotation.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/complex.txt (99%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/enum-constructor.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/javadoc-nested.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/javadoc-param.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/javadoc-top-add.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/javadoc-top-empty.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/javadoc-top.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/linebreak-classbraces.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/linebreak-fields-comment-above.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/linebreak-fields-comments.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/linebreak-fields.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/linebreak-interface.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/linebreak-trailing.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/method-wrap.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/simple.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/spaces.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/expected/static-initializer.txt (100%) rename spring-javaformat/{spring-javaformat-formatter/src/test/resources/source/spaces.txt => spring-javaformat-formatter-tests/src/test/resources/expected/typical.txt} (100%) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/annotation-attributes.txt rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/complex-annotation-gh-78.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/complex-annotation.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/complex.txt (99%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/enum-constructor.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/javadoc-nested.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/javadoc-param.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/javadoc-top-add.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/javadoc-top-empty.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/javadoc-top.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/linebreak-classbraces.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/linebreak-fields-comment-above.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/linebreak-fields-comments.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/linebreak-fields.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/linebreak-interface.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/linebreak-trailing.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/method-wrap.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/simple.txt (100%) rename spring-javaformat/{spring-javaformat-formatter/src/test/resources/expected/typical.txt => spring-javaformat-formatter-tests/src/test/resources/source/spaces.txt} (98%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/static-initializer.txt (100%) rename spring-javaformat/{spring-javaformat-formatter => spring-javaformat-formatter-tests}/src/test/resources/source/typical.txt (98%) create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java rename spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/{preparator => jdk8/eclipse}/CodeLineBreakPreparator.java (75%) create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java rename spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/{preparator => jdk8/eclipse}/JavadocLineBreakPreparator.java (78%) create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs delete mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/formatter.prefs diff --git a/README.adoc b/README.adoc index 4caf5166..b4838327 100644 --- a/README.adoc +++ b/README.adoc @@ -188,6 +188,19 @@ Your `checkstyle.xml` file should look then like this: +=== Java 8 Support +By default, the formatter requires Java 11. +If you are working on an older project, you can use a variation of the formatter based off Eclipse 2021-03 (the latest Eclipse JDT version built with Java 8). + +To use the Java 8 version, add a file called `.springjavaformatconfig` to the root of your project with the following content: + +[source,properties] +---- +java-baseline=8 +---- + + + === Eclipse The Eclipse plugin provides a custom formatter implementation and automatically applies project specific settings. The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script. diff --git a/pom.xml b/pom.xml index a1fad503..c6375050 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,8 @@ ${basedir} UTF-8 1.8 - https://download.eclipse.org/releases/2021-03/202103171000/ + https://download.eclipse.org/releases/2021-03/202103171000/ + https://download.eclipse.org/releases/2021-09/202109151000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 @@ -594,18 +595,6 @@ test - - - eclipse - p2 - ${eclipse.repository} - - - eclipse-checkstyle - p2 - ${eclipse.checkstyle.repository} - - spring-javaformat spring-javaformat-maven diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java index 9c537d79..ea0afe78 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java @@ -28,6 +28,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; import static org.assertj.core.api.Assertions.assertThat; @@ -82,7 +84,7 @@ public void jdtCorePrefsFormatterWhenDefaultShouldUseTabs() throws IOException { Properties properties = new Properties(); properties.load(content); assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) - .isEqualTo("io.spring.javaformat.eclipse.formatter"); + .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk11.tabs"); } } @@ -90,11 +92,11 @@ public void jdtCorePrefsFormatterWhenDefaultShouldUseTabs() throws IOException { public void jdtCorePrefsFormatterWhenSpacesShouldUseSpaces() throws IOException { ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); ProjectSettingsFile file = get(files, "org.eclipse.jdt.core.prefs"); - try (InputStream content = file.getContent(JavaFormatConfig.SPACES)) { + try (InputStream content = file.getContent(JavaFormatConfig.of(JavaBaseline.V8, IndentationStyle.SPACES))) { Properties properties = new Properties(); properties.load(content); assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) - .isEqualTo("io.spring.javaformat.eclipse.formatter.spaces"); + .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk8.spaces"); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml index b930b584..b6bdf963 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml @@ -3,18 +3,28 @@ + class="io.spring.javaformat.eclipse.formatter.SpringCodeFormatterJdk11Tabs" + id="io.spring.javaformat.eclipse.formatter.jdk11.tabs" + name="Spring (tabs)"> + class="io.spring.javaformat.eclipse.formatter.SpringCodeFormatterJdk11Spaces" + id="io.spring.javaformat.eclipse.formatter.jdk11.spaces" + name="Spring (spaces)"> + + + + - diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index cd7bbff7..cdfa2135 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -54,7 +54,7 @@ io.spring.javaformat - spring-javaformat-formatter-eclipse + spring-javaformat-formatter-eclipse-jdt-jdk8 ${project.version} diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java new file mode 100644 index 00000000..e6775b74 --- /dev/null +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java @@ -0,0 +1,36 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.eclipse.formatter; + +import org.eclipse.jdt.core.formatter.CodeFormatter; + +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; +import io.spring.javaformat.config.JavaFormatConfig; + +/** + * Eclipse {@link CodeFormatter} for Spring formatting with spaces. + * + * @author Phillip Webb + */ +public class SpringCodeFormatterJdk11Spaces extends SpringCodeFormatter { + + public SpringCodeFormatterJdk11Spaces() { + super(JavaFormatConfig.of(JavaBaseline.V11, IndentationStyle.SPACES)); + } + +} diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java new file mode 100644 index 00000000..80c85bc2 --- /dev/null +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java @@ -0,0 +1,36 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.eclipse.formatter; + +import org.eclipse.jdt.core.formatter.CodeFormatter; + +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; +import io.spring.javaformat.config.JavaFormatConfig; + +/** + * Eclipse {@link CodeFormatter} for Spring formatting with tabs. + * + * @author Phillip Webb + */ +public class SpringCodeFormatterJdk11Tabs extends SpringCodeFormatter { + + public SpringCodeFormatterJdk11Tabs() { + super(JavaFormatConfig.of(JavaBaseline.V11, IndentationStyle.SPACES)); + } + +} diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterSpaces.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java similarity index 75% rename from spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterSpaces.java rename to spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java index ad46f4d7..1b78c15a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterSpaces.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java @@ -18,6 +18,8 @@ import org.eclipse.jdt.core.formatter.CodeFormatter; +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; /** @@ -25,10 +27,10 @@ * * @author Phillip Webb */ -public class SpringCodeFormatterSpaces extends SpringCodeFormatter { +public class SpringCodeFormatterJdk8Spaces extends SpringCodeFormatter { - public SpringCodeFormatterSpaces() { - super(JavaFormatConfig.SPACES); + public SpringCodeFormatterJdk8Spaces() { + super(JavaFormatConfig.of(JavaBaseline.V8, IndentationStyle.SPACES)); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterTabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java similarity index 75% rename from spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterTabs.java rename to spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java index 091a910d..1807b86c 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterTabs.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java @@ -18,6 +18,8 @@ import org.eclipse.jdt.core.formatter.CodeFormatter; +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; /** @@ -25,10 +27,10 @@ * * @author Phillip Webb */ -public class SpringCodeFormatterTabs extends SpringCodeFormatter { +public class SpringCodeFormatterJdk8Tabs extends SpringCodeFormatter { - public SpringCodeFormatterTabs() { - super(JavaFormatConfig.DEFAULT); + public SpringCodeFormatterJdk8Tabs() { + super(JavaFormatConfig.of(JavaBaseline.V8, IndentationStyle.SPACES)); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java index 3d942316..792d207e 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java @@ -22,7 +22,6 @@ import java.util.LinkedHashMap; import java.util.Map; -import io.spring.javaformat.config.IndentationStyle; import io.spring.javaformat.config.JavaFormatConfig; /** @@ -71,13 +70,21 @@ private ProjectSettingsFile getDefaultSettingsFile(String file) { } private String updateFormatter(JavaFormatConfig javaFormatConfig, String content) { - if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { - return content.replace("org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter", - "org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.spaces"); + String formatterId = getFormatterId(javaFormatConfig); + if (formatterId != null) { + return content.replace( + "org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk11.tabs", + "org.eclipse.jdt.core.javaFormatter=" + formatterId); } return content; } + private String getFormatterId(JavaFormatConfig config) { + String jdk = config.getJavaBaseline().name().substring(1); + String indentation = config.getIndentationStyle().name().toLowerCase(); + return "io.spring.javaformat.eclipse.formatter.jdk" + jdk + "." + indentation; + } + private void add(ProjectProperties projectProperties, Map files, File folder) throws IOException { if (folder.exists() && folder.isDirectory()) { diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 49efadcb..1460faf1 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -406,4 +406,4 @@ org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true -org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter +org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk11.tabs diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 7a44c53c..d3159e35 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -15,6 +15,18 @@ ${basedir}/.. 11 + + + eclipse-jdk8 + p2 + ${eclipse.jdk8.repository} + + + eclipse-checkstyle + p2 + ${eclipse.checkstyle.repository} + + diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java index 11426e15..a045feb5 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java @@ -38,8 +38,6 @@ import org.gradle.util.GradleVersion; import org.xml.sax.InputSource; -import io.spring.javaformat.eclipse.jdt.core.formatter.CodeFormatter; -import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; import io.spring.javaformat.formatter.Formatter; import static org.assertj.core.api.Assertions.assertThat; @@ -125,8 +123,7 @@ public GradleRunner prepareRunner(String... arguments) throws IOException { private String getPluginClasspath() { return absolutePath("build/classes/java/main") + "," + absolutePath("build/resources/main") + "," - + pathOfJarContaining(Formatter.class) + "," + pathOfJarContaining(Preparator.class) + "," - + pathOfJarContaining(CodeFormatter.class); + + pathOfJarContaining(Formatter.class); } private String absolutePath(String path) { diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index ba3beae4..5a8db181 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -33,10 +33,15 @@ spring-javaformat-config spring-javaformat-checkstyle + spring-javaformat-formatter + spring-javaformat-formatter-test-support + spring-javaformat-formatter-tests spring-javaformat-formatter-eclipse-rewriter + spring-javaformat-formatter-eclipse-jdk8 + spring-javaformat-formatter-eclipse-jdk11 + spring-javaformat-formatter-eclipse-jdt-jdk8 + spring-javaformat-formatter-eclipse-jdt-jdk11 spring-javaformat-formatter-eclipse-runtime - spring-javaformat-formatter-eclipse - spring-javaformat-formatter spring-javaformat-formatter-shader spring-javaformat-formatter-shaded diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java index b838fef0..60f615ff 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java @@ -23,12 +23,20 @@ */ class DefaultJavaFormatConfig implements JavaFormatConfig { + private final JavaBaseline javaBaseline; + private final IndentationStyle indentationStyle; - DefaultJavaFormatConfig(IndentationStyle indentationStyle) { + DefaultJavaFormatConfig(JavaBaseline javaBaseline, IndentationStyle indentationStyle) { + this.javaBaseline = javaBaseline; this.indentationStyle = indentationStyle; } + @Override + public JavaBaseline getJavaBaseline() { + return this.javaBaseline; + } + @Override public IndentationStyle getIndentationStyle() { return this.indentationStyle; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/Preparators.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java similarity index 60% rename from spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/Preparators.java rename to spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java index 3757a0b3..90bde24a 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/Preparators.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java @@ -14,25 +14,23 @@ * limitations under the License. */ -package io.spring.javaformat.formatter.preparator; - -import java.util.function.Consumer; - -import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; +package io.spring.javaformat.config; /** - * {@link Preparator} instances that can be added. + * Java JDK baseline version expected be used when formatting. * * @author Phillip Webb */ -public final class Preparators { +public enum JavaBaseline { - private Preparators() { - } + /** + * Use JDK 8+ compatible formatter. + */ + V8, - public static void forEach(Consumer consumer) { - consumer.accept(new JavadocLineBreakPreparator()); - consumer.accept(new CodeLineBreakPreparator()); - } + /** + * Use JDK 11+ or higher compatible formatter. + */ + V11 } diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java index 8ba18779..300fcce1 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java @@ -30,19 +30,15 @@ public interface JavaFormatConfig { /** - * {@link JavaFormatConfig} using {@link IndentationStyle#TABS}. - */ - JavaFormatConfig TABS = new DefaultJavaFormatConfig(IndentationStyle.TABS); - - /** - * {@link JavaFormatConfig} using {@link IndentationStyle#SPACES}. + * The default {@link JavaFormatConfig}. */ - JavaFormatConfig SPACES = new DefaultJavaFormatConfig(IndentationStyle.SPACES); + JavaFormatConfig DEFAULT = of(JavaBaseline.V11, IndentationStyle.TABS); /** - * The default {@link JavaFormatConfig}. + * Java JDK baseline version expected be used when formatting. + * @return the JDK version */ - JavaFormatConfig DEFAULT = TABS; + JavaBaseline getJavaBaseline(); /** * Return the indentation style that should be used with the project. @@ -112,4 +108,14 @@ static JavaFormatConfig load(InputStream inputStream) { } } + /** + * Factory method to create a {@link JavaFormatConfig} with specific settings. + * @param javaBaseline The baseline JDK version + * @param indentationStyle the indentation style + * @return a {@link JavaFormatConfig} instance + */ + static JavaFormatConfig of(JavaBaseline javaBaseline, IndentationStyle indentationStyle) { + return new DefaultJavaFormatConfig(javaBaseline, indentationStyle); + } + } diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java index 52170c30..c82dabc0 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java @@ -35,6 +35,13 @@ class PropertiesJavaFormatConfig implements JavaFormatConfig { this.properties = properties; } + @Override + public JavaBaseline getJavaBaseline() { + Object value = this.properties.get("java-baseline"); + return (value != null) ? JavaBaseline.valueOf("v" + value.toString().toUpperCase().trim()) + : DEFAULT.getJavaBaseline(); + } + @Override public IndentationStyle getIndentationStyle() { Object value = this.properties.get("indentation-style"); diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF new file mode 100644 index 00000000..4725d0ae --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -0,0 +1,12 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Spring Formatter Eclipse Runtime JDK11 +Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 +Bundle-Version: 0.0.30.qualifier +Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", + org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", + org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, + org.eclipse.jface.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, + org.eclipse.jface.text.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, + org.eclipse.text.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional +Bundle-RequiredExecutionEnvironment: JavaSE-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/build.properties b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/build.properties similarity index 100% rename from spring-javaformat/spring-javaformat-formatter-eclipse-runtime/build.properties rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/build.properties diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml new file mode 100644 index 00000000..3e7b833b --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -0,0 +1,197 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat + 0.0.30-SNAPSHOT + + spring-javaformat-formatter-eclipse-jdk11 + eclipse-plugin + Spring JavaFormat Eclipse JDK-11 + + ${basedir}/../.. + org.eclipse.jdt.core.source,org.eclipse.jface.source,org.eclipse.text.source + + + + Eclipse Public License, Version 1.0 + https://www.eclipse.org/legal/epl-v10.html + + + + + eclipse-jdk11 + p2 + ${eclipse.jdk11.repository} + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-rewriter + ${project.version} + + + ant-contrib + ant-contrib + ${ant-contrib.version} + + + ant + ant + + + + + org.apache.ant + ant-nodeps + ${ant.version} + + + + + rewrite-bytecode + package + + run + + + + + + + + + + + + repackage-source + package + + run + + + + + + + + + + + + org.eclipse.tycho + tycho-packaging-plugin + + false + + + + org.eclipse.tycho + tycho-maven-plugin + + + org.eclipse.tycho + target-platform-configuration + + + org.eclipse.tycho + tycho-versions-plugin + + + update-eclipse-version + initialize + + update-eclipse-metadata + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack-dependencies + + unpack-dependencies + + prepare-package + + ${project.build.outputDirectory} + META-INF/*,**.dll,**.so,**.java + ${sourceartifacts} + + + + unpack-source-dependencies + + unpack-dependencies + + prepare-package + + ${project.build.directory}/sources + ${sourceartifacts} + + + + + + com.github.wvengen + proguard-maven-plugin + + + reduce-eclipse-runtime + package + + proguard + + + false + + ${java.home}/jmods + + + + + + + + + + + + + + + + + + + + + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-rewriter + ${project.version} + provided + + + diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF similarity index 76% rename from spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index fc7d7bc3..4fa1db47 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 -Bundle-Name: Spring Formatter Eclipse Runtime -Bundle-SymbolicName: spring-javaformat-formatter-eclipse-runtime +Bundle-Name: Spring Formatter Eclipse JDK8 +Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 Bundle-Version: 0.0.30.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", @@ -9,4 +9,4 @@ Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, org.eclipse.jface.text.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, org.eclipse.text.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/build.properties b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/build.properties new file mode 100755 index 00000000..45d47043 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = target/classes +bin.includes = META-INF/,\ + .,\ diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml new file mode 100644 index 00000000..35f9412d --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -0,0 +1,197 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat + 0.0.30-SNAPSHOT + + spring-javaformat-formatter-eclipse-jdk8 + eclipse-plugin + Spring JavaFormat Eclipse JDK-8 + + ${basedir}/../.. + org.eclipse.jdt.core.source,org.eclipse.jface.source,org.eclipse.text.source + + + + Eclipse Public License, Version 1.0 + https://www.eclipse.org/legal/epl-v10.html + + + + + eclipse-jdk8 + p2 + ${eclipse.jdk8.repository} + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-rewriter + ${project.version} + + + ant-contrib + ant-contrib + ${ant-contrib.version} + + + ant + ant + + + + + org.apache.ant + ant-nodeps + ${ant.version} + + + + + rewrite-bytecode + package + + run + + + + + + + + + + + + repackage-source + package + + run + + + + + + + + + + + + org.eclipse.tycho + tycho-packaging-plugin + + false + + + + org.eclipse.tycho + tycho-maven-plugin + + + org.eclipse.tycho + target-platform-configuration + + + org.eclipse.tycho + tycho-versions-plugin + + + update-eclipse-version + initialize + + update-eclipse-metadata + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack-dependencies + + unpack-dependencies + + prepare-package + + ${project.build.outputDirectory} + META-INF/*,**.dll,**.so,**.java + ${sourceartifacts} + + + + unpack-source-dependencies + + unpack-dependencies + + prepare-package + + ${project.build.directory}/sources + ${sourceartifacts} + + + + + + com.github.wvengen + proguard-maven-plugin + + + reduce-eclipse-runtime + package + + proguard + + + false + + ${java.home}/jmods + + + + + + + + + + + + + + + + + + + + + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-rewriter + ${project.version} + provided + + + diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml similarity index 84% rename from spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 0101b9c3..fb6613f3 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -8,16 +8,16 @@ spring-javaformat 0.0.30-SNAPSHOT - spring-javaformat-formatter-eclipse - Spring JavaFormat Eclipse + spring-javaformat-formatter-eclipse-jdt-jdk11 + Spring JavaFormat Eclipse JDT JDK-11 ${basedir}/../.. io.spring.javaformat - spring-javaformat-formatter-eclipse-runtime - 0.0.30-SNAPSHOT + spring-javaformat-formatter-eclipse-jdk11 + ${project.version} true @@ -48,7 +48,7 @@ - io.spring.javaformat:spring-javaformat-formatter-eclipse-runtime + io.spring.javaformat:spring-javaformat-formatter-eclipse-jdk11 org/eclipse/jdt/** @@ -57,7 +57,7 @@ org.eclipse.jdt - io.spring.javaformat.eclipse.jdt + io.spring.javaformat.eclipse.jdt.jdk11 false diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java similarity index 98% rename from spring-javaformat/spring-javaformat-formatter-eclipse/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index ad16d3f2..f02bbf08 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java similarity index 96% rename from spring-javaformat/spring-javaformat-formatter-eclipse/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index 23b52527..9873fc96 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml new file mode 100644 index 00000000..096c28bc --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat + 0.0.30-SNAPSHOT + + spring-javaformat-formatter-eclipse-jdt-jdk8 + Spring JavaFormat Eclipse JDT JDK-8 + + ${basedir}/../.. + + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-jdk8 + ${project.version} + true + + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-source + package + + jar + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + + + io.spring.javaformat:spring-javaformat-formatter-eclipse-jdk8 + + org/eclipse/jdt/** + + + + + + org.eclipse.jdt + io.spring.javaformat.eclipse.jdt.jdk8 + + + false + true + true + + + + + + + diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java new file mode 100644 index 00000000..f02bbf08 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -0,0 +1,126 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.eclipse.jdt.internal.formatter; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.eclipse.jdt.core.compiler.InvalidInputException; +import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; +import org.eclipse.jdt.internal.compiler.parser.Scanner; +import org.eclipse.jdt.internal.compiler.parser.TerminalTokens; +import org.eclipse.jdt.internal.formatter.Preparator.Phase; + +/** + * Extended version of {@link DefaultCodeFormatter} that allows additional + * {@link Preparator preparators} to be used. + * + * @author Phillip Webb + */ +public class ExtendedCodeFormatter extends DefaultCodeFormatter { + + private static boolean useLegacyTokenize = false; + + private final List preparators = new ArrayList<>(); + + public ExtendedCodeFormatter() { + super(); + } + + public ExtendedCodeFormatter(DefaultCodeFormatterOptions defaultCodeFormatterOptions, Map options) { + super(defaultCodeFormatterOptions, options); + } + + public ExtendedCodeFormatter(DefaultCodeFormatterOptions options) { + super(options); + } + + public ExtendedCodeFormatter(Map options) { + super(options); + } + + protected void addPreparator(Preparator preparator) { + this.preparators.add(preparator); + } + + @Override + protected void tokenizeSource(int kind) { + if (useLegacyTokenize) { + legacyTokenizeSource(kind); + return; + } + try { + super.tokenizeSource(kind); + } + catch (NoSuchMethodError ex) { + useLegacyTokenize = true; + legacyTokenizeSource(kind); + } + } + + private void legacyTokenizeSource(int kind) { + this.tokens.clear(); + long sourceLevel = CompilerOptions.versionToJdkLevel(this.sourceLevel); + Scanner scanner = new Scanner(true, false, false, sourceLevel, null, null, false); + scanner.setSource(this.sourceArray); + scanner.fakeInModule = (kind & K_MODULE_INFO) != 0; + while (true) { + try { + int tokenType = scanner.getNextToken(); + if (tokenType == TerminalTokens.TokenNameEOF) { + break; + } + Token token = Token.fromCurrent(scanner, tokenType); + this.tokens.add(token); + } + catch (InvalidInputException ex) { + Token token = Token.fromCurrent(scanner, TerminalTokens.TokenNameNotAToken); + this.tokens.add(token); + } + } + } + + @Override + protected void prepareWraps(int kind) { + ASTNode astRoot = getField("astRoot", ASTNode.class); + TokenManager tokenManager = getField("tokenManager", TokenManager.class); + applyPreparators(Phase.PRE_WRAPPING, kind, astRoot, tokenManager); + super.prepareWraps(kind); + applyPreparators(Phase.POST_WRAPPING, kind, astRoot, tokenManager); + } + + private void applyPreparators(Phase preWrapping, int kind, ASTNode astRoot, TokenManager tokenManager) { + this.preparators.stream().filter((preparator) -> preparator.getPhase() == preWrapping) + .forEach((preparator) -> preparator.apply(kind, tokenManager, astRoot)); + } + + @SuppressWarnings("unchecked") + private T getField(String name, Class type) { + try { + Field field = DefaultCodeFormatter.class.getDeclaredField(name); + field.setAccessible(true); + return (T) field.get(this); + } + catch (Exception ex) { + throw new IllegalStateException(ex); + } + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java new file mode 100644 index 00000000..9873fc96 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -0,0 +1,61 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.eclipse.jdt.internal.formatter; + +import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.formatter.CodeFormatter; + +/** + * Strategy interface used by {@link ExtendedCodeFormatter} to allow additional code + * formatting before wrapping. + * + * @author Phillip Webb + */ +public interface Preparator { + + default Phase getPhase() { + return Phase.POST_WRAPPING; + } + + /** + * Apply the preparator. + * @param kind the format kind (see + * {@link CodeFormatter#format(int, String, org.eclipse.jface.text.IRegion[], int, String)} + * for details) + * @param tokenManager the token manager + * @param astRoot the AST root node + */ + void apply(int kind, TokenManager tokenManager, ASTNode astRoot); + + /** + * The phase where the {@link Preparator} should be applied. + */ + enum Phase { + + /** + * Apply the preparator before wrapping. + */ + PRE_WRAPPING, + + /** + * Apply the preparator after wrapping. + */ + POST_WRAPPING; + + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index 6288616b..232f1d25 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -64,18 +64,23 @@ public final class EclipseRewriter { private EclipseRewriter() { } - public void rewrite(String file) throws IOException { + public void rewrite(JdkVersion jdkVersion, String file) throws IOException { System.out.println("Rewriting classes in " + file); URI uri = URI.create("jar:file:" + Paths.get(file).toUri().getPath()); try (FileSystem zip = FileSystems.newFileSystem(uri, Collections.singletonMap("create", "true"))) { - rewrite(zip); + rewrite(jdkVersion, zip); } } - private void rewrite(FileSystem zip) throws IOException { + private void rewrite(JdkVersion jdkVersion, FileSystem zip) throws IOException { rewrite(zip, "org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.class", DefaultCodeFormatterManipulator::new); - rewrite(zip, "org/eclipse/osgi/util/NLS$1.class", NlsManipulator::new); + if (jdkVersion == JdkVersion.V8) { + rewrite(zip, "org/eclipse/osgi/util/NLS$1.class", NlsJdk8Manipulator::new); + } + else { + rewrite(zip, "org/eclipse/osgi/util/NLS.class", NlsJdk11Manipulator::new); + } } private void rewrite(FileSystem zip, String name, Function manipulator) @@ -90,7 +95,7 @@ private void rewrite(FileSystem zip, String name, Function".equals(name)) { + return new NslJdk11MethodManipulator(super.visitMethod(access, name, desc, signature, exceptions)); + } + return super.visitMethod(access, name, desc, signature, exceptions); + } + + } + + /** + * {@link MethodVisitor} to update the {@code NLS} class in the JDK 8 version so it + * doesn't use a System property to disable warning messages. + */ + private static class NslJdk11MethodManipulator extends MethodVisitor { + + private final MethodVisitor methodVisitor; + + NslJdk11MethodManipulator(MethodVisitor mv) { + super(Opcodes.ASM7, null); + this.methodVisitor = mv; + } + + @Override + public void visitEnd() { + MethodVisitor mv = this.methodVisitor; + mv.visitCode(); + mv.visitInsn(Opcodes.ICONST_0); + mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object"); + mv.visitFieldInsn(Opcodes.PUTSTATIC, "org/eclipse/osgi/util/NLS", "EMPTY_ARGS", "[Ljava/lang/Object;"); + mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Boolean", "TRUE", "Ljava/lang/Boolean;"); + mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false); + mv.visitFieldInsn(Opcodes.PUTSTATIC, "org/eclipse/osgi/util/NLS", "ignoreWarnings", "Z"); + mv.visitTypeInsn(Opcodes.NEW, "java/lang/Object"); + mv.visitInsn(Opcodes.DUP); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "", "()V", false); + mv.visitFieldInsn(Opcodes.PUTSTATIC, "org/eclipse/osgi/util/NLS", "ASSIGNED", "Ljava/lang/Object;"); + mv.visitInsn(Opcodes.RETURN); + mv.visitMaxs(2, 0); + mv.visitEnd(); + } + + } + + enum JdkVersion { + + V8, V11 + + } + } diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index fad60353..f9518bd0 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -9,181 +9,58 @@ 0.0.30-SNAPSHOT spring-javaformat-formatter-eclipse-runtime - eclipse-plugin Spring JavaFormat Eclipse Runtime ${basedir}/../.. - org.eclipse.jdt.core.source,org.eclipse.jface.source,org.eclipse.text.source - - - Eclipse Public License, Version 1.0 - https://www.eclipse.org/legal/epl-v10.html - - + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-jdk8 + ${project.version} + true + + org.apache.maven.plugins - maven-antrun-plugin - - - io.spring.javaformat - spring-javaformat-formatter-eclipse-rewriter - ${project.version} - - - ant-contrib - ant-contrib - ${ant-contrib.version} - - - ant - ant - - - - - org.apache.ant - ant-nodeps - ${ant.version} - - + maven-source-plugin - rewrite-bytecode - package - - run - - - - - - - - - - - repackage-source + attach-source package - run - - - - - - - - - - - - org.eclipse.tycho - tycho-packaging-plugin - - false - - - - org.eclipse.tycho - tycho-maven-plugin - - - org.eclipse.tycho - target-platform-configuration - - - org.eclipse.tycho - tycho-versions-plugin - - - update-eclipse-version - initialize - - update-eclipse-metadata + jar org.apache.maven.plugins - maven-dependency-plugin + maven-shade-plugin - unpack-dependencies - - unpack-dependencies - - prepare-package - - ${project.build.outputDirectory} - META-INF/*,**.dll,**.so,**.java - ${sourceartifacts} - - - - unpack-source-dependencies - - unpack-dependencies - - prepare-package - - ${project.build.directory}/sources - ${sourceartifacts} - - - - - - com.github.wvengen - proguard-maven-plugin - - - reduce-eclipse-runtime package - proguard + shade - false - - ${java.home}/jmods - - - - - - - - - - - - - - + + + io.spring.javaformat:spring-javaformat-formatter-eclipse-jdk8 + + org/eclipse/jdt/** + + + + false + true + true - - - io.spring.javaformat - spring-javaformat-formatter-eclipse-rewriter - ${project.version} - provided - - diff --git a/spring-javaformat/spring-javaformat-formatter-shader/.factorypath b/spring-javaformat/spring-javaformat-formatter-shader/.factorypath new file mode 100644 index 00000000..a157f4e2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-shader/.factorypath @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml new file mode 100644 index 00000000..4cf3c507 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat + 0.0.30-SNAPSHOT + + spring-javaformat-formatter-test-support + Spring JavaFormat Formatter Test Support + + ${basedir}/../.. + + + + + io.spring.javaformat + spring-javaformat-formatter + ${project.version} + + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-runtime + ${project.version} + provided + + + diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java b/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java similarity index 80% rename from spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java rename to spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java index 6de19753..9adaacc6 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterApp.java +++ b/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java @@ -21,6 +21,10 @@ import org.eclipse.jface.text.IDocument; import org.eclipse.text.edits.TextEdit; +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; +import io.spring.javaformat.config.JavaFormatConfig; + /** * Test app used to format something in a test container. * @@ -32,7 +36,8 @@ private FormatterApp() { } public static void main(String[] args) throws Exception, BadLocationException { - Formatter formatter = new Formatter(); + JavaBaseline javaBaseline = JavaBaseline.valueOf(args[0]); + Formatter formatter = new Formatter(JavaFormatConfig.of(javaBaseline, IndentationStyle.TABS)); String source = "public class Test {}"; TextEdit edit = formatter.format(source); IDocument document = new Document(source); diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml new file mode 100644 index 00000000..e9b3874d --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat + 0.0.30-SNAPSHOT + + spring-javaformat-formatter-tests + Spring JavaFormat Formatter Tests + + ${basedir}/../.. + 11 + + + + + io.spring.javaformat + spring-javaformat-formatter + ${project.version} + + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-runtime + ${project.version} + provided + + + + io.spring.javaformat + spring-javaformat-formatter-test-support + ${project.version} + test + + + org.apache.logging.log4j + log4j-api + test + + + org.apache.logging.log4j + log4j-core + test + + + org.apache.logging.log4j + log4j-slf4j-impl + test + + + org.testcontainers + testcontainers + test + + + org.testcontainers + junit-jupiter + test + + + diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java similarity index 77% rename from spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index 6f06893e..f039acfd 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Collection; +import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; /** @@ -57,23 +58,34 @@ protected static Item[] items(String expectedOverride) { expected = new File(expectedDir, source.getName()); } File config = new File(configDir, source.getName()); - items.add(new Item(source, expected, config)); + for (JavaBaseline javaBaseline : JavaBaseline.values()) { + items.add(new Item(javaBaseline, source, expected, config)); + } } return items.toArray(new Item[0]); } static class Item { + private final JavaBaseline javaBaseline; + private final File source; private final File expected; private final JavaFormatConfig config; - Item(File source, File expected, File config) { + Item(JavaBaseline javaBaseline, File source, File expected, File config) { + this.javaBaseline = javaBaseline; this.source = source; this.expected = expected; - this.config = (!config.exists()) ? JavaFormatConfig.DEFAULT : JavaFormatConfig.load(config); + this.config = loadConfig(javaBaseline, config); + } + + private JavaFormatConfig loadConfig(JavaBaseline javaBaseline, File configFile) { + JavaFormatConfig config = (!configFile.exists()) ? JavaFormatConfig.DEFAULT + : JavaFormatConfig.load(configFile); + return JavaFormatConfig.of(javaBaseline, config.getIndentationStyle()); } public File getSource() { @@ -90,7 +102,7 @@ public JavaFormatConfig getConfig() { @Override public String toString() { - return this.source.getName(); + return this.javaBaseline + " " + this.source.getName(); } } diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileEditTests.java rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java similarity index 74% rename from spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index 0a405b67..80abe8ef 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -28,12 +28,16 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.ContainerLaunchException; import org.testcontainers.containers.output.ToStringConsumer; import org.testcontainers.containers.startupcheck.OneShotStartupCheckStrategy; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.utility.MountableFile; +import io.spring.javaformat.config.JavaBaseline; + import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Tests to ensure the formatter can run in different JVM versions. @@ -45,14 +49,31 @@ public class FormatterIntegrationTests { @ParameterizedTest @ValueSource(strings = { "8", "11", "17" }) - void formatCode(String version) throws Exception { + void formatCodeWithV8BaselineCanFormatOnAllVersions(String version) throws Exception { + runFormatter(JavaBaseline.V8, version); + } + + @ParameterizedTest + @ValueSource(strings = { "11", "17" }) + void formatCodeWithV11BaselineCanFormatOn11OrHigher(String version) throws Exception { + runFormatter(JavaBaseline.V11, version); + } + + @ParameterizedTest + @ValueSource(strings = "8") + void formatCodeWithV11BaselineCannotFormatOn8(String version) throws Exception { + assertThatExceptionOfType(ContainerLaunchException.class) + .isThrownBy(() -> runFormatter(JavaBaseline.V11, version)); + } + + private void runFormatter(JavaBaseline baseline, String version) throws IOException, Exception { try (JavaContainer container = new JavaContainer(version)) { ToStringConsumer output = new ToStringConsumer(); container.withStartupCheckStrategy(new OneShotStartupCheckStrategy().withTimeout(Duration.ofMinutes(5))); container.withLogConsumer(output); String classpath = withCopyClasspathToContainer(container); - String applicationClassName = FormatterApp.class.getName(); - container.withCommand("java -cp " + classpath + " " + applicationClassName); + container.withCommand( + "java -cp " + classpath + " " + "io.spring.javaformat.formatter.FormatterApp" + " " + baseline); container.start(); assertThat(output.toUtf8String()).isEqualTo("public class Test {\n\n}\n"); } @@ -62,7 +83,10 @@ private String withCopyClasspathToContainer(JavaContainer container) throws IOEx List classpath = new ArrayList<>(); for (String entry : System.getProperty("java.class.path").split(File.pathSeparator)) { if (entry.contains("spring-javaformat")) { - classpath.add(withCopyClasspathEntryToContainer(container, entry)); + String classpathEntry = withCopyClasspathEntryToContainer(container, entry); + if (classpathEntry != null) { + classpath.add(classpathEntry); + } } } return classpath.stream().collect(Collectors.joining(":")); @@ -83,6 +107,9 @@ private String withCopyClasspathJarToContainer(JavaContainer container, File jar private String withCopyClasspathFolderToContainer(JavaContainer container, File classesFolder) throws IOException { String name = classesFolder.getName(); Path source = classesFolder.toPath(); + if (!Files.exists(source)) { + return null; + } try (Stream stream = Files.walk(source)) { stream.forEach((child) -> { try { diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/FormatterTests.java rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/JavaContainer.java rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/FormatterTests-expected/javadoc-top-add.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/javadoc-top-add.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/FormatterTests-expected/javadoc-top-add.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/javadoc-top-add.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/config/spaces.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/config/spaces.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/config/spaces.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/config/spaces.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/annotation-attributes.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/annotation-attributes.txt new file mode 100644 index 00000000..7dc4da2d --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/annotation-attributes.txt @@ -0,0 +1,15 @@ +class MyTest { + + @SpringBootTest(properties = "spring.main.web-application-type=reactive", classes = { + WebTestClientSpringBootTestIntegrationTests.TestConfiguration.class, ExampleWebFluxApplication.class }) + static class One { + + } + + @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = { "spring.jersey.type=filter", + "server.servlet.context-path=/app", "server.servlet.register-default-servlet=true" }) + static class Two { + + } + +} \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/complex-annotation-gh-78.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/complex-annotation-gh-78.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/complex-annotation-gh-78.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/complex-annotation-gh-78.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/complex-annotation.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/complex-annotation.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/complex-annotation.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/complex-annotation.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/complex.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/complex.txt similarity index 99% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/complex.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/complex.txt index d451eb1c..f0dc2fc9 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/complex.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/complex.txt @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/enum-constructor.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/enum-constructor.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/enum-constructor.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/enum-constructor.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-nested.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-nested.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-nested.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-nested.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-param.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-param.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-param.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-param.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-top-add.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-top-add.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-top-add.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-top-add.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-top-empty.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-top-empty.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-top-empty.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-top-empty.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-top.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-top.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/javadoc-top.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-top.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-classbraces.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-classbraces.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-classbraces.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-classbraces.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-fields-comment-above.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-fields-comment-above.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-fields-comment-above.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-fields-comment-above.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-fields-comments.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-fields-comments.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-fields-comments.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-fields-comments.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-fields.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-fields.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-fields.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-fields.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-interface.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-interface.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-interface.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-interface.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-trailing.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-trailing.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/linebreak-trailing.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/linebreak-trailing.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/method-wrap.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/method-wrap.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/method-wrap.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/method-wrap.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/simple.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/simple.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/simple.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/simple.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/spaces.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/spaces.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/spaces.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/spaces.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/static-initializer.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/static-initializer.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/static-initializer.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/static-initializer.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/spaces.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/typical.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/spaces.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/typical.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/annotation-attributes.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/annotation-attributes.txt new file mode 100644 index 00000000..19ae7f4d --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/annotation-attributes.txt @@ -0,0 +1,9 @@ +class MyTest { + + @SpringBootTest(properties = "spring.main.web-application-type=reactive", classes = { WebTestClientSpringBootTestIntegrationTests.TestConfiguration.class, ExampleWebFluxApplication.class }) + static class One {} + + @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = { "spring.jersey.type=filter", "server.servlet.context-path=/app", "server.servlet.register-default-servlet=true" }) + static class Two {} + +} \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/complex-annotation-gh-78.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex-annotation-gh-78.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/complex-annotation-gh-78.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex-annotation-gh-78.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/complex-annotation.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex-annotation.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/complex-annotation.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex-annotation.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/complex.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt similarity index 99% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/complex.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt index b8b50b19..15283fa8 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/complex.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/enum-constructor.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/enum-constructor.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/enum-constructor.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/enum-constructor.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-nested.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-nested.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-nested.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-nested.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-param.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-param.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-param.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-param.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-top-add.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-top-add.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-top-add.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-top-add.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-top-empty.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-top-empty.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-top-empty.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-top-empty.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-top.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-top.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/javadoc-top.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-top.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-classbraces.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-classbraces.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-classbraces.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-classbraces.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-fields-comment-above.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-fields-comment-above.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-fields-comment-above.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-fields-comment-above.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-fields-comments.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-fields-comments.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-fields-comments.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-fields-comments.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-fields.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-fields.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-fields.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-fields.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-interface.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-interface.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-interface.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-interface.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-trailing.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-trailing.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/linebreak-trailing.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/linebreak-trailing.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/method-wrap.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/method-wrap.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/method-wrap.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/method-wrap.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/simple.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/simple.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/typical.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/spaces.txt similarity index 98% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/typical.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/spaces.txt index b88780c1..e370bf0e 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/resources/expected/typical.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/spaces.txt @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/static-initializer.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/static-initializer.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/static-initializer.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/static-initializer.txt diff --git a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/typical.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/typical.txt similarity index 98% rename from spring-javaformat/spring-javaformat-formatter/src/test/resources/source/typical.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/typical.txt index b88780c1..e370bf0e 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/test/resources/source/typical.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/typical.txt @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index ee0b91bb..0a68aa97 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -22,7 +22,12 @@ io.spring.javaformat - spring-javaformat-formatter-eclipse + spring-javaformat-formatter-eclipse-jdt-jdk8 + ${project.version} + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-jdt-jdk11 ${project.version} @@ -32,31 +37,5 @@ ${project.version} provided - - - org.apache.logging.log4j - log4j-api - test - - - org.apache.logging.log4j - log4j-core - test - - - org.apache.logging.log4j - log4j-slf4j-impl - test - - - org.testcontainers - testcontainers - test - - - org.testcontainers - junit-jupiter - test - diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 569d68d4..83f6406c 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -16,33 +16,40 @@ package io.spring.javaformat.formatter; -import java.io.IOException; -import java.io.InputStream; -import java.util.Collections; import java.util.Map; -import java.util.Properties; import org.eclipse.jface.text.IRegion; import org.eclipse.text.edits.TextEdit; -import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; -import io.spring.javaformat.eclipse.jdt.core.formatter.CodeFormatter; -import io.spring.javaformat.eclipse.jdt.internal.formatter.ExtendedCodeFormatter; -import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; -import io.spring.javaformat.formatter.preparator.Preparators; +import io.spring.javaformat.formatter.eclipse.EclipseCodeFormatter; +import io.spring.javaformat.formatter.jdk11.eclipse.EclipseJdk11CodeFormatter; +import io.spring.javaformat.formatter.jdk8.eclipse.EclipseJdk8CodeFormatter; /** - * A {@link CodeFormatter} that applies Spring formatting conventions. + * A code formatter that applies Spring formatting conventions. * * @author Phillip Webb */ -public class Formatter extends CodeFormatter { +public class Formatter { + + /** + * Kind used to format a compilation unit. See Eclipse {@code CodeFormatter} + * constants. + */ + private static final int K_COMPILATION_UNIT = 0x08; + + /** + * Flag used to include the comments during the formatting of the code snippet. See + * Eclipse {@code CodeFormatter} constants. + */ + private static final int F_INCLUDE_COMMENTS = 0x1000; /** * The components that will be formatted by default. */ - private static final int DEFAULT_COMPONENTS = CodeFormatter.K_COMPILATION_UNIT | CodeFormatter.F_INCLUDE_COMMENTS; + private static final int DEFAULT_COMPONENTS = K_COMPILATION_UNIT | F_INCLUDE_COMMENTS; /** * The default indentation level. @@ -54,7 +61,7 @@ public class Formatter extends CodeFormatter { */ public static final String DEFAULT_LINE_SEPARATOR = null; - private final CodeFormatter delegate; + private final EclipseCodeFormatter delegate; /** * Create a new formatter instance. @@ -68,7 +75,8 @@ public Formatter() { * @param javaFormatConfig the java format config to use */ public Formatter(JavaFormatConfig javaFormatConfig) { - this.delegate = new DelegateCodeFormatter(javaFormatConfig); + this.delegate = javaFormatConfig.getJavaBaseline() == JavaBaseline.V8 + ? new EclipseJdk8CodeFormatter(javaFormatConfig) : new EclipseJdk11CodeFormatter(javaFormatConfig); } /** @@ -113,7 +121,6 @@ public TextEdit format(String source, int offset, int length, String lineSeparat return format(DEFAULT_COMPONENTS, source, offset, length, DEFAULT_INDENTATION_LEVEL, lineSeparator); } - @Override public TextEdit format(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator) { return this.delegate.format(kind, source, offset, length, indentationLevel, lineSeparator); @@ -140,65 +147,16 @@ public TextEdit format(String source, IRegion[] regions, String lineSeparator) { return format(DEFAULT_COMPONENTS, source, regions, DEFAULT_INDENTATION_LEVEL, lineSeparator); } - @Override public TextEdit format(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator) { return this.delegate.format(kind, source, regions, indentationLevel, lineSeparator); } - @Override public String createIndentationString(int indentationLevel) { return this.delegate.createIndentationString(indentationLevel); } - @Override public void setOptions(Map options) { this.delegate.setOptions(options); } - /** - * Internal delegate code formatter to apply Spring {@literal formatter.prefs} and add - * {@link Preparator Preparators}. - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - private static class DelegateCodeFormatter extends ExtendedCodeFormatter { - - private final Map appliedOptions; - - DelegateCodeFormatter(JavaFormatConfig javaFormatConfig) { - this(loadOptions(javaFormatConfig)); - } - - DelegateCodeFormatter(Map options) { - super(options); - this.appliedOptions = options; - Preparators.forEach(this::addPreparator); - } - - @Override - public void setOptions(Map options) { - super.setOptions(this.appliedOptions); - } - - private static Map loadOptions(JavaFormatConfig javaFormatConfig) { - try { - Properties properties = new Properties(); - try (InputStream inputStream = Formatter.class.getResourceAsStream("formatter.prefs")) { - properties.load(inputStream); - } - applyConfig(properties, javaFormatConfig); - return (Map) Collections.unmodifiableMap(properties); - } - catch (IOException ex) { - throw new IllegalStateException(ex); - } - } - - private static void applyConfig(Properties properties, JavaFormatConfig javaFormatConfig) { - if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { - properties.put("io.spring.javaformat.eclipse.jdt.core.formatter.tabulation.char", "space"); - } - } - - } - } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java new file mode 100644 index 00000000..4f17a95a --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java @@ -0,0 +1,39 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter.eclipse; + +import java.util.Map; + +import org.eclipse.jface.text.IRegion; +import org.eclipse.text.edits.TextEdit; + +/** + * Internal interface used to access an Eclipse {@code CodeFormatter} implementation. + * + * @author Phillip Webb + */ +public interface EclipseCodeFormatter { + + TextEdit format(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator); + + TextEdit format(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator); + + String createIndentationString(int indentationLevel); + + void setOptions(Map options); + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java new file mode 100644 index 00000000..3f50237e --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java @@ -0,0 +1,71 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter.eclipse; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Properties; + +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaFormatConfig; + +/** + * Utility class used to load formatter options. + * + * @author Phillip Webb + */ +public class Options { + + private final String prefix; + + public Options(String prefix) { + this.prefix = prefix; + } + + public Map load(JavaFormatConfig javaFormatConfig) { + try { + Map properties = loadProperties(); + applyConfig(properties, javaFormatConfig); + return Collections.unmodifiableMap(properties); + } + catch (IOException ex) { + throw new IllegalStateException(ex); + } + } + + private Map loadProperties() throws IOException { + Properties properties = new Properties(); + try (InputStream inputStream = getClass().getResourceAsStream("formatter.prefs")) { + properties.load(inputStream); + } + Map prefixedProperties = new LinkedHashMap<>(); + for (Map.Entry entry : properties.entrySet()) { + prefixedProperties.put(this.prefix + "." + entry.getKey(), (String) entry.getValue()); + } + return prefixedProperties; + } + + private void applyConfig(Map properties, JavaFormatConfig javaFormatConfig) { + if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { + properties.put(this.prefix + ".core.formatter.tabulation.char", "space"); + } + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java new file mode 100644 index 00000000..6b3ee9d8 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java @@ -0,0 +1,121 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter.jdk11.eclipse; + +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AbstractTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AnnotationTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.EnumDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.FieldDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.SimpleName; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk11.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; + +/** + * {@link Preparator} to fine tune curly-brace line breaks. + * + * @author Phillip Webb + */ +class CodeLineBreakPreparator implements Preparator { + + @Override + public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { + if ((kind & CodeFormatter.K_COMPILATION_UNIT) != 0) { + ASTVisitor visitor = new Vistor(tokenManager); + astRoot.accept(visitor); + } + } + + private static class Vistor extends ASTVisitor { + + private final TokenManager tokenManager; + + Vistor(TokenManager tokenManager) { + this.tokenManager = tokenManager; + } + + @Override + public boolean visit(TypeDeclaration node) { + visitType(node); + return true; + } + + @Override + public boolean visit(AnnotationTypeDeclaration node) { + visitType(node); + return true; + } + + @Override + public boolean visit(EnumDeclaration node) { + visitType(node); + return true; + } + + private void visitType(AbstractTypeDeclaration node) { + SimpleName name = node.getName(); + int openBraceIndex = (name == null ? this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameLBRACE) + : this.tokenManager.firstIndexAfter(name, TerminalTokens.TokenNameLBRACE)); + Token openBraceToken = this.tokenManager.get(openBraceIndex); + openBraceToken.clearLineBreaksAfter(); + openBraceToken.putLineBreaksAfter(2); + int closeBraceIndex = this.tokenManager.lastIndexIn(node, TerminalTokens.TokenNameRBRACE); + Token closeBraceToken = this.tokenManager.get(closeBraceIndex); + closeBraceToken.clearLineBreaksBefore(); + closeBraceToken.putLineBreaksBefore(2); + } + + @Override + public boolean visit(FieldDeclaration node) { + int index = this.tokenManager.lastIndexIn(node, TerminalTokens.TokenNameSEMICOLON); + while (tokenIsOfType(index + 1, TerminalTokens.TokenNameCOMMENT_LINE, + TerminalTokens.TokenNameCOMMENT_BLOCK)) { + if (this.tokenManager.get(index).getLineBreaksAfter() > 0 + || this.tokenManager.get(index + 1).getLineBreaksBefore() > 0) { + break; + } + index++; + } + Token token = this.tokenManager.get(index); + if (tokenIsOfType(index + 1, TerminalTokens.TokenNamestatic)) { + return true; + } + token.clearLineBreaksAfter(); + token.putLineBreaksAfter(2); + return true; + } + + private boolean tokenIsOfType(int index, int... types) { + if (index < this.tokenManager.size()) { + Token token = this.tokenManager.get(index); + for (int type : types) { + if (token.tokenType == type) { + return true; + } + } + } + return false; + } + + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java new file mode 100644 index 00000000..e4d57dc5 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java @@ -0,0 +1,53 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter.jdk11.eclipse; + +import java.util.Map; + +import io.spring.javaformat.config.JavaFormatConfig; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.ExtendedCodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; +import io.spring.javaformat.formatter.eclipse.EclipseCodeFormatter; +import io.spring.javaformat.formatter.eclipse.Options; + +/** + * Internal delegate JDK 11 baseline {@link EclipseCodeFormatter} to apply Spring + * {@literal formatter.prefs} and add {@link Preparator Preparators}. + * + * @author Phillip Webb + */ +public class EclipseJdk11CodeFormatter extends ExtendedCodeFormatter implements EclipseCodeFormatter { + + private final Map appliedOptions; + + public EclipseJdk11CodeFormatter(JavaFormatConfig javaFormatConfig) { + this(new Options("io.spring.javaformat.eclipse.jdt.jdk11").load(javaFormatConfig)); + } + + EclipseJdk11CodeFormatter(Map options) { + super(options); + this.appliedOptions = options; + addPreparator(new JavadocLineBreakPreparator()); + addPreparator(new CodeLineBreakPreparator()); + } + + @Override + public void setOptions(Map options) { + super.setOptions(this.appliedOptions); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java new file mode 100644 index 00000000..1e77a4ff --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java @@ -0,0 +1,132 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter.jdk11.eclipse; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Comment; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.CompilationUnit; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Javadoc; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TagElement; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TextElement; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk11.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; + +/** + * {@link Preparator} to fine tune Javadoc whitespace. + * + * @author Phillip Webb + */ +class JavadocLineBreakPreparator implements Preparator { + + private final static List PARAM_TAGS; + + static { + List paramTags = new ArrayList(); + paramTags.add(TagElement.TAG_PARAM); + paramTags.add(TagElement.TAG_EXCEPTION); + paramTags.add(TagElement.TAG_SERIALFIELD); + paramTags.add(TagElement.TAG_THROWS); + paramTags.add(TagElement.TAG_RETURN); + paramTags.add(TagElement.TAG_DEPRECATED); + PARAM_TAGS = Collections.unmodifiableList(paramTags); + } + + @Override + public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { + if ((kind & CodeFormatter.F_INCLUDE_COMMENTS) != 0) { + ASTVisitor visitor = new Vistor(tokenManager); + for (Comment comment : getComments(astRoot)) { + comment.accept(visitor); + } + } + } + + @SuppressWarnings("unchecked") + private List getComments(ASTNode astRoot) { + if (astRoot.getRoot() instanceof CompilationUnit) { + CompilationUnit compilationUnit = (CompilationUnit) astRoot.getRoot(); + return compilationUnit.getCommentList(); + } + return Collections.emptyList(); + } + + private static class Vistor extends ASTVisitor { + + private final TokenManager tokenManager; + + private TokenManager commentTokenManager; + + private ASTNode declaration; + + private boolean firstTagElement; + + private boolean hasText; + + Vistor(TokenManager tokenManager) { + this.tokenManager = tokenManager; + } + + @Override + public boolean visit(Javadoc node) { + int commentIndex = this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameCOMMENT_JAVADOC); + Token commentToken = this.tokenManager.get(commentIndex); + this.commentTokenManager = new TokenManager(commentToken.getInternalStructure(), this.tokenManager); + this.declaration = node.getParent(); + this.firstTagElement = true; + this.hasText = false; + return true; + } + + @Override + public boolean visit(TextElement node) { + this.hasText = true; + return true; + } + + @Override + public boolean visit(TagElement node) { + if (isSquashRequired(node, this.declaration)) { + int startIndex = this.commentTokenManager.findIndex(node.getStartPosition(), -1, false); + Token token = this.commentTokenManager.get(startIndex); + token.clearLineBreaksBefore(); + token.putLineBreaksBefore( + this.declaration instanceof TypeDeclaration && this.firstTagElement && this.hasText ? 2 : 1); + this.firstTagElement = false; + } + return true; + } + + private boolean isSquashRequired(TagElement node, ASTNode declaration) { + if (declaration instanceof TypeDeclaration) { + String tagName = node.getTagName(); + return (!node.isNested() && tagName != null && tagName.startsWith("@")); + } + return PARAM_TAGS.contains(node.getTagName()); + } + + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java similarity index 75% rename from spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/CodeLineBreakPreparator.java rename to spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java index dafba177..29d16a3d 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java @@ -14,21 +14,21 @@ * limitations under the License. */ -package io.spring.javaformat.formatter.preparator; +package io.spring.javaformat.formatter.jdk8.eclipse; -import io.spring.javaformat.eclipse.jdt.core.dom.ASTNode; -import io.spring.javaformat.eclipse.jdt.core.dom.ASTVisitor; -import io.spring.javaformat.eclipse.jdt.core.dom.AbstractTypeDeclaration; -import io.spring.javaformat.eclipse.jdt.core.dom.AnnotationTypeDeclaration; -import io.spring.javaformat.eclipse.jdt.core.dom.EnumDeclaration; -import io.spring.javaformat.eclipse.jdt.core.dom.FieldDeclaration; -import io.spring.javaformat.eclipse.jdt.core.dom.SimpleName; -import io.spring.javaformat.eclipse.jdt.core.dom.TypeDeclaration; -import io.spring.javaformat.eclipse.jdt.core.formatter.CodeFormatter; -import io.spring.javaformat.eclipse.jdt.internal.compiler.parser.TerminalTokens; -import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; -import io.spring.javaformat.eclipse.jdt.internal.formatter.Token; -import io.spring.javaformat.eclipse.jdt.internal.formatter.TokenManager; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.AbstractTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.AnnotationTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.EnumDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.FieldDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.SimpleName; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; /** * {@link Preparator} to fine tune curly-brace line breaks. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java new file mode 100644 index 00000000..7b747cd2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java @@ -0,0 +1,53 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter.jdk8.eclipse; + +import java.util.Map; + +import io.spring.javaformat.config.JavaFormatConfig; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.ExtendedCodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Preparator; +import io.spring.javaformat.formatter.eclipse.EclipseCodeFormatter; +import io.spring.javaformat.formatter.eclipse.Options; + +/** + * Internal delegate JDK 11 baseline {@link EclipseCodeFormatter} to apply Spring + * {@literal formatter.prefs} and add {@link Preparator Preparators}. + * + * @author Phillip Webb + */ +public class EclipseJdk8CodeFormatter extends ExtendedCodeFormatter implements EclipseCodeFormatter { + + private final Map appliedOptions; + + public EclipseJdk8CodeFormatter(JavaFormatConfig javaFormatConfig) { + this(new Options("io.spring.javaformat.eclipse.jdt.jdk8").load(javaFormatConfig)); + } + + EclipseJdk8CodeFormatter(Map options) { + super(options); + this.appliedOptions = options; + addPreparator(new JavadocLineBreakPreparator()); + addPreparator(new CodeLineBreakPreparator()); + } + + @Override + public void setOptions(Map options) { + super.setOptions(this.appliedOptions); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java similarity index 78% rename from spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/JavadocLineBreakPreparator.java rename to spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java index 28c670a8..6a7a4752 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/preparator/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java @@ -14,25 +14,25 @@ * limitations under the License. */ -package io.spring.javaformat.formatter.preparator; +package io.spring.javaformat.formatter.jdk8.eclipse; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import io.spring.javaformat.eclipse.jdt.core.dom.ASTNode; -import io.spring.javaformat.eclipse.jdt.core.dom.ASTVisitor; -import io.spring.javaformat.eclipse.jdt.core.dom.Comment; -import io.spring.javaformat.eclipse.jdt.core.dom.CompilationUnit; -import io.spring.javaformat.eclipse.jdt.core.dom.Javadoc; -import io.spring.javaformat.eclipse.jdt.core.dom.TagElement; -import io.spring.javaformat.eclipse.jdt.core.dom.TextElement; -import io.spring.javaformat.eclipse.jdt.core.dom.TypeDeclaration; -import io.spring.javaformat.eclipse.jdt.core.formatter.CodeFormatter; -import io.spring.javaformat.eclipse.jdt.internal.compiler.parser.TerminalTokens; -import io.spring.javaformat.eclipse.jdt.internal.formatter.Preparator; -import io.spring.javaformat.eclipse.jdt.internal.formatter.Token; -import io.spring.javaformat.eclipse.jdt.internal.formatter.TokenManager; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Comment; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.CompilationUnit; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Javadoc; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TagElement; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TextElement; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; /** * {@link Preparator} to fine tune Javadoc whitespace. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs new file mode 100644 index 00000000..b1fe253e --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs @@ -0,0 +1,354 @@ +core.formatter.align_assignment_statements_on_columns=false +core.formatter.align_fields_grouping_blank_lines=2147483647 +core.formatter.align_type_members_on_columns=false +core.formatter.align_variable_declarations_on_columns=false +core.formatter.align_with_spaces=false +core.formatter.alignment_for_additive_operator=16 +core.formatter.alignment_for_arguments_in_allocation_expression=16 +core.formatter.alignment_for_arguments_in_annotation=16 +core.formatter.alignment_for_arguments_in_enum_constant=16 +core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +core.formatter.alignment_for_arguments_in_method_invocation=16 +core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +core.formatter.alignment_for_assignment=0 +core.formatter.alignment_for_binary_expression=16 +core.formatter.alignment_for_bitwise_operator=16 +core.formatter.alignment_for_compact_if=16 +core.formatter.alignment_for_compact_loops=16 +core.formatter.alignment_for_conditional_expression=16 +core.formatter.alignment_for_conditional_expression_chain=0 +core.formatter.alignment_for_enum_constants=0 +core.formatter.alignment_for_expressions_in_array_initializer=16 +core.formatter.alignment_for_expressions_in_for_loop_header=0 +core.formatter.alignment_for_logical_operator=16 +core.formatter.alignment_for_method_declaration=0 +core.formatter.alignment_for_module_statements=16 +core.formatter.alignment_for_multiple_fields=16 +core.formatter.alignment_for_multiplicative_operator=16 +core.formatter.alignment_for_parameterized_type_references=0 +core.formatter.alignment_for_parameters_in_constructor_declaration=16 +core.formatter.alignment_for_parameters_in_method_declaration=16 +core.formatter.alignment_for_relational_operator=0 +core.formatter.alignment_for_resources_in_try=80 +core.formatter.alignment_for_selector_in_method_invocation=16 +core.formatter.alignment_for_shift_operator=0 +core.formatter.alignment_for_string_concatenation=16 +core.formatter.alignment_for_superclass_in_type_declaration=16 +core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +core.formatter.alignment_for_throws_clause_in_method_declaration=16 +core.formatter.alignment_for_type_arguments=0 +core.formatter.alignment_for_type_parameters=0 +core.formatter.alignment_for_union_type_in_multicatch=16 +core.formatter.blank_lines_after_imports=1 +core.formatter.blank_lines_after_package=1 +core.formatter.blank_lines_before_field=0 +core.formatter.blank_lines_before_first_class_body_declaration=0 +core.formatter.blank_lines_before_imports=1 +core.formatter.blank_lines_before_member_type=1 +core.formatter.blank_lines_before_method=1 +core.formatter.blank_lines_before_new_chunk=1 +core.formatter.blank_lines_before_package=0 +core.formatter.blank_lines_between_import_groups=1 +core.formatter.blank_lines_between_type_declarations=1 +core.formatter.brace_position_for_annotation_type_declaration=end_of_line +core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +core.formatter.brace_position_for_array_initializer=end_of_line +core.formatter.brace_position_for_block=end_of_line +core.formatter.brace_position_for_block_in_case=end_of_line +core.formatter.brace_position_for_constructor_declaration=end_of_line +core.formatter.brace_position_for_enum_constant=end_of_line +core.formatter.brace_position_for_enum_declaration=end_of_line +core.formatter.brace_position_for_lambda_body=end_of_line +core.formatter.brace_position_for_method_declaration=end_of_line +core.formatter.brace_position_for_switch=end_of_line +core.formatter.brace_position_for_type_declaration=end_of_line +core.formatter.comment.align_tags_descriptions_grouped=false +core.formatter.comment.align_tags_names_descriptions=false +core.formatter.comment.clear_blank_lines_in_block_comment=false +core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +core.formatter.comment.count_line_length_from_starting_position=false +core.formatter.comment.format_block_comments=true +core.formatter.comment.format_header=false +core.formatter.comment.format_html=true +core.formatter.comment.format_javadoc_comments=true +core.formatter.comment.format_line_comments=true +core.formatter.comment.format_source_code=false +core.formatter.comment.indent_parameter_description=false +core.formatter.comment.indent_root_tags=false +core.formatter.comment.indent_tag_description=false +core.formatter.comment.insert_new_line_before_root_tags=do not insert +core.formatter.comment.insert_new_line_for_parameter=do not insert +core.formatter.comment.line_length=90 +core.formatter.comment.new_lines_at_block_boundaries=true +core.formatter.comment.new_lines_at_javadoc_boundaries=true +core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +core.formatter.compact_else_if=true +core.formatter.continuation_indentation=2 +core.formatter.continuation_indentation_for_array_initializer=2 +core.formatter.disabling_tag=@formatter\:off +core.formatter.enabling_tag=@formatter\:on +core.formatter.format_guardian_clause_on_one_line=false +core.formatter.format_line_comment_starting_on_first_column=true +core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +core.formatter.indent_body_declarations_compare_to_type_header=true +core.formatter.indent_breaks_compare_to_cases=true +core.formatter.indent_empty_lines=false +core.formatter.indent_statements_compare_to_block=true +core.formatter.indent_statements_compare_to_body=true +core.formatter.indent_switchstatements_compare_to_cases=true +core.formatter.indent_switchstatements_compare_to_switch=false +core.formatter.indentation.size=4 +core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +core.formatter.insert_new_line_after_annotation_on_field=insert +core.formatter.insert_new_line_after_annotation_on_local_variable=insert +core.formatter.insert_new_line_after_annotation_on_method=insert +core.formatter.insert_new_line_after_annotation_on_package=insert +core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +core.formatter.insert_new_line_after_annotation_on_type=insert +core.formatter.insert_new_line_after_label=do not insert +core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +core.formatter.insert_new_line_after_type_annotation=do not insert +core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +core.formatter.insert_new_line_before_catch_in_try_statement=insert +core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +core.formatter.insert_new_line_before_else_in_if_statement=insert +core.formatter.insert_new_line_before_finally_in_try_statement=insert +core.formatter.insert_new_line_before_while_in_do_statement=insert +core.formatter.insert_new_line_in_empty_annotation_declaration=insert +core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +core.formatter.insert_new_line_in_empty_block=insert +core.formatter.insert_new_line_in_empty_enum_constant=insert +core.formatter.insert_new_line_in_empty_enum_declaration=insert +core.formatter.insert_new_line_in_empty_method_body=insert +core.formatter.insert_new_line_in_empty_type_declaration=insert +core.formatter.insert_space_after_additive_operator=insert +core.formatter.insert_space_after_and_in_type_parameter=insert +core.formatter.insert_space_after_assignment_operator=insert +core.formatter.insert_space_after_at_in_annotation=do not insert +core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +core.formatter.insert_space_after_binary_operator=insert +core.formatter.insert_space_after_bitwise_operator=insert +core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +core.formatter.insert_space_after_closing_brace_in_block=insert +core.formatter.insert_space_after_closing_paren_in_cast=insert +core.formatter.insert_space_after_colon_in_assert=insert +core.formatter.insert_space_after_colon_in_case=insert +core.formatter.insert_space_after_colon_in_conditional=insert +core.formatter.insert_space_after_colon_in_for=insert +core.formatter.insert_space_after_colon_in_labeled_statement=insert +core.formatter.insert_space_after_comma_in_allocation_expression=insert +core.formatter.insert_space_after_comma_in_annotation=insert +core.formatter.insert_space_after_comma_in_array_initializer=insert +core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +core.formatter.insert_space_after_comma_in_enum_declarations=insert +core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +core.formatter.insert_space_after_comma_in_for_increments=insert +core.formatter.insert_space_after_comma_in_for_inits=insert +core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +core.formatter.insert_space_after_comma_in_superinterfaces=insert +core.formatter.insert_space_after_comma_in_type_arguments=insert +core.formatter.insert_space_after_comma_in_type_parameters=insert +core.formatter.insert_space_after_ellipsis=insert +core.formatter.insert_space_after_lambda_arrow=insert +core.formatter.insert_space_after_logical_operator=insert +core.formatter.insert_space_after_multiplicative_operator=insert +core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +core.formatter.insert_space_after_opening_paren_in_cast=do not insert +core.formatter.insert_space_after_opening_paren_in_catch=do not insert +core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +core.formatter.insert_space_after_opening_paren_in_for=do not insert +core.formatter.insert_space_after_opening_paren_in_if=do not insert +core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +core.formatter.insert_space_after_opening_paren_in_switch=do not insert +core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +core.formatter.insert_space_after_opening_paren_in_try=do not insert +core.formatter.insert_space_after_opening_paren_in_while=do not insert +core.formatter.insert_space_after_postfix_operator=do not insert +core.formatter.insert_space_after_prefix_operator=do not insert +core.formatter.insert_space_after_question_in_conditional=insert +core.formatter.insert_space_after_question_in_wildcard=do not insert +core.formatter.insert_space_after_relational_operator=insert +core.formatter.insert_space_after_semicolon_in_for=insert +core.formatter.insert_space_after_semicolon_in_try_resources=insert +core.formatter.insert_space_after_shift_operator=insert +core.formatter.insert_space_after_string_concatenation=insert +core.formatter.insert_space_after_unary_operator=do not insert +core.formatter.insert_space_before_additive_operator=insert +core.formatter.insert_space_before_and_in_type_parameter=insert +core.formatter.insert_space_before_assignment_operator=insert +core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +core.formatter.insert_space_before_binary_operator=insert +core.formatter.insert_space_before_bitwise_operator=insert +core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +core.formatter.insert_space_before_closing_paren_in_cast=do not insert +core.formatter.insert_space_before_closing_paren_in_catch=do not insert +core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +core.formatter.insert_space_before_closing_paren_in_for=do not insert +core.formatter.insert_space_before_closing_paren_in_if=do not insert +core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +core.formatter.insert_space_before_closing_paren_in_switch=do not insert +core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +core.formatter.insert_space_before_closing_paren_in_try=do not insert +core.formatter.insert_space_before_closing_paren_in_while=do not insert +core.formatter.insert_space_before_colon_in_assert=insert +core.formatter.insert_space_before_colon_in_case=do not insert +core.formatter.insert_space_before_colon_in_conditional=insert +core.formatter.insert_space_before_colon_in_default=do not insert +core.formatter.insert_space_before_colon_in_for=insert +core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +core.formatter.insert_space_before_comma_in_annotation=do not insert +core.formatter.insert_space_before_comma_in_array_initializer=do not insert +core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +core.formatter.insert_space_before_comma_in_for_increments=do not insert +core.formatter.insert_space_before_comma_in_for_inits=do not insert +core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +core.formatter.insert_space_before_comma_in_type_arguments=do not insert +core.formatter.insert_space_before_comma_in_type_parameters=do not insert +core.formatter.insert_space_before_ellipsis=do not insert +core.formatter.insert_space_before_lambda_arrow=insert +core.formatter.insert_space_before_logical_operator=insert +core.formatter.insert_space_before_multiplicative_operator=insert +core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +core.formatter.insert_space_before_opening_brace_in_block=insert +core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +core.formatter.insert_space_before_opening_brace_in_switch=insert +core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +core.formatter.insert_space_before_opening_paren_in_catch=insert +core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +core.formatter.insert_space_before_opening_paren_in_for=insert +core.formatter.insert_space_before_opening_paren_in_if=insert +core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +core.formatter.insert_space_before_opening_paren_in_switch=insert +core.formatter.insert_space_before_opening_paren_in_synchronized=insert +core.formatter.insert_space_before_opening_paren_in_try=insert +core.formatter.insert_space_before_opening_paren_in_while=insert +core.formatter.insert_space_before_parenthesized_expression_in_return=insert +core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +core.formatter.insert_space_before_postfix_operator=do not insert +core.formatter.insert_space_before_prefix_operator=do not insert +core.formatter.insert_space_before_question_in_conditional=insert +core.formatter.insert_space_before_question_in_wildcard=do not insert +core.formatter.insert_space_before_relational_operator=insert +core.formatter.insert_space_before_semicolon=do not insert +core.formatter.insert_space_before_semicolon_in_for=do not insert +core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +core.formatter.insert_space_before_shift_operator=insert +core.formatter.insert_space_before_string_concatenation=insert +core.formatter.insert_space_before_unary_operator=do not insert +core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +core.formatter.join_lines_in_comments=true +core.formatter.join_wrapped_lines=true +core.formatter.keep_annotation_declaration_on_one_line=one_line_never +core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +core.formatter.keep_code_block_on_one_line=one_line_never +core.formatter.keep_else_statement_on_same_line=false +core.formatter.keep_empty_array_initializer_on_one_line=false +core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +core.formatter.keep_enum_declaration_on_one_line=one_line_never +core.formatter.keep_if_then_body_block_on_one_line=one_line_never +core.formatter.keep_imple_if_on_one_line=false +core.formatter.keep_lambda_body_block_on_one_line=one_line_never +core.formatter.keep_loop_body_block_on_one_line=one_line_never +core.formatter.keep_method_body_on_one_line=one_line_never +core.formatter.keep_simple_do_while_body_on_same_line=false +core.formatter.keep_simple_for_body_on_same_line=false +core.formatter.keep_simple_getter_setter_on_one_line=false +core.formatter.keep_simple_while_body_on_same_line=false +core.formatter.keep_then_statement_on_same_line=false +core.formatter.keep_type_declaration_on_one_line=one_line_never +core.formatter.lineSplit=120 +core.formatter.never_indent_block_comments_on_first_column=false +core.formatter.never_indent_line_comments_on_first_column=false +core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +core.formatter.number_of_empty_lines_to_preserve=1 +core.formatter.parentheses_positions_in_annotation=common_lines +core.formatter.parentheses_positions_in_catch_clause=common_lines +core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +core.formatter.parentheses_positions_in_for_statment=common_lines +core.formatter.parentheses_positions_in_if_while_statement=common_lines +core.formatter.parentheses_positions_in_lambda_declaration=common_lines +core.formatter.parentheses_positions_in_method_delcaration=common_lines +core.formatter.parentheses_positions_in_method_invocation=common_lines +core.formatter.parentheses_positions_in_switch_statement=common_lines +core.formatter.parentheses_positions_in_try_clause=common_lines +core.formatter.put_empty_statement_on_new_line=true +core.formatter.tabulation.char=tab +core.formatter.tabulation.size=4 +core.formatter.use_on_off_tags=true +core.formatter.use_tabs_only_for_leading_indentations=false +core.formatter.wrap_before_additive_operator=true +core.formatter.wrap_before_assignment_operator=false +core.formatter.wrap_before_binary_operator=true +core.formatter.wrap_before_bitwise_operator=true +core.formatter.wrap_before_conditional_operator=true +core.formatter.wrap_before_logical_operator=true +core.formatter.wrap_before_multiplicative_operator=true +core.formatter.wrap_before_or_operator_multicatch=true +core.formatter.wrap_before_relational_operator=true +core.formatter.wrap_before_shift_operator=true +core.formatter.wrap_before_string_concatenation=true +core.formatter.wrap_outer_expressions_when_nested=true diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/formatter.prefs deleted file mode 100644 index 24b74b10..00000000 --- a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/formatter.prefs +++ /dev/null @@ -1,354 +0,0 @@ -io.spring.javaformat.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false -io.spring.javaformat.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 -io.spring.javaformat.eclipse.jdt.core.formatter.align_type_members_on_columns=false -io.spring.javaformat.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false -io.spring.javaformat.eclipse.jdt.core.formatter.align_with_spaces=false -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_assignment=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_module_statements=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 -io.spring.javaformat.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_after_package=1 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_field=0 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_method=1 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_before_package=0 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -io.spring.javaformat.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -io.spring.javaformat.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_block_comments=true -io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_header=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_html=true -io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_line_comments=true -io.spring.javaformat.eclipse.jdt.core.formatter.comment.format_source_code=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.indent_parameter_description=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.indent_root_tags=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.indent_tag_description=false -io.spring.javaformat.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.comment.line_length=90 -io.spring.javaformat.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true -io.spring.javaformat.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true -io.spring.javaformat.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false -io.spring.javaformat.eclipse.jdt.core.formatter.compact_else_if=true -io.spring.javaformat.eclipse.jdt.core.formatter.continuation_indentation=2 -io.spring.javaformat.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -io.spring.javaformat.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off -io.spring.javaformat.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on -io.spring.javaformat.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -io.spring.javaformat.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true -io.spring.javaformat.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -io.spring.javaformat.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -io.spring.javaformat.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -io.spring.javaformat.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -io.spring.javaformat.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -io.spring.javaformat.eclipse.jdt.core.formatter.indent_empty_lines=false -io.spring.javaformat.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -io.spring.javaformat.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -io.spring.javaformat.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -io.spring.javaformat.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -io.spring.javaformat.eclipse.jdt.core.formatter.indentation.size=4 -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -io.spring.javaformat.eclipse.jdt.core.formatter.join_lines_in_comments=true -io.spring.javaformat.eclipse.jdt.core.formatter.join_wrapped_lines=true -io.spring.javaformat.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -io.spring.javaformat.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -io.spring.javaformat.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -io.spring.javaformat.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false -io.spring.javaformat.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false -io.spring.javaformat.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false -io.spring.javaformat.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false -io.spring.javaformat.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -io.spring.javaformat.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never -io.spring.javaformat.eclipse.jdt.core.formatter.lineSplit=120 -io.spring.javaformat.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -io.spring.javaformat.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -io.spring.javaformat.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -io.spring.javaformat.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines -io.spring.javaformat.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -io.spring.javaformat.eclipse.jdt.core.formatter.tabulation.char=tab -io.spring.javaformat.eclipse.jdt.core.formatter.tabulation.size=4 -io.spring.javaformat.eclipse.jdt.core.formatter.use_on_off_tags=true -io.spring.javaformat.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_additive_operator=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_binary_operator=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_logical_operator=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_relational_operator=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_shift_operator=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true -io.spring.javaformat.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true From 3e962d7723b2692fff5f0584502201fac567771a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 6 Oct 2021 20:52:25 -0700 Subject: [PATCH 052/238] Fix Eclipse Plugin imports See gh-277 --- .../META-INF/MANIFEST.MF | 5 +++-- .../build.properties | 3 ++- .../io.spring.javaformat.eclipse/pom.xml | 5 +++++ .../spring/javaformat/eclipse/Activator.java | 19 +++++++++++++------ 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index fe56d4d5..4df85b22 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -19,8 +19,9 @@ Require-Bundle: org.eclipse.ui, org.eclipse.buildship.core;resolution:=optional, net.sf.eclipsecs.core;resolution:=optional Bundle-ClassPath: ., - lib/spring-javaformat-formatter-eclipse.jar, lib/spring-javaformat-config.jar, lib/spring-javaformat-formatter.jar, - lib/spring-javaformat-checkstyle.jar + lib/spring-javaformat-checkstyle.jar, + lib/spring-javaformat-formatter-eclipse-jdt-jdk11.jar, + lib/spring-javaformat-formatter-eclipse-jdt-jdk8.jar Bundle-ActivationPolicy: lazy diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties index 0457dd52..7780dc22 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties @@ -6,4 +6,5 @@ bin.includes = META-INF/,\ lib/spring-javaformat-checkstyle.jar,\ lib/spring-javaformat-config.jar,\ lib/spring-javaformat-formatter.jar,\ - lib/spring-javaformat-formatter-eclipse.jar + lib/spring-javaformat-formatter-eclipse-jdt-jdk11.jar,\ + lib/spring-javaformat-formatter-eclipse-jdt-jdk8.jar diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index cdfa2135..54ca80b8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -57,6 +57,11 @@ spring-javaformat-formatter-eclipse-jdt-jdk8 ${project.version} + + io.spring.javaformat + spring-javaformat-formatter-eclipse-jdt-jdk11 + ${project.version} + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java index 8bc17fcf..4b03b9eb 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java @@ -16,11 +16,13 @@ package io.spring.javaformat.eclipse; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.Plugin; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; -import io.spring.javaformat.eclipse.jdt.core.JavaCore; - /** * The activator class controls the plug-in life cycle. * @@ -35,22 +37,27 @@ public class Activator extends AbstractUIPlugin { private static Activator plugin; - private JavaCore javaCore; + private final List javaCorePlugins = new ArrayList<>(); public Activator() { - this.javaCore = new JavaCore(); + this.javaCorePlugins.add(new io.spring.javaformat.eclipse.jdt.jdk8.core.JavaCore()); + this.javaCorePlugins.add(new io.spring.javaformat.eclipse.jdt.jdk11.core.JavaCore()); } @Override public void start(BundleContext context) throws Exception { super.start(context); plugin = this; - this.javaCore.start(context); + for (Plugin javaCorePlugin : this.javaCorePlugins) { + javaCorePlugin.start(context); + } } @Override public void stop(BundleContext context) throws Exception { - this.javaCore.stop(context); + for (Plugin javaCorePlugin : this.javaCorePlugins) { + javaCorePlugin.stop(context); + } plugin = null; super.stop(context); } From 3aeeba7e204ce2c9e1f8155edab7cc27e5a348ee Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 6 Oct 2021 21:08:25 -0700 Subject: [PATCH 053/238] Upgrade to checkstyle 9.0.1 Closes gh-302 --- pom.xml | 2 +- .../spring/javaformat/checkstyle/check/SpringJavadocCheck.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index c6375050..3c8b9a9d 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ 1.0b3 7.3.1 3.8.0 - 8.45.1 + 9.0.1 3.4 2.4.21 2.14.1 diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index dd600f53..8b2edc4b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -167,7 +167,7 @@ private void checkSinceTag(DetailAST ast, TextBlock javadoc) { String[] text = javadoc.getText(); DetailAST interfaceDef = getInterfaceDef(ast); boolean privateType = !isPublicOrProtected(ast) && (interfaceDef == null || !isPublicOrProtected(interfaceDef)); - boolean innerType = ast.getParent() != null; + boolean innerType = ast.getParent() != null && ast.getParent().getType() != TokenTypes.COMPILATION_UNIT; boolean found = false; for (int i = 0; i < text.length; i++) { Matcher matcher = SINCE_TAG_PATTERN.matcher(text[i]); From a4cd7e22b031975b5336c3a99f5ca2cad730891b Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 6 Oct 2021 19:54:29 -0700 Subject: [PATCH 054/238] Skip lambda checks in switch expressions Update `SpringLambdaCheck` to skip switch statement "arrow case" labels. Fixes gh-300 --- .../checkstyle/check/SpringLambdaCheck.java | 3 +- .../src/test/resources/check/LambdaSwitch.txt | 1 + .../test/resources/source/LambdaSwitch.java | 35 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LambdaSwitch.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java index 4d452ea7..42822761 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java @@ -38,7 +38,8 @@ public int[] getAcceptableTokens() { @Override public void visitToken(DetailAST ast) { - if (ast.getType() == TokenTypes.LAMBDA) { + if (ast.getType() == TokenTypes.LAMBDA && ast.getParent() != null + && ast.getParent().getType() != TokenTypes.SWITCH_RULE) { visitLambda(ast); } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LambdaSwitch.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LambdaSwitch.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LambdaSwitch.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java new file mode 100644 index 00000000..59d213ac --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java @@ -0,0 +1,35 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.util.function.Function; + +/** + * Lambda in a switch statement. + * + * @author Josef Reichardt + */ +public class LambdaSwitch { + + private void sayHello(String[] args) { + Function getText = (cnt) -> "Number of args: " + cnt; + String message = switch (args.length) { + case 0 -> "No arg"; + case 1 -> "One arg"; + default -> getText.apply(args.length); + }; + System.out.println(message); + } +} From bf48af7e9b84794325afc7a6401bc885a2d81673 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 6 Oct 2021 21:19:16 -0700 Subject: [PATCH 055/238] Revert "Add a separate import group for jakarta imports" This reverts commit 30765833d2695e6fecb0717a9a56aa2ab8f0eb08. Closes gh-301 --- .../projectsettings/org.eclipse.jdt.ui.prefs | 2 +- .../check/SpringImportOrderCheck.java | 2 +- .../test/resources/check/ImportOrderValid.txt | 1 - .../resources/source/ImportOrderValid.java | 41 ------------------- 4 files changed, 2 insertions(+), 44 deletions(-) delete mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/ImportOrderValid.txt delete mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs index 12065c54..af9117f9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs @@ -64,7 +64,7 @@ formatter_settings_version=13 org.eclipse.jdt.ui.exception.name=e org.eclipse.jdt.ui.gettersetter.use.is=true org.eclipse.jdt.ui.ignorelowercasenames=true -org.eclipse.jdt.ui.importorder=java;javax;jakarta;;org.springframework;\#; +org.eclipse.jdt.ui.importorder=java;javax;;org.springframework;\#; org.eclipse.jdt.ui.javadoc=true org.eclipse.jdt.ui.keywordthis=false org.eclipse.jdt.ui.ondemandthreshold=9999 diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java index bf75dcc4..94198a8b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java @@ -39,7 +39,7 @@ public SpringImportOrderCheck() { } public void setProjectRootPackage(String projectRootPackage) { - setGroups("java", "/^javax?\\./", "/^jakarta?\\./", "*", projectRootPackage); + setGroups("java", "/^javax?\\./", "*", projectRootPackage); } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/ImportOrderValid.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/ImportOrderValid.txt deleted file mode 100644 index 69174e4c..00000000 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/ImportOrderValid.txt +++ /dev/null @@ -1 +0,0 @@ -+0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java deleted file mode 100644 index 3aecd999..00000000 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderValid.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.example; - -import java.util.Objects; - -import javax.annotation.Nonnull; - -import jakarta.servlet.Servlet; - -/** - * Custom pacakge with valid imports. - * - * @author Phillip Webb - */ -public final class ImportOrderValid { - - private ImportOrderValid() { - } - - @Nonnull - public static void main(String[] args) { - Objects.nonNull(null); - Servlet s = null; - } - -} From 84dcece4f3dd141d4acadef84627cddb3db71289 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 12 Oct 2021 20:10:58 -0700 Subject: [PATCH 056/238] Fix tab based formatters See gh-277 --- .../eclipse/formatter/SpringCodeFormatterJdk11Tabs.java | 2 +- .../eclipse/formatter/SpringCodeFormatterJdk8Tabs.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java index 80c85bc2..78bd7aba 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java @@ -30,7 +30,7 @@ public class SpringCodeFormatterJdk11Tabs extends SpringCodeFormatter { public SpringCodeFormatterJdk11Tabs() { - super(JavaFormatConfig.of(JavaBaseline.V11, IndentationStyle.SPACES)); + super(JavaFormatConfig.of(JavaBaseline.V11, IndentationStyle.TABS)); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java index 1807b86c..6381f3e4 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java @@ -30,7 +30,7 @@ public class SpringCodeFormatterJdk8Tabs extends SpringCodeFormatter { public SpringCodeFormatterJdk8Tabs() { - super(JavaFormatConfig.of(JavaBaseline.V8, IndentationStyle.SPACES)); + super(JavaFormatConfig.of(JavaBaseline.V8, IndentationStyle.TABS)); } } From 11a346f504e1108dcb69ab34b2824d6c4950531d Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 10 Dec 2021 13:14:12 +0000 Subject: [PATCH 057/238] Upgrade to Log4j 2.15.0 Closes gh-305 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3c8b9a9d..a5d45afe 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 9.0.1 3.4 2.4.21 - 2.14.1 + 2.15.0 3.5.0 ${maven-core.version} 3.5 From e8d7bf75ac652fdf2d535ba4b36e15436f67ad7d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Dec 2021 16:10:58 -0800 Subject: [PATCH 058/238] Upgrade sdkman to Java 11.0.11.hs-adpt --- .sdkmanrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.sdkmanrc b/.sdkmanrc index 59f306d1..0262a261 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=11.0.10.hs-adpt +java=11.0.11.hs-adpt From 48b0df6113fe0b6a0ed74be4592cf23a3a24882c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Dec 2021 16:11:50 -0800 Subject: [PATCH 059/238] Upgrade to tycho 2.5.0 Closes gh-308 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a5d45afe..4768337c 100644 --- a/pom.xml +++ b/pom.xml @@ -53,8 +53,8 @@ 1.16.0 1.16.0 3.0.3 - 2.4.0 - 2.4.0 + 2.5.0 + 2.5.0 From 3a6d392f25d7bd3e267e0f5e466fb1368234ef49 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Dec 2021 16:09:25 -0800 Subject: [PATCH 060/238] Upgrade to Log4j 2.16.0 Closes gh-307 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4768337c..c68b45a5 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 9.0.1 3.4 2.4.21 - 2.15.0 + 2.16.0 3.5.0 ${maven-core.version} 3.5 From 33f2a08c11c07937532e5671e18a5a13b885c0b2 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Dec 2021 16:12:41 -0800 Subject: [PATCH 061/238] Upgrade to Eclipse 2021-12 Closes gh-306 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c68b45a5..9038d080 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2021-09/202109151000/ + https://download.eclipse.org/releases/2021-12/202112081000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 From 1b87ac1e6f42ba53142310f4f9cefbebb6531b86 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Sun, 30 Jan 2022 21:31:27 -0800 Subject: [PATCH 062/238] Add empty javadoc for eclipse-runtime --- .../pom.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index f9518bd0..88d665bd 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -23,6 +23,22 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + empty-javadoc-jar + package + + jar + + + javadoc + + + + org.apache.maven.plugins maven-source-plugin From f3e4a075e69d689c188be531ea5321a28a9421df Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Mon, 31 Jan 2022 05:58:36 +0000 Subject: [PATCH 063/238] Next development version (v0.0.31-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 37 files changed, 39 insertions(+), 39 deletions(-) diff --git a/README.adoc b/README.adoc index b4838327..a8caa562 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.29 +:release-version: 0.0.30 :checkstyle-version: 8.45.1 == Spring Java Format diff --git a/pom.xml b/pom.xml index 9038d080..a6f4c6d0 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 01d1e583..42266577 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.30-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.31-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.30-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.31-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 71515b8d..3d1012fe 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index b0609664..9bf3586c 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.30.qualifier" + version="0.0.31.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 05c9cf96..d5cefff4 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 636fa69a..0307a089 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index f4fc36c7..9ed05775 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 1833b3c1..4ebad12e 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 526b45e2..8f70f3d2 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.30.qualifier +Bundle-Version: 0.0.31.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit, org.junit.jupiter.api diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 04fa31e5..8e7ac161 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 4df85b22..b3b0157d 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.30.qualifier +Bundle-Version: 0.0.31.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 54ca80b8..a6ac3120 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index d3159e35..4a93e17c 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index c9e767f8..a74f6d1d 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 0248dbf8..d1f4faff 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 04d4b323..3425f1c3 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 96296809..ad20866b 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index ef59e6e4..036d8ba4 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index c0489d44..6cf5be29 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 8c8abe98..7313a703 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 5a8db181..88bdd9e0 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 39ab2b35..601d36b4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 6a2f9144..da6e64e2 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 4725d0ae..2f0d60dd 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.30.qualifier +Bundle-Version: 0.0.31.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 3e7b833b..6d442fea 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 4fa1db47..71f0eef7 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.30.qualifier +Bundle-Version: 0.0.31.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 35f9412d..dfc2deb6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index fb6613f3..fadf89f6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 096c28bc..c8948974 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 0e297c74..56f1fb63 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 88d665bd..5c8929be 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index faa66633..7fca38d6 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 344ec3e4..34608caf 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 4cf3c507..d4d99d44 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index e9b3874d..ac082d25 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 0a68aa97..92181cfd 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.30-SNAPSHOT + 0.0.31-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 0489b99de59396d509b493768038de936dfe3885 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 2 Feb 2022 13:24:35 -0800 Subject: [PATCH 064/238] Fix PropertiesJavaFormatConfig JavaBaseline lookup Fixes gh-311 --- .../io/spring/javaformat/config/PropertiesJavaFormatConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java index c82dabc0..23d87a59 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java @@ -38,7 +38,7 @@ class PropertiesJavaFormatConfig implements JavaFormatConfig { @Override public JavaBaseline getJavaBaseline() { Object value = this.properties.get("java-baseline"); - return (value != null) ? JavaBaseline.valueOf("v" + value.toString().toUpperCase().trim()) + return (value != null) ? JavaBaseline.valueOf("V" + value.toString().toUpperCase().trim()) : DEFAULT.getJavaBaseline(); } From f13bb500f29153519d69f8ea2265c88faa4502f5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 2 Feb 2022 13:32:15 -0800 Subject: [PATCH 065/238] Upgrade CI to artifactory resource 0.0.17 --- ci/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index b4334fd4..9b820bd5 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -41,7 +41,7 @@ resource_types: type: registry-image source: repository: springio/artifactory-resource - tag: "0.0.14" + tag: "0.0.17" - name: pull-request type: registry-image source: From 727bda86607011c9d51c905f853813c6722aa0dd Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 2 Feb 2022 13:32:38 -0800 Subject: [PATCH 066/238] Upgrade CI to github-release-resource 0.0.17 --- ci/pipeline.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 9b820bd5..a870f942 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -51,6 +51,11 @@ resource_types: source: repository: cfcommunity/slack-notification-resource tag: latest +- name: github-release + type: registry-image + source: + repository: concourse/github-release-resource + tag: 1.7.0 resources: - name: git-repo type: git From c982361ac2f421424eef43496969b6d370aa108f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 2 Feb 2022 14:39:04 -0800 Subject: [PATCH 067/238] Add PropertiesJavaFormatConfigTests --- .../PropertiesJavaFormatConfigTests.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java diff --git a/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java new file mode 100644 index 00000000..135e9e0e --- /dev/null +++ b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java @@ -0,0 +1,62 @@ +/* + * Copyright 2017-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.config; + +import java.util.Properties; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link PropertiesJavaFormatConfig}. + * + * @author Phillip Webb + */ +class PropertiesJavaFormatConfigTests { + + @Test + void getJavaBaselineWhenNoPropertyReturnsJava11() { + Properties properties = new Properties(); + PropertiesJavaFormatConfig config = new PropertiesJavaFormatConfig(properties); + assertThat(config.getJavaBaseline()).isEqualTo(JavaBaseline.V11); + } + + @Test + void getJavaBaselineWhenPropertyReturnsPropertyValue() { + Properties properties = new Properties(); + properties.setProperty("java-baseline", "8"); + PropertiesJavaFormatConfig config = new PropertiesJavaFormatConfig(properties); + assertThat(config.getJavaBaseline()).isEqualTo(JavaBaseline.V8); + } + + @Test + void getIndentationStyleWhenNoPropertyReturnsJava11() { + Properties properties = new Properties(); + PropertiesJavaFormatConfig config = new PropertiesJavaFormatConfig(properties); + assertThat(config.getIndentationStyle()).isEqualTo(IndentationStyle.TABS); + } + + @Test + void getIndentationStyleWhenPropertyReturnsPropertyValue() { + Properties properties = new Properties(); + properties.setProperty("indentation-style", "spaces"); + PropertiesJavaFormatConfig config = new PropertiesJavaFormatConfig(properties); + assertThat(config.getIndentationStyle()).isEqualTo(IndentationStyle.SPACES); + } + +} From acfe7ce87062ab2e6db39df3f7b11c2a8a2e75f6 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 2 Feb 2022 14:40:39 -0800 Subject: [PATCH 068/238] Upgrade to log4j 2.17.1 Closes gh-312 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a6f4c6d0..1d4f2ffc 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 9.0.1 3.4 2.4.21 - 2.16.0 + 2.17.1 3.5.0 ${maven-core.version} 3.5 From 4f550f7d320232607169adfb604a3a36ebffc23a Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 2 Feb 2022 23:09:44 +0000 Subject: [PATCH 069/238] Next development version (v0.0.32-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 37 files changed, 39 insertions(+), 39 deletions(-) diff --git a/README.adoc b/README.adoc index a8caa562..9bf71c62 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.30 +:release-version: 0.0.31 :checkstyle-version: 8.45.1 == Spring Java Format diff --git a/pom.xml b/pom.xml index 1d4f2ffc..83b07344 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 42266577..370279fb 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.31-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.32-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.31-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.32-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 3d1012fe..5c869417 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 9bf3586c..e1327ddd 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.31.qualifier" + version="0.0.32.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index d5cefff4..dd3be19a 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 0307a089..3b92884c 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 9ed05775..f04573a0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 4ebad12e..c219f783 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 8f70f3d2..00720e55 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.31.qualifier +Bundle-Version: 0.0.32.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit, org.junit.jupiter.api diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 8e7ac161..f469f878 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index b3b0157d..4a02201b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.31.qualifier +Bundle-Version: 0.0.32.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index a6ac3120..50d82856 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 4a93e17c..84f75c5c 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index a74f6d1d..deed1def 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index d1f4faff..3235275d 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 3425f1c3..9e9d2ef2 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index ad20866b..4c9a5294 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 036d8ba4..94d846e6 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 6cf5be29..a54ebca7 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 7313a703..5b088b90 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 88bdd9e0..64cfd96a 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 601d36b4..a077a232 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index da6e64e2..d4c600d6 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 2f0d60dd..4808462c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.31.qualifier +Bundle-Version: 0.0.32.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 6d442fea..5650a26c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 71f0eef7..6b5d355f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.31.qualifier +Bundle-Version: 0.0.32.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index dfc2deb6..2c826b4b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index fadf89f6..f7a74311 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index c8948974..9e09a7f1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 56f1fb63..0b3a97d5 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 5c8929be..762e1a1b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 7fca38d6..ca716912 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 34608caf..64e5b0c7 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index d4d99d44..b1ffc0c8 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index ac082d25..4ac22d4e 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 92181cfd..a5ff7cd7 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.31-SNAPSHOT + 0.0.32-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From de18964c1abfd41e6605a670b3b9a0ef1ca37de2 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Thu, 10 Feb 2022 11:46:56 +0100 Subject: [PATCH 070/238] Allow static imports for WebMvc.fn See gh-316 --- src/checkstyle/checkstyle.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 71649dd3..b89993e6 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -70,7 +70,7 @@ + value="org.assertj.core.api.Assertions.*, org.junit.Assert.*, org.junit.Assume.*, org.junit.internal.matchers.ThrowableMessageMatcher.*, org.hamcrest.CoreMatchers.*, org.hamcrest.Matchers.*, org.springframework.boot.configurationprocessor.ConfigurationMetadataMatchers.*, org.springframework.boot.configurationprocessor.TestCompiler.*, org.springframework.boot.test.autoconfigure.AutoConfigurationImportedCondition.*, org.mockito.Mockito.*, org.mockito.BDDMockito.*, org.mockito.Matchers.*, org.mockito.ArgumentMatchers.*, org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*, org.springframework.restdocs.hypermedia.HypermediaDocumentation.*, org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*, org.springframework.test.web.servlet.result.MockMvcResultMatchers.*, org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.*, org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*, org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*, org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo, org.springframework.test.web.client.match.MockRestRequestMatchers.*, org.springframework.test.web.client.response.MockRestResponseCreators.*, org.springframework.web.reactive.function.server.RequestPredicates.*, org.springframework.web.reactive.function.server.RouterFunctions.*, org.springframework.web.servlet.function.RequestPredicates.*, org.springframework.web.servlet.function.RouterFunctions.*, org.springframework.test.web.servlet.setup.MockMvcBuilders.*"/> From 044a405e6f1ba8a26b2018f16f166a36c2784b70 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 11 Feb 2022 11:44:36 +0000 Subject: [PATCH 071/238] Polish indentation --- src/checkstyle/checkstyle.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index b89993e6..956ad831 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -103,11 +103,11 @@ - + - + - + @@ -122,21 +122,21 @@ - + - - + + - - + + @@ -159,5 +159,5 @@ - + From 48edcc3d14b71064d1d8e2d37f532a157ca77a46 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Sat, 19 Feb 2022 10:59:41 +0000 Subject: [PATCH 072/238] Avoid eager task creation in the Gradle plugin Closes gh-319 --- .../gradle/SpringJavaFormatPlugin.java | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index 2b382728..9c14a75f 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,8 @@ import org.gradle.api.plugins.JavaBasePlugin; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.TaskContainer; +import org.gradle.api.tasks.TaskProvider; import io.spring.javaformat.gradle.tasks.CheckFormat; import io.spring.javaformat.gradle.tasks.Format; @@ -33,6 +35,7 @@ * Spring Format Gradle Plugin. * * @author Phillip Webb + * @author Andy Wilkinson */ public class SpringJavaFormatPlugin implements Plugin { @@ -46,34 +49,37 @@ public void apply(Project project) { private void addSourceTasks() { this.project.getPlugins().withType(JavaBasePlugin.class, (plugin) -> { - Task formatAll = this.project.task(Format.NAME); - formatAll.setDescription(Format.DESCRIPTION); - Task checkAll = this.project.task(CheckFormat.NAME); - checkAll.setDescription(CheckFormat.DESCRIPTION); - this.project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkAll); + TaskContainer tasks = this.project.getTasks(); + TaskProvider formatAllProvider = tasks.register(Format.NAME); + formatAllProvider.configure((formatAll) -> formatAll.setDescription(Format.DESCRIPTION)); + TaskProvider checkAllProvider = tasks.register(CheckFormat.NAME); + checkAllProvider.configure((checkAll) -> checkAll.setDescription(CheckFormat.DESCRIPTION)); + tasks.named(JavaBasePlugin.CHECK_TASK_NAME).configure((check) -> check.dependsOn(checkAllProvider)); this.project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets() - .all((sourceSet) -> addSourceTasks(sourceSet, checkAll, formatAll)); + .all((sourceSet) -> addSourceTasks(sourceSet, checkAllProvider, formatAllProvider)); }); } - private void addSourceTasks(SourceSet sourceSet, Task checkAll, Task formatAll) { - CheckFormat checkTask = addFormatterTask(sourceSet, CheckFormat.class, CheckFormat.NAME, + private void addSourceTasks(SourceSet sourceSet, TaskProvider checkAllProvider, TaskProvider formatAllProvider) { + TaskProvider checkTaskProvider = addFormatterTask(sourceSet, CheckFormat.class, CheckFormat.NAME, CheckFormat.DESCRIPTION); - checkTask.setReportLocation( - new File(this.project.getBuildDir(), "reports/format/" + sourceSet.getName() + "/check-format.txt")); - checkAll.dependsOn(checkTask); - Format formatSourceSet = addFormatterTask(sourceSet, Format.class, Format.NAME, Format.DESCRIPTION); - formatSourceSet.conventionMapping("encoding", () -> "UTF-8"); - formatAll.dependsOn(formatSourceSet); + checkTaskProvider.configure((checkTask) -> checkTask.setReportLocation( + new File(this.project.getBuildDir(), "reports/format/" + sourceSet.getName() + "/check-format.txt"))); + checkAllProvider.configure((checkAll) -> checkAll.dependsOn(checkTaskProvider)); + TaskProvider formatTaskProvider = addFormatterTask(sourceSet, Format.class, Format.NAME, Format.DESCRIPTION); + formatTaskProvider.configure((format) -> format.conventionMapping("encoding", () -> "UTF-8")); + formatAllProvider.configure((formatAll) -> formatAll.dependsOn(formatTaskProvider)); } - private T addFormatterTask(SourceSet sourceSet, Class taskType, String name, + private TaskProvider addFormatterTask(SourceSet sourceSet, Class taskType, String name, String desc) { String taskName = sourceSet.getTaskName(name, null); - T task = this.project.getTasks().create(taskName, taskType); - task.setDescription(desc + " for " + sourceSet.getName()); - task.setSource(sourceSet.getAllJava()); - return task; + TaskProvider provider = this.project.getTasks().register(taskName, taskType); + provider.configure((task) -> { + task.setDescription(desc + " for " + sourceSet.getName()); + task.setSource(sourceSet.getAllJava()); + }); + return provider; } } From e26518b9fa81b9a17170b30b1494e91aa31f764e Mon Sep 17 00:00:00 2001 From: Tadaya Tsuyukubo Date: Tue, 15 Feb 2022 23:30:15 -0800 Subject: [PATCH 073/238] Document how to set up Checkstyle-IDEA plugin See gh-318 Signed-off-by: Tadaya Tsuyukubo --- README.adoc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.adoc b/README.adoc index 9bf71c62..89d7f401 100644 --- a/README.adoc +++ b/README.adoc @@ -240,6 +240,29 @@ The plugin is automatically enabled when one or more of the following conditions * For maven based project, `spring-javaformat-maven-plugin` plugin is defined in `pom.xml` * For gradle based project, `io.spring.javaformat` plugin is applied +==== IntelliJ IDEA CheckStyle-IDEA plugin +The https://plugins.jetbrains.com/plugin/1065-checkstyle-idea[CheckStyle-IDEA plugin] provides checkstyle integration to the IntelliJ IDEA. + +To configure the plugin, first you need to create your own checkstyle configuration file. + +[source,xml,indent=0] +---- + + + + + +---- + +Once configuration file is created: + +* Open `Preferences` - `Tools` - `Checkstyle` +* Add `spring-javaformat-checkstyle-[VERSION].jar` and `spring-javaformat-config-[VERSION].jar` to the `Third-Party Checks` +* Specify appropriate `Checkstyle version` +* Add your checkstyle configuration file. + === About the Conventions From 4c3d7b13e0ead5086ef5b09a762ea89a45d54900 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Sat, 19 Feb 2022 11:55:16 +0000 Subject: [PATCH 074/238] Polish README --- README.adoc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.adoc b/README.adoc index 89d7f401..7068b857 100644 --- a/README.adoc +++ b/README.adoc @@ -179,8 +179,8 @@ Your `checkstyle.xml` file should look then like this: ---- + "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" + "https://checkstyle.org/dtds/configuration_1_3.dtd"> @@ -237,13 +237,13 @@ You can download the latest version from https://repo1.maven.org/maven2/io/sprin The plugin is automatically enabled when one or more of the following conditions match: * `.springformat` file exists -* For maven based project, `spring-javaformat-maven-plugin` plugin is defined in `pom.xml` -* For gradle based project, `io.spring.javaformat` plugin is applied +* For a Maven-based project, `spring-javaformat-maven-plugin` plugin is defined in `pom.xml` +* For a Gradle-based project, `io.spring.javaformat` plugin is applied -==== IntelliJ IDEA CheckStyle-IDEA plugin -The https://plugins.jetbrains.com/plugin/1065-checkstyle-idea[CheckStyle-IDEA plugin] provides checkstyle integration to the IntelliJ IDEA. +==== CheckStyle-IDEA plugin +The https://plugins.jetbrains.com/plugin/1065-checkstyle-idea[CheckStyle-IDEA plugin] provides Checkstyle integration for IntelliJ IDEA. -To configure the plugin, first you need to create your own checkstyle configuration file. +To configure the plugin, create your own Checkstyle configuration file with the following content: [source,xml,indent=0] ---- @@ -256,12 +256,12 @@ To configure the plugin, first you need to create your own checkstyle configurat ---- -Once configuration file is created: +Once the configuration file is created, configure your IDE to use it: * Open `Preferences` - `Tools` - `Checkstyle` -* Add `spring-javaformat-checkstyle-[VERSION].jar` and `spring-javaformat-config-[VERSION].jar` to the `Third-Party Checks` -* Specify appropriate `Checkstyle version` -* Add your checkstyle configuration file. +* Add `spring-javaformat-checkstyle-{release-version}.jar` and `spring-javaformat-config-{release-version}.jar` to the `Third-Party Checks` +* Specify the appropriate `Checkstyle version` +* Add your Checkstyle configuration file @@ -298,8 +298,8 @@ If you want most `SpringChecks` but need to exclude one or two, you can do somet ---- + "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" + "https://checkstyle.org/dtds/configuration_1_3.dtd"> From 728fa19179704c7c9b3b37585ceca08fb4464928 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 1 Mar 2022 11:13:57 +0000 Subject: [PATCH 075/238] Fix Gradle plugin's tests following JUnit 5 upgrade Closes gh-322 --- .../spring-javaformat-gradle-plugin/build.gradle | 1 + .../java/io/spring/javaformat/gradle/CheckTaskTests.java | 6 +++--- .../java/io/spring/javaformat/gradle/FormatTaskTests.java | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle index c9f3bd37..706161d8 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle @@ -20,6 +20,7 @@ jar { } test { + useJUnitPlatform() testLogging { events "passed", "skipped", "failed" } diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index f8938dca..6b0a5ba0 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,11 +45,11 @@ @ExtendWith(GradleBuildExtension.class) public class CheckTaskTests { + private final GradleBuild gradleBuild = new GradleBuild(); + @TempDir public File temp; - public GradleBuild gradleBuild; - @Test public void checkOk() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/check-ok").build("check"); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index d3271c9f..071cf75c 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,7 +39,7 @@ @ExtendWith(GradleBuildExtension.class) public class FormatTaskTests { - public GradleBuild gradleBuild; + private final GradleBuild gradleBuild = new GradleBuild(); @Test public void checkOk() throws IOException { From e19d60e7a796b09e4605e68cf782e90eb8a72d51 Mon Sep 17 00:00:00 2001 From: Rivaldi Date: Sat, 23 Apr 2022 06:02:19 +0700 Subject: [PATCH 076/238] Fix reference to springjavaformatconfig in README See gh-326 --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index 7068b857..a4956dc8 100644 --- a/README.adoc +++ b/README.adoc @@ -236,7 +236,7 @@ You can download the latest version from https://repo1.maven.org/maven2/io/sprin ==== Enable the Plugin The plugin is automatically enabled when one or more of the following conditions match: -* `.springformat` file exists +* `.springjavaformatconfig` file exists * For a Maven-based project, `spring-javaformat-maven-plugin` plugin is defined in `pom.xml` * For a Gradle-based project, `io.spring.javaformat` plugin is applied From afb0e524f20b2d04647c4ee9593d07b4ae73b824 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Wed, 11 May 2022 16:32:28 +0900 Subject: [PATCH 077/238] Fix reference to CheckFormat in README See gh-327 --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index a4956dc8..6c4a40f1 100644 --- a/README.adoc +++ b/README.adoc @@ -150,7 +150,7 @@ In case you want to exclude a package from being checked, for example if you gen [source,groovy,indent=0,subs="normal"] ---- -tasks.withType(io.spring.javaformat.gradle.CheckTask) { +tasks.withType(io.spring.javaformat.gradle.tasks.CheckFormat) { exclude "package/to/exclude" } ---- From d496c187af0274a6c2b989455a926f1313ad7221 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 May 2022 10:45:23 +0100 Subject: [PATCH 078/238] Add JavadocPackageCheck to the default Spring checks Closes gh-328 --- .../src/main/java/simple/package-info.java | 1 + .../checkstyle/spring-checkstyle.xml | 1 + .../checkstyle/SpringChecksTests.java | 16 +++++++++--- .../SpringConfigurationLoaderTests.java | 12 ++++----- .../check/nopackageinfo/NoPackageInfo.txt | 1 + .../source/nopackageinfo/NoPackageInfo.java | 26 +++++++++++++++++++ .../test/resources/source/package-info.java | 0 7 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-ok/src/main/java/simple/package-info.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/nopackageinfo/NoPackageInfo.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info.java diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-ok/src/main/java/simple/package-info.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-ok/src/main/java/simple/package-info.java new file mode 100644 index 00000000..35b32be0 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-ok/src/main/java/simple/package-info.java @@ -0,0 +1 @@ +package simple; \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index ac2e3b31..894b78bb 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -12,6 +12,7 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index 6eb6f653..311d7f50 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -112,8 +113,14 @@ private void printDebugInfo(File file) throws CheckstyleException { } public static Collection paramaters() throws IOException { - return Arrays.stream(SOURCES_DIR.list((dir, name) -> !name.startsWith("."))).sorted().map(Parameter::new) - .collect(Collectors.toList()); + ArrayList parameters = Arrays.stream(SOURCES_DIR.listFiles(SpringChecksTests::sourceFile)).sorted() + .map(Parameter::new).collect(Collectors.toCollection(ArrayList::new)); + parameters.add(new Parameter(new File(SOURCES_DIR, "nopackageinfo/NoPackageInfo.java"))); + return parameters; + } + + private static boolean sourceFile(File file) { + return file.isFile() && !file.getName().startsWith(".") && !file.getName().equals("package-info.java"); } private static class Parameter { @@ -126,7 +133,8 @@ private static class Parameter { private final File configFile; - Parameter(String sourceName) { + Parameter(File sourceFile) { + String sourceName = sourceFile.getAbsolutePath().substring(SOURCES_DIR.getAbsolutePath().length() + 1); this.name = sourceName.replace(".java", ""); this.sourceFile = new File(SOURCES_DIR, sourceName); File configFile = new File(CONFIGS_DIR, this.name + ".xml"); diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 7415277f..bb42d4f0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,8 +45,8 @@ public class SpringConfigurationLoaderTests { @Test public void loadShouldLoadChecks() { Collection checks = load(null); - assertThat(checks).hasSize(3); - TreeWalker treeWalker = (TreeWalker) checks.toArray()[2]; + assertThat(checks).hasSize(4); + TreeWalker treeWalker = (TreeWalker) checks.toArray()[3]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(60); } @@ -56,8 +56,8 @@ public void loadWithExcludeShouldExcludeChecks() { Set excludes = Collections .singleton("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck"); Collection checks = load(excludes); - assertThat(checks).hasSize(3); - TreeWalker treeWalker = (TreeWalker) checks.toArray()[2]; + assertThat(checks).hasSize(4); + TreeWalker treeWalker = (TreeWalker) checks.toArray()[3]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(59); } @@ -66,7 +66,7 @@ public void loadWithExcludeShouldExcludeChecks() { public void loadWithExcludeHeaderShouldExcludeChecks() { Set excludes = Collections.singleton("io.spring.javaformat.checkstyle.check.SpringHeaderCheck"); Object[] checks = load(excludes).stream().toArray(); - assertThat(checks).hasSize(2); + assertThat(checks).hasSize(3); } private Collection load(Set excludes) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/nopackageinfo/NoPackageInfo.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/nopackageinfo/NoPackageInfo.txt new file mode 100644 index 00000000..a19759c0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/nopackageinfo/NoPackageInfo.txt @@ -0,0 +1 @@ ++Missing package-info.java file \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java new file mode 100644 index 00000000..a6f8b3ae --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java @@ -0,0 +1,26 @@ +/* + * Copyright 2017-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package nopackageinfo; + +/** + * A class in a package with no {@code package-info.java} file. + * + * @author Andy Wilkinson + */ +class NoPackageInfo { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info.java new file mode 100644 index 00000000..e69de29b From c63853cabd38d1b20e7144f91f014e07121486d0 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 May 2022 12:49:03 +0100 Subject: [PATCH 079/238] Consider indentation style and Java baseline in up-to-date checks Closes gh-329 --- .../gradle/SpringJavaFormatPlugin.java | 4 +++ .../gradle/tasks/FormatterTask.java | 31 ++++++++++++++-- .../javaformat/gradle/CheckTaskTests.java | 36 +++++++++++++++++++ .../test/resources/check-spaces/build.gradle | 10 ++++++ .../src/main/java/simple/Simple.java | 15 ++++++++ 5 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-spaces/build.gradle create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-spaces/src/main/java/simple/Simple.java diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index 9c14a75f..e5f27015 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -27,6 +27,7 @@ import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskProvider; +import io.spring.javaformat.config.JavaFormatConfig; import io.spring.javaformat.gradle.tasks.CheckFormat; import io.spring.javaformat.gradle.tasks.Format; import io.spring.javaformat.gradle.tasks.FormatterTask; @@ -78,6 +79,9 @@ private TaskProvider addFormatterTask(SourceSet sou provider.configure((task) -> { task.setDescription(desc + " for " + sourceSet.getName()); task.setSource(sourceSet.getAllJava()); + JavaFormatConfig config = JavaFormatConfig.findFrom(this.project.getProjectDir()); + task.getIndentationStyle().convention(config.getIndentationStyle()); + task.getJavaBaseline().convention(config.getJavaBaseline()); }); return provider; } diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java index 64486ee2..88089e3a 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,10 +19,13 @@ import java.nio.charset.Charset; import java.util.stream.Stream; +import org.gradle.api.provider.Property; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.SourceTask; +import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; import io.spring.javaformat.formatter.FileEdit; import io.spring.javaformat.formatter.FileFormatter; @@ -36,7 +39,13 @@ public abstract class FormatterTask extends SourceTask { private String encoding; + private final Property indentationStyle; + + private final Property javaBaseline; + FormatterTask() { + this.indentationStyle = getProject().getObjects().property(IndentationStyle.class); + this.javaBaseline = getProject().getObjects().property(JavaBaseline.class); } /** @@ -57,12 +66,30 @@ public void setEncoding(String encoding) { this.encoding = encoding; } + /** + * The indentation style used for formatting. + * @return the indentation style + */ + @Input + public Property getIndentationStyle() { + return this.indentationStyle; + } + + /** + * The Java baseline used for formatting. + * @return the Java baseline + */ + @Input + public Property getJavaBaseline() { + return this.javaBaseline; + } + /** * Format the source files and provide a {@link Stream} of {@link FileEdit} instances. * @return the file edits */ protected final Stream formatFiles() { - JavaFormatConfig javaFormatConfig = JavaFormatConfig.findFrom(getProject().getProjectDir()); + JavaFormatConfig javaFormatConfig = JavaFormatConfig.of(this.javaBaseline.get(), this.indentationStyle.get()); FileFormatter formatter = new FileFormatter(javaFormatConfig); Charset encoding = (getEncoding() != null ? Charset.forName(getEncoding()) : Charset.defaultCharset()); return formatter.formatFiles(getSource().getFiles(), encoding); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index 6b0a5ba0..6e38db7b 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -22,6 +22,7 @@ import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; +import java.util.Arrays; import java.util.Collections; import java.util.stream.Stream; @@ -77,6 +78,41 @@ public void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSu assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } + @Test + public void whenFirstInvocationSucceedsAndIndentationStyleIsChangedThenSecondInvocationFails() throws IOException { + GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-ok"); + BuildResult result = gradleBuild.build("check"); + assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + Files.write(new File(this.gradleBuild.getProjectDir(), ".springjavaformatconfig").toPath(), + Arrays.asList("indentation-style=spaces")); + result = gradleBuild.buildAndFail("check"); + assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); + } + + @Test + public void whenFirstInvocationFailsAndIndentationStyleIsChangedThenSecondInvocationSucceeds() throws IOException { + GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-spaces"); + BuildResult result = gradleBuild.buildAndFail("check"); + assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); + Files.write(new File(this.gradleBuild.getProjectDir(), ".springjavaformatconfig").toPath(), + Arrays.asList("indentation-style=spaces")); + result = gradleBuild.build("check"); + assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + } + + @Test + public void whenFirstInvocationSucceedsAndJavaBaselineIsChangedThenSecondInvocationSucceedsAndThirdIsUpToDate() throws IOException { + GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-ok"); + BuildResult result = gradleBuild.build("check"); + assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + Files.write(new File(this.gradleBuild.getProjectDir(), ".springjavaformatconfig").toPath(), + Arrays.asList("java-baseline=8")); + result = gradleBuild.build("check"); + assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + result = gradleBuild.build("check"); + assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); + } + @Test public void checkBad() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/check-bad").buildAndFail("check"); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-spaces/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-spaces/build.gradle new file mode 100644 index 00000000..d6ca2f32 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-spaces/build.gradle @@ -0,0 +1,10 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-spaces/src/main/java/simple/Simple.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-spaces/src/main/java/simple/Simple.java new file mode 100644 index 00000000..cd5523a6 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/check-spaces/src/main/java/simple/Simple.java @@ -0,0 +1,15 @@ +package simple; + +/** + * Simple indented with spaces. + * + * @author Andy Wilkinson + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // Main method + } + +} From fde7e858d40f02c050c6487373f478ba7c7f285b Mon Sep 17 00:00:00 2001 From: Lars Grefer Date: Wed, 2 Mar 2022 02:42:13 +0100 Subject: [PATCH 080/238] Support up-to-date checking of Format task See gh-323 --- .../javaformat/gradle/tasks/Format.java | 16 ++++++++++++++++ .../javaformat/gradle/FormatTaskTests.java | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java index 591377c5..0c9b8b85 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java @@ -19,6 +19,11 @@ import java.io.IOException; import org.gradle.api.GradleException; +import org.gradle.api.file.FileTree; +import org.gradle.api.tasks.InputFiles; +import org.gradle.api.tasks.OutputFiles; +import org.gradle.api.tasks.PathSensitive; +import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.TaskAction; import io.spring.javaformat.formatter.FileEdit; @@ -51,4 +56,15 @@ public void format() throws IOException, InterruptedException { } } + @Override + @InputFiles + @PathSensitive(PathSensitivity.RELATIVE) + public FileTree getSource() { + return super.getSource(); + } + + @OutputFiles + public FileTree getOutputFiles() { + return super.getSource(); + } } diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index 071cf75c..b8cb2197 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -21,6 +21,7 @@ import java.nio.file.Files; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.GradleRunner; import org.gradle.testkit.runner.TaskOutcome; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -50,6 +51,24 @@ public void checkOk() throws IOException { assertThat(formattedContent).contains("class Simple {").contains(" public static void main"); } + @Test + public void checkUpTpDate() throws IOException { + GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); + + // 1) Actually format the sources. + BuildResult result1 = runner.build(); + assertThat(result1.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + + // 2) No-op reformat the sources + // Not up-to-date yet because 1) changed the sources. + BuildResult result2 = runner.build(); + assertThat(result2.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + + // 3) Now we should be up-to-date since 2) was effectively a no-op + BuildResult result3 = runner.build(); + assertThat(result3.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); + } + @Test public void checkSpacesOk() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/format-spaces").build("format"); From ae64820d0de0813a7f1df00cecf8fd0e1db9d8cb Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 May 2022 11:55:44 +0100 Subject: [PATCH 081/238] Polish "Support up-to-date checking of Format task" See gh-323 --- .../javaformat/gradle/tasks/CheckFormat.java | 11 +---- .../javaformat/gradle/tasks/Format.java | 13 +----- .../gradle/tasks/FormatterTask.java | 11 +++++ .../javaformat/gradle/FormatTaskTests.java | 46 ++++++++++++++----- 4 files changed, 48 insertions(+), 33 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index 42bb7057..6487ff6d 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,11 +25,8 @@ import java.util.stream.Collectors; import org.gradle.api.GradleException; -import org.gradle.api.file.FileTree; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.OutputFile; -import org.gradle.api.tasks.PathSensitive; -import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.TaskAction; import io.spring.javaformat.formatter.FileEdit; @@ -72,12 +69,6 @@ public void checkFormatting() throws IOException, InterruptedException { } } - @Override - @PathSensitive(PathSensitivity.RELATIVE) - public FileTree getSource() { - return super.getSource(); - } - @OutputFile public File getReportLocation() { return this.reportLocation; diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java index 0c9b8b85..d89abe61 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,10 +20,7 @@ import org.gradle.api.GradleException; import org.gradle.api.file.FileTree; -import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.OutputFiles; -import org.gradle.api.tasks.PathSensitive; -import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.TaskAction; import io.spring.javaformat.formatter.FileEdit; @@ -56,15 +53,9 @@ public void format() throws IOException, InterruptedException { } } - @Override - @InputFiles - @PathSensitive(PathSensitivity.RELATIVE) - public FileTree getSource() { - return super.getSource(); - } - @OutputFiles public FileTree getOutputFiles() { return super.getSource(); } + } diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java index 88089e3a..ed55a945 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java @@ -19,9 +19,13 @@ import java.nio.charset.Charset; import java.util.stream.Stream; +import org.gradle.api.file.FileTree; import org.gradle.api.provider.Property; import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.Optional; +import org.gradle.api.tasks.PathSensitive; +import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.SourceTask; import io.spring.javaformat.config.IndentationStyle; @@ -84,6 +88,13 @@ public Property getJavaBaseline() { return this.javaBaseline; } + @Override + @InputFiles + @PathSensitive(PathSensitivity.RELATIVE) + public FileTree getSource() { + return super.getSource(); + } + /** * Format the source files and provide a {@link Stream} of {@link FileEdit} instances. * @return the file edits diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index b8cb2197..023b4d0d 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -19,6 +19,7 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.util.Arrays; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.GradleRunner; @@ -52,21 +53,42 @@ public void checkOk() throws IOException { } @Test - public void checkUpTpDate() throws IOException { + public void checkUpToDate() throws IOException { GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); + // Format that changes files + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + // Format of already formatted files + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + // Up-to-date + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); + } - // 1) Actually format the sources. - BuildResult result1 = runner.build(); - assertThat(result1.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - - // 2) No-op reformat the sources - // Not up-to-date yet because 1) changed the sources. - BuildResult result2 = runner.build(); - assertThat(result2.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + @Test + public void notUpToDateWhenJavaBaselineChanges() throws IOException { + GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); + // Format that changes files + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + // Format of already formatted files + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + // Up-to-date + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); + Files.write(new File(this.gradleBuild.getProjectDir(), ".springjavaformatconfig").toPath(), + Arrays.asList("java-baseline=8")); + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + } - // 3) Now we should be up-to-date since 2) was effectively a no-op - BuildResult result3 = runner.build(); - assertThat(result3.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); + @Test + public void notUpToDateWhenIndentationStyleChanges() throws IOException { + GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); + // Format that changes files + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + // Format of already formatted files + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + // Up-to-date + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); + Files.write(new File(this.gradleBuild.getProjectDir(), ".springjavaformatconfig").toPath(), + Arrays.asList("indentation-style=spaces")); + assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @Test From ae5e629d26c8544fe2934789d37162a5f7975c99 Mon Sep 17 00:00:00 2001 From: Lars Grefer Date: Sat, 26 Feb 2022 03:08:53 +0100 Subject: [PATCH 082/238] Add a marker artifact for the io.spring.javaformat Gradle plugin See gh-321 --- .../pom.xml | 21 +++++++++++++++++++ spring-javaformat-gradle/pom.xml | 1 + 2 files changed, 22 insertions(+) create mode 100644 spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml new file mode 100644 index 00000000..9e08297f --- /dev/null +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat-build + 0.0.32-SNAPSHOT + + io.spring.javaformat + io.spring.javaformat.gradle.plugin + pom + io.spring.javaformat Gradle Plugin Marker + + + io.spring.javaformat + spring-javaformat-gradle-plugin + ${project.version} + + + diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index deed1def..353f572d 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -32,5 +32,6 @@ spring-javaformat-gradle-plugin + io.spring.javaformat.gradle.plugin From d0da89093aa8486f71c09b1a0d9cd0d582c407f0 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 May 2022 13:13:19 +0100 Subject: [PATCH 083/238] Upgrade to github-changelog-generator 0.0.7 Closes gh-298 --- ci/tasks/generate-changelog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/tasks/generate-changelog.yml b/ci/tasks/generate-changelog.yml index f797c6cb..59a43eae 100644 --- a/ci/tasks/generate-changelog.yml +++ b/ci/tasks/generate-changelog.yml @@ -4,7 +4,7 @@ image_resource: type: registry-image source: repository: springio/github-changelog-generator - tag: '0.0.6' + tag: '0.0.7' inputs: - name: git-repo - name: artifactory-repo From c9b13d886d1dc6b358f355e9f23dc5c73fb4c41b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 May 2022 13:29:45 +0100 Subject: [PATCH 084/238] Fix parent of Gradle plugin marker artifact's pom See gh-321 --- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 9e08297f..e44669e3 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -4,7 +4,7 @@ 4.0.0 io.spring.javaformat - spring-javaformat-build + spring-javaformat-gradle 0.0.32-SNAPSHOT io.spring.javaformat From 9b5b720942c2a35ebef2e2688fdb70dd92a97495 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 May 2022 17:35:22 +0100 Subject: [PATCH 085/238] Upgrade to Eclipse 2022-03 Closes gh-330 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 83b07344..b1f4c5e4 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2021-12/202112081000/ + https://download.eclipse.org/releases/2022-03/202203161000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 From 15db9640b682b4eb0b6e9623ee0bc4fe8bc1508d Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 May 2022 18:20:00 +0100 Subject: [PATCH 086/238] Improve wrapping of enum values with no javadoc comment Closes gh-313 --- .../projectsettings/org.eclipse.jdt.core.prefs | 2 +- .../enum-with-many-uncommented-values.txt | 18 ++++++++++++++++++ .../enum-with-many-uncommented-values.txt | 18 ++++++++++++++++++ .../formatter/eclipse/formatter.prefs | 2 +- 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/enum-with-many-uncommented-values.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/enum-with-many-uncommented-values.txt diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 1460faf1..7a672b4a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -114,7 +114,7 @@ org.eclipse.jdt.core.formatter.alignment_for_assignment=0 org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/enum-with-many-uncommented-values.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/enum-with-many-uncommented-values.txt new file mode 100644 index 00000000..b92ba57c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/enum-with-many-uncommented-values.txt @@ -0,0 +1,18 @@ +package io.spring.javaformat.formatter; + +public enum EnumWithManyUncommentedValues { + + ONE("Long text value to force formatting of the enum's values across multiple lines"), + TWO("Long text value to force formatting of the enum's values across multiple lines"), + THREE("Long text value to force formatting of the enum's values across multiple lines"), + FOUR("Long text value to force formatting of the enum's values across multiple lines"), + FIVE("Long text value to force formatting of the enum's values across multiple lines"), + SIX("Long text value to force formatting of the enum's values across multiple lines"); + + private String text; + + EnumWithManyUncommentedValues(String text) { + this.text = text; + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/enum-with-many-uncommented-values.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/enum-with-many-uncommented-values.txt new file mode 100644 index 00000000..b92ba57c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/enum-with-many-uncommented-values.txt @@ -0,0 +1,18 @@ +package io.spring.javaformat.formatter; + +public enum EnumWithManyUncommentedValues { + + ONE("Long text value to force formatting of the enum's values across multiple lines"), + TWO("Long text value to force formatting of the enum's values across multiple lines"), + THREE("Long text value to force formatting of the enum's values across multiple lines"), + FOUR("Long text value to force formatting of the enum's values across multiple lines"), + FIVE("Long text value to force formatting of the enum's values across multiple lines"), + SIX("Long text value to force formatting of the enum's values across multiple lines"); + + private String text; + + EnumWithManyUncommentedValues(String text) { + this.text = text; + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs index b1fe253e..8f5c0661 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs +++ b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs @@ -17,7 +17,7 @@ core.formatter.alignment_for_compact_if=16 core.formatter.alignment_for_compact_loops=16 core.formatter.alignment_for_conditional_expression=16 core.formatter.alignment_for_conditional_expression_chain=0 -core.formatter.alignment_for_enum_constants=0 +core.formatter.alignment_for_enum_constants=16 core.formatter.alignment_for_expressions_in_array_initializer=16 core.formatter.alignment_for_expressions_in_for_loop_header=0 core.formatter.alignment_for_logical_operator=16 From f870a147cbebc86bedca125f779e8a959b349713 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 May 2022 19:49:46 +0100 Subject: [PATCH 087/238] Warn about unused declared thrown exceptions Closes gh-273 --- .../eclipse/projectsettings/org.eclipse.jdt.core.prefs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 7a672b4a..704e4de5 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -86,8 +86,8 @@ org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled org.eclipse.jdt.core.compiler.problem.unusedImport=warning From 3f9307a458f3b21fe026965696a89d0888cc4bb6 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 25 May 2022 10:28:27 +0000 Subject: [PATCH 088/238] Next development version (v0.0.33-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 38 files changed, 40 insertions(+), 40 deletions(-) diff --git a/README.adoc b/README.adoc index 6c4a40f1..1346ed98 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.31 +:release-version: 0.0.32 :checkstyle-version: 8.45.1 == Spring Java Format diff --git a/pom.xml b/pom.xml index b1f4c5e4..f598245b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 370279fb..968f8949 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.32-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.33-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.32-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.33-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 5c869417..e910431f 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index e1327ddd..174c6102 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.32.qualifier" + version="0.0.33.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index dd3be19a..0af796e1 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 3b92884c..5893681b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index f04573a0..320331c3 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index c219f783..aebb3bd2 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 00720e55..b9f349e8 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.32.qualifier +Bundle-Version: 0.0.33.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit, org.junit.jupiter.api diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index f469f878..5fcf0de7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 4a02201b..727a1a82 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.32.qualifier +Bundle-Version: 0.0.33.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 50d82856..9130500c 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 84f75c5c..2da7d374 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index e44669e3..976983d8 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 353f572d..b727cd97 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 3235275d..0958968a 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 9e9d2ef2..b1a8bb88 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 4c9a5294..271e9a7e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 94d846e6..e5cccd40 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index a54ebca7..22a4718f 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 5b088b90..a9b51396 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 64cfd96a..21e795fc 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index a077a232..6d51762f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index d4c600d6..96de1b77 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 4808462c..3ec03e38 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.32.qualifier +Bundle-Version: 0.0.33.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 5650a26c..8be35e3b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 6b5d355f..4ee17cb6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.32.qualifier +Bundle-Version: 0.0.33.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 2c826b4b..02ea5998 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index f7a74311..aac3513f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 9e09a7f1..b65c08df 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 0b3a97d5..5ae10d2d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 762e1a1b..6d880cd3 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index ca716912..a9a0b810 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 64e5b0c7..c6e60ab1 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index b1ffc0c8..ba459c42 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 4ac22d4e..1ff9dfc9 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index a5ff7cd7..ae2b91c6 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.32-SNAPSHOT + 0.0.33-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 3741699a62489b95384204948083a406793e2ef9 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 25 May 2022 20:31:23 +0100 Subject: [PATCH 089/238] Indent multiline method invocations consistently with Java 8 and 11 Closes gh-332 --- .eclipse/org.eclipse.jdt.core.prefs | 1 + .../org.eclipse.jdt.core.prefs | 1 + .../multi-line-statement-indentation.txt | 21 +++++++++++++++++++ .../multi-line-statement-indentation.txt | 21 +++++++++++++++++++ .../formatter/eclipse/formatter.prefs | 1 + 5 files changed, 45 insertions(+) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/multi-line-statement-indentation.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/multi-line-statement-indentation.txt diff --git a/.eclipse/org.eclipse.jdt.core.prefs b/.eclipse/org.eclipse.jdt.core.prefs index 605fc315..1d379438 100644 --- a/.eclipse/org.eclipse.jdt.core.prefs +++ b/.eclipse/org.eclipse.jdt.core.prefs @@ -136,6 +136,7 @@ org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 org.eclipse.jdt.core.formatter.blank_lines_after_package=1 org.eclipse.jdt.core.formatter.blank_lines_before_field=0 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 704e4de5..aa1ecd3c 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -133,6 +133,7 @@ org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 org.eclipse.jdt.core.formatter.blank_lines_after_package=1 org.eclipse.jdt.core.formatter.blank_lines_before_field=0 diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/multi-line-statement-indentation.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/multi-line-statement-indentation.txt new file mode 100644 index 00000000..7c63370c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/multi-line-statement-indentation.txt @@ -0,0 +1,21 @@ +package simple; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class Simple { + + public String someMethod() throws MalformedURLException, IOException { + String settingsXml = new String(Files.readAllBytes(Paths.get("src", "intTest", "projects", "settings.xml")), + StandardCharsets.UTF_8) + .replace("@localCentralUrl@", + new File("build/int-test-maven-repository").toURI().toURL().toString()) + .replace("@localRepositoryPath@", new File("build/local-maven-repository").getAbsolutePath()); + return settingsXml; + } + +} \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/multi-line-statement-indentation.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/multi-line-statement-indentation.txt new file mode 100644 index 00000000..7c63370c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/multi-line-statement-indentation.txt @@ -0,0 +1,21 @@ +package simple; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class Simple { + + public String someMethod() throws MalformedURLException, IOException { + String settingsXml = new String(Files.readAllBytes(Paths.get("src", "intTest", "projects", "settings.xml")), + StandardCharsets.UTF_8) + .replace("@localCentralUrl@", + new File("build/int-test-maven-repository").toURI().toURL().toString()) + .replace("@localRepositoryPath@", new File("build/local-maven-repository").getAbsolutePath()); + return settingsXml; + } + +} \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs index 8f5c0661..584377eb 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs +++ b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs @@ -41,6 +41,7 @@ core.formatter.alignment_for_throws_clause_in_method_declaration=16 core.formatter.alignment_for_type_arguments=0 core.formatter.alignment_for_type_parameters=0 core.formatter.alignment_for_union_type_in_multicatch=16 +core.formatter.align_selector_in_method_invocation_on_expression_first_line=false core.formatter.blank_lines_after_imports=1 core.formatter.blank_lines_after_package=1 core.formatter.blank_lines_before_field=0 From beae9ecb39859505168b2116d0843335c40d05a3 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 26 May 2022 11:02:36 +0100 Subject: [PATCH 090/238] Upgrade to Checkstyle 9.3 Closes gh-333 --- README.adoc | 2 +- pom.xml | 2 +- .../src/test/resources/source/TernaryInIf.java | 6 ++++-- .../src/test/resources/source/TernaryInWhile.java | 6 ++++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/README.adoc b/README.adoc index 1346ed98..80de8693 100644 --- a/README.adoc +++ b/README.adoc @@ -1,5 +1,5 @@ :release-version: 0.0.32 -:checkstyle-version: 8.45.1 +:checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index f598245b..940a06e3 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ 1.0b3 7.3.1 3.8.0 - 9.0.1 + 9.3 3.4 2.4.21 2.17.1 diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java index 61a4ab20..c3fc5a56 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,9 @@ public class TernaryInIf { public void test() { boolean a = true; boolean b = false; - if ((a != b) ? true : false) { + int c = 1; + int d = 2; + if ((a != b) ? d < c : c >= d) { System.out.println("OK"); } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java index 46641514..84e14ac6 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,9 @@ public class TernaryInWhile { public void test() { boolean a = true; boolean b = false; - while ((a != b) ? true : false) { + int c = 1; + int d = 2; + while ((a != b) ? d < c : c >= d) { System.out.println("OK"); } } From e75e76871a43d933f0f6f89c2ba5ee5d7688186e Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Thu, 26 May 2022 10:48:27 +0000 Subject: [PATCH 091/238] Next development version (v0.0.34-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 38 files changed, 40 insertions(+), 40 deletions(-) diff --git a/README.adoc b/README.adoc index 80de8693..9d29b9f4 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.32 +:release-version: 0.0.33 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 940a06e3..4974b9ef 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 968f8949..ec300fd4 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.33-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.34-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.33-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.34-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index e910431f..fd55c069 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 174c6102..aced156b 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.33.qualifier" + version="0.0.34.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 0af796e1..60b2e456 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 5893681b..b0d0c5c1 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 320331c3..ab50322b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index aebb3bd2..6dc45ddb 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index b9f349e8..f49a1d6b 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.33.qualifier +Bundle-Version: 0.0.34.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit, org.junit.jupiter.api diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 5fcf0de7..3862e9d6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 727a1a82..3c285b68 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.33.qualifier +Bundle-Version: 0.0.34.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 9130500c..6a330327 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 2da7d374..11e77b66 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 976983d8..c6800535 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index b727cd97..45d4b404 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 0958968a..21aa68a4 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index b1a8bb88..ae4861c9 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 271e9a7e..e3af77e2 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index e5cccd40..0c82f0ae 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 22a4718f..c0f8bc73 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index a9b51396..9306ccc6 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 21e795fc..43159807 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 6d51762f..73dc3b40 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 96de1b77..a3a0bb7c 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 3ec03e38..fc9daef4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.33.qualifier +Bundle-Version: 0.0.34.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 8be35e3b..e6721b1e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 4ee17cb6..ca34cc9e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.33.qualifier +Bundle-Version: 0.0.34.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 02ea5998..bc174bf2 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index aac3513f..7bec160a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index b65c08df..687dd4df 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 5ae10d2d..c8494eb9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 6d880cd3..8c8e5982 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index a9a0b810..615b501d 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index c6e60ab1..79661b1d 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index ba459c42..fbd52a4e 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 1ff9dfc9..be8a7397 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index ae2b91c6..7bb3a18f 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.33-SNAPSHOT + 0.0.34-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 4509bfcc8009c212cfe6d9825d592339265e89a6 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 7 Jun 2022 09:13:06 +0100 Subject: [PATCH 092/238] Fix exclusions to allow static import of WebMvc.Fn methods Closes gh-335 --- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 4 +++- src/checkstyle/checkstyle.xml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index e0b2eef4..d88c11be 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -85,6 +85,8 @@ public class SpringAvoidStaticImportCheck extends AvoidStaticImportCheck { excludes.add("org.springframework.web.reactive.function.BodyInserters.*"); excludes.add("org.springframework.web.reactive.function.server.RequestPredicates.*"); excludes.add("org.springframework.web.reactive.function.server.RouterFunctions.*"); + excludes.add("org.springframework.web.servlet.function.RequestPredicates.*"); + excludes.add("org.springframework.web.servlet.function.RouterFunctions.*"); excludes.add("org.springframework.ws.test.client.RequestMatchers.*"); excludes.add("org.springframework.ws.test.client.ResponseCreators.*"); ALWAYS_EXCLUDED = Collections.unmodifiableSet(excludes); diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 956ad831..0c6b5e96 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -70,7 +70,7 @@ + value="org.assertj.core.api.Assertions.*, org.junit.Assert.*, org.junit.Assume.*, org.junit.internal.matchers.ThrowableMessageMatcher.*, org.hamcrest.CoreMatchers.*, org.hamcrest.Matchers.*, org.springframework.boot.configurationprocessor.ConfigurationMetadataMatchers.*, org.springframework.boot.configurationprocessor.TestCompiler.*, org.springframework.boot.test.autoconfigure.AutoConfigurationImportedCondition.*, org.mockito.Mockito.*, org.mockito.BDDMockito.*, org.mockito.Matchers.*, org.mockito.ArgumentMatchers.*, org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*, org.springframework.restdocs.hypermedia.HypermediaDocumentation.*, org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*, org.springframework.test.web.servlet.result.MockMvcResultMatchers.*, org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.*, org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*, org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*, org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo, org.springframework.test.web.client.match.MockRestRequestMatchers.*, org.springframework.test.web.client.response.MockRestResponseCreators.*, org.springframework.web.reactive.function.server.RequestPredicates.*, org.springframework.web.reactive.function.server.RouterFunctions.*, org.springframework.test.web.servlet.setup.MockMvcBuilders.*" /> From 666583e73aab097cd82f4f727b95276c1d073181 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 7 Jun 2022 09:50:53 +0100 Subject: [PATCH 093/238] Polish name of Gradle Plugin Artifact module --- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index c6800535..f2427385 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -10,7 +10,7 @@ io.spring.javaformat io.spring.javaformat.gradle.plugin pom - io.spring.javaformat Gradle Plugin Marker + Spring JavaFormat Gradle Plugin Marker Artifact io.spring.javaformat From 3d9559edf8e7f3373e05881970d5c32ae67372e5 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 23 Jun 2022 16:05:56 +0100 Subject: [PATCH 094/238] Improve indentation of switch cases Closes gh-336 --- .../src/test/resources/expected/switch.txt | 14 ++++++++++++++ .../src/test/resources/source/switch.txt | 12 ++++++++++++ .../javaformat/formatter/eclipse/formatter.prefs | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/switch.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/switch.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/switch.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/switch.txt new file mode 100644 index 00000000..87ae995d --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/switch.txt @@ -0,0 +1,14 @@ +public class SwitchExample { + + protected boolean isIncludeBindingErrors(HttpServletRequest request, MediaType produces) { + switch (getErrorProperties().getIncludeBindingErrors()) { + case ALWAYS: + return true; + case ON_PARAM: + return getErrorsParameter(request); + default: + return false; + } + } + +} \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/switch.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/switch.txt new file mode 100644 index 00000000..2f58321f --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/switch.txt @@ -0,0 +1,12 @@ +public class SwitchExample { + protected boolean isIncludeBindingErrors(HttpServletRequest request, MediaType produces) { + switch (getErrorProperties().getIncludeBindingErrors()) { + case ALWAYS: + return true; + case ON_PARAM: + return getErrorsParameter(request); + default: + return false; + } + } +} \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs index 584377eb..c5760514 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs +++ b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs @@ -101,7 +101,7 @@ core.formatter.indent_empty_lines=false core.formatter.indent_statements_compare_to_block=true core.formatter.indent_statements_compare_to_body=true core.formatter.indent_switchstatements_compare_to_cases=true -core.formatter.indent_switchstatements_compare_to_switch=false +core.formatter.indent_switchstatements_compare_to_switch=true core.formatter.indentation.size=4 core.formatter.insert_new_line_after_annotation_on_enum_constant=insert core.formatter.insert_new_line_after_annotation_on_field=insert From 217be378d959bf28c6bca335d07d7fd1face4812 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 23 Jun 2022 21:00:27 +0100 Subject: [PATCH 095/238] Remove redundant formatter configuration Closes gh-338 --- .../org.eclipse.jdt.core.prefs | 305 ------------------ 1 file changed, 305 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index aa1ecd3c..155accf7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -102,309 +102,4 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.processAnnotations=disabled -org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 -org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 -org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 -org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 -org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=false -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=false -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=90 -org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true -org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true -org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off -org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.join_lines_in_comments=true -org.eclipse.jdt.core.formatter.join_wrapped_lines=true -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=90 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_on_off_tags=true -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true -org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true -org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true -org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk11.tabs From 91c5fc914e167433941570dd2645bbcb8196a49d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 23 Jun 2022 14:53:28 -0700 Subject: [PATCH 096/238] Upgrade to Eclipse 2022-06 Closes gh-337 --- pom.xml | 2 +- .../pom.xml | 2 ++ ...entTypeManager$ContentTypeChangeEvent.java | 21 +++++++++++++++++ ...ypeManager$IContentTypeChangeListener.java | 23 +++++++++++++++++++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java diff --git a/pom.xml b/pom.xml index 4974b9ef..d2488134 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2022-03/202203161000/ + https://download.eclipse.org/releases/2022-06/202206151000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 8c8e5982..3a5c8d05 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -67,6 +67,8 @@ io.spring.javaformat:spring-javaformat-formatter-eclipse-jdk8 org/eclipse/jdt/** + META-INF/ECLIPSE_.SF + META-INF/ECLIPSE_.RSA diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java new file mode 100644 index 00000000..913abdea --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java @@ -0,0 +1,21 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.eclipse.core.runtime.content; + +public class IContentTypeManager$ContentTypeChangeEvent { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java new file mode 100644 index 00000000..52462f79 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java @@ -0,0 +1,23 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.eclipse.core.runtime.content; + +public interface IContentTypeManager$IContentTypeChangeListener { + + void contentTypeChanged(IContentTypeManager$ContentTypeChangeEvent event); + +} From 48a590e75448bf7f86c55322f0bf9076ce43bcd9 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Fri, 24 Jun 2022 11:11:35 +0000 Subject: [PATCH 097/238] Next development version (v0.0.35-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 38 files changed, 40 insertions(+), 40 deletions(-) diff --git a/README.adoc b/README.adoc index 9d29b9f4..5ed9aafc 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.33 +:release-version: 0.0.34 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index d2488134..1b64fc88 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index ec300fd4..4e280b55 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.34-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.35-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.34-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.35-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index fd55c069..6497f9b3 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index aced156b..d1cf37a8 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.34.qualifier" + version="0.0.35.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 60b2e456..d05d16b0 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index b0d0c5c1..6621e059 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index ab50322b..013ecb06 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 6dc45ddb..b75e09c2 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index f49a1d6b..8118572c 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.34.qualifier +Bundle-Version: 0.0.35.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit, org.junit.jupiter.api diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 3862e9d6..8efbf27d 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 3c285b68..9115b09a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.34.qualifier +Bundle-Version: 0.0.35.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 6a330327..6d7d26e0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 11e77b66..49bb8583 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index f2427385..c365307a 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 45d4b404..2ce6f1b7 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 21aa68a4..183ddb78 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index ae4861c9..f15ad773 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index e3af77e2..84d6d21e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 0c82f0ae..5f64a236 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index c0f8bc73..405bc19d 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 9306ccc6..8108c9fd 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 43159807..3565d503 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 73dc3b40..0372eb22 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index a3a0bb7c..3b622102 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index fc9daef4..60fcdafe 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.34.qualifier +Bundle-Version: 0.0.35.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index e6721b1e..eb0b837a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index ca34cc9e..bb464282 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.34.qualifier +Bundle-Version: 0.0.35.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index bc174bf2..89578264 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 7bec160a..f4037c17 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 687dd4df..c0573920 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index c8494eb9..9393de03 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 3a5c8d05..c537bd48 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 615b501d..0707ad20 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 79661b1d..e0c4f2dc 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index fbd52a4e..4f21603f 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index be8a7397..3c165c98 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 7bb3a18f..3115ed45 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.34-SNAPSHOT + 0.0.35-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From d65816f1243ba513d3741de40393215352e44a57 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 6 Sep 2022 13:25:43 +0100 Subject: [PATCH 098/238] Stop disabling annotation processing in Eclipse Closes gh-341 --- .../eclipse/projectsettings/org.eclipse.jdt.core.prefs | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 155accf7..fd682fe6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -101,5 +101,4 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.processAnnotations=disabled org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk11.tabs From 974dc349db719180ac86728c330561ca2b50723f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 3 Oct 2022 10:55:56 +0100 Subject: [PATCH 099/238] Allow `@since` on members of an annotation with default visibility Closes gh-344 --- .../checkstyle/check/SpringJavadocCheck.java | 18 +++++----- .../JavadocNonPublicSinceInsideAnnotation.txt | 1 + .../JavadocNonPublicSinceInsideAnnotation.xml | 11 ++++++ ...JavadocNonPublicSinceInsideAnnotation.java | 36 +++++++++++++++++++ 4 files changed, 58 insertions(+), 8 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocNonPublicSinceInsideAnnotation.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/JavadocNonPublicSinceInsideAnnotation.xml create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index 8b2edc4b..26c6b27f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -165,8 +165,8 @@ private void checkSinceTag(DetailAST ast, TextBlock javadoc) { return; } String[] text = javadoc.getText(); - DetailAST interfaceDef = getInterfaceDef(ast); - boolean privateType = !isPublicOrProtected(ast) && (interfaceDef == null || !isPublicOrProtected(interfaceDef)); + DetailAST interfaceOrAnnotationDef = getInterfaceOrAnnotationDef(ast); + boolean privateType = !isPublicOrProtected(ast) && (interfaceOrAnnotationDef == null || !isPublicOrProtected(interfaceOrAnnotationDef)); boolean innerType = ast.getParent() != null && ast.getParent().getType() != TokenTypes.COMPILATION_UNIT; boolean found = false; for (int i = 0; i < text.length; i++) { @@ -225,14 +225,16 @@ public void setAllowNonJavadocComments(boolean allowNonJavadocComments) { this.allowNonJavadocComments = allowNonJavadocComments; } - private DetailAST getInterfaceDef(DetailAST ast) { - return findParent(ast, TokenTypes.INTERFACE_DEF); + private DetailAST getInterfaceOrAnnotationDef(DetailAST ast) { + return findParent(ast, TokenTypes.INTERFACE_DEF, TokenTypes.ANNOTATION_DEF); } - - private DetailAST findParent(DetailAST ast, int classDef) { + + private DetailAST findParent(DetailAST ast, int... classDefs) { while (ast != null) { - if (ast.getType() == classDef) { - return ast; + for (int classDef: classDefs) { + if (ast.getType() == classDef) { + return ast; + } } ast = ast.getParent(); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocNonPublicSinceInsideAnnotation.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocNonPublicSinceInsideAnnotation.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocNonPublicSinceInsideAnnotation.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/JavadocNonPublicSinceInsideAnnotation.xml b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/JavadocNonPublicSinceInsideAnnotation.xml new file mode 100644 index 00000000..c2b98905 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/JavadocNonPublicSinceInsideAnnotation.xml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java new file mode 100644 index 00000000..e05c6c89 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java @@ -0,0 +1,36 @@ +/* + * Copyright 2017-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Javadoc with a good since tag. + * + * @author Phillip Webb + * @since 1.2.3 + */ +public @interface JavadocNonPublicSinceInsideAnnotation { + + /** + * Inner enum. + * + * @since 1.2.3 + */ + enum Inner { + + FOO + + } + +} From 9610342bc6ed635395d16ca57d3cac8b6a681f8f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 3 Oct 2022 11:14:53 +0100 Subject: [PATCH 100/238] Polish --- .../javaformat/checkstyle/check/SpringJavadocCheck.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index 26c6b27f..31a1c360 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -228,7 +228,7 @@ public void setAllowNonJavadocComments(boolean allowNonJavadocComments) { private DetailAST getInterfaceOrAnnotationDef(DetailAST ast) { return findParent(ast, TokenTypes.INTERFACE_DEF, TokenTypes.ANNOTATION_DEF); } - + private DetailAST findParent(DetailAST ast, int... classDefs) { while (ast != null) { for (int classDef: classDefs) { From c740a0039281cde6312c5f3cce38bb12cf1f878b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 3 Oct 2022 12:13:21 +0100 Subject: [PATCH 101/238] Add a check that requires since on `@Deprecated` Closes gh-343 --- .../checkstyle/SpringConfigurationLoader.java | 1 + .../check/SpringDeprecatedCheck.java | 78 +++++++++++++++++++ .../checkstyle/check/messages.properties | 2 + .../resources/check/DeprecatedBadCase.txt | 6 ++ .../test/resources/check/DeprecatedValid.txt | 1 + .../resources/config/DeprecatedBadCase.xml | 9 +++ .../test/resources/config/DeprecatedValid.xml | 9 +++ .../resources/source/DeprecatedBadCase.java | 43 ++++++++++ .../resources/source/DeprecatedValid.java | 43 ++++++++++ 9 files changed, 192 insertions(+) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/DeprecatedBadCase.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/DeprecatedValid.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/DeprecatedBadCase.xml create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/DeprecatedValid.xml create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index f801f130..e78bf500 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -49,6 +49,7 @@ class SpringConfigurationLoader { } public Collection load(PropertyResolver propertyResolver) { + System.out.println(getClass().getResource("spring-checkstyle.xml")); Configuration config = loadConfiguration(getClass().getResourceAsStream("spring-checkstyle.xml"), propertyResolver); return Arrays.stream(config.getChildren()).filter(this.moduleFactory::nonFiltered).map(this::load) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java new file mode 100644 index 00000000..3e56dd2d --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java @@ -0,0 +1,78 @@ +/* + * Copyright 2017-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.checkstyle.check; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.FullIdent; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; + +/** + * Checks that {@link Deprecated @Deprecated} annotations follow Spring conventions. + * + * @author Andy Wilkinson + * @since 0.0.35 + */ +public class SpringDeprecatedCheck extends AbstractSpringCheck { + + @Override + public int[] getAcceptableTokens() { + return new int[] { TokenTypes.ANNOTATION }; + } + + @Override + public void visitToken(DetailAST ast) { + if (ast.getType() == TokenTypes.ANNOTATION) { + visitAnnotation(ast); + } + } + + private void visitAnnotation(DetailAST annotation) { + String text = FullIdent.createFullIdent(annotation.findFirstToken(TokenTypes.AT).getNextSibling()).getText(); + if ("Deprecated".equals(text) || "java.lang.Deprecated".equals(text)) { + visitDeprecated(annotation); + } + } + + private void visitDeprecated(DetailAST deprecated) { + DetailAST sinceAttribute = findSinceAttribute(deprecated); + if (sinceAttribute == null) { + log(deprecated.getLineNo(), deprecated.getColumnNo(), "deprecated.missingSince"); + } + else { + DetailAST expr = sinceAttribute.findFirstToken(TokenTypes.EXPR); + DetailAST sinceLiteral = expr.findFirstToken(TokenTypes.STRING_LITERAL); + if ("\"\"".equals(sinceLiteral.getText())) { + log(deprecated.getLineNo(), deprecated.getColumnNo(), "deprecated.emptySince"); + } + } + } + + private DetailAST findSinceAttribute(DetailAST deprecated) { + DetailAST child = deprecated.getFirstChild(); + while (child != null) { + if (child.getType() == TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR) { + DetailAST attributeIdent = child.findFirstToken(TokenTypes.IDENT); + if (attributeIdent != null && ("since".equals(attributeIdent.getText()))) { + return child; + } + } + child = child.getNextSibling(); + } + return null; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index b32ec8a7..735d7b43 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -27,3 +27,5 @@ nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\ ternary.equalOperator=Ternary operation should use != when testing. ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\" leadingwhitespace.incorrect=Indentation should be performed with {0} only. +deprecated.missingSince=@Deprecated has no since attribute. +deprecated.emptySince=@Deprecated has an empty since attribute. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/DeprecatedBadCase.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/DeprecatedBadCase.txt new file mode 100644 index 00000000..96f86d18 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/DeprecatedBadCase.txt @@ -0,0 +1,6 @@ ++DeprecatedBadCase.java:22:1: @Deprecated has no since attribute. [SpringDeprecated] ++DeprecatedBadCase.java:25:9: @Deprecated has no since attribute. [SpringDeprecated] ++DeprecatedBadCase.java:28:9: @Deprecated has an empty since attribute. [SpringDeprecated] ++DeprecatedBadCase.java:33:9: @Deprecated has no since attribute. [SpringDeprecated] ++DeprecatedBadCase.java:36:17: @Deprecated has an empty since attribute. [SpringDeprecated] ++5 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/DeprecatedValid.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/DeprecatedValid.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/DeprecatedValid.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/DeprecatedBadCase.xml b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/DeprecatedBadCase.xml new file mode 100644 index 00000000..0a4b92ee --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/DeprecatedBadCase.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/DeprecatedValid.xml b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/DeprecatedValid.xml new file mode 100644 index 00000000..0a4b92ee --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/config/DeprecatedValid.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java new file mode 100644 index 00000000..84292469 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java @@ -0,0 +1,43 @@ +/* + * Copyright 2017-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Bad cases for use of {@link Deprecated @Deprecated}. + * + * @author Andy Wilkinson + */ +@Deprecated +public class DeprecatedBadCase { + + @java.lang.Deprecated + public static final String SOME_CONSTANT; + + @Deprecated(since = "") + public void someMethod() { + + } + + @Deprecated + private class InnerClass { + + @Deprecated(since = "") + private void someInnerMethod() { + + } + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java new file mode 100644 index 00000000..f9cf915c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java @@ -0,0 +1,43 @@ +/* + * Copyright 2017-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Valid cases for use of {@link Deprecated @Deprecated}. + * + * @author Andy Wilkinson + */ +@Deprecated(since = "2.0.0") +public class DeprecatedValid { + + @Deprecated(since = "1.2.0") + public static final String SOME_CONSTANT; + + @Deprecated(since = "1.3.0") + public void someMethod() { + + } + + @Deprecated(since = "1.2.0") + private class InnerClass { + + @Deprecated(since = "1.1.0") + private void someInnerMethod() { + + } + + } + +} From d0264c1cffe81c97fe62840567ebfacfec52dedf Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 5 Oct 2022 19:57:33 +0000 Subject: [PATCH 102/238] Next development version (v0.0.36-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 38 files changed, 40 insertions(+), 40 deletions(-) diff --git a/README.adoc b/README.adoc index 5ed9aafc..af1ce970 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.34 +:release-version: 0.0.35 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 1b64fc88..257f1b5f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 4e280b55..929bd3cb 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.35-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.36-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.35-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.36-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 6497f9b3..d5a50805 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index d1cf37a8..d7e1b4f2 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.35.qualifier" + version="0.0.36.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index d05d16b0..1615bba7 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 6621e059..2b6351bb 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 013ecb06..409803ad 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index b75e09c2..92bff157 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 8118572c..a58dbd73 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.35.qualifier +Bundle-Version: 0.0.36.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.junit, org.junit.jupiter.api diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 8efbf27d..194fa5e8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 9115b09a..564a1fc2 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.35.qualifier +Bundle-Version: 0.0.36.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 6d7d26e0..6785b635 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 49bb8583..8d391e4a 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index c365307a..e41e6604 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 2ce6f1b7..e5848529 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 183ddb78..b17124e9 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index f15ad773..14ff88e4 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 84d6d21e..88ddb665 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 5f64a236..2d474eb4 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 405bc19d..f0a26622 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 8108c9fd..168ef7a9 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 3565d503..856c0d5d 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 0372eb22..784e7a04 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 3b622102..01434bbc 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 60fcdafe..587ba2b1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.35.qualifier +Bundle-Version: 0.0.36.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index eb0b837a..9d7f1a3d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index bb464282..2020c483 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.35.qualifier +Bundle-Version: 0.0.36.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 89578264..60417036 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index f4037c17..083d6620 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index c0573920..6be0431c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 9393de03..bba44386 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index c537bd48..b0587449 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 0707ad20..b0fb5f95 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index e0c4f2dc..2ee7a7aa 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 4f21603f..ead2a85c 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 3c165c98..06402206 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 3115ed45..8e859fdb 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.35-SNAPSHOT + 0.0.36-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From b11499d4de6f34316011b965fe9756dbe8e20cc7 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 20 Jan 2023 12:35:35 +0000 Subject: [PATCH 103/238] Improve formatting of records with a generic type parameter Closes gh-348 --- .../test/resources/expected/record-with-generic.txt | 11 +++++++++++ .../src/test/resources/source/record-with-generic.txt | 11 +++++++++++ .../javaformat/formatter/eclipse/formatter.prefs | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-generic.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt new file mode 100644 index 00000000..45528043 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt @@ -0,0 +1,11 @@ +package simple; + +/** + * Record with generic. + * + * @author Andy Wilkinson + * @since 1.0.0 + */ +public record SomeRecord(T item) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-generic.txt new file mode 100644 index 00000000..5a608dfe --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-generic.txt @@ -0,0 +1,11 @@ +package simple; + +/** + * Record with generic. + * + * @author Andy Wilkinson + * @since 1.0.0 + */ +public record SomeRecord ( T item) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs index c5760514..5f3763da 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs +++ b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs @@ -134,7 +134,7 @@ core.formatter.insert_space_after_at_in_annotation_type_declaration=do not inser core.formatter.insert_space_after_binary_operator=insert core.formatter.insert_space_after_bitwise_operator=insert core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert -core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=do not insert core.formatter.insert_space_after_closing_brace_in_block=insert core.formatter.insert_space_after_closing_paren_in_cast=insert core.formatter.insert_space_after_colon_in_assert=insert From 12b6ea26b5fd800ecffac086025a1af6bb4ae2a3 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 8 Sep 2022 13:40:44 -0700 Subject: [PATCH 104/238] Switch to Bellsoft JDK --- .sdkmanrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.sdkmanrc b/.sdkmanrc index 0262a261..42d4e368 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=11.0.11.hs-adpt +java=11.0.16.1-librca From 4ff8815749f0796098288e99dbb2d37bafda0d32 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:25:14 -0800 Subject: [PATCH 105/238] Remove .factorypath --- .gitignore | 1 + .../.factorypath | 50 ------------------- 2 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 spring-javaformat/spring-javaformat-formatter-shader/.factorypath diff --git a/.gitignore b/.gitignore index e43e9edb..3b33c61c 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ spring-javaformat/spring-javaformat-checkstyle/bin spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/bin build.log pid +.factorypath diff --git a/spring-javaformat/spring-javaformat-formatter-shader/.factorypath b/spring-javaformat/spring-javaformat-formatter-shader/.factorypath deleted file mode 100644 index a157f4e2..00000000 --- a/spring-javaformat/spring-javaformat-formatter-shader/.factorypath +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From a9e45a9648ff23a7ed853bcefdfb2c74821e6215 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 10:29:16 -0800 Subject: [PATCH 106/238] Upgrade to Maven 3.9.0 Closes gh-355 --- .mvn/wrapper/MavenWrapperDownloader.java | 117 ------- .mvn/wrapper/maven-wrapper.jar | Bin 50710 -> 59925 bytes .mvn/wrapper/maven-wrapper.properties | 20 +- mvnw | 99 +++--- mvnw.cmd | 369 ++++++++++++----------- 5 files changed, 243 insertions(+), 362 deletions(-) delete mode 100644 .mvn/wrapper/MavenWrapperDownloader.java diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index b901097f..00000000 --- a/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..bf82ff01c6cdae4a1bb754a6e062954d77ac5c11 100644 GIT binary patch literal 59925 zcmb5U1CS=sk~ZA7ZQHhc+Mc%Ywrx+_*0gQgw(Xv_ZBOg(y}RG;-uU;sUu;#Jh>EHw zGfrmZsXF;&D$0O@!2kh40RbILm8t;!w*&h7T24$wm|jX=oKf)`hV~7E`UmXw?e4Pt z`>_l#5YYGC|ANU0%S(xiDXTEZiATrw!Spl1gyQYxsqjrZO`%3Yq?k$Dr=tVr?HIeHlsmnE9=ZU6I2QoCjlLn85rrn7M!RO}+ z%|6^Q>sv`K3j6Ux>as6NoB}L8q#ghm_b)r{V+Pf3xj>b^+M8ZFY`k|FHgl zM!^0D!qDCjU~cj+fXM$0v@vuwvHcft?EeYw=4fbdZ{qkb#PI)>7{J=%Ux*@pi~i^9 z{(nu6>i-Y^_7lUudx7B}(hUFa*>e0ZwEROS{eRc_U*VV`F$C=Jtqb-$9MS)~&L3im zV)8%4)^9W3c4IT94|h)3k zdAT_~?$Z0{&MK=M0K)Y#_0R;gEjTs0uy4JHvr6q{RKur)D^%t>W+U;a*TZ;VL{kcnJJT z3mD=m7($$%?Y#>-Edcet`uWDH(@wIl+|_f#5l8odHg_|+)4AAYP9)~B^10nU306iE zaS4Y#5&gTL4eHH6&zd(VGyR0Qccx;>0R~Y5#29OkJpSAyr4&h1CYY|I}o)z ze}OiPf5V~(ABejc1pN%8rJQHwPn_`O*q7Dm)p}3K(mm1({hFmfY{yYbM)&Y`2R=h? zTtYwx?$W-*1LqsUrUY&~BwJjr)rO{qI$a`=(6Uplsti7Su#&_03es*Yp0{U{(nQCr z?5M{cLyHT_XALxWu5fU>DPVo99l3FAB<3mtIS<_+71o0jR1A8rd30@j;B75Z!uH;< z{shmnFK@pl080=?j0O8KnkE;zsuxzZx z4X2?!Dk7}SxCereOJK4-FkOq3i{GD#xtAE(tzLUiN~R2WN*RMuA3uYv-3vr9N8;p- z0ovH_gnvKnB5M{_^d`mUsVPvYv`38c2_qP$*@)N(ZmZosbxiRG=Cbm`0ZOx23Zzgs zLJPF;&V~ZV;Nb8ELEf73;P5ciI7|wZBtDl}on%WwtCh8Lf$Yfq`;Hb1D!-KYz&Kd< z+WE+o-gPb6S%ah2^mF80rK=H*+8mQdyrR+)Ar5krl4S!TAAG+sv8o+Teg)`9b22%4 zI7vnPTq&h=o=Z|$;>tEj(i@KN^8N@nk}}6SBhDIGCE4TrmVvM^PlBVZsbZcmR$P7v3{Pw88(jhhI?28MZ>uB%H z&+HAqu-MDFVk5|LYqUXBMR74n1nJ|qLNe#G7UaE>J{uX(rz6McAWj)Ui2R!4y&B01 z`}LOF7k|z0$I+psk+U^Z3YiAH-{>k*@z|0?L4MPNdtsPB+(F791LsRX$Dm(Gycm1k}n z#a2T#*)k-v{}p@^L5PC^@bH+-YO4v`l7Gq)9pgSns??ISG!M6>7&GySTZkVhykqk* zijh9sE`ky?DQPo+7}Vu@?}15_zTovL$r%h~*)=6*vTz?G#h|~>p(ukh%MKOCV^Jxa zi~lMP5+^-OW%Te@b#UoL6T1%9h-W}*hUtdu!>odxuT`kTg6U3+a@6QTiwM0I zqXcEI2x-gOS74?=&<18fYRv&Ms)R>e;Qz&0N20K9%CM_Iq#3V8%pwU>rAGbaXoGVS z-r5a$;fZ>75!`u@7=vV?y@7J;S;E#lvQ?Ar>%ao zOX)rc794W?X64tUEk>y|m_aCxU#N>o!Xw7##(7dIZDuYn0+9DoafcrK_(IUSl$m`A zZF1;0D&2KMWxq{!JlB#Yo*~RCRR~RBkfBb1)-;J`)fjK%LQgUfj-6(iNb3|)(r4fB z-3-I@OH8NV#Rr1`+c=9-0s3A3&EDUg1gC3 zVVb)^B@WE;ePBj#Rg2m!twC+Fe#io0Tzv)b#xh64;e}usgfxu(SfDvcONCs$<@#J@ zQrOhaWLG+)32UCO&4%us+o5#=hq*l-RUMAc6kp~sY%|01#<|RDV=-c0(~U2iF;^~Z zEGyIGa;#2iBbNLww#a{)mO^_H26>4DzS zW3Ln9#3bY?&5y|}CNM1c33!u1X@E`O+UCM*7`0CQ9bK1=r%PTO%S(Xhn0jV&cY5!; zknWK#W@!pMK$6<7w)+&nQZwlnxpxV_loGvL47cDabBUjf{BtT=5h1f2O&`n<$C%+3 zm$_pHm|BCm`G@w&Db)?4fM_YHa%}k|QMMl^&R}^}qj!z-hSy7npCB+A1jrr|1}lLs zw#c+UwVNwxP{=c;rL2BGdx*7zEe1Bcd{@%1-n8y7D4tiWqfpUVh-lHmLXM^KZShOH z*xFp)8|Y+bM`|>mg}p~MOHeh4Ev0_oE?T1n|HMCuuhyf*JDmFP(@8+hi#f-8(!7>g zH}lOHg#Nw(x(LkB`Q;g)oVAM{fXLqlew~t2GU);6V}=6Hx<4O5T!!-c93s;NqxUDm zofsXe!Q%wAD~BBUQ3dIiCtR4WMh-t>ISH?ZMus*wja+&<^&&Gm-nBlDvNS4vFnsl^ ztNpIbyMcWMPfKMe=YnWeIVj|?e>nZbwm$=sV@Qj@A@PE#Gnjlk{CGPDsqFS_)9LEa zuKx7=Sa>|^MiSKB?)pG()OoM}_%lx|mMlX&!?+`^^4bT=yz=ZoxWH_ngA*jX*IZcHOjb62dT(qTvBPn`2AFuL0q` zG+T@693;<++Z2>R2bD`qi0y2-Zf>Ao)K0f&d2P zfP78gpA6dVzjNaH?(M_mDL)R0U=lEaBZvDI4%DXB?8uw7yMJ~gE#%4F`v`Nr+^}vY zNk!D`{o4;L#H`(&_&69MXgCe`BzoU+!tF?72v9Ywy}vJ>QpqhIh5d@V>0xHtnyvuH zkllrfsI^;%I{@6lUi{~rA_w0mAm940-d++CcVAe<%1_RMLrby@&kK~cJQDXKIiybT z-kqt-K3rNz|3HT@un%{nW0OI{_DTXa-Gt@ONBB`7yPzA#K+GBJn@t@$=}KtxV871R zdlK|BI%we#j)k%=s3KJX%`+e4L~_qWz2@P z#)_IbEn(N_Ea!@g!rjt?kw;wph2ziGM|CPAOSzd(_Cp~tpAPO_7R!r5msJ4J@6?@W zb7r0)y);{W17k3}ls4DaNKdRpv@#b#oh4zlV3U@E2TCET9y3LQs1&)-c6+olCeAYp zOdn^BGxjbJIUL0yuFK_Dqpq%@KGOvu(ZgtKw;O*bxSb1Yp#>D?c~ir9P;<3wS2!-P zMc%jlfyqGiZiTjBA(FcUQ9mq#D-cvB9?$ctRZ;8+0s}_I8~6!fM~(jD=psem4Ee>J zWw&CJ7z{P9{Q7Ubye9)gwd`}~OSe#Rf$+;U1GvliVlhuHCK9yJZ2>_y@94OzD`#Ze z9)jO->@7)Bx~CeDJqQK|0%Pfmg&-w7mHdq3hENhQ;IKK;+>|iFp;c?M^kE!kGY&!y zk0I0Fk*!r6F59pwb<6v2ioT*86d(Tee%E1tmlfVjA#rHqA%a~cH`ct#9wX$-o9erW zXJEEOOJ&dezJO$TrCEB2LVOPr4a1H9%k<&lGZo1LDHNDa_xlUqto!CGM^Y}cxJn@x ziOYwn=mHBj_FAw|vMAK^Oqb(dg4Q?7Umqwc#pL?^vpIVNpINMEiP4Ml+xGo3f$#n$ zSTA3aJ)pM~4OPF>OOXOH&EW^(@T%5hknDw^bLpH%?4DjNr1s9Q9(3+8zy87a{1<&7 zQ@0A|_nnege~*7+LF5%wzLWD`lXWotLU4Y&{0i|(kn5hdwj^9o@)((-j86#TKNN|Got?9j^EYE8XJ}!o>}=@hY~siOur_pZ`mJW+ zg}Q?7Q_~bhh6s%uqEU!cv`B=jEp1K|eld>}I`pHtYzif`aZCe88}u$J6??5!TjY7Z zi_PXV!PdeegMrv48ein(j_-BWXDa73W&U|uQY2%u#HZ5hI@4>q?YPsd?K$Vm;~XD| za8S@laz_>}&|R%BD&V-i4%Q6dPCyvF3vd@kU>rvB!x*5ubENu_D>JSGcAwBe1xXs> z#6>7f9RU7nBW^%VMe9x%V$+)28`I~HD=gM$1Sivq)mNV>xD~CileqbUCO{vWg4Rh# zor2~~5hCEN)_0u$!q<(|hY5H=>Bbu%&{4ZV_rD1<#JLjo7b^d16tZ8WIRSY-f>X{Z zrJFo^lCo+3AagC{EW4g= z#o?8?8vCfRVy)U15jF^~4Gl{&Ybt92qe)hZ^_X>`+9vgWKwyZiaxznCo|TfVh3jIi zcEf?H`U;iFaJh=3Gy2JXApN`o zE=O1Gg$YQt6|76IiMNF?q#SA1bPB@dw#H+-V@9gL>;1mg+Cb#k1ey8`dvR+(4ebj= zUV1Z)tKRo}YEh@TN=$v(;aR{{n8vk`w|nNuHuckt$h27 z8*aBefUxw1*r#xB#9egcpXEi_*UAJYXXk!L7j@ zEHre9TeA?cA^qC?JqR^Tr%MObx)3(nztwV-kCeU-pv~$-T<>1;$_fqD%D@B13@6nJvk$Tb z%oMcxY|wp&wv8pf7?>V>*_$XB&mflZG#J;cO4(H9<>)V(X0~FRrD50GSAr_n^}6UI=}MTD3{q9rAHBj;!)G9GGx;~wMc8S8e@_! z_A@g2tE?_kGw#r}Y07^+v*DjB7v08O#kihqtSjT)2uwHG1UbSIKEAO<7Nt3T;R`YCSSj z!e)qa4Y~g>{F>ed`oWGW>((#s$zQGbsS&sg}^pBd?yeAN05Roe8> zT5^XsnI??pY-edI9fQNz3&cr}&YORzr4;sw1u{|Ne1V}nxSb|%Xa_Xy5#TrcTBpS@ z368Ly!a8oDB$mv21-kqD9t&0#7+@mt50oW4*qGcwbx}EyQ=zv+>?xQUL*ja2`WGq` z)sWi!%{f{lG)P(lu6{68R~smEp!Jy9!#~65DQ1AHIc%r7doy*L!1L>x7gLJdR;hH_ zP$2dAdV+VY*^|&oN=|}3-FdyGooDOM-vAGCT@@JyuF4C(otz>?^9!lR%m-tde}ePe z)Jp)zydtP%C02mCPddGz5R9NYvrS6)Bv$~r@W&cP5lLp7-4NrEQDN3%6AmXH@Tdfj zZ+k^}6%>L=d8BK-pxgvV`ix>w6F;U0C zlZ#lnOYYDhj4r)_+s){%-OP5Z{)Xy~)T{p`w1d-Z`uhiyaHX5R=prRWzg^tr8b$NI z3YKgTUvnV)o{xug^1=F=B;=5i^p6ZQ3ES<#>@?2!i0763S{RDit@XiOrjHyVHS*O` z`z@(K2K8gwhd0$u@upveU3ryuDP~by=Xy(MYd_#3r)*XC z^9+R*>njXE-TIP1lci2Q!U>qTn(dh*x7Zxv8r{aX7H$;tD?d1a-PrZ_=K*c8e050Z zQPw-n`us6g%-5T&A%0G0Pakpyp2}L*esj#H#HB!%;_(n z?@GhGHsn-TmjhdE&(mGUnQ3irA0sJtKpZ!N{aFsHtyTb#dkl=dRF+oo-dwy<#wYi=wik;LC6p#Fm zMTEA@?rBOmn>eCuHR%C{!jx>b|+<6B-)Z%(=lG{@y_@8s2x4Hym6ckPdCB$7NZFp_|El()ANXTORs zO@b$@1`3tXjEm>;bX)%xTUC>T)r6eTFtq*Rp*_?%C+fEzT##kVNH` zV}-lw6&hY;cyl5#RR-w!&K4e)Nf4noLFyjiAbKvP7Y!=2lRiRjc$&d?P~!zM@4!?3-vyqs zhm*63jiRI7cfruv!o=zO%H2cQ#o64%*4YAJ=xp~No53pO?eEA$`fR4x=^|*#{u3bx z1YB3OT97ZU3=ol)l`K!lB?~Dj(p_i0)NN=fdgz(QBu>8xV*FGZUb7m4NEbrA+BJ1O z%CPI+T>JPq9zpg~<>QR+je>?{g)rSuWpyCDcc2@rE8T>oNWPiP*u zLZc3LaQVEsC6emsi7DCL0;U0BP!SwAkXuetI25TYuCwD8~Z|M@2_ z0FaBG|x zW)FZvkPsN^5(Q}whYFk-E8)zC(+hZMRe5VA6GZM!beBdDBqq#Rye$I~h@Kf8ae!Ay z*>8BsT)dYB${E3A^j5m_ks3*1_a^uA+^E{Gxcgw2`f7jw8=^DG391okclzQA zwB6_C;;k_7OnwT<<5RjXf#XxTO9}jrCP+Ina|?UA%gFvNJy7HFEx9r{(c&yDZ9e2aovtJL$um8u>s&1k@G6# z-s55RDvTcFYZji6x+UMyCu{&*d4N<{6;H^PEF!?X@SqMfGFR}LYImL1;U}{iT!qnA zgqLCyvSp>>nS}|sv56Dnwxdo&HrZG1WQL_EkC!D6j)JW4Tv1yyqe&aM- zHXlKm;srQVctoDYl&e}E-P8h#PCQNW{Dg*Te>(zP#h*8faKJ!x-}2Rd)+>ssE`OS? zH{q>EEfl3rrD`3e_VOu!qFXm7TC9*Ni&^{$S76?jtB;*1+&lyEq_j{|Nhg&s;W6R9 zB#r9L#a7UU(Vnq#7asUx%ZyVz{CiVL5!CBl-7p|Kl&=g>)8e?z&u?Q^r>L@P zcB6n=#5Wz+@-j`qSB=wD1p_n<(NhAp8wa!IxDP?M&_ zKNcJonwpOS>a3-OBC9jGV@*WND}F8~E_QS7+H3ZK6w&kq>B}kc123ypkAfx`&en&T z+?U=!q?N5DDkt(2$KU;t^dR}IVC|M)pn@S)m{saxD4V?TZZWh@hK|C|n(P&eXLAq1 zZ#v0gPhHJYiyjEkJT~&%u@zLE`Lm!p!&-VAfk?eF{HN%PeV5S87-u3n;g}^R(OZqI zA|##x9SAAKAb!FSr9+E^(}_HX+lb+XLQiWF2UmH*7tM?y7R{u3(Vr<5h8V>Y-c`SgYgD9RvV*ZP{xBLuk-5sAcGP5G zDdk)Ua8PaYS-R*C(V(}4>%>{X%~yk{l3&El7iOz}m0Y8MAl_Qc`-2(z2T3kJ4L1Ek zW&^0C5lA$XL5oFZ0#iRevGn2ZyiotWRIag?#IT-E$gv92YXfp3P1BJxO zShcix4$;b#UM2o=3x#3;cA8Q#>eO8bAQ6o|-tw;9#7`gGIFVll^%!T5&!M|F|99EZ z?=t(Tag~g}`Wep_VX!|sgf_=8n|trl((YTM-kWDQ1U@WIg!~YjGqsZNOrayhav_lrw< zgSle+;b;p^Ff)tDt~?&TweI#6(}<3?Uw1@|4MvG2w}sQgX*N;Q=eD+(bJ%jKJ9L2o z3%MlC9=i-DKzXOun`;&7ZI$Iw?Y|j!RhIn*O`mRl2_vUnE*Rf6$?{IC&#;ZS4_)ww zZ${m6i^cVHNiw5#0MSjEF!NaQfSr&DbTX&tHM{Ke)6Pt9^4_Jf%G&51@IH0aA7QRc zPHND$ytZTZ7-07AEv8Rn%5+<=Bx1tWJSG_?CqXuJ99Zwp=hP2?0a{F)A8HLWkv z)nWbhcgRVdtQ4DpZiw6*)QeCWDXGN6@7m@}SN?Ai*4{l!jL`wrp_lL`bJF6HVAOnj zNa*fTj+{niV5~*O zN5NwHHcEed1knV2GNSZ~H6A+13`U_yY?Dlr@mtyq*Eutin@fLqITcw+{ zgfCsGo5WmpCuv^;uTtgub$oSUezlUgy1KkqBTfdC=XJ}^QYY+iHNnhYEU)j7Oq^M^ zVSeY5OiE#eElD6|4Haq&dOHw4)&QX=k_Ut{?Uvr21pd&diJ zB2+roNX!_7mJ$9n7GNdG8v{=K#ifQnT&%`l82sR{h&TKf?oxK%8RlG}Ia$WP=oQ3C z8x#$S3Rrheyw7recyTpSGf`^->QMX@9dPE# z?9u`K#Vk!hl`$zv<^Wl(#=J4ewGvm4>kxbr*k(>JDRyr_k#52zWRbBBxSsQfy=+DkvQ40v`jh_1C>g+G@4HuqNae&XeekQeAwk+&jN88l@etjc2U0(3m{pQ8vycb^=k>?R~DSv8<0tRfmLp27RlxR~V8j?ClC z)_B-Ne*s0#m}G~_QwykU<`~vMvpTlr7=W&w=#4eEKq!$muL_QJblmEh6*MUg!$z4fC{DBd*3h=N|lf1X7dTfqL1v6~_al z%J+WD;fSJ>TKV*mid$G+8eIjdfK%pu!#kkan;Qi>LK<0bn$?ecFn-b|@+^+OT=0nl zZzN%OUn9w14s`D45>E^)F8?Z?;l!%DF^oL|Yt!@m^V@3twFD@^D5$*5^c%)sM*sbi zk(RQq-d<^O7T8RfFwEK9_us2+S$&W1-Z3OR+XF6$eJl7IgHM~N8sHzWeuzxpB% zE9h3~^*;?_y)7i>a4#z6(ZQ%RaIo)|BtphTOyY@sM+vd#MYN11?ZV(xUvXb&MFg6g z=p`JrH(5;XsW4xVbiJ?|`nutpC1h*K1p~zS%9GcwUz0UWv0GXKX{69Mbhpcsxie0^ zGqgqzpqFAefIt5 zbjNv;*RSO}%{l!Z)c-Qw`A_=i-}4-?=swGSMI^E7)y37u+#O1^yiI2ehK4F|VMVkK z!hIFgJ+Ixg^6jI3#G8UbMwE1a!y~wFx@T(|6G*f($Q=e5na9eDt?f6v;SI;w0g-j% z!J#+aN|M&6l+$5a()!Cs22!+qIEIPkl)zxaaqx#rxQ_>N-kau^^0U$_bj`Aj28>km zI4^hUZb4$c;z)GTY)9y!5eJ{HNqSO{kJDcTYt-+y5;5RiVE9 z-rfg@X78JdxPkxzqWM?WOW8U(8(Lfc7xz`AqOH6jg!Y-7TpXRJ!mtM~T)9C^L}gSL z;YSLGDG_JZayritQkYm6_9cy96BXEf5-2!+OGf|OA7sdZg?o)Z<$B#|?fq|82c!WU zA|T92NDMBJCWHwuFa{aCfTqmu)kwClHDDbMnUQhx07}$x&ef5J(Vmp?fxerb?&J3W zEcoupee$`(0-Aipdr2XA7n`Vp9X;@`bGTh>URo?1%p&sSNNw!h%G)TZ^kT8~og*H% z!X8H2flq&|Mvn=U>8LSX_1WeQi24JnteP@|j;(g*B2HR-L-*$Ubi+J1heSK4&4lJ| zV!1rQLp=f2`FKko6Wb9aaD_i=<=1h?02JU2)?Ey_SS%6EQ>I20QL=(nW-P4=5mvTJ z&kgssLD)l`rHDCI`%vQMOV-yUxHQyhojHdYC*$H1=nrJKqFo93>xvB=M`$}Roksx# zRgV+d8#sk=v+tN#P-n?dx%RC(iv;9-YS-7PrZu#xJ5%k4i*8joRv1J`M_tOQR`{eV zE~<8%VC63sx|_U&{Bpy&?!~^Ce+CNv^T)?diyKrA zu^d&el}PFVWKFz9wkriy~eruRakPmmS0ZsKRiEMGj!_V`HL0FT$ zQU#r2x}sc&kxyY}K}1C{S`{Vdq_TYD4*4zgkU_ShWmQwGl2*ks*=_2Y*s%9QE)5EL zjq8+CA~jxHywIXd=tyIho1XBio%O)2-sMmqnmR&ZQWWD*!GB&UKv6%Ta=zRBv&eyf z{;f~`|5~B_&z17;pNS$3XoIA~G@mWw1YgrTRH95$f&qLKq5wY@A`UX)0I9GbBoHcu zF+!}=i8N>_J}axHrlmb)A1>vwib%T;N(z z!qkz-mizPTt^2F1``LZ#Is;SC`!6@p@t72+xBF5s!+V#&XJ54bJ|~2p(;ngG3+4NA zG?$Orjti%b`%<{?^7HlMZ3wR29z7?;KBDbAvK`kgqx4(N-xp5MuWJ1**FC|9j~trE zo`+jX&aFP*4hP;(>mA>X7yZujK`$QP9w?a`f9cQJaAA2cdE{Tm@v?W3gT&w=XzhbY zCDpADyRHQ?5fOuf*DrAnVn6BjADR2&!sV&wX1+TC*Qk}9xt8KA7}6LBN-_;c;r`H= zwL1uGsU0;W?OEez?W5HYvu>6SR+O8l#ZM+X@T3>y9G^L76W?!YFcytB^-`NyTDB=; zw421!sr`Wwopu>VDWNN>IN&RxE08d0JJZigpK%)p|Ep&aHWO`AFP)}VkqQg1S#TY> z(W)bm7duX(Nvry|l%sGs+Eudz3=_A0i@M47VtBp1RTz_zxlmqgi53tT!_i)(bad*R zt<1n~oT!|>QLmYf?YL$n8QEJ2A6liMI!hRY#mB@?9sWAUW8! z3#M&1`ZQmRP*o`jtHjbA78}!&iq6v&rlp|5&!}O}NT>|10NoWbiq5@7lhquTSHBCO z2a!-M+(e10feoq(nVw~!ZC;y+4M=F0%n)oHB7{BRYdVpeTN zryeS3Ecv^OC_2HcYbRWnOSY2McCa2PfRXH~!iu|fA^#y<&eJkS1^d|DM3)QKAnMe1 zp%9s~@jq$zOV8LQ$SoOZGMPYE@s<@m$#S(N##mh{yFb!URLo?VmR4c2D<_vio;v$u zEJivu^J$RML#dZFhO#!?D8s-JTIP{sV5EqzlSRH3SEW;p+f8?qW%}bdYNyDgxQcQg z)s4r6KHcPGxO_ErHr?P}mfM;FZE)8_I3? zDjMJvQui}|DLHJ=GXcz4%f~W;nZtC{WKitP66ONo4K<7TO!t?TYs_icsROOjf=!bP z#iDYw8Xa2L$P!_IMS+YdG$s?Gh(pybF}++ekEr=v(g97IC8z28gdGEK?6QPNA@g_H znGEeNG!5O#5gfi{IY+V>Q!Z=}bTeH|H2IGYcgh~!jjG`b~gGo!$<2(Kis_p5;(P-s_l8JWL!*jOOFW7(UIXj)5^C~7r z>g7M$hT|sIVBpur@M~;gi~j(BNMp8UkYv?y&{`-sK=@)-@S(2kqobO@Wt_pSnMh|eW*8azy%8exS@DAQxn9~G zE=4(L_gg-jHh5LtdXPgG=|7Xcq4E&x?X2G2ma(6{%4i1k?yUE4(M*Qk6_ z1vv$_*9q$Ow(QAvO;Y5T^gBQ8XX5ULw$iW6S>Q`+1H*Qj+COZ<4PxD-Fwh71j0cBx zz1pnDR}STs5k`ekB^)M`Iu39H@BwM@^8_X7VVp@epjNMqRjF($LBH!#dnEe)By}7T z7*XbIUY>#irgB@|lb)RRvHN^cPT%6slXqX1FW;4YMtNurd;?3g>rm zCSyAc0+aO+x0NojMi`4bp59%=g=zuk4R4o~hTUxxaj-YA z@UtFr6OY{A=_+?qZnrqBO49}q~-hZ!+0QZzD)8F6c7AMQ8Edl-y|d#R;NOh4ukOeId((#ChBKo`M=8Z@5!BZsX7A3n)%+;0Dy*bI-#fNe6_VV1{v%_*=I&54mqAWAg z3XmVyRkbAG&>7rIx23lx*caz7vL$Tha&FcrqTEUNZXhFsibRbc*L@H$q*&{Bx?^60 zRY;2!ODe~pKwKFrQ{(`51;0#9$tKAkXx7c-OI>j-bmJb*`eqq_;q-_i>B=}Mn^h`z za=K-$4B2-GE(-X{u|gHZ+)8*(@CW35iUra3LHje(qEJao_&fXoo%kNF}#{ zYeCndcH;)cUYsmcLrAwQySyF2t+dUrBDL;uWF|wuX8S|lr+Kg8>%G?Kuzxf;L!gZoxAqhd;`!i$5wZfphJ-c zd|uR@Q=cF4N1HXz1y}KjQJ8{7#aqNM_|j!oz6@&wEfq)8)wG4ngiGocMk=1Ft54#R zLyJe(u>P{fm>k_wUn20W9BZ#%fN9ZePCU*5DGK$uQ{GP3{oE1Qd^}1uSrdHw<-AM% znk>YZOU^R94BahzlbdB994?8{%lZ*NSZ4J+IKP3;K9;B))u#S>TRHMqa-y}{@z#V5wvOmV6zw~pafq=5ncOsU z`b-zkO|3C@lwd3SiQZeinzVP4uu+V>2-LKKA)WQXBXPb#G9E8UQ%5@sBgZtYwKzkq zNI6FloMR!lx7fV|WjJ*b`&y_UK9mPl*` z;XO8P%7{H*K=GrNF#+K3At?5`_oXT|Vz!Rh_05t2S&yd`A2 zjcyVJB|#czi?o<&biP<}0alxnpPLzJ9d#_R9(c$2IPXg7=4mL{7WoN>JTCCZ%zV{) zm691r%m?d5yR3l=Qxn7|f0?e7@ zk^9ia@dNTbyi6%GO;kec5sHCjtyr*i1QSY;G}gTsivUQRTG(i)y`O_~K{I*S+x=>M z;}<><>$k8!-=R}>b#)kmSE&~qf+xi@lJazu^F@~pV>MQ3ISq0)qH;F^;_yT@vc-Pr z390Cb$Zq{edB^7W@Mz_+gQ$>@*@>hJIjn4*`B@N%Lt_t1J1wT!aN`jpEBE5;Z|_X| zT^67k%@CVrtYeC}n;uLV%ZSClL-hu4Q5t8ke5a8BZ`=p#4yh?Xa^Q~OrJm_6aD?yj z!Od*^0L5!;q95XIh28eUbyJRpma5tq`0ds9GcX^qcBuCk#1-M-PcC@xgaV`dTbrNS$rEmz&;`STTF>1pK8< z7ykUcQ^6tZ?Yk3DVGovmRU?@pWL#e2L7cLSeBrZc$+IyWiBmoex!W#F#PlFAMT00niUZfkGz z0o{&eGEc{wC^aE3-eC$<2|Ini!y;&5zPE>9MO-I7kOD#cLp<3a%Juu2?88km=iL=? zg)Nm=ku7YEsu57C#BvklPYQ>o_{4C>a9C*0Px#k2ZkQ)j3FI#lIW3mT#f*2!gL4$_ zZDI76!tIw5o=j7Opkr~D0loH62&g?CHDg;Lp^HZ;W7)N+=s>^NuhmsYC?}lxS;sOE z69`R?BLA*%2m_L7BSZ^X5BKaWF-Y?b-HqGLcTd9NU7vY8k|j{O`cOrwxB2WW@tmhU zt`FA4?YCJwFISu42CLh~%e8Qg093rgqDa!ASGd!qoQ1e+yhXD=@Q7u0*^ddk+;D{) zKG0?!-U>8p8=*&(bw!x;E{EjWUUQyY3zVB2V}@t$lg*Bn3FId6V_Ez&aJ%8kzKZg$ zVwL+>zsp;_`X|m4RRvc|Wtejy* z?bG~}+B%y$b6zBRba$P?mX#UbwE{i{@jbuL@tZ6Rn;SCu#2M*$dpQIn$Hqv`MgjBn zURSnq5+1ReLXsI#*A8G1&h5`YFo^I17Y=&&1eQDtwY8HI3#DdGWslPJSP1` z1D()O()qzD6U~BYRUPw6gfc4Wx!am$yM#i~5MCmF8=7(q7;n3?L@7uuvn$;8B8wk8 z3>T-EJ5X9Z3@yH;L=9QFtWmzdE_;Kw^v+te+u`pF zN4&*o>iRKeC&l_{U^a`eymoog3(GY&2h;5vMyRyld37+7bW+&7tvIfrL9TpA@{Z

qX$1Fw*+9wcl%#kpGwArO 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

O0iCLVB;aGKO&9dFhP&$sYVUB>3M)a8 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%0AFcz8F>t2)|yI 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 z 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
~*E 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 z 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Μ3t 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 z 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 z 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

+|>}|4hVwAFNPNAWED+@E?>1&be?RL{X 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 z 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 VC;jBtVJcZid_7iB>n;x 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Àu7JV49V@1X73gWl0?hspavP3 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%0A`hhTNP_u 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

u9sy`f?&mgP6;2WJQdViLnxZiWhJ24%R&{F39U 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

$~H_GQU%0 z?4`mk@z}p##hpXWXzh?dB*6}O2m-uKO=P~R1G{()M6^jo=Qu+E6iVrb6|N_qeh|Bq zqrB~Bhsr+*T7nmb^h=^wGMV3q6p#ZnSV!n9h~`mU;iH51{i$yfLqz!h9<)rVK|w<3eXFE(ViGQQYw(%-7`N4TL}y zwrF`3YgVlfoo&RIB$z*EA794wH}fjQjc2DNDX3J~#|2dh@^dz0BEA+aidwwLqN_rF z%LbzKcQdELofi)lrRZ>L%MD=yRkmEYFhLEJEC0FjaR-+_mo5KciC`A36_HWXYLwMk z!^pE~*S38dcW&LgdH44H8+dTx!-*F+ejIsn<;$5jN6r9xbm`NnSGO)50Du77xp(*e z9ejB40QBl(eKEfsfx;Qy6S4@P%pd<=ybCLs0P^z(0q$mK zsJkZoQD(e({0VEG?j%g2yNUeUjs*q-Sg^wTL>!UC5=}f2#S~Rsk;N8Wd=bVNN6gN- z+mz@9sf(!S<%Sx!Qldv6x7tg{$cQX*Haf`ZCbO0@*kcc9$RP*HDr>mN2P&29CYx@^ z$>t*<^4KFADqB*L%x<6|b4tH3lCqmTq>xg}Dfv9k78>g zA%5_g=uZMlnkS!WRO08Sc^=9uoWR7oh?hJQ?b8`$3c{dIjzD#5RC-LBW~zR2EGRaA z=9wzClL&IqpC+&3#V9=|nkTcA>}p6;dM?6qP*59v%b)*#X5Et}f|&7V8Gb0;)1Oz9 z$a7Cnox#Ai7|I!!+;Tm+ZGl8*&8Htp$0~?dVk_1429Y3D$RlYVl#4C`_{nFUX(rMW zpF}gOm)OAgv5FvJW5cIdPCYdVR8eo!pfWM8(897TJ}YR4%EHisi^{mTXk#r#`$LPC zwfOiV6=<0Sf!P|FIjf>{MUv;9ef}BfpoJcq=%S528tLS&Tbk*mvy&0(7w22AJ@;Zs zVY{j86Y;?BV#83v{Th7GK$E%yacl_1V;)?a^(try z{R)~^R*7qYgdh_Ylkg@6=}_PT83>Bogk@nEQOc$o*1m?l?;`1Hi1b>3Dt%e(A^n<2 zT;fNM1t35|ufiZkB=jx<#Lpk|Gf4eD5|*3rrescMk(A^l zDOt$?5Uyx9=!KgKa<~^94wQDdo{%VaxlsxYb4C;0=5mJ>+T|fDa6;Wy761-%bnYRx zwB78?gb`cf5_h^&$W@ldk0v=UhQm_`_YBC7n#C_jsybx`74oX|-7qWLyNa-Qaw&hf zDK;)7h=goK0Hp{oD@vILS(?SL_zC4A6Ny$q?spXgB*dBohz&dm0Kiekt7gp%8ZwtP zy@4@nod)d3^?G5FZeC?tRGgj&mqP!LeE0)@I0+CzmRCTR^y{4;kta)R*qhPh;36lz z2*+SXkRqDqBSkzSR-CAU+N9<+U)1SNdD>H-{uHP|6{>N@Sk&v3(UN9#%?Hz?c+9Ld^V#gzP}l>}f@tE#Vb9>FJNS)Fqi0 zX=pj!wUva(upkNXOZ+@Y5CH%2v$q*#N&Iw0q5sM1Bk?SkBhR%hHg!`O4P2yTEgcOIFR}q1qRfa{L4XsX zNSh=sai|fN@PsK`VGCav!@M!-hNpwnxJoTOYCJ$H+?cgEa!r18n@EDfqBictMnGK^ z_u(mayVx0NVd)SD=Mc6w80t; z2z2TOVhMnODJ8BYSz=O>difD0b+#a0@P`is@R(8VVT}$fuk%sbipR84%zvfJU z*w&;M%9zGH7Ud5nV~_v8SII3)!l$T$J^G*%t*DL;=v?e(WiFGxNH`|cuznRJeBvA@ zMz5j-qddA`fx51!GriqP|IF0gC5Teqm1)^>I$8-SXiL;fP4@D+Fp@$Qfky3UR4XK- z+WknV_uHEQKjeqd4#Xd*UG32X;=c%2?l>*-b|6 z99czE6ETUAVB!-`wIOZ`Cw?Y^q3tliBngtST4`+KKE^FJOsMf%dAuDTm(6Y;3NpMY zUU7?GoNq}ES`&E0lDq2a2RK5~lm%PmpI!NAK(Hk&Kk_*+VMTOtj*RM9M~>CigdE_= zObtLwhZ;x$v)TXX>sCnH67znfqsshkOCD8_iS#x|3y77X0ydFDUsHRUHk4qj)pcvV zOW7BRb^1KolCWQ7TJWUqvMG3xIafJ=+fHGm|A!$gT?SjZOE8V7r zZEgl(b-y0=v6ubqX)n}vbJ)WezmL|`_@1X~O{(UhBRu%g3}qzBZSitOFyNsOe-B*Z z1t(h{&9)r}Ipf7KeA^xs$;gO1QupB(|MRe=Pqkf9di5UqlMr3;?HOO28ox!0a}P&VESE&Mu80Vq@u8qUnGO>SoO(njkZ1 ztJ!c%>yD-E(qfrDVyp@RR}j$SLhvJS&C_y)?L^Jb7?36U2k#OOy%x{aX0SG5KooY6 z2Yav+Y-8;5i-K&8B~);{HY&Ypa0MBr@d)7Y2q5xwZGFJ21vij4a)30n009@EGE5LF zP!B6q?*nS%!D`P8&kzmMPz~3RsBX`wa4>$%Ww3fPM`Mt1>Gfi0v4!&-k&^2!L0N zDJ$kuqg;?0BjW~wVHAC6+ggHSLh}o!O)FAkHE07hGmt-ID^wXWD-d?E;G0j9HgKI_JTQyZkVn@LI^{G#!{c^Q7at~87KcOCg8^& z6v7z^z|{P~EwQ47-g1NfqM-c9RSF_Ny9)yXg$ja22?C03knn{P0)#NLF2m6>TVkv@ zX#twxdiqk*>`Ebajc3AQf9O&%3Zg=ng)fwF0WNADu4e&$;ClL}ER$d(m@qQ0>KSR` zp8R1NMrj6QNJGUDK>Y{P7D945VA^&-12g~wcE*P~F99y112%vqpcLD(qV;G)^}dZI z5aKRl6HU`pP1lr7vtl;Ks5U(^1ymt7@vsY?iZ_K*Pxq8hUy?YB#14}4Dn4nGlwe1C zAz$7PEqf9=g+w}qL`l8`8j9g5r$jsD!b`wm560wD2|`NtkFn@rO!ogkmo~KyW@!Pu z1hE1T&0vQB2{0SH(>A6OP|hMxE{Y$RDJz){Kl|*@P)i}~0Z$YqHvUtCh!ju$ad{d7 zPv)Vy7GO^xhS1*gykun=Bm_WY?FJkJAATYrsURlsVHv_9FM`D!1#-G#!Y-C!8g>mp z8e$#@t>5Twy{2h`=Al{J6FD&8QxKvb!bwNMbzIB!Bb2}^rlBa1OH~@;TE$`_d~_dy zbTOj^Vfeuwe8mBi)CG@q8j_V)72*dNt7J&y4~FO>IPVX*fD6K4G+L@4u8j+_AZA%Y z^%`s|$`Ax6vrTuFXM5IXE%HspC{FwIM7ot|j}~c@7T*5UM?U|Fuh!>KH>pvN!#PRO zXdcx^q`cE7*fO zI5;@C1%|GIZ$NK%V*zI12J}}sD!4sK*hpd+D{L4zFrb5F7=uBWv6Mh^WXc3b^C~c4 z0}%KjrnIk6AT?}CE0Sm;qsSlZVSTR{i?djZxu|`c=6&fGjKf%r$GC6ocMYp{C$Dyb z*$}fp)w7nwhqqXcEpouR)HIP}1!iUpvEpWECMy60Mdw(M2bquy892I_X}*|@7nzY8 z*^$e`jMWg0c?N);qmtK6V>#FnVUn7x^v zeF_7vt=cTZdh3~=``MrWxgfwfoNL*f3)-L$`V!Ik4At3DwRt%%nGJy;O0r>1suQ3u zn!*-f2S_FiVs;1S8KXm5q(^#91-d%K8KF~JrB@oR6xs|K+D9Pzp&go}Yucu78mDtw zr?J?isRN~18mNO>r~}8PYY(RXm!^|Lrg#6EshirVpBk#8y4-rY!w7n)uNtefT5pP) z_Kw<;lNvdeTB^sItjpT0&l;_LgsQQ_sB#lfd13yPy0D$H0XH!MizR zU;PX$!KW?8~u8KNI- z{KA6J<9>h_f`J!=c-#=6(Xs!z$3tDJe;ks6p}$S!4vJjWSN+ue=0NyJMgT4!_{NW9 zML;GA0cN1d!y_-5m6CFuC379tC+VzS9n7~w%y}bfL5bPjiP@ihlh)jnKAggaUO<96NkgnxdJHo;Xi}JaN7Jw{{16vMixL_)FYm$N&S(OAs>caL{fd#H-5s6 z;f$I9kM;%uc){QF20#j=l6VE>%fpYh9FkPNJ37SWCCSG?{@9Uy!(nZ|cYX;D$DMe7 zzjwrZ6qU`XeZofJ@4Ej83kh8}5+Db*{VGC3WkqA!rk)G-xi~Q3nX|$nu|n&S14>2j zDhy2Y-n}+9fawt|_Us+v382;$o;mO#(LA&Re`DYY;0GKRUxQ&85`uqs!$JN&IOKjS z`nc^S9`S3M;?JlL@d4w_L*qG~1uw+dzikyL44HX>cJg zXa44$RETt_KW8-&s$}W%phuW8X&StlGk{8-NFhq3$dIT}lud&9!^ewPLKz=7CY%~` zCepbUO-4nCK&9P;{QMzoqV{0TxEGPm2&N2JR=is$&V39yvgFB>D_g#d`7r1g9hotuLR=q+_QG}qSd4S94HWd z&+e}fz>uGE7=$MrfPu(1AZ+SkaNl&;m6m{d`_)IFgA;m&!Ys6?U|KIl!G^#L6|S}$ zbR`mizzYbB*1`=Vf<}cu;lM^xZKh!`!-c<K$z_*behFrnVvb2>nP#4eW}0et$v~TKz6ocXa?bhYW|`ed znKJwY!w)`pS$4-Uf(}Y(p@tq)83H8v!ze#NA>hwFN%Y02KY?lGPcn;Q)K^9RAXe#F zQ6c{jWTpAAaMolq6!jOSjrPP#Nea#5PfuoriqAkvgeq$QEZh?+KbP*RDWfbvYE-Df zAV6!S$|Q7arMddb>pYV2ijP#lRw}GhnQn?~td%a?EThl18Z1hvhHCAil_C_axfBt* zsbmNc73!tFy6a<50d#s0z>rGns-+1v!)q{a@ykz7cs>kq#1c<@&}M7ewm>hvI7xsK zz5H--XS9W!TaqM$2HeTZr2`28nUJ#1I_WqES`4D36Z1JOe`W+I<-{y=IzpH8Svlzp z0ooAh5bfCr>3~AO5I3)*PC3SPW;6mv{2a3=G4QrP7GdN^HrYFXM;-w=jGf;f6}taN zb{L^)5Xcof-2Qnso(39- zkvn}Ds9yHwqjivZAYuIe*$%Y-;kam~&|(UU^Wal(rA>f#!#w>knolsIG2_n-3n-IM zqvjK^Dlb&@HO~S{^u>>j3s6z6kHWCm1ZVI|T2E5OJi5myDu8AI!f@3*ULYDik&hQQ z@X>D=^*+;3!Cm-R0*pSj0B2BYPtsZ60eO|c1vao!4+IVO5U@cO+K2!F93cOr@Ijgt z&|(%V8qKQw@jaCZafn1Lq7jdX#3U+liA?kjot_BAC)$Z(5z`Yx`t&Et1nN*+G*o4X z(hREj2qTc<2S1!K1GX?KD7)$tPX+?8HtwS(BUuVUlF=^~Bw>50lFX{C<*V`GBnd>} z$3V*X5P$6BAWiTQFJ#aJS~(*CA)-|iW) zl9D{gDV2dqKbi%Wne@jddC^HvxltgZ#0f5oV#-_fgav|}0U>=fkXOc1k7t=dPGW_R zBJ*EUAX^dlI8rcz3c2JWM5fbazgePQHj&rO7YM(g*&P3sfsnM)6 zkN^cJV0I3Vdejp|TL;oUGlX?8turH7hbWj+wV$1%q?=GFC`1vnbcg^q3($g3@#a&X zb^vW*xSQto2AUjPVRnHK!`$BU2i&QS3)YF8-_jPiqP7jGPih+%n2OcUEERXvBMs!t zss*x&=5K$9D((VNR^sgK3dkeR6~2SG>Phbpzzf7s4KyAxfK_hb8Eb$-(*d92E~q}O zkOuaa*1c6I0c;CHWCM|f&-_huX>A*OHsIB_a!#{k69d}-=b8V?y+;ddgPvy)Knq%+ zfJM%zElJK;TW5gGGvdOBGfr4P&=92wx86u3QgP_X@?{66;jL*bqd;JhE zrHtWS@D^pfU@wd)w`HcQgp75@}-esU~W8!yN9ghd&JB5R2G} zQ7o~Er^rvtSdk!o!e(W**u@wliZXq{CZ7xfDLek9kGt~6UE*jgg#1t{;~N!8vgJos zvACM$%n4Dla*9tKL{AQrfsYVE6o;9m83|d{K6DjibQ=HcAh*g2QL0I0gjks$2#FPw zCF5pz*|N)u1hbFv!l+A?8Ou^$GGF}h%sxv+$&~C%RMv%&9^(@!yISOqk!+Spw%H%> zIH#p^ENMpeG0RTjM>5E)<01jb8WrE2F_4Zxdmz$S2YUYtKpbib(1H9^Xag1c9P}`-anS65 zKpoed%Jbt|4OHlEh3m}gt^=Az>@YU5ng@&e!i(RKB!itPWIhmVBmz{>9|6U1cNfqX z=`=xqw=$Vorc|1~%n&p|nuc_QaTe+PfKeXojJST(8MENfG^!+TXC}pT&tN!zomn5F zUZi!>bp7jL_spVZ(wQ0bWx}7ix^1qPz4UBv>mzQw;~x+C$V-0mk2kU9p@`yBOU8;U z;NF{GEMpmeam)(I@nQl%l0*~Q(z^mALJS>%MrK;mNM->OZjbw({1Gxi3Q8l-6#!Z- z8uk952&WH{`dI-QQ?92Zqp-OuBx@S@NFo0TMdFMQ+-v{(f=+%yXvLA%C$jiL?&I`% z4@AKTnp&=JWb=cce(`ri`?v2&klqZ=JCj5P3Tc8v{$)-8C}yXZe6i9DE`|^!;V?E~ zewyci5BM6DcrO|{} z6$mqzAEf14{lOmzXK#q}JJwNgtOFV;7aA5v8W=|!cSBg7VQvKSIs``=% zAP{&KfP97$yE1zMh$-VJd;wqGzOthAOV7cH5O*3L}mwfkOZ8NGsyCUE~yykpVE|m}5x6Y5B(w%HSBUw-hMJD9|XB zLpd1|ctli?fu=!$pcpb7NJJj^lpuIA43!Q}@`9gX12ID%ELelf7Bx1=QZeI|pz$*& zSW#ff8{0-226Aw)@q^{&a-DHl1b{f4P|sE1C7gi!dGSCxieIE9|U zg<=($AqO9HqdJ5Ymuv|dmGg1lHJ74chT@@x_%WF4mId`j0OMg*b*Gl4A#!SXnMc?l z1mGTpNdOx1hp^FeqY+O^@`>!#i=k0LYexX%qa3uNh@L?!b`TndXBxB!8nZcy{*Ygt z(Mh1;A*IM%)|DHKVm$whQX&{eA0)w)&Y3==p`4#VE6qs&L-#?v=^4fu8z>N4AE1oy z37_#PpYutdNz{z@=_b!elmVb8W<-tEXpLNC87!bD?t@MnDQX6>l7HqY=6Gj#M2)CY zdpkj)!4Md`M@h}nC-*Rq{8=jxc`1U|DEM$f#`mEHi4AbfbX*EKEwJ(X^wF zQIi65Wfv)u46zTD;tYp$Lshz@2)LhT3XMkDfvo`>NEw`H;*>)Km2xVTB$I;25i{kW zr+dmZUt?@EC>sA)=^4!?gE6yHHFyLtsDigqnnwtlFBfpA8E{qDaF)|uosj^iiExEEHYevita%-kvjB`kSOzj8?opYBd2y5~8e`K| zzuHzX7d>Rd1*VEwp&_aSumM+)1)aJ&1VVGBadW`>t8wWW8p0v6nVV1Yh@lY<8Ri*8 zu?(cKo1W1Z!ug%Q(F@8j4cpTf#0eVeNgBxc8DQ5ZRT@rp*RA?xL7fpKs7M+;Qi`A9 zO`Q=V1KSz25_F(JubyGAWSXxDc3ht!u*La{u>o7MRi7Knu^sEN9}BXhfuH!PpG4W8 z{|TT0>P7#UF#`pP5;=x|v=WX5NscUf5a)QLm?C|UfuY)z6&Q(-&q6EMG*3}seg1f& z0EmD=GPARHr5w3q=Tfu@NPZ((85HS|2*I>I+M?z6qP^m?T5F{1SCW(Vc`P}O*|dCE zTD5bLrRD^)%C~^N!V6zoP5fYyXsWk+tENQM1gWta1En%?DnxTyxOEyb43&eVF@r+m zxR2|np23x)A*jrTmNRITCZ(u47;cuCak251pFuZi$g7CMa95S9hG`lJ@Hv{p1ylv9 zqLHkjL8_rTm{tfHsj8{}VI5kK133VP72Df?H-JNiikZ5}iyDC)Hx*(*kTvtvt=gtjY{_7>7K#*xvZUDl0Aj2GNxX*Rh=57CcFuz>#( zn#QN+$9qf257@UtgaLv(8?PorgsU=!`^boUF^Y?)>(FbaF}Z=Nxo7EYm|Gf^`<07o z8;y#WpX-)Q^;D$$xu$!msrw(!+i%qK8GLEGOQ@KmSZTMjnNs+B`VyEEG(2f88I;|!-7J?h8PvIny@Jy;?R!sp#l+_?EC72g4H;m~4_VP@o-))2fiO}VfLf~3NGoYs zt+Sdo57;!-g^bsxcF2Rv$j70`C*#N`1IdCd$!kK%pS;Pik;yK&4vG4wovf9J?UjV; z8>F16wh_9hsmh3Hsi@0?rV%=R`OLv=%UOuavU|IIwaecNa__MNIncRz6}w@uIk9`p zu$s*5HX6))sn{DEszqA3ylxMIaqMBMsHxjLNKmgy3$dBL+v;~5>_Y#y8NcXUhyYu^ z1OS}G@tmL0KJfa%^BkPeG|xfg8PWM0ePP`wW1XFYod)ZQ15Lr>9p9y~&>h^b;Vm2N zNeexs(f7+xg~Wel#E;FO47cSHE$zd~=Mp07 zTePBfs-k4}taaX=OZ9NqC<Tzvc}ZKlJC?ZO@;SFY zrruK3OD?4M(kL$9wi5JybCI*Zq+Qr#vqyc^z*q7VZx;T-^PLuyQc*7XFf24H8A;$S z^DwtSzZ6mNwg-Cg;dK|pB`qlr46fn~3C{3me;IckGD|5?N!iHdeldX_GIF1|E@c|O z)==y*1Y?;}mOL6Yl@7fof{{Myo9i265aZLd!dh``Gulj; z+O!*(rK-!hTkJ3=JTk}mZH1cF5gxaVtGG@Yx_j&dKs;RFSbf<6+&1i?nID-|ad?Pv zZMgx@s+gsY0eX3JeYpTRFe1U&-{3qNU|sJmpkV*JxZa*o?cT}GogqlSVGrFN8a)DN zrXfjscNR0`5udRu>ebMV0v`B71=7(1O3*_BYa=(%-2n~m_Dj&{n$TP~{-06)06{jCtX;E= z4X+IwwJ=n&{2DVw5E(P#$DKWY1`V2MPLuz3dTsQ0qZbv@B9)+SJ+eiM*d=GzE(vL! zD3C|etxG2=l&IgEBrYfiJd`I;o*0Vwz1tJ1b)MFhV>n{nx&okuOj~pfCsD3*;gY_9D_E5G^=zFOZL}FfWWN0{o-E9T<`? zy#}?AZ$JV%xFWqj&bu$agDNbLKMb$Xu)r%KO29k}C^Rod^RDPlpd8H0f}sx;6ez(O zM>Oyt4CGVKJT6XrF`_IQoR5ni3D982Ft`ZgLoOI9@DDCJ48yz$4=NBs^*;RL$u0xg zGC(dqO!A-r&*S3FKO$lf&Na>JAR_++W}#&Tka+QDo{p&K#~*x_35Op;pCrH;e}w7i zhCmNe^q_hCK}{Kl>`}%Ue(-VBj^haOXPQoxxrhpf@ac4(Bp6!YQbV1Yht!B14Ro1H zHC>3I8%Q;D9!356QPW&yU4|i5@sa3KUL;c0&{khPDArYJwe=u^3}PsuUSTEGRA*4- z2nAYbL7}5y6k-%Nci)9KUU}!Gw_bbi#W&x0h2pngeu)Y#V1WmwtSo|&QnU%A91R94 zK$ST-Vu>fFxMGX(GWcSRH|Dsh(eQnt7dzUGh>FwheNA5iZc~|Mm389{q!B`i4meO^ zxM&1Xw%ab|gJRfuyK;^oARYhg4$_W0@74j2A@Pnzsm>Vl6!O20q?R#8{rK~bM*;%W z5X>MiO7Novuy*psF9q5$>luM`+q^jsYTNA<1yYek7Z1_^LNUbnW5*n~4kQOG&#O8R zMj1Si@VEof;J77aWORWn>JDRV0(LkvMlm!eK*bK)b}}Li-aKzb2HQMn2h8tgsDt`q zM2~fW8lhzt1U>>(&`4!fNSJmVg_I*neJ7w&fi6XD0b><%W`QRB5mllWfS>fDUWWCj zA0;H>B_D@Y4MrkihUMp3e!i_%8DKw+o}ngy#fLRz4QNxeDA>*-}vxRK5Z2w zBHp^l^~RUIi%`TA9-03JTvRqe3Rcj97sOx&HMl_zM#Ntq1R(!7|;rZ1P}tB662$OvK}0+PWh1~F*j z0+vWY3~a!5NIZ@Pu6V%>oF{CXvl_h?paBguu}4;nVin7Hk-QOLj0xz-7`J$l1ZWW? zWSpZw_|yoOEZ_#TA&nnjFcLq`z>IEe!5=+R$V0vWkRb8nBQN5|LzZL#iIn7VZeYkh zZqke@I9IwlqNwj-(Uhk|Whzy;YABO!#PP)6uOTHXa8bU`7o{GkjOeuW?NP*^R6 zIZR?2=9a}orVsyt=t|rS(TJJ6*AbaHO=@D1L9jbWivp2HX0~yH=0aCB#i`0Y^~obG z@JBwzxlVSr)1B{x=LKUqPoK;(nfKHf3zDE2eD>3y{{(12JGRVt!o->QlBT^9T2O{I zG$sK89h4B~PH%p57PAngLp2Joa`Mq52_fJ{MLJTFmei!Dq-RP+SQLS_)TJ+lX-s80 zQ_%q6q$oLPG@+@`o!-=^BW2JZA}5dqxGoUbTxUfsDvON%)Tt;zfGK9-C$qJnl265I zR<*j-tg4ir_M~Z8#X459mes5rBPdr72pfd>_BDp<-|FbC=p!;!AQO=@1@4@j+SXhl0( z(w5e=;v{S=4a->8w$`<;g)IpkD_6+YYqIjX?P+zpTi*88x4#8$aE0rV)WUMLu|;lj zmAhQ#DrL5Dt?gUgIQW2J74WZo7)Ei5Rg7W{Yn8z9s_uwoJYyQy*v2=;F-c0? zuM_{T*vCHxGILv;)fdAn#yLiEl9jwYK8qW>#E^@J9xx>GO zKJ=e=j4b|`OvIRwPKzbMA@krx4>NP{q#(eB5aZ$0$1;PY_fS!5aY)zCs;RgHATwfb zskdjc>t44#}s6YiTZ^X=TK6t_x-tb-4`AT`HjC`Oy zEkPf8O;DxYwK(T0os0#oI{Iwb2g=A;~7)ksyK@gbNci!X7-mAFMzjR2U*Gx*bHqs$2iT7Bo94e8K=Y zKttgL3^WQEV4(@TLJAB*(QCu5lL`b>K!ov!qqxAMFhL-^!=#u21O$en!wWAIL#Wup zK)gIQOu(Ycyc9f&7(|K?w7{rS!~l@QGsK59L<&Z9L!@9psZa(& z5r`JJJ@{*x1EUxE)4y7@#aqNhzv92eCIbV5CRkPGlLLuTX$j(eD-xD<|C7i$y?r&}PbV}W~Ep!9J@ zXbd~DfVu?=1_Zz!tTT#p6dTXhc|`v@dIXg5xyO7&iY5R@ z8v4iap$lEg!+jjcI84ZB3=CWuA2rNCW4t`^TfJml#sw0|W*A8AV*z7?LZ-Ns>DeWX zTt~E6pM`-7q}T_35Q~{~2#7H~j64c{49d0$6l1x(9x_Fnu)Fqizg_^O1wg+akQd*x z3E*=%N2tGC^vbUU%dmu}UCf~t%Di9Pi(nMSYfB49X$A^Z2)(EbesG2vU_*xpCa3$9 z5fqDQRET|O0tqCDvI~G@P>8@xf?6TSrCS&69zQvA&}8hh{*Ex7det3_FZz zMw=`;hB1mSJ&G{3j0@F1r{KN-SQj&O(liYKC1q1JJjXZH&@08m?9|YL^hT?TQU+~O zKovcIxJ*4<%yl_ZKylCja8Iz?NlK;CF*QwofH*zv)Htolr`Q#|P?W;>N4)?P44jMe zL{bb)RX)^E@ zzJoE#m+VEq@X;S_%Qme#hag3Q(2LPa3csAaRYlSxMN%qd0VZ(QcjdUoWC~3Qrs>hg zOL07cKnqX}0C6S9hxk)(T0Z1==F@2OhPdUzG`y0XQMY-r1=Iuse~X0vD|b zWc@a+jTaPfghn7fX(ijTHQTd2i5tD4FU1FV)Ycyry0l1wLSYpWWK*RWQ>Rl`zf@Oz zCDl94*?=9$I+a(`WFcqplwP&EIwgyG7>fh!6nGHQ15Mg~=m(|PSiK#K9V%QT)kgkVe^Uz;4aH%NwBb^vU?(NL z9WLSFMB!e&-K90mPsxZY9-x3d($^dRVhnUgEXHCI+##i4-Z2hd3IByTt~B6G*5pmjMFg&)|Lfqp*w(f5iy4Su8ag`1@YxHd-r()qnN8H-HQ1(* z*YPYmG|pj&xfHw5&%#jH7*1Lk#<=smVb0azQ|;xW_~qNh(?k_!71rX-ecc>x;#0Nd zVYb~^URq|JL?w2LEoF*lF4v4~<$?WID3m}o_B?*L+`&L!Zti9VJkPhVyk4baK<2(} zj^%Hi<`4C_e8B)nW{8j*BxPa$zheZt26kY| z2vA#vn4?=tMpe_j%}7@ETc?}lJWlDQkXLj)UwiIXeh^wGo#j-f+|9cbNL&jw9#Db{9hbh=D63lC-Grl?^+wA+xyi*dnV zaz07COj*)Rg6rGHs3yg;_RmJG>aXxnvs0lKItsef6uUs*K*n8XwCaNN&_hHMmN$zgA?fvuQ5Ht8Ad7w|jCJ|wRVj?|bmeg_ zZHbLicN|qD#aLPfKm4TsRG79@d)`%3{b7DZ>B2C~vMc6k25N|@?L7YB=}}jsPSo5! zirqeKu=8!F#$J1-$$C{{)SG75E=Y9EYNlX;_31)MmF2=<$)^_U_Z01;Anks&XOzaw zd9VxRMpZzz?hJ%#Vc7@5bUxC{>wMm!_}=a&1#G4iYG# zpzH^S@Cg4j%kG!}^ooAdXlqLgP05D@luVYb49RT<_vz22uIrNa=IxyU7owHyYi*{G z*L9)GVDJ={T*`l3(5Q~yV7R4SzG9`ku9bM0%$%cDu{%Wr4)hcJiT)*N)^E~Z3giC`U+#6AdD zluE^ZCJcg63HS6*2lX+daDe)O46imjPzztQ$e*hW1c=~3DGXN5VAN(+9|k6}SZSpw z++Zk_K)KDOyk~?pJ6xg565iLOrBC!>V`n_lpHA|HlVCRX@qKJfD8EzSgdV%7awd+* zQ`OU6pNC&B%4!eQCoM?e$p?h==BG#kU~!eCz;?JOj57AgSD%N;m>&TGc3|KhXRz>l zPC6Dq_YMyK(;tpmS_j4B9u~70c&2{e0IwI*NN5qI0wuWGUNF|)OK>AwaChnSPzU*t z7kL{S^?#BIs>q6zw~DRkin{;{#+YHw5E#X9i*?s^fz3du-3-3~42kLasL*-Ipct87 z3dO(+7$W-4(7K%`#*9gNyx=FL$cvzdil;vqqrZ%Ql5~{_nUPtfi(ie7H>i!@GO@3X zk01H8SNpYRu#yL`{|=Zv2j-$yigDyN)`I)H_ZW!Zpi5FwoRDOhpyZlB0JLZO!$B$-uw+MoXvH`E(?|W&V*LL) zrd+!J$*0(EVA_1fYW>-Viq3zh&yQcT-%6Ns@YDzX;1~YCTK#R)r>M96@XYCr$=Fe*z6EbSP1v000C? zs&pySrcR$ijVg62)v8vnV$G^`E7z`Gzk&@bb}ZSlX3wHctMn+(wh{%ledu;B-MV)F z@8Zp?cQ4<*e*XdvEO;>C!iEPIO{_TaQMHaALyjzYGUdvaFJsQE87tevGU4)+>v=Tk z(xy+NPOW-1>(;Jc!;USRz~b7r88qIkdpGaizJCJ`E`0b}0JB4a-YNPx^XATOV zpnwAsSfGJcrFS2DIk~5wgAYO&p@b7sSfPa%&eflWxFL0*haZ9%qKG3tmY{tL;?y99 zE3(+4i!Z_$ql`0>wqbw&k(i^7JM!3LfhN|6;!P^jSfr6hBAKL;OEP((jr`&N=%bWV zQdy;ykO4`bkTwz7q?ccU8K#(Hl38X>PjVOKm20xurkigDkmY<^*3_k$cjB3+o_q4y zCyZ!rrzV_(5?ZLC0m>;Koiy3$r=yQT8mXj{Qd$_Gw+VWvrkirw>1Bz=x9CibQa8jA zF|fEm4VALms;jTU>g1)hW$LM|x8jEeKnas4|f{ohR#T zViF1}pukWMKwz6~wxcc34LPe4hJXqxAW#wlACw!by6dvruAj5g+981$D6xdS_s*cJ zzWeeU8Luu;(Tl(X6AV#77z8{p70J%DY)s91b}C2DMoZEPw9HbiLJN@p)3L`MccWJi zK}ZAyIo&WkSR=H^k}gOnG~$RO8oOJw%{SvrBfN{%I$jIM03CGDH}qSy(MNanZ%g&w z+qA$26R?25R2aL2z!=cvFia2|w!k`>Obo5X7}K1P$=&Rcw%U8pkyp2QNVEVD8F;qx zEG~D1g3OJm@IlUh10J~G`0cD%&ygYUl^sGeeoPWCKpr{dEhK)KGR{1PfHS;6*2Fyg zBy-*j^XxN^uJhod)a5&_PNLF`_Cke0O7x<{?6qe-P-sxAX2jQFR~!-ww9ry^LV1w0 zM__c21H^2m&|(Tmj5xx`;MZfHz4p!(&X~NJ1(R=AcQjtU`QlUmhJZi*u;3UI{^avm z66?>yxo!x|Q2A5{@Z%3Y%IpSz`U?R5+V`9OB}IMg`w$EArxXPmP(-hriPdyR5Igh& zYXw;V22=JDt@Vm`bs5137_xv7#K40Gc^25>mO_M3j35hmVMk^`i$+8w8|07zNisk; z6TU!&2qBgUy`@2q5HTVP2;xUrzygjSz=kXMNX(44y(?ldi(33k_qy{v%qSxt5!4F# z%xA`+8RIfdXhPGI@Xa6QFy{23xEXwDLUE7azNrBn+U}@Oqq^X zrX!TY@gpJq@ZwcWTIew@RDS)FJM~oUYz@fZ@NFf{EIvF(D zW{?EXL5Cg72Dl2+Ou1zP94CXDL4dG_aCQtF>P%+JsIX3OWMd%<$ip?lJNZDs39AuQi4}6Rf zD`h<68INX2MDAvfRZ*!P?bydZ0!NS|I;oT<7!%srZi50t$PIe&gN9L(K_cYIvpgw^ zUVg$LHs~ZNKoJT~uHy&>@dPM9(aNS)6%?s7NDNy4xsGy(qL%9@Awiz?)O3U*6sF8& zMr??~hMcV--6DrInVGx<7~}=o%my^H>4UuLFdJ#}RyT~f0CDC49MCvt$H++#I;1VI zYpcUSfRG2qJ`*88@Rneq!C6Qmwx4@w=E*XGP+Zia6#?A^D-41FfkvVr2&ly_ULnjV z(qf7onJ7kk>)YP~w<8)I3P<6{kB^4bDkCMS`L5E0U?_tZW8?)J5zvI_j*$ht$lrAn z*97}%H(xX0MKYQ&z@#LB7r{tE;;6enUNB)P2q14T%&V02hIG8>)2=e=+ecpD!ynN_ zX#kQCjPho8yVg}kd)YYN@ZC2U>um~u{hL7lUKp}|1a=CB{joVVMi{|M3Gad%9DoO- z&%hIA%6yYi-^$H5!)^?~bN$B)`z1vNyofIP0zl&KQYF3EZ3+SmJY=QF^t(!N?}DY< zlo>!57(Gs)itS4kB}18w_?54FeZ1Whlh?}Hy@!CmOk?nV*}zUFU=m!MToycc#lNxX zOB}gO0tn25I0b54hN_bzcybfTnju*Wa)d%JK&|CSh+11X%vy>9RRj?MTg%!>Q6x(Q zqF4thGBUj4MFe@7T?q3~Mt}tDA$cjwfDVfRwG8w?l;Px|40T9Zg7{#YP)l_@5u!uq zMFbk;m_tHpkW7*hBm>@}H353iv2FnWn*c%RST`vWiCxsgyAVa*oX!Xyav zq_^9d1vlO5UN^gkE0p3o#-qVNE*Y6yQmP;z!0Yn|KR~R$dnBQM`^NG7lA-VR337hW z-M9ZDh=4fmTa5mj$_!vSNP(}9ABe0Y0GBe4Lnb8{4EJB+=Ev}kvw+O|<_E$3Ves{_ zKz;RNcrXy~@qKqZPKt5&XNl7`wS$R#$W)O34miWd-i(p+ap+~&I8{F0gr^4}j%O#} z#0xA(h_4T%G=_Up5-vwW?mG$pERg!%*>3gZZidb->8b1v5->`(Kwvq&X;4$-XPhjc zmBFLP5IU*CMlS>so?Pfcidtv_06HDxmWbUXqRo$WY}8Tnmh4i!2M_8{_XrU-u?>Pe zXcVLlCo^WVJ9cLbIA4k4tTsU~;H_vA1bM|M2=mAh>kW2{`4SOALQ}SYfeJyCutmTt z#H|n&5Kp3x@Eg19Z~yya(cS*}qUHE8UwVs_y_r!}7*aEE7r(WS`W%-t%z%!q4~Wgr zN3B=l7#=_DLlbCMfMHHjB!k(pKoX!%-$g~mL7XzVG;7%5ssG<;sX<|48NrfRXAe{9NB5ff9LfIe|ol4-1GK zKR_N+e4HaDLB8nS3#N|WSs(@i*bU+jJov*YI1t(~A|Gy79DUS0G(j7(;EBy(0~u01 z%o!uKMZgSI=Ji4nJOt(8&S!MqkbK@v#DM8tgx8D}LZF^PfWkV+QtPdQC>(?cbQ0@X zL@7j%5_TiAga`~23>*ZvwSxO8#HZ0;Mu>|eycPb5M~382taMgQo}yj9owY@iI5qREYs;Vn>7R2(C&p~D4ODUP7U zC1KpbqWBmR`kaDGc@#>?0KX{(P3c@SEJelbL&?G11Fa8^Z5{d;5+6mSQcR@_CIw4P zg<6UnRw{*7a^+9*oj-u(`iP}VCFN4|PaV3{&{-S-^-l!(T>J23kip{BgZ9Zu{sg?K#Y(aO zJ{)0Iz+_AU4FS@nQz+1s1sGxeC1m;?(7|H++#O>MUMaEw6ToPUA`%Hg1!&$~&V5`b z20(!SRgPtjs3-bEzTnXd`h)&doKX%QXD$Vgre$9SK#W3Z<*4P4dR&m6D3Kbe2qtNb zMxt8!*k9fqirU?k_7RlAC?ds?Qf^`U1egpkMH9pqETU$JGR2S9Q8T#Yj-DoI?xdMA zfdPFSfq|xEiYAH%W>Q$DoRVpiLfzZlWG?EQl4{0mu0#{`!ZOOx3*5jA2ur}c0BH4RD1((H;?z!TY3ixiL9JZoT_h4J7#{3TCaS?M zg_n+E#W~{CMy+fDqfTHzo>2q_iE2t%QcGYGOaR)VnGmE&8UY}{ts>{|C`2v)NfkrH z&~vtGMU-0(?NHpLnmE-}K`dlLGQ>iX13V_5efnDF8U*x_!<`M&^dUrj{^P-j(+{!d zL3qo2QbhYv!bF4{Y&FCO7-&X(z_i2+y29)6B5(4}h`e%$Zg|vj;cLF?t4vk}3wTt< z@sR@Ftd`xNUdCegDh0xJAinyMi%Qt}27~=Ttj%Q{KHP)QrtKTm5suA(z}2G127py+ zFH?vd=QM2#W@U-0?1|YgK77v04($V>@A*opOYQGc^snDB<^%IAWp*6<4&nQDsgoA1 zQgq-);X??EFw=ssk1cTeCIy*^@Cx4{1vdrOO6JZc1!&IKKJ1$_B#r|Av9Jhx*9nUc z!m5ti@||e5tpUC5_cEs3;_MLaFpEZB-sZ%fO+@BZo-+2?Ts-4CkS+l%l@=Ss2r#az zIxeG$jpUZ`28D4&tc$7s_=k{YiNyN1dWb*X!eG=b6v;aeH zaY8_(L^cHb)fTtSUO{|XBU8i&$P6SaZzWsuCD#Y@(kog#Z}dv<^mZs#%)s@&kpi7p zph_@Pz-^VbkC*x#l0F5*0wVehYQ+K2$FZgyMG%wb@1Ejs5Wms?QZU5IV8>zNE+eoj zLxo!Y@(hEVFjM7Q3b4=iG6M!Nh80t*!})lkN!{cM<@vHbm_n1oOl$ z0Vo?deBWGAUwty`L_lO~C35@K0s<_6?=A#JpBsZ>@=+soQcH&>r(|V#)ZS?*CA6EIS3n9%}dsF^2k4P97EP= zFvGHS0#k)rzO{VGbt>y@0QamhqwSdLwO<0#{5ZJp762J&lS{GMZ3_w+M52L%AqC9)A zh?}(mky+@-pq9q6#l>cd@7-dm?O+Bm0$b+%2p$Ljb}uyVEHQ7Xj5{*|ujoqkrHw~W z2X3H_3-(>>>Dk>~BnJ6Q?QDzt*r9eaR4g7pq}XA;as<7dWt-@So8|^exsA)%>uXU0CC1O{O$K`6nWC(ObqOP@1}Khp#PuII47BmpqnaS$2Nm91Q;i}xuSM65ZAB&IK#&sEyY>fCOShfP^_blSjG*|C-#>C<8oUs z#oO^izLOchJ2n7I^I)H?*9L>cBXCe|&RROD#bZ1Iy7@3qbH^dP!e4wOl01&}Pd#*8 zz|RBByHu4gvxX=9&7sr^R<;dqrHLx)ybVV>qW6x+lL^nx91F$PV|PuWD^(x#!;#1V*uAP?3zsEd(1K=06je$GzjZG&No2}@~>jV0=$BN5>zc9K|y5X zEqD+sBzQugdQqo)@+<%H=f%1Y$PZk&9azP@S)KSO;KK>rJVa18ueN6k<^kKH`iS+D z{bewm;2%*TRC^|iA)X_$Z;zU@B-$?yA01uqc*|3E#^Lb9hny0cJU|2sFmNC*e*XON zbB2Im5`WGJ20)N7;tYTDA~x}-j9{>S2S@xVMLoZ z10=x*b6ygg24Om5LGU0^mJ$>HB2cz+-cW)~b|S=AG9s{*51rzS_%iE2mk9YOn}{!E z&8_~NB5;OKV1S}I%@*|6cAzqn1eLDj7mT4+zkdM-jtBq%0mFw8Csw?eabw4i4KKie z0di%_mX+MNyqPoO7A-o57Oi+ej1i4Xi?}Sp^a97MU61Bmik2zaq8HSl>^OIe*oPN@ zBbUK&2I7!={~q1q_-)QCWUxTsTm>y!D4ZK^9!M_mbt1pWn0?Z=+lsf!S!>$TMfJGHSe9@*5VO+7s0;L1dLy2|_Ajcc=!q6`l z4cstAoDdLFD;IlIk;ogH1d;_Afvj?{!t%>{}Q^Ao&KA4WpJMqj@&pr9<)6YKv4OGxU2`w}<0RGu%0lWSY(9uU7CD6)ADXp|f ziY&G1AgTshi!Q%-*(lRdNiEgXQ&9yG(^Oe))m6a=Gn76qwfs_6LESVH&pOE2<5u-@ z1rLGk9B~A@Uy)5#*=3n+*4byFjaJ%b1z5lte&(SJ(rvkAK+;#iP1Q(KHR{J1UY7C) zpD4Ym2O*!rjaT0PdFj2B!+P<}x5ikfC6CrDZS5CK1WcKwyE~yFM+$*uBX|}#!$SZC z6&g8~;fpcOSmTX3?%3mxL4FK@e|GEEWC6d`S7ik8L9tY*VA_aXudwBG<(qNN`No!Y z?)heZL+0$?`~nWz=-|i!&FH0>ZrbUmp^jSWsj0pV(Zf#8+P{>2?%Gurl2Fp?vB@sm z?6d0yy6VG*#;@qL1+F0*XyC5f?z{2MTkpO3?i;eJ4bxh1ZvjBt@WT;LT=B&jH&t!8 z+rIB@zbUWW^2;<=UI2*BfvG2G^SF#z`;T^wUvKo!-aSj@-V4}wfBp&l`fjuT-v0aX&tHGQj;DJ3`N~H=rL~WM1vKCR5tu*) z-p6|L+gAPd7eNV5kbn#MKofnU>G$S!iR=4v|$gS7)2>gk&0FH z(+`0NpcEdFi(T~M7YC9=s4ek5O=RK|t(ZnNu91yxbYo{mRz;~nwnLNPv# zjP5ZvV;Rx-MnMjekcBkl0tLW=YfS?*bEIP)AsItlQV=*K`Fl9QeE;f8xV8WQ00IewkEzS;52I8C03rDV0096104%HotN;T5B>;deFg{ID UWdaP0f1u0l52KuvqPq$JJD4J_MgRZ+ literal 0 HcmV?d00001 diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml new file mode 100644 index 00000000..4f966c97 --- /dev/null +++ b/spring-javaformat-vscode/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat-build + 0.0.36-SNAPSHOT + + spring-javaformat-vscode + pom + Spring JavaFormat Visual Studio Code + + ${basedir}/.. + + + spring-javaformat-format-service + + diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json new file mode 100644 index 00000000..40ef0758 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "configurations": [ + { + "type": "java", + "name": "CodeLens (Launch) - FormatterWebApplication", + "request": "launch", + "mainClass": "io.spring.format.FormatterWebApplication", + "projectName": "spring-javaformat-format-service" + } + ] +} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json new file mode 100644 index 00000000..0e0c2a50 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "editor.formatOnSave": true, + "java.format.enabled": false +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml b/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml new file mode 100644 index 00000000..24085434 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml @@ -0,0 +1,121 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat-vscode + 0.0.36-SNAPSHOT + + spring-javaformat-format-service + jar + Spring JavaFormat format-service + + ${basedir}/../.. + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.8.RELEASE + + ${main.basedir}/spring-javaformat-vscode/spring-javaformat/runtime/ + + + + + repackage + + + + + + org.codehaus.mojo + exec-maven-plugin + + ${main.basedir}/spring-javaformat-vscode/spring-javaformat + + + + exec-yarn-install + compile + + yarn + + + exec + + + + exec-package + package + + vsce + + package + + + + exec + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + checkstyle-validation + validate + + **/*/FormatterWebApplication.java + + + + + + io.spring.javaformat + spring-javaformat-maven-plugin + 0.0.16-SNAPSHOT + + + + + + + org.springframework.boot + spring-boot-dependencies + 2.1.6.RELEASE + pom + import + + + + + + + org.springframework.boot + spring-boot-starter + 2.1.6.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 2.1.6.RELEASE + + + io.spring.javaformat + spring-javaformat-formatter + ${project.version} + + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-runtime + ${project.version} + provided + + + diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java new file mode 100644 index 00000000..58f9980f --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java @@ -0,0 +1,35 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableScheduling +@SpringBootApplication +public class FormatterWebApplication { + + public FormatterWebApplication() { + + } + + public static void main(String[] args) { + SpringApplication.run(FormatterWebApplication.class, args); + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java new file mode 100644 index 00000000..2ea27463 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java @@ -0,0 +1,42 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.controllers; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import io.spring.format.request.FormatRequest; +import io.spring.format.tools.FormatContent; + +/** + * . + * + * @author Howard Zuo + */ +@RestController +public class FormatController { + + @RequestMapping(method = RequestMethod.POST, value = "/format/code") + String formatSource(@RequestBody FormatRequest req) { + + return FormatContent.formatContent(req.getSource()); + + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java new file mode 100644 index 00000000..43ccceda --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java @@ -0,0 +1,43 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.controllers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import io.spring.format.services.HealthService; + +/** + * . + * + * @author Howard Zuo + */ +@RestController +public class HealthController { + + @Autowired + private HealthService service; + + @RequestMapping(method = RequestMethod.GET, value = "/health") + String heartbeat() { + this.service.setLastHeartbeat(System.currentTimeMillis()); + return ""; + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java new file mode 100644 index 00000000..d74555f9 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java @@ -0,0 +1,36 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.request; + +/** + * . + * + * @author Howard Zuo + */ +public class FormatRequest { + + private String source = ""; + + public void setSource(String source) { + this.source = source; + } + + public String getSource() { + return this.source; + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java new file mode 100644 index 00000000..574652a8 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java @@ -0,0 +1,50 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.services; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +/** + * . + * + * @author Howard Zuo + */ +@Service +public class HealthService { + + private Long lastHeartbeat; + + public Long getLastHeartbeat() { + return this.lastHeartbeat; + } + + public void setLastHeartbeat(Long lastHeartbeat) { + this.lastHeartbeat = lastHeartbeat; + } + + @Scheduled(fixedRate = 1000 * 60 * 5) + public void liveCheck() { + if (this.lastHeartbeat == null) { + return; + } + if ((System.currentTimeMillis() - this.lastHeartbeat) > (1000 * 60 * 5)) { + System.exit(0); + } + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java new file mode 100644 index 00000000..4079c720 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java @@ -0,0 +1,62 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.tools; + +import java.util.regex.Pattern; + +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.text.edits.TextEdit; + +import io.spring.javaformat.formatter.Formatter; + +/** + * . Format specified java content + * + * @author Howard Zuo + */ +final public class FormatContent { + + private static final Pattern TRAILING_WHITESPACE = Pattern.compile(" +$", Pattern.MULTILINE); + + private FormatContent() { + + } + + public static String formatContent(String source) { + if (source == null || "".equals(source)) { + return ""; + } + + try { + final Formatter formatter = new Formatter(); + TextEdit textEdit = formatter.format(source); + IDocument document = new Document(source); + textEdit.apply(document); + String formattedContent = document.get(); + return trimTrailingWhitespace(formattedContent); + } + catch (Exception e) { + return source; + } + } + + private static String trimTrailingWhitespace(String content) { + return TRAILING_WHITESPACE.matcher(content).replaceAll(""); + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml new file mode 100644 index 00000000..8a9d523c --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml @@ -0,0 +1,5 @@ +# 基础应用配置 +spring: + application.name: Spring-Java-Formatter-Web +server: + port: ${port:9987} diff --git a/spring-javaformat-vscode/spring-javaformat/.prettierrc b/spring-javaformat-vscode/spring-javaformat/.prettierrc new file mode 100644 index 00000000..133b8992 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.prettierrc @@ -0,0 +1,6 @@ +{ + "tabWidth": 2, + "semi": false, + "singleQuote": true, + "printWidth": 110 +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json b/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json new file mode 100644 index 00000000..0a18b9c4 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "ms-vscode.vscode-typescript-tslint-plugin" + ] +} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json new file mode 100644 index 00000000..f5197783 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json @@ -0,0 +1,36 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "preLaunchTask": "npm: watch" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/out/test/**/*.js" + ], + "preLaunchTask": "npm: watch" + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json new file mode 100644 index 00000000..baa30361 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json @@ -0,0 +1,15 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off", + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.formatOnSave": true +} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json b/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json new file mode 100644 index 00000000..3b17e53b --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscodeignore b/spring-javaformat-vscode/spring-javaformat/.vscodeignore new file mode 100644 index 00000000..ed3f9d37 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscodeignore @@ -0,0 +1,10 @@ +.vscode/** +.vscode-test/** +out/test/** +src/** +.gitignore +vsc-extension-quickstart.md +**/tsconfig.json +**/tslint.json +**/*.map +**/*.ts \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/README.md b/spring-javaformat-vscode/spring-javaformat/README.md new file mode 100644 index 00000000..5f38bf4f --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/README.md @@ -0,0 +1,6 @@ +# spring-javaformat + +> Format .java files in spring-javaformat way + + + diff --git a/spring-javaformat-vscode/spring-javaformat/package.json b/spring-javaformat-vscode/spring-javaformat/package.json new file mode 100644 index 00000000..0cc76709 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/package.json @@ -0,0 +1,42 @@ +{ + "name": "spring-javaformat", + "displayName": "spring-javaformat-vscode-extension", + "description": "Format .java files in spring-javaformat way", + "version": "1.0.0", + "publisher": "howardzuo", + "engines": { + "vscode": "^1.36.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/spring-io/spring-javaformat.git" + }, + "scripts": { + "vscode:prepublish": "yarn run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./" + }, + "categories": [ + "Formatters" + ], + "activationEvents": [ + "onLanguage:java", + "onLanguage:markdown" + ], + "main": "./out/extension.js", + "devDependencies": { + "@types/glob": "^7.1.1", + "@types/markdown-it": "^0.0.8", + "@types/node": "^10.12.21", + "@types/vscode": "^1.36.0", + "glob": "^7.1.4", + "tslint": "^5.18.0", + "typescript": "^3.5.3" + }, + "dependencies": { + "axios": "^0.19.0", + "markdown-it": "^10.0.0", + "portfinder": "^1.0.21", + "ps-list": "^6.3.0" + } +} diff --git a/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts new file mode 100644 index 00000000..d382b919 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts @@ -0,0 +1,28 @@ +import { + DocumentFormattingEditProvider, + TextDocument, + FormattingOptions, + CancellationToken, + ProviderResult, + TextEdit, + Range +} from 'vscode' + +import { formatMarkdown } from './formatters/MarkdownFormatter' +import { formatJava } from './formatters/JavaFormatter' + +export default class SpringJavaFormatter implements DocumentFormattingEditProvider { + provideDocumentFormattingEdits( + document: TextDocument, + options: FormattingOptions, + token: CancellationToken + ): ProviderResult { + if (document.languageId === 'java') { + return formatJava(document) + } + if (document.languageId === 'markdown') { + return formatMarkdown(document) + } + return [] + } +} diff --git a/spring-javaformat-vscode/spring-javaformat/src/extension.ts b/spring-javaformat-vscode/spring-javaformat/src/extension.ts new file mode 100644 index 00000000..6b848bd1 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/extension.ts @@ -0,0 +1,31 @@ +// The module 'vscode' contains the VS Code extensibility API +// Import the module and reference it with the alias vscode in your code below +import * as vscode from 'vscode' +import SpringJavaFormatter from './SpringJavaFormatter' + +// this method is called when your extension is activated +// your extension is activated the very first time the command is executed +export function activate(context: vscode.ExtensionContext) { + // Use the console to output diagnostic information (console.log) and errors (console.error) + // This line of code will only be executed once when your extension is activated + console.log('Congratulations, your extension "spring-javaformat" is now active!') + + context.subscriptions.push( + vscode.languages.registerDocumentFormattingEditProvider( + [ + { + language: 'java', + scheme: 'file' + }, + { + language: 'markdown', + scheme: 'file' + } + ], + new SpringJavaFormatter() + ) + ) +} + +// this method is called when your extension is deactivated +export function deactivate() {} diff --git a/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts new file mode 100644 index 00000000..e66942c6 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts @@ -0,0 +1,10 @@ +import { TextDocument, Range, TextEdit } from 'vscode' + +import FormatService from '../services/FormatService' + +export async function formatJava(document: TextDocument): Promise> { + const code = await FormatService.getInstance().formatCode(document.getText()) + + const range = new Range(document.positionAt(0), document.positionAt(document.getText().length)) + return [TextEdit.replace(range, code)] +} diff --git a/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts new file mode 100644 index 00000000..e8c334f7 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts @@ -0,0 +1,28 @@ +import { TextDocument, Range, TextEdit } from 'vscode' + +import FormatService from '../services/FormatService' +import MarkdownIt from 'markdown-it' +import Token from 'markdown-it/lib/token' + +const md = new MarkdownIt() + +export async function formatMarkdown(document: TextDocument): Promise> { + const source = document.getText() + const tokens = md.parse(source, {}) + + const editsPromise = tokens + .filter((t): t is Token => t.type === 'fence' && t.tag === 'code' && t.info === 'java') + .map(async token => { + const startIndex = source.indexOf(token.content) + const code = await FormatService.getInstance().formatCode(token.content) + + const range = new Range( + document.positionAt(startIndex), + document.positionAt(startIndex + token.content.length) + ) + + return TextEdit.replace(range, code) + }) + + return Promise.all(editsPromise) +} diff --git a/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts b/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts new file mode 100644 index 00000000..062ba02e --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts @@ -0,0 +1,103 @@ +import * as child_process from 'child_process' +import * as portfinder from 'portfinder' +import psList from 'ps-list' +import axios from 'axios' +import { resolve } from 'path' +import { window } from 'vscode' + +const JAR_NAME = 'spring-javaformat-format-service-0.0.16-SNAPSHOT.jar' + +const RUNTIME_JAR_PATH = resolve(__dirname, '..', '..', 'runtime', JAR_NAME) + +export default class FormatService { + private static instance: FormatService = new FormatService() + private port: number = 9987 + + constructor() { + const hideFunc = window.setStatusBarMessage('spring-javaformat service initializing....') + this.init() + .catch(err => { + console.error('ERROR:', err) + }) + .finally(() => { + hideFunc.dispose() + }) + } + + private async init() { + this.startNextScheduledJob() + const proc = await this.getJavaFormatServiceProcessInfo() + if (proc) { + const matched = (proc.cmd || '').match(/-Dport=([0-9]+)\s/) + if (matched) { + this.port = +matched[1] + } + console.log('spring-javaformat service is running with other workspace, no need run again') + return + } + const port = await this.findAvailablePort() + this.port = port + await this.run(port) + console.log('spring-javaformat service running') + } + + private startNextScheduledJob() { + setTimeout(async () => { + const proc = await this.getJavaFormatServiceProcessInfo() + if (!proc) { + const port = await this.findAvailablePort() + this.port = port + await this.run(port) + } + await this.sendHeartbeat() + + this.startNextScheduledJob() + }, 1000 * 60) + } + + private async getJavaFormatServiceProcessInfo() { + const list = await psList() + return list.find(l => (l.cmd || '').includes(JAR_NAME)) + } + + private async findAvailablePort() { + const port = await portfinder.getPortPromise({ + port: 20000, + stopPort: 60000 + }) + return port + } + + private async run(port: number) { + return new Promise((resolve, reject) => { + const childProcess = child_process.exec(`java -Dport=${port} -jar ${RUNTIME_JAR_PATH} `, {}) + + childProcess.stdout.on('data', data => { + if (data.includes('Started FormatterWebApplication')) { + resolve() + } + }) + + childProcess.on('error', reject) + }) + } + + async formatCode(source: string): Promise { + try { + const result = await axios.post(`http://localhost:${this.port}/format/code`, { + source + }) + return result.data + } catch (error) { + throw new Error('spring-javaformat service is not ready, please hold for few seconds') + } + } + + async sendHeartbeat() { + return axios.get(`http://localhost:${this.port}/health`) + } + + static getInstance(): FormatService { + return this.instance + } +} diff --git a/spring-javaformat-vscode/spring-javaformat/tsconfig.json b/spring-javaformat-vscode/spring-javaformat/tsconfig.json new file mode 100644 index 00000000..7efb850e --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "outDir": "out", + "esModuleInterop": true, + "lib": ["es6"], + "sourceMap": true, + "rootDir": "src", + "strict": true /* enable all strict type-checking options */ + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + }, + "exclude": ["node_modules", ".vscode-test"] +} diff --git a/spring-javaformat-vscode/spring-javaformat/tslint.json b/spring-javaformat-vscode/spring-javaformat/tslint.json new file mode 100644 index 00000000..8b382dcf --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/tslint.json @@ -0,0 +1,15 @@ +{ + "rules": { + "no-string-throw": true, + "no-unused-expression": true, + "no-duplicate-variable": true, + "curly": true, + "class-name": true, + "semicolon": [ + true, + "never" + ], + "triple-equals": true + }, + "defaultSeverity": "warning" +} diff --git a/spring-javaformat-vscode/spring-javaformat/yarn.lock b/spring-javaformat-vscode/spring-javaformat/yarn.lock new file mode 100644 index 00000000..976bbb83 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/yarn.lock @@ -0,0 +1,388 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/linkify-it@*": + version "2.1.0" + resolved "https://registry.npm.taobao.org/@types/linkify-it/download/@types/linkify-it-2.1.0.tgz#ea3dd64c4805597311790b61e872cbd1ed2cd806" + integrity sha1-6j3WTEgFWXMReQth6HLL0e0s2AY= + +"@types/markdown-it@^0.0.8": + version "0.0.8" + resolved "https://registry.npm.taobao.org/@types/markdown-it/download/@types/markdown-it-0.0.8.tgz#9af8704acde87fec70475369ba0413d50717bd8d" + integrity sha1-mvhwSs3of+xwR1NpugQT1QcXvY0= + dependencies: + "@types/linkify-it" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "12.6.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" + integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== + +"@types/node@^10.12.21": + version "10.14.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.13.tgz#ac786d623860adf39a3f51d629480aacd6a6eec7" + integrity sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ== + +"@types/vscode@^1.36.0": + version "1.36.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.36.0.tgz#ae60242e893d9eda9a0d96d51ef56f1a3fae14ed" + integrity sha512-SbHR3Q5g/C3N+Ila3KrRf1rSZiyHxWdOZ7X3yFHXzw6HrvRLuVZrxnwEX0lTBMRpH9LkwZdqRTgXW+D075jxkg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +axios@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" + integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +chalk@^2.0.0, chalk@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +commander@^2.12.1: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +entities@~2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/entities/download/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha1-aNYITKsbB5dnVA2A5Wo5tCPkq/Q= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +glob@^7.1.1, glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-buffer@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" + integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +linkify-it@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/linkify-it/download/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" + integrity sha1-47VGl+eL+RXHCjis14/QngBYsc8= + dependencies: + uc.micro "^1.0.1" + +markdown-it@^10.0.0: + version "10.0.0" + resolved "https://registry.npm.taobao.org/markdown-it/download/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc" + integrity sha1-q/xk8UGxci1mNAIETkOSfx9QqNw= + dependencies: + argparse "^1.0.7" + entities "~2.0.0" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +mkdirp@0.5.x, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +portfinder@^1.0.21: + version "1.0.21" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.21.tgz#60e1397b95ac170749db70034ece306b9a27e324" + integrity sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA== + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +ps-list@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be" + integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA== + +resolve@^1.3.2: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + dependencies: + path-parse "^1.0.6" + +semver@^5.3.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tslib@^1.8.0, tslib@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tslint@^5.18.0: + version "5.18.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" + integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +typescript@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha1-nEEagCpAmpH8bPdAgbq6NLJEmaw= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= From d0595398ed844ed064616405211c4b83fc5aba0d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 18:20:42 -0800 Subject: [PATCH 126/238] Polish 'Create Visual Studio Code extension' Refine extension to use stdin/stdout to communicate with the Java code rather than using an HTTP endpoint. This commit also restructures the way that the extension is built and reduces the number of Maven projects. It also drops Markdown formatting support. See gh-142 --- CONTRIBUTING.adoc | 17 +- README.adoc | 8 +- pom.xml | 29 +- .../spring-javaformat-maven-plugin/pom.xml | 10 + spring-javaformat-vscode/pom.xml | 2 +- .../.vscode/launch.json | 11 - .../.vscode/settings.json | 4 - .../spring-javaformat-format-service/pom.xml | 121 - .../format/controllers/FormatController.java | 42 - .../format/controllers/HealthController.java | 43 - .../spring/format/services/HealthService.java | 50 - .../io/spring/format/tools/FormatContent.java | 62 - .../main/resources/config/application.yaml | 5 - .../.gitignore | 7 + .../.prettierignore | 5 + .../.prettierrc | 2 +- .../.vscode/extensions.json | 5 + .../.vscode/launch.json | 31 + .../.vscode/settings.json | 12 + .../.vscode/tasks.json | 21 + .../.vscodeignore | 15 +- .../LICENSE.txt | 202 + .../package-lock.json | 3749 +++++++++++++++++ .../package.json | 43 + .../pom.xml | 129 + .../vscode/VisualStudioCodeFormatter.java | 57 + .../SpringDocumentFormattingEditProvider.ts | 78 + .../src/main/typescript/extension.ts} | 34 +- .../src/main/typescript/tsconfig.json | 7 + .../src/test/typescript/runTest.ts} | 32 +- .../test/typescript/suite/extension.test.ts | 44 + .../src/test/typescript/suite/index.ts | 47 + .../src/test/typescript/tsconfig.json | 7 + .../test-workspace/Test.java | 0 .../tsconfig-base.json | 9 + .../tsconfig.json | 11 + .../spring-javaformat/.vscode/extensions.json | 7 - .../spring-javaformat/.vscode/launch.json | 36 - .../spring-javaformat/.vscode/settings.json | 15 - .../spring-javaformat/.vscode/tasks.json | 20 - .../spring-javaformat/README.md | 6 - .../spring-javaformat/package.json | 42 - .../src/SpringJavaFormatter.ts | 28 - .../spring-javaformat/src/extension.ts | 31 - .../src/formatters/JavaFormatter.ts | 10 - .../src/formatters/MarkdownFormatter.ts | 28 - .../src/services/FormatService.ts | 103 - .../spring-javaformat/tsconfig.json | 17 - .../spring-javaformat/tslint.json | 15 - .../spring-javaformat/yarn.lock | 388 -- 50 files changed, 4566 insertions(+), 1131 deletions(-) delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/pom.xml delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.gitignore create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierignore rename spring-javaformat-vscode/{spring-javaformat => spring-javaformat-vscode-extension}/.prettierrc (75%) create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/extensions.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/launch.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/settings.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/tasks.json rename spring-javaformat-vscode/{spring-javaformat => spring-javaformat-vscode-extension}/.vscodeignore (52%) create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/LICENSE.txt create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts rename spring-javaformat-vscode/{spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java => spring-javaformat-vscode-extension/src/main/typescript/extension.ts} (51%) create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/tsconfig.json rename spring-javaformat-vscode/{spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java => spring-javaformat-vscode-extension/src/test/typescript/runTest.ts} (52%) create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/extension.test.ts create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/index.ts create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/tsconfig.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/test-workspace/Test.java create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig-base.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/launch.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/settings.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/README.md delete mode 100644 spring-javaformat-vscode/spring-javaformat/package.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/extension.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/tsconfig.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/tslint.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/yarn.lock diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 93f7b6d3..a5c92957 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -167,6 +167,20 @@ To add gradle classes, convert this module to a gradle project. +=== Setting up Visual Studio Code Extension Development +The `spring-javaformat-vscode-extension` extension consists of a formatter written in Java and an extension written in TypeScript. +If you want to work on the TypeScript code it can opened directly with Visual Studio Code. + +Maven delegates to `npm run package` to actually generate the extension. + +Code is formatted with prettier. +If you need to reform the code you can run `npx prettier --write .` + +There is a basic test included with the project, but since it needs UI elements it doesn't run as part of the regular build. +If you make changes to the extension, you should run "`Extension Tests`" from vscode. + + + === Importing Into Other IDEs Maven is well supported by most Java IDEs. Refer to your vendor documentation. @@ -174,13 +188,14 @@ Maven is well supported by most Java IDEs. Refer to your vendor documentation. == Understanding the Code There are quite a few moving parts to this project and the build is quite complex. -At the top level there are 5 projects: +At the top level there are 6 projects: * `spring-javaformat` - The main formatter project * `spring-javaformat-eclipse` - The Eclipse plugin * `spring-javaformat-gradle` - The Gradle plugin * `spring-javaformat-intellij` - The IntelliJ IDEA plugin * `spring-javaformat-maven` - The Maven plugin +* `spring-javaformat-vscode` - The Visual Studo Code extension Under `spring-javaformat` the following projects are defined: diff --git a/README.adoc b/README.adoc index 38658a8a..1c44e6e0 100644 --- a/README.adoc +++ b/README.adoc @@ -269,8 +269,12 @@ Once the configuration file is created, configure your IDE to use it: === Visual Studio Code -The vscode extension provides custom formatter support for Visual Studio Code. -The extension is automatically activated whenever a `.java` file is opened. And it requires a few seconds to warm-up while you start with the first workspace. +The Visual Studio Code extension provides custom formatter support for Microsoft Visual Studio Code. +The extension using the [`DocumentFormattingEditProvider`](https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider) API. +Once installed it may be activated by using the "`Format Document`" action available in the editor context menu or from the Command Palette. + +To install the extension select "`Install from VSIX`" in the extensions panel and choose the `spring-javaformat-vscode-extension` vsix file. +You can download the latest version from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-vscode-extension/{release-version}[Maven Central]. diff --git a/pom.xml b/pom.xml index 877c2775..98a2d21b 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,11 @@ + + com.github.eirslett + frontend-maven-plugin + 1.12.1 + com.github.wvengen proguard-maven-plugin @@ -362,6 +367,25 @@ + + + + com.github.eirslett + + + frontend-maven-plugin + + + [1.12.1,) + + + npx + + + + + + @@ -597,10 +621,11 @@ spring-javaformat - spring-javaformat-maven - spring-javaformat-gradle spring-javaformat-eclipse + spring-javaformat-gradle spring-javaformat-intellij-idea + spring-javaformat-maven + spring-javaformat-vscode diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 168ef7a9..74e7c00f 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -15,6 +15,16 @@ + + maven-clean-plugin + + + + out + + + + org.apache.maven.plugins maven-invoker-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 4f966c97..41197ebf 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -15,6 +15,6 @@ ${basedir}/.. - spring-javaformat-format-service + spring-javaformat-vscode-extension diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json deleted file mode 100644 index 40ef0758..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "configurations": [ - { - "type": "java", - "name": "CodeLens (Launch) - FormatterWebApplication", - "request": "launch", - "mainClass": "io.spring.format.FormatterWebApplication", - "projectName": "spring-javaformat-format-service" - } - ] -} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json deleted file mode 100644 index 0e0c2a50..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "editor.formatOnSave": true, - "java.format.enabled": false -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml b/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml deleted file mode 100644 index 24085434..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - 4.0.0 - - io.spring.javaformat - spring-javaformat-vscode - 0.0.36-SNAPSHOT - - spring-javaformat-format-service - jar - Spring JavaFormat format-service - - ${basedir}/../.. - - - - - org.springframework.boot - spring-boot-maven-plugin - 2.1.8.RELEASE - - ${main.basedir}/spring-javaformat-vscode/spring-javaformat/runtime/ - - - - - repackage - - - - - - org.codehaus.mojo - exec-maven-plugin - - ${main.basedir}/spring-javaformat-vscode/spring-javaformat - - - - exec-yarn-install - compile - - yarn - - - exec - - - - exec-package - package - - vsce - - package - - - - exec - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - checkstyle-validation - validate - - **/*/FormatterWebApplication.java - - - - - - io.spring.javaformat - spring-javaformat-maven-plugin - 0.0.16-SNAPSHOT - - - - - - - org.springframework.boot - spring-boot-dependencies - 2.1.6.RELEASE - pom - import - - - - - - - org.springframework.boot - spring-boot-starter - 2.1.6.RELEASE - - - org.springframework.boot - spring-boot-starter-web - 2.1.6.RELEASE - - - io.spring.javaformat - spring-javaformat-formatter - ${project.version} - - - - io.spring.javaformat - spring-javaformat-formatter-eclipse-runtime - ${project.version} - provided - - - diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java deleted file mode 100644 index 2ea27463..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2017-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.controllers; - -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import io.spring.format.request.FormatRequest; -import io.spring.format.tools.FormatContent; - -/** - * . - * - * @author Howard Zuo - */ -@RestController -public class FormatController { - - @RequestMapping(method = RequestMethod.POST, value = "/format/code") - String formatSource(@RequestBody FormatRequest req) { - - return FormatContent.formatContent(req.getSource()); - - } - -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java deleted file mode 100644 index 43ccceda..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2017-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.controllers; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import io.spring.format.services.HealthService; - -/** - * . - * - * @author Howard Zuo - */ -@RestController -public class HealthController { - - @Autowired - private HealthService service; - - @RequestMapping(method = RequestMethod.GET, value = "/health") - String heartbeat() { - this.service.setLastHeartbeat(System.currentTimeMillis()); - return ""; - } - -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java deleted file mode 100644 index 574652a8..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2017-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.services; - -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Service; - -/** - * . - * - * @author Howard Zuo - */ -@Service -public class HealthService { - - private Long lastHeartbeat; - - public Long getLastHeartbeat() { - return this.lastHeartbeat; - } - - public void setLastHeartbeat(Long lastHeartbeat) { - this.lastHeartbeat = lastHeartbeat; - } - - @Scheduled(fixedRate = 1000 * 60 * 5) - public void liveCheck() { - if (this.lastHeartbeat == null) { - return; - } - if ((System.currentTimeMillis() - this.lastHeartbeat) > (1000 * 60 * 5)) { - System.exit(0); - } - } - -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java deleted file mode 100644 index 4079c720..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2017-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.tools; - -import java.util.regex.Pattern; - -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; -import org.eclipse.text.edits.TextEdit; - -import io.spring.javaformat.formatter.Formatter; - -/** - * . Format specified java content - * - * @author Howard Zuo - */ -final public class FormatContent { - - private static final Pattern TRAILING_WHITESPACE = Pattern.compile(" +$", Pattern.MULTILINE); - - private FormatContent() { - - } - - public static String formatContent(String source) { - if (source == null || "".equals(source)) { - return ""; - } - - try { - final Formatter formatter = new Formatter(); - TextEdit textEdit = formatter.format(source); - IDocument document = new Document(source); - textEdit.apply(document); - String formattedContent = document.get(); - return trimTrailingWhitespace(formattedContent); - } - catch (Exception e) { - return source; - } - } - - private static String trimTrailingWhitespace(String content) { - return TRAILING_WHITESPACE.matcher(content).replaceAll(""); - } - -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml deleted file mode 100644 index 8a9d523c..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml +++ /dev/null @@ -1,5 +0,0 @@ -# 基础应用配置 -spring: - application.name: Spring-Java-Formatter-Web -server: - port: ${port:9987} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.gitignore b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.gitignore new file mode 100644 index 00000000..2c32c547 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.gitignore @@ -0,0 +1,7 @@ +out +runtime +dist +node +node_modules +.vscode-test/ +*.vsix diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierignore b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierignore new file mode 100644 index 00000000..717380fe --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierignore @@ -0,0 +1,5 @@ +out +target +node +.vscode +.vscode-test diff --git a/spring-javaformat-vscode/spring-javaformat/.prettierrc b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierrc similarity index 75% rename from spring-javaformat-vscode/spring-javaformat/.prettierrc rename to spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierrc index 133b8992..995d5360 100644 --- a/spring-javaformat-vscode/spring-javaformat/.prettierrc +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierrc @@ -2,5 +2,5 @@ "tabWidth": 2, "semi": false, "singleQuote": true, - "printWidth": 110 + "printWidth": 120 } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/extensions.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/extensions.json new file mode 100644 index 00000000..c0a2258b --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["dbaeumer.vscode-eslint"] +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/launch.json new file mode 100644 index 00000000..3baae646 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/launch.json @@ -0,0 +1,31 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + "preLaunchTask": "build" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--disable-extensions", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": ["${workspaceFolder}/out/test/**/*.js"], + "preLaunchTask": "build" + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/settings.json new file mode 100644 index 00000000..5c3ffd3c --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/settings.json @@ -0,0 +1,12 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off", + "java.configuration.updateBuildConfiguration": "interactive" +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/tasks.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/tasks.json new file mode 100644 index 00000000..0a101bd2 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/tasks.json @@ -0,0 +1,21 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscodeignore b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscodeignore similarity index 52% rename from spring-javaformat-vscode/spring-javaformat/.vscodeignore rename to spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscodeignore index ed3f9d37..4b30b77f 100644 --- a/spring-javaformat-vscode/spring-javaformat/.vscodeignore +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscodeignore @@ -1,10 +1,17 @@ +.gitignore +.prettierrc +.project +.classpath .vscode/** .vscode-test/** +.settings/** out/test/** -src/** -.gitignore -vsc-extension-quickstart.md **/tsconfig.json **/tslint.json **/*.map -**/*.ts \ No newline at end of file +**/*.ts +target/** +node/** +src/** +README.md +**pom.xml \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/LICENSE.txt b/spring-javaformat-vscode/spring-javaformat-vscode-extension/LICENSE.txt new file mode 100644 index 00000000..ff773796 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json new file mode 100644 index 00000000..580537c9 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -0,0 +1,3749 @@ +{ + "name": "spring-javaformat-vscode-extension", + "version": "0.0.36-SNAPSHOT", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "spring-javaformat-vscode-extension", + "version": "0.0.36-SNAPSHOT", + "devDependencies": { + "@types/glob": "^8.0.1", + "@types/mocha": "^10.0.1", + "@types/node": "16.x", + "@types/vscode": "^1.75.0", + "@typescript-eslint/eslint-plugin": "^5.52.0", + "@vscode/test-electron": "^2.2.2", + "@vscode/vsce": "^2.17.0", + "eslint": "^8.33.0", + "glob": "8.1.0", + "mocha": "10.2.0", + "prettier": "2.8.4", + "typescript": "^4.9.4" + }, + "engines": { + "vscode": "^1.75.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/glob": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==", + "dev": true, + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz", + "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.75.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.75.1.tgz", + "integrity": "sha512-emg7wdsTFzdi+elvoyoA+Q8keEautdQHyY5LNmHVM4PTpY8JgOTVADrGVyXGepJ6dVW2OS5/xnLUWh+nZxvdiA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz", + "integrity": "sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/type-utils": "5.52.0", + "@typescript-eslint/utils": "5.52.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", + "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz", + "integrity": "sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.52.0", + "@typescript-eslint/utils": "5.52.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz", + "integrity": "sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.3.tgz", + "integrity": "sha512-7DmdGYQTqRNaLHKG3j56buc9DkstriY4aV0S3Zj32u0U9/T0L8vwWAC9QGCh1meu1VXDEla1ze27TkqysHGP0Q==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@vscode/vsce": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.17.0.tgz", + "integrity": "sha512-W4HN5MtTVj/mroQU1d82bUEeWM3dUykMFnMYZPtZ6jrMiHN1PUoN3RGcS896N0r2rIq8KpWDtufcQHgK8VfgpA==", + "dev": true, + "dependencies": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^5.1.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.4.23", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 14" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/@vscode/vsce/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/vsce/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/azure-devops-node-api": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", + "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "dev": true, + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dev": true, + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "dev": true, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dev": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "optional": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "optional": true + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "optional": true + }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/node-abi": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", + "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", + "dev": true, + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "optional": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", + "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "dev": true, + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json new file mode 100644 index 00000000..2d2f913f --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -0,0 +1,43 @@ +{ + "name": "spring-javaformat-vscode-extension", + "description": "Spring JavaFormat Visual Studio Code Extension", + "displayName": "Spring JavaFormat", + "version": "0.0.36-SNAPSHOT", + "publisher": "io.spring.javaformat", + "engines": { + "vscode": "^1.75.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/spring-io/spring-javaformat.git" + }, + "categories": [ + "Formatters" + ], + "activationEvents": [ + "onLanguage:java" + ], + "main": "./out/extension.js", + "scripts": { + "vscode:prepublish": "npm run compile", + "compile": "tsc -b ./", + "watch": "tsc -b ./ -watch", + "pretest": "npm run compile", + "test": "node ./out/test/runTest.js", + "package": "vsce package --out ./target/spring-javaformat.vsix" + }, + "devDependencies": { + "@types/glob": "^8.0.1", + "@types/mocha": "^10.0.1", + "@types/node": "16.x", + "@types/vscode": "^1.75.0", + "@typescript-eslint/eslint-plugin": "^5.52.0", + "@vscode/test-electron": "^2.2.2", + "@vscode/vsce": "^2.17.0", + "eslint": "^8.33.0", + "glob": "8.1.0", + "mocha": "10.2.0", + "prettier": "2.8.4", + "typescript": "^4.9.4" + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml new file mode 100644 index 00000000..bc9637cb --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -0,0 +1,129 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat-vscode + 0.0.36-SNAPSHOT + + spring-javaformat-vscode-extension + Spring JavaFormat Visual Studio Code Extension + + ${basedir}/../.. + + + + + maven-clean-plugin + + + + out + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + ${basedir}/runtime/spring-java-format.jar + false + + + *:* + + META-INF/MANIFEST.MF + + + + + + io.spring.format.vscode.VisualStudioCodeFormatter + + + + + + + + com.github.eirslett + frontend-maven-plugin + + + install-node-and-npm + generate-resources + + install-node-and-npm + + + + npm-install + generate-resources + + npm + + + + prettier-check + validate + + npx + + + prettier --check . + + + + vsce-package + package + + npm + + + run package + + + + + v19.6.0 + + + + org.codehaus.mojo + build-helper-maven-plugin + + + add-source + generate-sources + + attach-artifact + + + + + ${project.build.directory}/spring-javaformat.vsix + vsix + + + + + + + + + + + io.spring.javaformat + spring-javaformat-formatter-shaded + ${project.version} + + + diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java new file mode 100644 index 00000000..811ccc78 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java @@ -0,0 +1,57 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.vscode; + +import java.io.File; + +import io.spring.javaformat.config.JavaFormatConfig; +import io.spring.javaformat.formatter.StreamsFormatter; + +/** + * Called from the Visual Studio Code extension to format source code. + * + * @author Howard Zuo + * @author Phillip Webb + */ +public final class VisualStudioCodeFormatter { + + private VisualStudioCodeFormatter() { + } + + private void run(String[] args) throws Exception { + File location = new File(".").getAbsoluteFile(); + log(String.format("Loading formatter from location '%s'", location)); + JavaFormatConfig config = JavaFormatConfig.findFrom(location); + StreamsFormatter formatter = new StreamsFormatter(config); + formatter.format(System.in).writeTo((Appendable) System.out); + } + + private void log(String message) { + System.err.println(message); + } + + public static void main(String[] args) { + try { + new VisualStudioCodeFormatter().run(args); + } + catch (Exception ex) { + ex.printStackTrace(); + System.exit(1); + } + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts new file mode 100644 index 00000000..d8fc9788 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts @@ -0,0 +1,78 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import path = require('path') +import vscode = require('vscode') +import childprocess = require('child_process') + +const JAR_PATH = path.resolve(__dirname, '..', 'runtime', 'spring-java-format.jar') + +export default class SpringDocumentFormattingEditProvider implements vscode.DocumentFormattingEditProvider { + provideDocumentFormattingEdits( + document: vscode.TextDocument, + options: vscode.FormattingOptions, + token: vscode.CancellationToken + ): vscode.ProviderResult { + if (vscode.window.visibleTextEditors.every((editor) => editor.document.fileName !== document.fileName)) { + return [] + } + return this.runFormatter(document, token).then( + (edits) => edits, + (err) => { + if (err) { + console.log(err) + return Promise.reject(`Check the console in dev tools to find errors when formatting spring-javaformat`) + } + } + ) + } + + private runFormatter(document: vscode.TextDocument, token: vscode.CancellationToken): Promise { + return new Promise((resolve, reject) => { + console.log(`formatting ${document.uri} using spring-javaformat`) + let stdout = '' + let stderr = '' + const cwd = path.dirname(document.fileName) + const args = ['-jar', JAR_PATH] + const process = childprocess.spawn('java', args, { cwd }) + token.onCancellationRequested(() => !process.killed && process.kill()) + process.stdout.setEncoding('utf8') + process.stdout.on('data', (data) => (stdout += data)) + process.stderr.on('data', (data) => (stderr += data)) + process.on('error', (err) => { + console.log(`spring-javaformat returned error ${err}`) + if (err && (err).code === 'ENOENT') { + return reject(`failed to find run spring-javaformat due to missing 'java' executable`) + } + }) + process.on('close', (code) => { + if (code !== 0) { + console.log(`spring-javaformat returned error code ${code}`) + return reject(stderr) + } + console.log('spring-javaformat returned without error') + const fileStart = new vscode.Position(0, 0) + const fileEnd = document.lineAt(document.lineCount - 1).range.end + const textEdits: vscode.TextEdit[] = [new vscode.TextEdit(new vscode.Range(fileStart, fileEnd), stdout)] + return resolve(textEdits) + }) + if (process.pid) { + console.log('sending document data to spring-javaformat') + process.stdin.end(document.getText()) + } + }) + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts similarity index 51% rename from spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java rename to spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts index 58f9980f..0fe3b9a9 100644 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,22 +14,20 @@ * limitations under the License. */ -package io.spring.format; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.scheduling.annotation.EnableScheduling; - -@EnableScheduling -@SpringBootApplication -public class FormatterWebApplication { - - public FormatterWebApplication() { - - } - - public static void main(String[] args) { - SpringApplication.run(FormatterWebApplication.class, args); - } +import * as vscode from 'vscode' +import SpringDocumentFormattingEditProvider from './SpringDocumentFormattingEditProvider' +export function activate(context: vscode.ExtensionContext) { + console.log('Activated spring-javaformat extension') + context.subscriptions.push( + vscode.languages.registerDocumentFormattingEditProvider( + [ + { + language: 'java', + scheme: 'file', + }, + ], + new SpringDocumentFormattingEditProvider() + ) + ) } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/tsconfig.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/tsconfig.json new file mode 100644 index 00000000..431716b1 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig-base.json", + "compilerOptions": { + "outDir": "../../../out", + "rootDir": "." + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/runTest.ts similarity index 52% rename from spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java rename to spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/runTest.ts index d74555f9..19b689c6 100644 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/runTest.ts @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,23 +14,19 @@ * limitations under the License. */ -package io.spring.format.request; +import * as path from 'path' -/** - * . - * - * @author Howard Zuo - */ -public class FormatRequest { - - private String source = ""; - - public void setSource(String source) { - this.source = source; - } - - public String getSource() { - return this.source; - } +import { runTests } from '@vscode/test-electron' +async function main() { + try { + const extensionDevelopmentPath = path.resolve(__dirname, '../../../../') + const extensionTestsPath = path.resolve(__dirname, './suite/index') + await runTests({ extensionDevelopmentPath, extensionTestsPath, launchArgs: ['--disable-extensions'] }) + } catch (err) { + console.error('Failed to run tests') + process.exit(1) + } } + +main() diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/extension.test.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/extension.test.ts new file mode 100644 index 00000000..e73b4c89 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/extension.test.ts @@ -0,0 +1,44 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as assert from 'assert' +import * as vscode from 'vscode' +import * as path from 'path' +import * as fs from 'fs' + +export const WORKSPACE_PATH = path.resolve(__dirname, '..', '..', '..', 'test-workspace') +export const FILE_PATH = path.resolve(WORKSPACE_PATH, 'Test.java') + +suite('Extension Test Suite', () => { + test('Format file', async () => { + const initial = 'public static class Test {public static void main(String[] args){}}\n' + const expected = 'public static class Test {\n\n\tpublic static void main(String[] args) {\n\t}\n\n}\n' + if (!fs.existsSync(WORKSPACE_PATH)) { + fs.mkdirSync(WORKSPACE_PATH) + } + fs.closeSync(fs.openSync(FILE_PATH, 'w')) + const document = await vscode.workspace.openTextDocument(vscode.Uri.file(FILE_PATH)) + const editor = await vscode.window.showTextDocument(document) + await editor.edit((builder) => { + builder.delete(new vscode.Range(new vscode.Position(0, 0), document.positionAt(document.getText().length))) + builder.insert(new vscode.Position(0, 0), initial) + }) + editor.selection = new vscode.Selection(0, 0, 0, 0) + await vscode.commands.executeCommand('editor.action.formatDocument') + const actual = document.getText() + assert.deepEqual(actual, expected) + }) +}) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/index.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/index.ts new file mode 100644 index 00000000..3301b793 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/index.ts @@ -0,0 +1,47 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as path from 'path' +import * as Mocha from 'mocha' +import * as glob from 'glob' + +export function run(): Promise { + const mocha = new Mocha({ + ui: 'tdd', + }) + const testsRoot = path.resolve(__dirname, '..') + return new Promise((resolve, reject) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + console.log(files) + if (err) { + return reject(err) + } + files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))) + try { + mocha.run((failures) => { + if (failures > 0) { + reject(new Error(`${failures} tests failed.`)) + } else { + resolve() + } + }) + } catch (err) { + console.error(err) + reject(err) + } + }) + }) +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/tsconfig.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/tsconfig.json new file mode 100644 index 00000000..7412944e --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig-base.json", + "compilerOptions": { + "outDir": "../../../out/test", + "rootDirs": ["../../main/typescript", "."] + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/test-workspace/Test.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/test-workspace/Test.java new file mode 100644 index 00000000..e69de29b diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig-base.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig-base.json new file mode 100644 index 00000000..7c273362 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig-base.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "lib": ["ES2020"], + "sourceMap": true, + "strict": true + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig.json new file mode 100644 index 00000000..a6df75bd --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], // this root tsconfig just exists to compose sub-projects + "references": [ + { + "path": "./src/main/typescript" + }, + { + "path": "./src/test/typescript" + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json b/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json deleted file mode 100644 index 0a18b9c4..00000000 --- a/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "ms-vscode.vscode-typescript-tslint-plugin" - ] -} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json deleted file mode 100644 index f5197783..00000000 --- a/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json +++ /dev/null @@ -1,36 +0,0 @@ -// A launch configuration that compiles the extension and then opens it inside a new window -// Use IntelliSense to learn about possible attributes. -// Hover to view descriptions of existing attributes. -// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], - "preLaunchTask": "npm: watch" - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" - ], - "outFiles": [ - "${workspaceFolder}/out/test/**/*.js" - ], - "preLaunchTask": "npm: watch" - } - ] -} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json deleted file mode 100644 index baa30361..00000000 --- a/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json +++ /dev/null @@ -1,15 +0,0 @@ -// Place your settings in this file to overwrite default and user settings. -{ - "files.exclude": { - "out": false // set this to true to hide the "out" folder with the compiled JS files - }, - "search.exclude": { - "out": true // set this to false to include "out" folder in search results - }, - // Turn off tsc task auto detection since we have the necessary tasks as npm scripts - "typescript.tsc.autoDetect": "off", - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "editor.formatOnSave": true -} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json b/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json deleted file mode 100644 index 3b17e53b..00000000 --- a/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json +++ /dev/null @@ -1,20 +0,0 @@ -// See https://go.microsoft.com/fwlink/?LinkId=733558 -// for the documentation about the tasks.json format -{ - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "watch", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never" - }, - "group": { - "kind": "build", - "isDefault": true - } - } - ] -} diff --git a/spring-javaformat-vscode/spring-javaformat/README.md b/spring-javaformat-vscode/spring-javaformat/README.md deleted file mode 100644 index 5f38bf4f..00000000 --- a/spring-javaformat-vscode/spring-javaformat/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# spring-javaformat - -> Format .java files in spring-javaformat way - - - diff --git a/spring-javaformat-vscode/spring-javaformat/package.json b/spring-javaformat-vscode/spring-javaformat/package.json deleted file mode 100644 index 0cc76709..00000000 --- a/spring-javaformat-vscode/spring-javaformat/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "spring-javaformat", - "displayName": "spring-javaformat-vscode-extension", - "description": "Format .java files in spring-javaformat way", - "version": "1.0.0", - "publisher": "howardzuo", - "engines": { - "vscode": "^1.36.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/spring-io/spring-javaformat.git" - }, - "scripts": { - "vscode:prepublish": "yarn run compile", - "compile": "tsc -p ./", - "watch": "tsc -watch -p ./" - }, - "categories": [ - "Formatters" - ], - "activationEvents": [ - "onLanguage:java", - "onLanguage:markdown" - ], - "main": "./out/extension.js", - "devDependencies": { - "@types/glob": "^7.1.1", - "@types/markdown-it": "^0.0.8", - "@types/node": "^10.12.21", - "@types/vscode": "^1.36.0", - "glob": "^7.1.4", - "tslint": "^5.18.0", - "typescript": "^3.5.3" - }, - "dependencies": { - "axios": "^0.19.0", - "markdown-it": "^10.0.0", - "portfinder": "^1.0.21", - "ps-list": "^6.3.0" - } -} diff --git a/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts deleted file mode 100644 index d382b919..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { - DocumentFormattingEditProvider, - TextDocument, - FormattingOptions, - CancellationToken, - ProviderResult, - TextEdit, - Range -} from 'vscode' - -import { formatMarkdown } from './formatters/MarkdownFormatter' -import { formatJava } from './formatters/JavaFormatter' - -export default class SpringJavaFormatter implements DocumentFormattingEditProvider { - provideDocumentFormattingEdits( - document: TextDocument, - options: FormattingOptions, - token: CancellationToken - ): ProviderResult { - if (document.languageId === 'java') { - return formatJava(document) - } - if (document.languageId === 'markdown') { - return formatMarkdown(document) - } - return [] - } -} diff --git a/spring-javaformat-vscode/spring-javaformat/src/extension.ts b/spring-javaformat-vscode/spring-javaformat/src/extension.ts deleted file mode 100644 index 6b848bd1..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/extension.ts +++ /dev/null @@ -1,31 +0,0 @@ -// The module 'vscode' contains the VS Code extensibility API -// Import the module and reference it with the alias vscode in your code below -import * as vscode from 'vscode' -import SpringJavaFormatter from './SpringJavaFormatter' - -// this method is called when your extension is activated -// your extension is activated the very first time the command is executed -export function activate(context: vscode.ExtensionContext) { - // Use the console to output diagnostic information (console.log) and errors (console.error) - // This line of code will only be executed once when your extension is activated - console.log('Congratulations, your extension "spring-javaformat" is now active!') - - context.subscriptions.push( - vscode.languages.registerDocumentFormattingEditProvider( - [ - { - language: 'java', - scheme: 'file' - }, - { - language: 'markdown', - scheme: 'file' - } - ], - new SpringJavaFormatter() - ) - ) -} - -// this method is called when your extension is deactivated -export function deactivate() {} diff --git a/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts deleted file mode 100644 index e66942c6..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { TextDocument, Range, TextEdit } from 'vscode' - -import FormatService from '../services/FormatService' - -export async function formatJava(document: TextDocument): Promise> { - const code = await FormatService.getInstance().formatCode(document.getText()) - - const range = new Range(document.positionAt(0), document.positionAt(document.getText().length)) - return [TextEdit.replace(range, code)] -} diff --git a/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts deleted file mode 100644 index e8c334f7..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { TextDocument, Range, TextEdit } from 'vscode' - -import FormatService from '../services/FormatService' -import MarkdownIt from 'markdown-it' -import Token from 'markdown-it/lib/token' - -const md = new MarkdownIt() - -export async function formatMarkdown(document: TextDocument): Promise> { - const source = document.getText() - const tokens = md.parse(source, {}) - - const editsPromise = tokens - .filter((t): t is Token => t.type === 'fence' && t.tag === 'code' && t.info === 'java') - .map(async token => { - const startIndex = source.indexOf(token.content) - const code = await FormatService.getInstance().formatCode(token.content) - - const range = new Range( - document.positionAt(startIndex), - document.positionAt(startIndex + token.content.length) - ) - - return TextEdit.replace(range, code) - }) - - return Promise.all(editsPromise) -} diff --git a/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts b/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts deleted file mode 100644 index 062ba02e..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts +++ /dev/null @@ -1,103 +0,0 @@ -import * as child_process from 'child_process' -import * as portfinder from 'portfinder' -import psList from 'ps-list' -import axios from 'axios' -import { resolve } from 'path' -import { window } from 'vscode' - -const JAR_NAME = 'spring-javaformat-format-service-0.0.16-SNAPSHOT.jar' - -const RUNTIME_JAR_PATH = resolve(__dirname, '..', '..', 'runtime', JAR_NAME) - -export default class FormatService { - private static instance: FormatService = new FormatService() - private port: number = 9987 - - constructor() { - const hideFunc = window.setStatusBarMessage('spring-javaformat service initializing....') - this.init() - .catch(err => { - console.error('ERROR:', err) - }) - .finally(() => { - hideFunc.dispose() - }) - } - - private async init() { - this.startNextScheduledJob() - const proc = await this.getJavaFormatServiceProcessInfo() - if (proc) { - const matched = (proc.cmd || '').match(/-Dport=([0-9]+)\s/) - if (matched) { - this.port = +matched[1] - } - console.log('spring-javaformat service is running with other workspace, no need run again') - return - } - const port = await this.findAvailablePort() - this.port = port - await this.run(port) - console.log('spring-javaformat service running') - } - - private startNextScheduledJob() { - setTimeout(async () => { - const proc = await this.getJavaFormatServiceProcessInfo() - if (!proc) { - const port = await this.findAvailablePort() - this.port = port - await this.run(port) - } - await this.sendHeartbeat() - - this.startNextScheduledJob() - }, 1000 * 60) - } - - private async getJavaFormatServiceProcessInfo() { - const list = await psList() - return list.find(l => (l.cmd || '').includes(JAR_NAME)) - } - - private async findAvailablePort() { - const port = await portfinder.getPortPromise({ - port: 20000, - stopPort: 60000 - }) - return port - } - - private async run(port: number) { - return new Promise((resolve, reject) => { - const childProcess = child_process.exec(`java -Dport=${port} -jar ${RUNTIME_JAR_PATH} `, {}) - - childProcess.stdout.on('data', data => { - if (data.includes('Started FormatterWebApplication')) { - resolve() - } - }) - - childProcess.on('error', reject) - }) - } - - async formatCode(source: string): Promise { - try { - const result = await axios.post(`http://localhost:${this.port}/format/code`, { - source - }) - return result.data - } catch (error) { - throw new Error('spring-javaformat service is not ready, please hold for few seconds') - } - } - - async sendHeartbeat() { - return axios.get(`http://localhost:${this.port}/health`) - } - - static getInstance(): FormatService { - return this.instance - } -} diff --git a/spring-javaformat-vscode/spring-javaformat/tsconfig.json b/spring-javaformat-vscode/spring-javaformat/tsconfig.json deleted file mode 100644 index 7efb850e..00000000 --- a/spring-javaformat-vscode/spring-javaformat/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "outDir": "out", - "esModuleInterop": true, - "lib": ["es6"], - "sourceMap": true, - "rootDir": "src", - "strict": true /* enable all strict type-checking options */ - /* Additional Checks */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - }, - "exclude": ["node_modules", ".vscode-test"] -} diff --git a/spring-javaformat-vscode/spring-javaformat/tslint.json b/spring-javaformat-vscode/spring-javaformat/tslint.json deleted file mode 100644 index 8b382dcf..00000000 --- a/spring-javaformat-vscode/spring-javaformat/tslint.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "rules": { - "no-string-throw": true, - "no-unused-expression": true, - "no-duplicate-variable": true, - "curly": true, - "class-name": true, - "semicolon": [ - true, - "never" - ], - "triple-equals": true - }, - "defaultSeverity": "warning" -} diff --git a/spring-javaformat-vscode/spring-javaformat/yarn.lock b/spring-javaformat-vscode/spring-javaformat/yarn.lock deleted file mode 100644 index 976bbb83..00000000 --- a/spring-javaformat-vscode/spring-javaformat/yarn.lock +++ /dev/null @@ -1,388 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/linkify-it@*": - version "2.1.0" - resolved "https://registry.npm.taobao.org/@types/linkify-it/download/@types/linkify-it-2.1.0.tgz#ea3dd64c4805597311790b61e872cbd1ed2cd806" - integrity sha1-6j3WTEgFWXMReQth6HLL0e0s2AY= - -"@types/markdown-it@^0.0.8": - version "0.0.8" - resolved "https://registry.npm.taobao.org/@types/markdown-it/download/@types/markdown-it-0.0.8.tgz#9af8704acde87fec70475369ba0413d50717bd8d" - integrity sha1-mvhwSs3of+xwR1NpugQT1QcXvY0= - dependencies: - "@types/linkify-it" "*" - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/node@*": - version "12.6.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" - integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== - -"@types/node@^10.12.21": - version "10.14.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.13.tgz#ac786d623860adf39a3f51d629480aacd6a6eec7" - integrity sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ== - -"@types/vscode@^1.36.0": - version "1.36.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.36.0.tgz#ae60242e893d9eda9a0d96d51ef56f1a3fae14ed" - integrity sha512-SbHR3Q5g/C3N+Ila3KrRf1rSZiyHxWdOZ7X3yFHXzw6HrvRLuVZrxnwEX0lTBMRpH9LkwZdqRTgXW+D075jxkg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -axios@^0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" - integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== - dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -chalk@^2.0.0, chalk@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -commander@^2.12.1: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -entities@~2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/entities/download/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha1-aNYITKsbB5dnVA2A5Wo5tCPkq/Q= - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -glob@^7.1.1, glob@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-buffer@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" - integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -linkify-it@^2.0.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/linkify-it/download/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" - integrity sha1-47VGl+eL+RXHCjis14/QngBYsc8= - dependencies: - uc.micro "^1.0.1" - -markdown-it@^10.0.0: - version "10.0.0" - resolved "https://registry.npm.taobao.org/markdown-it/download/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc" - integrity sha1-q/xk8UGxci1mNAIETkOSfx9QqNw= - dependencies: - argparse "^1.0.7" - entities "~2.0.0" - linkify-it "^2.0.0" - mdurl "^1.0.1" - uc.micro "^1.0.5" - -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -mkdirp@0.5.x, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -portfinder@^1.0.21: - version "1.0.21" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.21.tgz#60e1397b95ac170749db70034ece306b9a27e324" - integrity sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA== - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -ps-list@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be" - integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA== - -resolve@^1.3.2: - version "1.11.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== - dependencies: - path-parse "^1.0.6" - -semver@^5.3.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -tslib@^1.8.0, tslib@^1.8.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -tslint@^5.18.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" - integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -typescript@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== - -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha1-nEEagCpAmpH8bPdAgbq6NLJEmaw= - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= From f7e720a73aa072905c4a0b0f8dddcf505ccc884f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 20:34:46 -0800 Subject: [PATCH 127/238] Don't run npx before npm install See gh-142 --- .../package-lock.json | 16 ---------------- .../package.json | 1 - .../spring-javaformat-vscode-extension/pom.xml | 6 +++--- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 580537c9..4d147a7a 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -18,7 +18,6 @@ "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", - "prettier": "2.8.4", "typescript": "^4.9.4" }, "engines": { @@ -2853,21 +2852,6 @@ "node": ">= 0.8.0" } }, - "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 2d2f913f..b37ff6b9 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -37,7 +37,6 @@ "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", - "prettier": "2.8.4", "typescript": "^4.9.4" } } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index bc9637cb..67243d61 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -59,21 +59,21 @@ install-node-and-npm - generate-resources + initialize install-node-and-npm npm-install - generate-resources + initialize npm prettier-check - validate + compile npx From 6555254902c98370ed333e73f2e19a5c0bde4871 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Feb 2023 09:21:30 -0800 Subject: [PATCH 128/238] Fix link markup --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index 1c44e6e0..dcff9917 100644 --- a/README.adoc +++ b/README.adoc @@ -270,7 +270,7 @@ Once the configuration file is created, configure your IDE to use it: === Visual Studio Code The Visual Studio Code extension provides custom formatter support for Microsoft Visual Studio Code. -The extension using the [`DocumentFormattingEditProvider`](https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider) API. +The extension using the https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider[`DocumentFormattingEditProvider`] API. Once installed it may be activated by using the "`Format Document`" action available in the editor context menu or from the Command Palette. To install the extension select "`Install from VSIX`" in the extensions panel and choose the `spring-javaformat-vscode-extension` vsix file. From b543266abf2a87cf76ba916a27da7caf99b6a0ae Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Feb 2023 18:53:57 -0800 Subject: [PATCH 129/238] Reformat code --- .../gradle/SpringJavaFormatPlugin.java | 16 +++++++++------ .../javaformat/gradle/tasks/CheckFormat.java | 5 +++-- .../intellij/monitor/GradleMonitor.java | 4 ++-- .../EclipseDocumentAdapterTests.java | 1 + .../io/spring/format/maven/FormatMojo.java | 11 ++++++---- .../io/spring/format/maven/ValidateMojo.java | 6 ++++-- .../io/spring/format/maven/VerifyApply.java | 3 ++- .../checkstyle/SpringConfigurationLoader.java | 6 ++++-- .../SpringHideUtilityClassConstructor.java | 5 +++-- .../checkstyle/check/SpringJUnit5Check.java | 14 ++++++------- .../checkstyle/check/SpringJavadocCheck.java | 5 +++-- .../check/SpringMethodOrderCheck.java | 2 +- .../checkstyle/check/SpringTernaryCheck.java | 20 +++++++++---------- .../checkstyle/AssertionsAuditListener.java | 2 +- .../checkstyle/SpringChecksTests.java | 6 ++++-- .../SpringConfigurationLoaderTests.java | 4 ++-- .../formatter/ExtendedCodeFormatter.java | 5 +++-- .../formatter/ExtendedCodeFormatter.java | 5 +++-- .../formatter/linewrap/WrapPreparator.java | 1 + .../formatter/FormatterIntegrationTests.java | 2 +- .../formatter/StreamsFormatter.java | 1 + 21 files changed, 73 insertions(+), 51 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index e5f27015..9453cb7c 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -56,24 +56,28 @@ private void addSourceTasks() { TaskProvider checkAllProvider = tasks.register(CheckFormat.NAME); checkAllProvider.configure((checkAll) -> checkAll.setDescription(CheckFormat.DESCRIPTION)); tasks.named(JavaBasePlugin.CHECK_TASK_NAME).configure((check) -> check.dependsOn(checkAllProvider)); - this.project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets() - .all((sourceSet) -> addSourceTasks(sourceSet, checkAllProvider, formatAllProvider)); + this.project.getConvention() + .getPlugin(JavaPluginConvention.class) + .getSourceSets() + .all((sourceSet) -> addSourceTasks(sourceSet, checkAllProvider, formatAllProvider)); }); } - private void addSourceTasks(SourceSet sourceSet, TaskProvider checkAllProvider, TaskProvider formatAllProvider) { + private void addSourceTasks(SourceSet sourceSet, TaskProvider checkAllProvider, + TaskProvider formatAllProvider) { TaskProvider checkTaskProvider = addFormatterTask(sourceSet, CheckFormat.class, CheckFormat.NAME, CheckFormat.DESCRIPTION); checkTaskProvider.configure((checkTask) -> checkTask.setReportLocation( new File(this.project.getBuildDir(), "reports/format/" + sourceSet.getName() + "/check-format.txt"))); checkAllProvider.configure((checkAll) -> checkAll.dependsOn(checkTaskProvider)); - TaskProvider formatTaskProvider = addFormatterTask(sourceSet, Format.class, Format.NAME, Format.DESCRIPTION); + TaskProvider formatTaskProvider = addFormatterTask(sourceSet, Format.class, Format.NAME, + Format.DESCRIPTION); formatTaskProvider.configure((format) -> format.conventionMapping("encoding", () -> "UTF-8")); formatAllProvider.configure((formatAll) -> formatAll.dependsOn(formatTaskProvider)); } - private TaskProvider addFormatterTask(SourceSet sourceSet, Class taskType, String name, - String desc) { + private TaskProvider addFormatterTask(SourceSet sourceSet, Class taskType, + String name, String desc) { String taskName = sourceSet.getTaskName(name, null); TaskProvider provider = this.project.getTasks().register(taskName, taskType); provider.configure((task) -> { diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index 6487ff6d..1ae2e597 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -53,8 +53,9 @@ public class CheckFormat extends FormatterTask { @TaskAction public void checkFormatting() throws IOException, InterruptedException { - List problems = formatFiles().filter(FileEdit::hasEdits).map(FileEdit::getFile) - .collect(Collectors.toList()); + List problems = formatFiles().filter(FileEdit::hasEdits) + .map(FileEdit::getFile) + .collect(Collectors.toList()); this.reportLocation.getParentFile().mkdirs(); if (!problems.isEmpty()) { StringBuilder message = new StringBuilder("Formatting violations found in the following files:\n"); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java index 6ad8d657..9c716249 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java @@ -32,8 +32,8 @@ import io.spring.format.formatter.intellij.state.State; /** - * {@link Monitor} that looks for a {@code spring-javaformat-gradle-plugin} - * declaration in the build.gradle file. + * {@link Monitor} that looks for a {@code spring-javaformat-gradle-plugin} declaration in + * the build.gradle file. * * @author Phillip Webb */ diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java index 09a8a0d9..11ae23e8 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java @@ -48,4 +48,5 @@ void replaceAppliesToIntellijDocument() throws Exception { assertThat(adapter.get()).isEqualTo("help"); verify(intellijDocument).replaceString(3, 5, "p"); } + } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java index 5e7e85c8..75e56569 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java @@ -130,8 +130,9 @@ public final void execute() throws MojoExecutionException, MojoFailureException } private Stream resolve(List directories) { - return directories.stream().map(directory -> FileUtils.resolveFile(this.project.getBasedir(), directory)) - .filter(this::include); + return directories.stream() + .map(directory -> FileUtils.resolveFile(this.project.getBasedir(), directory)) + .filter(this::include); } private boolean include(File file) { @@ -168,8 +169,10 @@ private List scan(File directory) { scanner.setCaseSensitive(false); scanner.setFollowSymlinks(false); scanner.scan(); - return Arrays.asList(scanner.getIncludedFiles()).stream().map(name -> new File(directory, name)) - .collect(Collectors.toList()); + return Arrays.asList(scanner.getIncludedFiles()) + .stream() + .map(name -> new File(directory, name)) + .collect(Collectors.toList()); } private boolean hasLength(Object[] array) { diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index 534fb7f7..32bf370b 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -50,8 +50,10 @@ protected void execute(List files, Charset encoding, String lineSeparator) getLog().debug("skipping validation as per configuration."); return; } - List problems = getFormatter().formatFiles(files, encoding, lineSeparator).filter(FileEdit::hasEdits) - .map(FileEdit::getFile).collect(Collectors.toList()); + List problems = getFormatter().formatFiles(files, encoding, lineSeparator) + .filter(FileEdit::hasEdits) + .map(FileEdit::getFile) + .collect(Collectors.toList()); if (!problems.isEmpty()) { StringBuilder message = new StringBuilder("Formatting violations found in the following files:\n"); problems.stream().forEach((f) -> message.append(" * " + f + "\n")); diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index 65fc2ec0..3707cfee 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -50,7 +50,8 @@ public void verify(File base, String lineSeparator, boolean spaces) throws IOExc String formated = new String(Files.readAllBytes(base.toPath().resolve(JAVA_FILE)), StandardCharsets.UTF_8); String indent = (!spaces) ? " " : " "; assertThat(formated).contains("Simple." + lineSeparator + " *" + lineSeparator + " * @author") - .contains("public class Simple {").contains(indent + "public static void main"); + .contains("public class Simple {") + .contains(indent + "public static void main"); } public static void main(String[] args) throws IOException { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index e78bf500..31ff7d1a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -52,8 +52,10 @@ public Collection load(PropertyResolver propertyResolver) { System.out.println(getClass().getResource("spring-checkstyle.xml")); Configuration config = loadConfiguration(getClass().getResourceAsStream("spring-checkstyle.xml"), propertyResolver); - return Arrays.stream(config.getChildren()).filter(this.moduleFactory::nonFiltered).map(this::load) - .collect(Collectors.toList()); + return Arrays.stream(config.getChildren()) + .filter(this.moduleFactory::nonFiltered) + .map(this::load) + .collect(Collectors.toList()); } private Configuration loadConfiguration(InputStream inputStream, PropertyResolver propertyResolver) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java index c7dcaab1..5bd30954 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java @@ -39,8 +39,9 @@ public class SpringHideUtilityClassConstructor extends HideUtilityClassConstruct annotations.add("org.springframework.context.annotation.Configuration"); annotations.add("org.springframework.boot.autoconfigure.SpringBootApplication"); annotations.add("org.springframework.boot.autoconfigure.EnableAutoConfiguration"); - Set shortNames = annotations.stream().map((name) -> name.substring(name.lastIndexOf(".") + 1)) - .collect(Collectors.toSet()); + Set shortNames = annotations.stream() + .map((name) -> name.substring(name.lastIndexOf(".") + 1)) + .collect(Collectors.toSet()); annotations.addAll(shortNames); BYPASS_ANNOTATIONS = Collections.unmodifiableSet(annotations); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index 9fc9251f..7a6aa9c1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -97,11 +97,11 @@ public void beginTree(DetailAST rootAST) { @Override public void visitToken(DetailAST ast) { switch (ast.getType()) { - case TokenTypes.METHOD_DEF: - visitMethodDef(ast); - case TokenTypes.IMPORT: - visitImport(ast); - break; + case TokenTypes.METHOD_DEF: + visitMethodDef(ast); + case TokenTypes.IMPORT: + visitImport(ast); + break; } } @@ -172,8 +172,8 @@ private void log(DetailAST method, String key) { } public void setUnlessImports(String unlessImports) { - this.unlessImports = Collections.unmodifiableList( - Arrays.stream(unlessImports.split(",")).map(String::trim).collect(Collectors.toList())); + this.unlessImports = Collections + .unmodifiableList(Arrays.stream(unlessImports.split(",")).map(String::trim).collect(Collectors.toList())); } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index 31a1c360..1eb0c25e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -166,7 +166,8 @@ private void checkSinceTag(DetailAST ast, TextBlock javadoc) { } String[] text = javadoc.getText(); DetailAST interfaceOrAnnotationDef = getInterfaceOrAnnotationDef(ast); - boolean privateType = !isPublicOrProtected(ast) && (interfaceOrAnnotationDef == null || !isPublicOrProtected(interfaceOrAnnotationDef)); + boolean privateType = !isPublicOrProtected(ast) + && (interfaceOrAnnotationDef == null || !isPublicOrProtected(interfaceOrAnnotationDef)); boolean innerType = ast.getParent() != null && ast.getParent().getType() != TokenTypes.COMPILATION_UNIT; boolean found = false; for (int i = 0; i < text.length; i++) { @@ -231,7 +232,7 @@ private DetailAST getInterfaceOrAnnotationDef(DetailAST ast) { private DetailAST findParent(DetailAST ast, int... classDefs) { while (ast != null) { - for (int classDef: classDefs) { + for (int classDef : classDefs) { if (ast.getType() == classDef) { return ast; } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java index c486888f..eac7102f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java @@ -33,7 +33,7 @@ public class SpringMethodOrderCheck extends AbstractSpringCheck { private static final List EXPECTED_ORDER = Collections - .unmodifiableList(Arrays.asList("equals", "hashCode", "toString")); + .unmodifiableList(Arrays.asList("equals", "hashCode", "toString")); @Override public int[] getAcceptableTokens() { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java index 0bf7a2e9..4b987450 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java @@ -61,9 +61,9 @@ private void visitQuestion(DetailAST ast) { private boolean requiresParens(DetailAST expression) { if (expression != null && expression.getChildCount() > 1) { switch (expression.getType()) { - case TokenTypes.METHOD_CALL: - case TokenTypes.DOT: - return false; + case TokenTypes.METHOD_CALL: + case TokenTypes.DOT: + return false; } return true; } @@ -86,13 +86,13 @@ private boolean isSimpleEqualsExpression(DetailAST expression) { private boolean isEqualsTestAllowed(DetailAST ast) { switch (this.equalsTest) { - case ANY: - return true; - case NEVER: - return false; - case NEVER_FOR_NULLS: - DetailAST equal = ast.findFirstToken(TokenTypes.EQUAL); - return equal.findFirstToken(TokenTypes.LITERAL_NULL) == null; + case ANY: + return true; + case NEVER: + return false; + case NEVER_FOR_NULLS: + DetailAST equal = ast.findFirstToken(TokenTypes.EQUAL); + return equal.findFirstToken(TokenTypes.LITERAL_NULL) == null; } throw new IllegalStateException("Unsupported equals test " + this.equalsTest); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java index 6b6daeb6..e91a1fd5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java @@ -111,7 +111,7 @@ private void recordLevel(AuditEvent event) { private void recordLocalizedMessage(String message, String... args) { recordMessage(new Violation(0, Definitions.CHECKSTYLE_BUNDLE, message, args, null, Violation.class, null) - .getViolation()); + .getViolation()); } private void recordMessage(String message) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index 311d7f50..0dc76eb5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -113,8 +113,10 @@ private void printDebugInfo(File file) throws CheckstyleException { } public static Collection paramaters() throws IOException { - ArrayList parameters = Arrays.stream(SOURCES_DIR.listFiles(SpringChecksTests::sourceFile)).sorted() - .map(Parameter::new).collect(Collectors.toCollection(ArrayList::new)); + ArrayList parameters = Arrays.stream(SOURCES_DIR.listFiles(SpringChecksTests::sourceFile)) + .sorted() + .map(Parameter::new) + .collect(Collectors.toCollection(ArrayList::new)); parameters.add(new Parameter(new File(SOURCES_DIR, "nopackageinfo/NoPackageInfo.java"))); return parameters; } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index bb42d4f0..51b5bf72 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -54,7 +54,7 @@ public void loadShouldLoadChecks() { @Test public void loadWithExcludeShouldExcludeChecks() { Set excludes = Collections - .singleton("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck"); + .singleton("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck"); Collection checks = load(excludes); assertThat(checks).hasSize(4); TreeWalker treeWalker = (TreeWalker) checks.toArray()[3]; @@ -75,7 +75,7 @@ private Collection load(Set excludes) { new PackageObjectFactory(getClass().getPackage().getName(), getClass().getClassLoader()), excludes); context.add("moduleFactory", filteredModuleFactory); Collection checks = new SpringConfigurationLoader(context, filteredModuleFactory) - .load(getPropertyResolver()); + .load(getPropertyResolver()); return checks; } diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index f02bbf08..b00234a5 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -107,8 +107,9 @@ protected void prepareWraps(int kind) { } private void applyPreparators(Phase preWrapping, int kind, ASTNode astRoot, TokenManager tokenManager) { - this.preparators.stream().filter((preparator) -> preparator.getPhase() == preWrapping) - .forEach((preparator) -> preparator.apply(kind, tokenManager, astRoot)); + this.preparators.stream() + .filter((preparator) -> preparator.getPhase() == preWrapping) + .forEach((preparator) -> preparator.apply(kind, tokenManager, astRoot)); } @SuppressWarnings("unchecked") diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index f02bbf08..b00234a5 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -107,8 +107,9 @@ protected void prepareWraps(int kind) { } private void applyPreparators(Phase preWrapping, int kind, ASTNode astRoot, TokenManager tokenManager) { - this.preparators.stream().filter((preparator) -> preparator.getPhase() == preWrapping) - .forEach((preparator) -> preparator.apply(kind, tokenManager, astRoot)); + this.preparators.stream() + .filter((preparator) -> preparator.getPhase() == preWrapping) + .forEach((preparator) -> preparator.apply(kind, tokenManager, astRoot)); } @SuppressWarnings("unchecked") diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java index 5ddaf1ca..6878ca6f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java @@ -1684,4 +1684,5 @@ private void handleParenthesesPositions(int openingParenIndex, int closingParenI } // @formatter:on + } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index 80abe8ef..7b9678a9 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -63,7 +63,7 @@ void formatCodeWithV11BaselineCanFormatOn11OrHigher(String version) throws Excep @ValueSource(strings = "8") void formatCodeWithV11BaselineCannotFormatOn8(String version) throws Exception { assertThatExceptionOfType(ContainerLaunchException.class) - .isThrownBy(() -> runFormatter(JavaBaseline.V11, version)); + .isThrownBy(() -> runFormatter(JavaBaseline.V11, version)); } private void runFormatter(JavaBaseline baseline, String version) throws IOException, Exception { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java index 6f03d89c..289577a4 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java @@ -121,4 +121,5 @@ private String readContent(Reader reader) throws IOException { } return result.toString(); } + } From b618560fd4c69117d14f69e4c3cdbfafcc5d0060 Mon Sep 17 00:00:00 2001 From: Parker Mauney Date: Thu, 25 Nov 2021 13:09:35 -0600 Subject: [PATCH 130/238] Detect and preserve line separators Update `Formatter` so that line endings are now detected based on the contents of the file. This mirrors the behavior of the Eclipse plugin when used in the IDE, specifically the `nextDelimiterInfo` method in `org.eclipse.jface.text.DefaultLineTracker`. See gh-340 --- .../ProjectSettingsFilesTests.java | 3 ++- .../javaformat/gradle/CheckTaskTests.java | 16 +++++++++--- .../src/it/.gitattributes | 2 ++ .../io/spring/format/maven/VerifyApply.java | 2 +- .../src/test/resources/.gitattributes | 4 +++ .../test/resources/expected/correct-cr.txt | 1 + .../test/resources/expected/correct-crlf.txt | 9 +++++++ .../test/resources/expected/correct-lf.txt | 9 +++++++ .../src/test/resources/source/correct-cr.txt | 1 + .../test/resources/source/correct-crlf.txt | 9 +++++++ .../src/test/resources/source/correct-lf.txt | 9 +++++++ .../javaformat/formatter/Formatter.java | 26 +++++++++++++++++++ 12 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java index a75b92b1..20c06744 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java @@ -95,7 +95,8 @@ void applyToProjectWithFileMergesToDotSettings() throws Exception { }).given(projectFile).setContents((InputStream) any(), anyInt(), any()); files.applyToProject(project, monitor); verify(projectFile).setContents((InputStream) any(), eq(1), eq(monitor)); - assertThat(out.toString(StandardCharsets.UTF_8)).isEqualTo("a=b\ny=z\n"); + assertThat(out.toString(StandardCharsets.UTF_8)) + .isEqualToNormalizingNewlines("a=b\ny=z\n"); } private ProjectSettingsFile createPrefsFile() throws IOException { diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index a5554177..0420e1c2 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -23,7 +23,7 @@ import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.util.Arrays; -import java.util.Collections; +import java.util.List; import java.util.stream.Stream; import org.gradle.testkit.runner.BuildResult; @@ -72,8 +72,8 @@ void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSucceeds( GradleBuild gradleBuild = this.gradleBuild.source(this.temp); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - Files.write(new File(this.temp, "src/main/java/simple/Simple.java").toPath(), - Collections.singletonList("// A change to the file"), StandardOpenOption.APPEND); + appendToFileNormalizingNewlines(new File(this.temp, "src/main/java/simple/Simple.java").toPath(), + "// A change to the file"); result = gradleBuild.build("--debug", "check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @@ -146,4 +146,14 @@ private void copyFolder(Path source, Path target) throws IOException { } } + /** + * Uses a read/modify/truncate approach to append a line to a file. + * This avoids issues where the standard append option results in mixed line-endings. + */ + private void appendToFileNormalizingNewlines(Path sourceFilePath, String lineToAppend) throws IOException { + List lines = Files.readAllLines(sourceFilePath); + lines.add(lineToAppend); + Files.write(sourceFilePath, lines, StandardOpenOption.TRUNCATE_EXISTING); + } + } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes new file mode 100644 index 00000000..525113da --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes @@ -0,0 +1,2 @@ +# Test resources that need a predictable eol +apply*/src/main/java/simple/Simple.java eol=lf diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index 3707cfee..3f8e76e1 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -30,7 +30,7 @@ */ public class VerifyApply { - private static final String LF = System.lineSeparator(); + private static final String LF = "\n"; private static final String JAVA_FILE = "src/main/java/simple/Simple.java"; diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes new file mode 100644 index 00000000..95175246 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes @@ -0,0 +1,4 @@ +# Test resources that need specific eol +**/correct-crlf.txt eol=crlf +**/correct-cr.txt eol=cr +**/correct-lf.txt eol=lf diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt new file mode 100644 index 00000000..a72e4bf3 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt @@ -0,0 +1 @@ +package correct; public class CorrectCr { public static void main(String[] args) throws Exception { // FIXME } } \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt new file mode 100644 index 00000000..5a609678 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt @@ -0,0 +1,9 @@ +package correct; + +public class CorrectCrlf { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt new file mode 100644 index 00000000..3b6208a2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt @@ -0,0 +1,9 @@ +package correct; + +public class CorrectLf { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt new file mode 100644 index 00000000..a72e4bf3 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt @@ -0,0 +1 @@ +package correct; public class CorrectCr { public static void main(String[] args) throws Exception { // FIXME } } \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt new file mode 100644 index 00000000..5a609678 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt @@ -0,0 +1,9 @@ +package correct; + +public class CorrectCrlf { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt new file mode 100644 index 00000000..3b6208a2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt @@ -0,0 +1,9 @@ +package correct; + +public class CorrectLf { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 83f6406c..c76873cf 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -17,6 +17,8 @@ package io.spring.javaformat.formatter; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.eclipse.jface.text.IRegion; import org.eclipse.text.edits.TextEdit; @@ -56,6 +58,11 @@ public class Formatter { */ private static final int DEFAULT_INDENTATION_LEVEL = 0; + /** + * Pattern that matches all line separators into named-capturing group "sep". + */ + private static final Pattern LINE_SEPARATOR_PATTERN = Pattern.compile("(?(\r\n|\r|\n))"); + /** * The default line separator. */ @@ -123,6 +130,9 @@ public TextEdit format(String source, int offset, int length, String lineSeparat public TextEdit format(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator) { + if (lineSeparator == null) { + lineSeparator = detectLineSeparator(source); + } return this.delegate.format(kind, source, offset, length, indentationLevel, lineSeparator); } @@ -148,6 +158,9 @@ public TextEdit format(String source, IRegion[] regions, String lineSeparator) { } public TextEdit format(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator) { + if (lineSeparator == null) { + lineSeparator = detectLineSeparator(source); + } return this.delegate.format(kind, source, regions, indentationLevel, lineSeparator); } @@ -159,4 +172,17 @@ public void setOptions(Map options) { this.delegate.setOptions(options); } + private String detectLineSeparator(String contents) { + Matcher matcher = LINE_SEPARATOR_PATTERN.matcher(contents); + if (!matcher.find()) { + return DEFAULT_LINE_SEPARATOR; + } + String firstMatch = matcher.group("sep"); + while (matcher.find()) { + if (!matcher.group("sep").equals(firstMatch)) { + return DEFAULT_LINE_SEPARATOR; + } + } + return firstMatch; + } } From f50024aca40d369443a5966e6eba81ce828590f6 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Feb 2023 20:05:04 -0800 Subject: [PATCH 131/238] Polish 'Detect and preserve line separators' See gh-340 --- .../javaformat/gradle/CheckTaskTests.java | 28 ++++------- .../src/it/.gitattributes | 2 - .../io/spring/format/maven/VerifyApply.java | 18 +++---- .../formatter/AbstractFormatterTests.java | 49 +++++++++++++++++-- .../src/test/resources/.gitattributes | 4 -- .../test/resources/expected/correct-cr.txt | 1 - .../test/resources/expected/correct-crlf.txt | 9 ---- .../{correct-lf.txt => lineendings.txt} | 1 - .../src/test/resources/source/correct-cr.txt | 1 - .../test/resources/source/correct-crlf.txt | 9 ---- .../src/test/resources/source/correct-lf.txt | 9 ---- .../src/test/resources/source/lineendings.txt | 7 +++ .../javaformat/formatter/Formatter.java | 36 +++++--------- 13 files changed, 82 insertions(+), 92 deletions(-) delete mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt rename spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/{correct-lf.txt => lineendings.txt} (90%) delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/lineendings.txt diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index 0420e1c2..16d3aa4a 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -18,12 +18,11 @@ import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.util.Arrays; -import java.util.List; import java.util.stream.Stream; import org.gradle.testkit.runner.BuildResult; @@ -68,12 +67,12 @@ void whenFirstInvocationSucceedsThenSecondInvocationIsUpToDate() throws IOExcept @Test void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSucceeds() throws IOException { - copyFolder(new File("src/test/resources/check-ok").toPath(), this.temp.toPath()); + copyNormalizedFolder(new File("src/test/resources/check-ok").toPath(), this.temp.toPath()); GradleBuild gradleBuild = this.gradleBuild.source(this.temp); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - appendToFileNormalizingNewlines(new File(this.temp, "src/main/java/simple/Simple.java").toPath(), - "// A change to the file"); + Files.write(new File(this.temp, "src/main/java/simple/Simple.java").toPath(), + "// A change to the file\n".getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND); result = gradleBuild.build("--debug", "check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @@ -129,14 +128,17 @@ void whenFirstInvocationFailsThenSecondInvocationFails() throws IOException { assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); } - private void copyFolder(Path source, Path target) throws IOException { + private void copyNormalizedFolder(Path source, Path target) throws IOException { try (Stream stream = Files.walk(source)) { stream.forEach((child) -> { try { Path relative = source.relativize(child); Path destination = target.resolve(relative); - if (!destination.toFile().isDirectory()) { - Files.copy(child, destination, StandardCopyOption.REPLACE_EXISTING); + if (!Files.isDirectory(child)) { + String content = new String(Files.readAllBytes(child), StandardCharsets.UTF_8); + String normalized = content.replace("\n\r", "\n").replace('\r', '\n'); + Files.createDirectories(destination.getParent()); + Files.write(destination, normalized.getBytes(StandardCharsets.UTF_8)); } } catch (Exception ex) { @@ -146,14 +148,4 @@ private void copyFolder(Path source, Path target) throws IOException { } } - /** - * Uses a read/modify/truncate approach to append a line to a file. - * This avoids issues where the standard append option results in mixed line-endings. - */ - private void appendToFileNormalizingNewlines(Path sourceFilePath, String lineToAppend) throws IOException { - List lines = Files.readAllLines(sourceFilePath); - lines.add(lineToAppend); - Files.write(sourceFilePath, lines, StandardOpenOption.TRUNCATE_EXISTING); - } - } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes deleted file mode 100644 index 525113da..00000000 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Test resources that need a predictable eol -apply*/src/main/java/simple/Simple.java eol=lf diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index 3f8e76e1..bb7871ec 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,16 +30,14 @@ */ public class VerifyApply { - private static final String LF = "\n"; - private static final String JAVA_FILE = "src/main/java/simple/Simple.java"; public void verify(File base) throws IOException { - verify(base, LF); + verify(base, null); } public void verify(File base, boolean spaces) throws IOException { - verify(base, LF, spaces); + verify(base, null, spaces); } public void verify(File base, String lineSeparator) throws IOException { @@ -48,16 +46,14 @@ public void verify(File base, String lineSeparator) throws IOException { public void verify(File base, String lineSeparator, boolean spaces) throws IOException { String formated = new String(Files.readAllBytes(base.toPath().resolve(JAVA_FILE)), StandardCharsets.UTF_8); + if (lineSeparator == null) { + formated = formated.replace("\r\n", "\n").replace('\r', '\n'); + lineSeparator = "\n"; + } String indent = (!spaces) ? " " : " "; assertThat(formated).contains("Simple." + lineSeparator + " *" + lineSeparator + " * @author") .contains("public class Simple {") .contains(indent + "public static void main"); } - public static void main(String[] args) throws IOException { - new VerifyApply().verify(new File( - "/Users/pwebb/projects/spring-javaformat/code/spring-javaformat-maven/spring-javaformat-maven-plugin/target/it/apply-line-separator"), - "\r"); - } - } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index f039acfd..445daff9 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,10 +17,11 @@ package io.spring.javaformat.formatter; import java.io.File; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; -import java.util.Collection; +import java.util.List; import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; @@ -47,7 +48,7 @@ protected final String read(File file) throws Exception { } protected static Item[] items(String expectedOverride) { - Collection items = new ArrayList<>(); + List items = new ArrayList<>(); File sourceDir = new File("src/test/resources/source"); File expectedDir = new File("src/test/resources/expected"); File configDir = new File("src/test/resources/config"); @@ -59,12 +60,52 @@ protected static Item[] items(String expectedOverride) { } File config = new File(configDir, source.getName()); for (JavaBaseline javaBaseline : JavaBaseline.values()) { - items.add(new Item(javaBaseline, source, expected, config)); + addItem(items, javaBaseline, source, expected, config); } } return items.toArray(new Item[0]); } + private static void addItem(List items, JavaBaseline javaBaseline, File source, File expected, File config) { + if (source.getName().contains("lineendings")) { + items.add(new Item(javaBaseline, copy(source, LineEnding.CR), copy(expected, LineEnding.CR), config)); + items.add(new Item(javaBaseline, copy(source, LineEnding.LF), copy(expected, LineEnding.LF), config)); + items.add(new Item(javaBaseline, copy(source, LineEnding.CRLF), copy(expected, LineEnding.CRLF), config)); + } + else { + items.add(new Item(javaBaseline, source, expected, config)); + } + } + + private static File copy(File file, LineEnding lineEnding) { + try { + String[] name = file.getName().split("\\."); + File result = File.createTempFile(name[0] + "_" + lineEnding + "_", "." + name[1]); + String content = Files.readString(file.toPath()); + content = content.replace("\r\n", "\n").replace('\r', '\n').replace("\n", lineEnding.ending()); + Files.writeString(result.toPath(), content); + return result; + } + catch (IOException ex) { + throw new IllegalStateException(ex); + } + } + + enum LineEnding { + + CR("\r"), LF("\n"), CRLF("\r\n"); + + private final String ending; + + LineEnding(String ending) { + this.ending = ending; + } + + String ending() { + return this.ending; + } + }; + static class Item { private final JavaBaseline javaBaseline; diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes deleted file mode 100644 index 95175246..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes +++ /dev/null @@ -1,4 +0,0 @@ -# Test resources that need specific eol -**/correct-crlf.txt eol=crlf -**/correct-cr.txt eol=cr -**/correct-lf.txt eol=lf diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt deleted file mode 100644 index a72e4bf3..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt +++ /dev/null @@ -1 +0,0 @@ -package correct; public class CorrectCr { public static void main(String[] args) throws Exception { // FIXME } } \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt deleted file mode 100644 index 5a609678..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt +++ /dev/null @@ -1,9 +0,0 @@ -package correct; - -public class CorrectCrlf { - - public static void main(String[] args) throws Exception { - // FIXME - } - -} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/lineendings.txt similarity index 90% rename from spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/lineendings.txt index 3b6208a2..92ad853f 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/lineendings.txt @@ -3,7 +3,6 @@ package correct; public class CorrectLf { public static void main(String[] args) throws Exception { - // FIXME } } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt deleted file mode 100644 index a72e4bf3..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt +++ /dev/null @@ -1 +0,0 @@ -package correct; public class CorrectCr { public static void main(String[] args) throws Exception { // FIXME } } \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt deleted file mode 100644 index 5a609678..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt +++ /dev/null @@ -1,9 +0,0 @@ -package correct; - -public class CorrectCrlf { - - public static void main(String[] args) throws Exception { - // FIXME - } - -} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt deleted file mode 100644 index 3b6208a2..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt +++ /dev/null @@ -1,9 +0,0 @@ -package correct; - -public class CorrectLf { - - public static void main(String[] args) throws Exception { - // FIXME - } - -} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/lineendings.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/lineendings.txt new file mode 100644 index 00000000..e56b3941 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/lineendings.txt @@ -0,0 +1,7 @@ +package correct; + +public class CorrectLf { + + public static void main(String[] args) throws Exception { } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index c76873cf..97d20003 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ package io.spring.javaformat.formatter; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.eclipse.jface.text.IRegion; import org.eclipse.text.edits.TextEdit; @@ -58,11 +56,6 @@ public class Formatter { */ private static final int DEFAULT_INDENTATION_LEVEL = 0; - /** - * Pattern that matches all line separators into named-capturing group "sep". - */ - private static final Pattern LINE_SEPARATOR_PATTERN = Pattern.compile("(?(\r\n|\r|\n))"); - /** * The default line separator. */ @@ -130,9 +123,7 @@ public TextEdit format(String source, int offset, int length, String lineSeparat public TextEdit format(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator) { - if (lineSeparator == null) { - lineSeparator = detectLineSeparator(source); - } + lineSeparator = (lineSeparator != null) ? lineSeparator : detectLineSeparator(source); return this.delegate.format(kind, source, offset, length, indentationLevel, lineSeparator); } @@ -158,9 +149,7 @@ public TextEdit format(String source, IRegion[] regions, String lineSeparator) { } public TextEdit format(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator) { - if (lineSeparator == null) { - lineSeparator = detectLineSeparator(source); - } + lineSeparator = (lineSeparator != null) ? lineSeparator : detectLineSeparator(source); return this.delegate.format(kind, source, regions, indentationLevel, lineSeparator); } @@ -173,16 +162,17 @@ public void setOptions(Map options) { } private String detectLineSeparator(String contents) { - Matcher matcher = LINE_SEPARATOR_PATTERN.matcher(contents); - if (!matcher.find()) { - return DEFAULT_LINE_SEPARATOR; - } - String firstMatch = matcher.group("sep"); - while (matcher.find()) { - if (!matcher.group("sep").equals(firstMatch)) { - return DEFAULT_LINE_SEPARATOR; + int length = contents.length(); + for (int i = 0; i < length; i++) { + char ch = contents.charAt(i); + boolean isLastChar = (i + 1) == length; + if (ch == '\r') { + return (isLastChar || contents.charAt(i + 1) != '\n') ? "\r" : "\r\n"; + } + if (ch == '\n') { + return "\n"; } } - return firstMatch; + return null; } } From 8207729eb3468964d7707dd443ccec97c68d7603 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 16:05:38 -0800 Subject: [PATCH 132/238] Add additional skip properties Allow formatting to skipped and refine skip properties to allow individual goals to be skipped for both goals to be skipped. Closes gh-360 --- README.adoc | 3 ++ .../src/it/apply-skip/pom.xml | 32 +++++++++++++++++++ .../src/main/java/simple/Simple.java | 14 ++++++++ .../src/it/apply-skip/verify.groovy | 1 + .../it/validate-skip-global-property/pom.xml | 30 +++++++++++++++++ .../src/main/java/simple/Simple.java | 15 +++++++++ .../src/it/validate-skip-property/pom.xml | 30 +++++++++++++++++ .../src/main/java/simple/Simple.java | 15 +++++++++ .../io/spring/format/maven/ApplyMojo.java | 11 +++++++ .../io/spring/format/maven/FormatMojo.java | 20 ++++++++++++ .../io/spring/format/maven/ValidateMojo.java | 6 ++-- .../io/spring/format/maven/VerifyApply.java | 6 ++++ 12 files changed, 180 insertions(+), 3 deletions(-) create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/pom.xml create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/src/main/java/simple/Simple.java create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/verify.groovy create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/pom.xml create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/src/main/java/simple/Simple.java create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/pom.xml create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/src/main/java/simple/Simple.java diff --git a/README.adoc b/README.adoc index dcff9917..3ebea46f 100644 --- a/README.adoc +++ b/README.adoc @@ -76,6 +76,9 @@ NOTE: The source formatter does not fundamentally change your code. For example, it will not change the order of import statements. It is effectively limited to adding or removing whitespace and line feeds. +TIP: You can use `-Dspring-javaformat.validate.skip=true` or `-Dspring-javaformat.apply.skip=true` command line arguments to temporarily skip the validation or format goals. +If you want to skip both, you can use `-Dspring-javaformat.skip=true`. + === Checkstyle diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/pom.xml new file mode 100644 index 00000000..213305b9 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + io.spring.javaformat + apply-skip + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + 1.8 + 1.8 + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + apply + + + true + + + + + + + diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/src/main/java/simple/Simple.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/src/main/java/simple/Simple.java new file mode 100644 index 00000000..10016e5d --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/src/main/java/simple/Simple.java @@ -0,0 +1,14 @@ +package simple; + +/** + * Simple. + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // Main method + } + +} diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/verify.groovy b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/verify.groovy new file mode 100644 index 00000000..5ffd403d --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/verify.groovy @@ -0,0 +1 @@ +new io.spring.format.maven.VerifyApply().verifyNoApply(basedir) diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/pom.xml new file mode 100644 index 00000000..d05c8e80 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + io.spring.javaformat + validate-skip-global-property + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + 1.8 + 1.8 + true + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + validate + + + + + + + diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/src/main/java/simple/Simple.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/src/main/java/simple/Simple.java new file mode 100644 index 00000000..14f14516 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/src/main/java/simple/Simple.java @@ -0,0 +1,15 @@ +package simple; + +/** + * Simple. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // Main method + } + +} diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/pom.xml new file mode 100644 index 00000000..e0319c25 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + io.spring.javaformat + validate-skip-property + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + 1.8 + 1.8 + true + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + validate + + + + + + + diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/src/main/java/simple/Simple.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/src/main/java/simple/Simple.java new file mode 100644 index 00000000..14f14516 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/src/main/java/simple/Simple.java @@ -0,0 +1,15 @@ +package simple; + +/** + * Simple. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // Main method + } + +} diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java index a519102b..52d3908a 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java @@ -24,6 +24,7 @@ import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; import io.spring.javaformat.formatter.FileEdit; import io.spring.javaformat.formatter.FileFormatterException; @@ -36,9 +37,19 @@ @Mojo(name = "apply", defaultPhase = LifecyclePhase.PROCESS_SOURCES, threadSafe = true) public class ApplyMojo extends FormatMojo { + /** + * Skip the execution. + */ + @Parameter(property = "spring-javaformat.format.skip", defaultValue = "false") + private boolean skip; + @Override protected void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException { + if (this.skip || skipGlobally()) { + getLog().debug("skipping format apply as per configuration."); + return; + } try { getFormatter().formatFiles(files, encoding, lineSeparator).filter(FileEdit::hasEdits).forEach(this::save); } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java index 75e56569..212316ea 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java @@ -26,9 +26,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -68,6 +70,12 @@ public abstract class FormatMojo extends AbstractMojo { @Parameter(defaultValue = "${project}", readonly = true, required = true) protected MavenProject project; + /** + * The Maven Session Object. + */ + @Parameter(defaultValue = "${session}", readonly = true, required = true) + protected MavenSession session; + /** * Specifies the location of the source directories to use. */ @@ -195,4 +203,16 @@ protected final FileFormatter getFormatter() { return new FileFormatter(javaFormatConfig); } + protected boolean skipGlobally() { + boolean result = false; + result = result || skipGlobally(this.session.getUserProperties()); + result = result || skipGlobally(this.session.getSystemProperties()); + result = result || skipGlobally(this.project.getProperties()); + return result; + } + + private boolean skipGlobally(Properties properties) { + return Boolean.valueOf(properties.getProperty("spring-javaformat.skip")); + } + } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index 32bf370b..d9285c15 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -40,14 +40,14 @@ public class ValidateMojo extends FormatMojo { /** * Skip the execution. */ - @Parameter(property = "spring-javaformat.skip", defaultValue = "false") + @Parameter(property = "spring-javaformat.validate.skip", defaultValue = "false") private boolean skip; @Override protected void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException { - if (this.skip) { - getLog().debug("skipping validation as per configuration."); + if (this.skip || skipGlobally()) { + getLog().debug("skipping format validate as per configuration."); return; } List problems = getFormatter().formatFiles(files, encoding, lineSeparator) diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index bb7871ec..74899016 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -56,4 +56,10 @@ public void verify(File base, String lineSeparator, boolean spaces) throws IOExc .contains(indent + "public static void main"); } + public void verifyNoApply(File base) throws IOException { + String formated = new String(Files.readAllBytes(base.toPath().resolve(JAVA_FILE)), StandardCharsets.UTF_8); + formated = formated.replace("\r\n", "\n").replace('\r', '\n'); + assertThat(formated).contains("Simple {"); + } + } From fbd0c3365d507ee989c9c0931d43e36ce0da32b2 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 16:16:36 -0800 Subject: [PATCH 133/238] Add WebMvcLinkBuilder as allowed static import Add `org.springframework.hateoas.server.mvc.WebMvcLinkBuilder` as an allowed static import and remove legacy class reference. Closes gh-350 --- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index d88c11be..255316b0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ public class SpringAvoidStaticImportCheck extends AvoidStaticImportCheck { excludes.add("org.springframework.boot.configurationprocessor.ConfigurationMetadataMatchers.*"); excludes.add("org.springframework.boot.configurationprocessor.TestCompiler.*"); excludes.add("org.springframework.boot.test.autoconfigure.AutoConfigurationImportedCondition.*"); - excludes.add("org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo"); + excludes.add("org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*"); excludes.add("org.springframework.restdocs.headers.HeaderDocumentation.*"); excludes.add("org.springframework.restdocs.hypermedia.HypermediaDocumentation.*"); excludes.add("org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*"); From 39f34a807e0b30532e59a3c53d222459cf6efa50 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 16:18:09 -0800 Subject: [PATCH 134/238] Update copyright year of changed files --- .../eclipse/m2e/MavenProjectSettingsConfigurator.java | 2 +- .../spring-javaformat-gradle-plugin/gradlew | 2 +- .../spring-javaformat-gradle-plugin/gradlew.bat | 2 +- .../io/spring/javaformat/gradle/SpringJavaFormatPlugin.java | 2 +- .../java/io/spring/javaformat/gradle/tasks/CheckFormat.java | 2 +- .../src/main/java/io/spring/format/maven/ApplyMojo.java | 2 +- .../src/main/java/io/spring/format/maven/FormatMojo.java | 2 +- .../src/main/java/io/spring/format/maven/ValidateMojo.java | 2 +- .../spring/javaformat/checkstyle/SpringConfigurationLoader.java | 2 +- .../checkstyle/check/SpringHideUtilityClassConstructor.java | 2 +- .../spring/javaformat/checkstyle/check/SpringJUnit5Check.java | 2 +- .../spring/javaformat/checkstyle/check/SpringJavadocCheck.java | 2 +- .../javaformat/checkstyle/check/SpringMethodOrderCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringTernaryCheck.java | 2 +- .../spring/javaformat/checkstyle/AssertionsAuditListener.java | 2 +- .../java/io/spring/javaformat/checkstyle/SpringChecksTests.java | 2 +- .../javaformat/checkstyle/SpringConfigurationLoaderTests.java | 2 +- .../eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java | 2 +- .../eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java | 2 +- .../spring/javaformat/formatter/FormatterIntegrationTests.java | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java index 030a873f..67f669d6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew index 4f906e0c..22cf4de8 100755 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew @@ -1,7 +1,7 @@ #!/usr/bin/env sh # -# Copyright 2015 the original author or authors. +# Copyright 2015-2023 the original author or authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat index ac1b06f9..18a320c0 100755 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat @@ -1,5 +1,5 @@ @rem -@rem Copyright 2015 the original author or authors. +@rem Copyright 2015-2023 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. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index 9453cb7c..032253ff 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index 1ae2e597..096e1109 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java index 52d3908a..0514ed7e 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java index 212316ea..effde959 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index d9285c15..5d4c0e2c 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 31ff7d1a..202b085f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java index 5bd30954..84b25ec4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index 7a6aa9c1..5b5dc191 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index 1eb0c25e..7fd8a0dd 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java index eac7102f..d5efe2f3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java index 4b987450..23c79dda 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java index e91a1fd5..5812901c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index 0dc76eb5..b4482716 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 51b5bf72..550d2cef 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index b00234a5..60b0e6e1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index b00234a5..60b0e6e1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index 7b9678a9..88d41505 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 745b0f214e9deab858481d3be6c748808113e21c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 17:43:01 -0800 Subject: [PATCH 135/238] Ensure newlines are added before record/enum/annotation types Update `JavadocLineBreakPreparator` to ensure that two spaces are added before `@param` tags on record, enum and annotation types. Fixes gh-346 --- .../record-with-param.txt | 16 ++++++++++++++++ .../resources/FormatterTests-expected/simple.txt | 15 +++++++++++++++ .../resources/expected/record-with-param.txt | 16 ++++++++++++++++ .../test/resources/source/record-with-param.txt | 15 +++++++++++++++ .../src/test/resources/source/simple.txt | 1 - .../jdk11/eclipse/CodeLineBreakPreparator.java | 4 ++-- .../eclipse/JavadocLineBreakPreparator.java | 12 ++++++------ .../jdk8/eclipse/CodeLineBreakPreparator.java | 4 ++-- .../jdk8/eclipse/JavadocLineBreakPreparator.java | 12 ++++++------ 9 files changed, 78 insertions(+), 17 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/record-with-param.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/simple.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-param.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-param.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/record-with-param.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/record-with-param.txt new file mode 100644 index 00000000..57e16f3c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/record-with-param.txt @@ -0,0 +1,16 @@ +package simple; + +/** + * Settings that can be applied when creating a {@link ClientHttpRequestFactory}. + * + * @param connectTimeout the connect timeout + * @param readTimeout the read timeout + * @param bufferRequestBody if request body buffering is used + * @author Andy Wilkinson + * @author Phillip Webb + * @since 3.0.0 + * @see ClientHttpRequestFactories + */ +public record Simple(String name) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/simple.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/simple.txt new file mode 100644 index 00000000..63ca9a5c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/simple.txt @@ -0,0 +1,15 @@ +package simple; + +/** + * Simple. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-param.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-param.txt new file mode 100644 index 00000000..164c5351 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-param.txt @@ -0,0 +1,16 @@ +package simple; + +/** + * Settings that can be applied when creating a {@link ClientHttpRequestFactory}. + * + * @param connectTimeout the connect timeout + * @param readTimeout the read timeout + * @param bufferRequestBody if request body buffering is used + * @author Andy Wilkinson + * @author Phillip Webb + * @since 3.0.0 + * @see ClientHttpRequestFactories + */ +public record Simple(String name) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-param.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-param.txt new file mode 100644 index 00000000..37149688 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-param.txt @@ -0,0 +1,15 @@ +package simple; + +/** + * Settings that can be applied when creating a {@link ClientHttpRequestFactory}. + * @param connectTimeout the connect timeout + * @param readTimeout the read timeout + * @param bufferRequestBody if request body buffering is used + * @author Andy Wilkinson + * @author Phillip Webb + * @since 3.0.0 + * @see ClientHttpRequestFactories + */ + public record Simple(String name) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt index a12ac39e..62d2a493 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt @@ -2,7 +2,6 @@ package simple; /** * Simple. - * * @author Phillip Webb * @since 1.0.0 */ diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java index 6b3ee9d8..15057474 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,7 +31,7 @@ import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; /** - * {@link Preparator} to fine tune curly-brace line breaks. + * {@link Preparator} to finetune curly-brace line breaks. * * @author Phillip Webb */ diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java index 1e77a4ff..e367de90 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,12 +22,12 @@ import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AbstractTypeDeclaration; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Comment; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.CompilationUnit; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Javadoc; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TagElement; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TextElement; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TypeDeclaration; import io.spring.javaformat.eclipse.jdt.jdk11.core.formatter.CodeFormatter; import io.spring.javaformat.eclipse.jdt.jdk11.internal.compiler.parser.TerminalTokens; import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; @@ -35,7 +35,7 @@ import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; /** - * {@link Preparator} to fine tune Javadoc whitespace. + * {@link Preparator} to finetune Javadoc whitespace. * * @author Phillip Webb */ @@ -112,15 +112,15 @@ public boolean visit(TagElement node) { int startIndex = this.commentTokenManager.findIndex(node.getStartPosition(), -1, false); Token token = this.commentTokenManager.get(startIndex); token.clearLineBreaksBefore(); - token.putLineBreaksBefore( - this.declaration instanceof TypeDeclaration && this.firstTagElement && this.hasText ? 2 : 1); + boolean isTypeDeclaration = this.declaration instanceof AbstractTypeDeclaration; + token.putLineBreaksBefore(isTypeDeclaration && this.firstTagElement && this.hasText ? 2 : 1); this.firstTagElement = false; } return true; } private boolean isSquashRequired(TagElement node, ASTNode declaration) { - if (declaration instanceof TypeDeclaration) { + if (declaration instanceof AbstractTypeDeclaration) { String tagName = node.getTagName(); return (!node.isNested() && tagName != null && tagName.startsWith("@")); } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java index 29d16a3d..df26a623 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,7 +31,7 @@ import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; /** - * {@link Preparator} to fine tune curly-brace line breaks. + * {@link Preparator} to finetune curly-brace line breaks. * * @author Phillip Webb */ diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java index 6a7a4752..68723201 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,12 +22,12 @@ import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.AbstractTypeDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Comment; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.CompilationUnit; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Javadoc; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TagElement; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TextElement; -import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TypeDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; import io.spring.javaformat.eclipse.jdt.jdk8.internal.compiler.parser.TerminalTokens; import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Preparator; @@ -35,7 +35,7 @@ import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; /** - * {@link Preparator} to fine tune Javadoc whitespace. + * {@link Preparator} to finetune Javadoc whitespace. * * @author Phillip Webb */ @@ -112,15 +112,15 @@ public boolean visit(TagElement node) { int startIndex = this.commentTokenManager.findIndex(node.getStartPosition(), -1, false); Token token = this.commentTokenManager.get(startIndex); token.clearLineBreaksBefore(); - token.putLineBreaksBefore( - this.declaration instanceof TypeDeclaration && this.firstTagElement && this.hasText ? 2 : 1); + boolean isTypeDeclaration = this.declaration instanceof AbstractTypeDeclaration; + token.putLineBreaksBefore(isTypeDeclaration && this.firstTagElement && this.hasText ? 2 : 1); this.firstTagElement = false; } return true; } private boolean isSquashRequired(TagElement node, ASTNode declaration) { - if (declaration instanceof TypeDeclaration) { + if (declaration instanceof AbstractTypeDeclaration) { String tagName = node.getTagName(); return (!node.isNested() && tagName != null && tagName.startsWith("@")); } From ae5e3f2e253c982617ebec864a47545685b89d05 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 19:56:37 -0800 Subject: [PATCH 136/238] Add checkstyle rule to make sure test class names end in "Tests" Closes gh-222 --- .../check/SpringTestFileNameCheck.java | 40 +++++++++++++++++++ .../checkstyle/check/messages.properties | 1 + .../checkstyle/spring-checkstyle.xml | 1 + .../checkstyle/SpringChecksTests.java | 7 ++++ .../SpringConfigurationLoaderTests.java | 10 ++--- .../check/src/test/java/NamedTest.txt | 1 + .../check/src/test/java/NamedTests.txt | 1 + .../source/src/test/java/NamedTest.java | 24 +++++++++++ .../source/src/test/java/NamedTests.java | 24 +++++++++++ 9 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTest.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTests.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java new file mode 100644 index 00000000..eeda7a05 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -0,0 +1,40 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.checkstyle.check; + +import java.io.File; + +import com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck; +import com.puppycrawl.tools.checkstyle.api.CheckstyleException; +import com.puppycrawl.tools.checkstyle.api.FileText; + +/** + * Checks that test filenames end {@literal Tests.java} and not {@literal Test.java}. + * + * @author Phillip Webb + */ +public class SpringTestFileNameCheck extends AbstractFileSetCheck { + + @Override + protected void processFiltered(File file, FileText fileText) throws CheckstyleException { + String path = file.getPath().replace('\\', '/'); + if (path.contains("src/test/java") && file.getName().endsWith("Test.java")) { + log(1, "testfilename.wrongName"); + } + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 735d7b43..64dc9a8c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -26,6 +26,7 @@ methodvisibility.publicMethod=Method ''{0}'' in private class should not be publ nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\". ternary.equalOperator=Ternary operation should use != when testing. ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\" +testfilename.wrongName=Test classes should have a name ending with 'Tests.java'. leadingwhitespace.incorrect=Indentation should be performed with {0} only. deprecated.missingSince=@Deprecated has no since attribute. deprecated.emptySince=@Deprecated has an empty since attribute. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 894b78bb..92bd7cb1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -11,6 +11,7 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index b4482716..7d789a94 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -41,6 +42,7 @@ import com.puppycrawl.tools.checkstyle.api.CheckstyleException; import com.puppycrawl.tools.checkstyle.api.Configuration; import com.puppycrawl.tools.checkstyle.api.RootModule; +import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.xml.sax.InputSource; @@ -62,6 +64,9 @@ public class SpringChecksTests { private static final File DEFAULT_CONFIG = new File(CONFIGS_DIR, "default-checkstyle-configuration.xml"); + @TempDir + public Path temp; + @ParameterizedTest @MethodSource("paramaters") public void processHasExpectedResults(Parameter parameter) throws Exception { @@ -118,6 +123,8 @@ public static Collection paramaters() throws IOException { .map(Parameter::new) .collect(Collectors.toCollection(ArrayList::new)); parameters.add(new Parameter(new File(SOURCES_DIR, "nopackageinfo/NoPackageInfo.java"))); + parameters.add(new Parameter(new File(SOURCES_DIR, "src/test/java/NamedTest.java"))); + parameters.add(new Parameter(new File(SOURCES_DIR, "src/test/java/NamedTests.java"))); return parameters; } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 550d2cef..82e63f1e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -45,8 +45,8 @@ public class SpringConfigurationLoaderTests { @Test public void loadShouldLoadChecks() { Collection checks = load(null); - assertThat(checks).hasSize(4); - TreeWalker treeWalker = (TreeWalker) checks.toArray()[3]; + assertThat(checks).hasSize(5); + TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(60); } @@ -56,8 +56,8 @@ public void loadWithExcludeShouldExcludeChecks() { Set excludes = Collections .singleton("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck"); Collection checks = load(excludes); - assertThat(checks).hasSize(4); - TreeWalker treeWalker = (TreeWalker) checks.toArray()[3]; + assertThat(checks).hasSize(5); + TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(59); } @@ -66,7 +66,7 @@ public void loadWithExcludeShouldExcludeChecks() { public void loadWithExcludeHeaderShouldExcludeChecks() { Set excludes = Collections.singleton("io.spring.javaformat.checkstyle.check.SpringHeaderCheck"); Object[] checks = load(excludes).stream().toArray(); - assertThat(checks).hasSize(3); + assertThat(checks).hasSize(4); } private Collection load(Set excludes) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTest.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTest.txt new file mode 100644 index 00000000..38fff433 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTest.txt @@ -0,0 +1 @@ ++Test classes should have a name ending with Tests.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTests.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTests.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTests.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java new file mode 100644 index 00000000..a8da0363 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java @@ -0,0 +1,24 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This is a test with the wrong name. + * + * @author Phillip Webb + */ +public class NamedTest { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java new file mode 100644 index 00000000..aa494a65 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java @@ -0,0 +1,24 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This is a test with the correct name. + * + * @author Phillip Webb + */ +public class NamedTests { + +} From 8bca211810a6378aa3d3461b0c3bfa759079484a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 20:41:34 -0800 Subject: [PATCH 137/238] Allow whitespace after '(' and before '//' Closes gh-270 --- .../checkstyle/check/SpringParenPadCheck.java | 77 +++++++++++++++++++ .../checkstyle/check/messages.properties | 6 ++ .../checkstyle/spring-checkstyle.xml | 2 +- .../resources/check/AsciidoctorCallout.txt | 1 + .../resources/source/AsciidoctorCallout.java | 29 +++++++ 5 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AsciidoctorCallout.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java new file mode 100644 index 00000000..9d8e271f --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java @@ -0,0 +1,77 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.checkstyle.check; + +import java.util.Locale; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.checks.whitespace.PadOption; +import com.puppycrawl.tools.checkstyle.checks.whitespace.ParenPadCheck; +import com.puppycrawl.tools.checkstyle.utils.CommonUtil; + +/** + * {@link ParenPadCheck} variant that allows whitespace after {@code (} if before + * {@code //}. + * + * @author Phillip Webb + */ +public class SpringParenPadCheck extends ParenPadCheck { + + private static final char OPEN_PARENTHESIS = '('; + + private static final char CLOSE_PARENTHESIS = ')'; + + private PadOption option = PadOption.NOSPACE; + + @Override + public void setOption(String optionStr) { + this.option = PadOption.valueOf(optionStr.trim().toUpperCase(Locale.ENGLISH)); + } + + @Override + protected void processLeft(DetailAST ast) { + String line = getLines()[ast.getLineNo() - 1]; + int[] codePoints = line.codePoints().toArray(); + int after = ast.getColumnNo() + 1; + if (after < codePoints.length) { + boolean hasWhitespaceAfter = isConsideredWhitespace(codePoints, after); + if (this.option == PadOption.NOSPACE && hasWhitespaceAfter) { + log(ast, MSG_WS_FOLLOWED, OPEN_PARENTHESIS); + } + else if (this.option == PadOption.SPACE && !hasWhitespaceAfter && line.charAt(after) != CLOSE_PARENTHESIS) { + log(ast, MSG_WS_NOT_FOLLOWED, OPEN_PARENTHESIS); + } + } + } + + private boolean isConsideredWhitespace(int[] codePoints, int after) { + if (CommonUtil.isCodePointWhitespace(codePoints, after)) { + return !isSlashSlash(codePoints, after + 1); + } + return false; + } + + private boolean isSlashSlash(int[] codePoints, int index) { + if (index + 1 < codePoints.length) { + char c1 = Character.toChars(codePoints[index])[0]; + char c2 = Character.toChars(codePoints[index + 1])[0]; + return c1 == '/' && c2 == '/'; + } + return false; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 64dc9a8c..7088b38e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -30,3 +30,9 @@ testfilename.wrongName=Test classes should have a name ending with 'Tests.java'. leadingwhitespace.incorrect=Indentation should be performed with {0} only. deprecated.missingSince=@Deprecated has no since attribute. deprecated.emptySince=@Deprecated has an empty since attribute. +ws.followed=''{0}'' is followed by whitespace. +ws.illegalFollow=''{0}'' is followed by an illegal character. +ws.notFollowed=''{0}'' is not followed by whitespace. +ws.notPreceded=''{0}'' is not preceded with whitespace. +ws.preceded=''{0}'' is preceded with whitespace. +ws.typeCast=''typecast'' is not followed by whitespace. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 92bd7cb1..41eb9ebf 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -146,7 +146,6 @@ - @@ -162,5 +161,6 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AsciidoctorCallout.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AsciidoctorCallout.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AsciidoctorCallout.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java new file mode 100644 index 00000000..3f32c462 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java @@ -0,0 +1,29 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This is a valid example. + * + * @author Phillip Webb + */ +public class AsciidoctorCallout { + + public void example() { + RestAssured.given(this.spec).filter(document("headers", requestHeaders( // <1> + ))); + } + +} From 4a23173ad62e45a734d0999c68da49b01fd18c08 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 20:46:31 -0800 Subject: [PATCH 138/238] Polish --- .../io/spring/javaformat/checkstyle/check/messages.properties | 2 +- .../io/spring/javaformat/formatter/AbstractFormatterTests.java | 1 + .../src/main/java/io/spring/javaformat/formatter/Formatter.java | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 7088b38e..9982830e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -25,7 +25,7 @@ methodorder.outOfOrder=Method ''{0}'' is out of order, expected {1}. methodvisibility.publicMethod=Method ''{0}'' in private class should not be public. nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\". ternary.equalOperator=Ternary operation should use != when testing. -ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\" +ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\". testfilename.wrongName=Test classes should have a name ending with 'Tests.java'. leadingwhitespace.incorrect=Indentation should be performed with {0} only. deprecated.missingSince=@Deprecated has no since attribute. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index 445daff9..a87814c3 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -104,6 +104,7 @@ enum LineEnding { String ending() { return this.ending; } + }; static class Item { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 97d20003..53415a7a 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -175,4 +175,5 @@ private String detectLineSeparator(String contents) { } return null; } + } From 93300664e2388a0e8bf4038918f5b91b425143d4 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 17 Feb 2023 13:12:13 -0800 Subject: [PATCH 139/238] Make getFormattedContent() public again --- .../src/main/java/io/spring/javaformat/formatter/Edit.java | 2 +- .../src/main/java/io/spring/javaformat/formatter/FileEdit.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java index 7dbf18d8..ee14ed94 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java @@ -45,7 +45,7 @@ public boolean hasEdits() { return (this.textEdit.hasChildren() || this.textEdit.getLength() > 0); } - protected String getFormattedContent() throws Exception { + public String getFormattedContent() throws Exception { IDocument document = new Document(this.originalContent); this.textEdit.apply(document); String formattedContent = document.get(); diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java index f7252a23..a0fe488e 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java @@ -56,7 +56,7 @@ public void save() { } @Override - protected String getFormattedContent() throws Exception { + public String getFormattedContent() throws Exception { try { return super.getFormattedContent(); } From 443bfd655298fa0bd90db12120aff41cc266ca55 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 09:08:55 -0800 Subject: [PATCH 140/238] Reset Visual Studio Code extension version number after release See gh-142 --- ci/scripts/stage.sh | 1 + .../pom.xml | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 21fc79d5..3228bac2 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -29,6 +29,7 @@ fi echo "Staging ${stageVersion} (next version will be ${nextVersion})" run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata +run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension antrun:run@update-version git config user.name "Spring Builds" > /dev/null git config user.email "spring-builds@users.noreply.github.com" > /dev/null diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 67243d61..fd22bab2 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -117,6 +117,25 @@ + + org.apache.maven.plugins + maven-antrun-plugin + + + update-version + + run + + + + + + + + + From 37cb7486a7468dd8c5afb6c079b9c2aa971abcef Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 10:35:26 -0800 Subject: [PATCH 141/238] Fix 'Reset Visual Studio Code extension version number after release' See gh-142 --- ci/scripts/stage.sh | 2 +- .../pom.xml | 22 +++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 3228bac2..7236cc9d 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -29,7 +29,7 @@ fi echo "Staging ${stageVersion} (next version will be ${nextVersion})" run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension antrun:run@update-version +run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version git config user.name "Spring Builds" > /dev/null git config user.email "spring-builds@users.noreply.github.com" > /dev/null diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index fd22bab2..9313376e 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -138,11 +138,19 @@ - - - io.spring.javaformat - spring-javaformat-formatter-shaded - ${project.version} - - + + + formatter-dependencies + + true + + + + io.spring.javaformat + spring-javaformat-formatter-shaded + ${project.version} + + + + From 472361080e18b1d1b7bd76bc6bf2548f8e237fc3 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 11:53:27 -0800 Subject: [PATCH 142/238] Use springio/concourse-release-scripts Docker image rather than jar --- ci/images/setup.sh | 1 - ci/pipeline.yml | 3 --- ci/scripts/promote.sh | 5 ++--- ci/tasks/promote.yml | 7 +++++++ 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ci/images/setup.sh b/ci/images/setup.sh index 31f56577..6c90192c 100755 --- a/ci/images/setup.sh +++ b/ci/images/setup.sh @@ -11,7 +11,6 @@ ln -fs /usr/share/zoneinfo/UTC /etc/localtime dpkg-reconfigure --frontend noninteractive tzdata rm -rf /var/lib/apt/lists/* curl https://raw.githubusercontent.com/spring-io/concourse-java-scripts/v0.0.4/concourse-java.sh > /opt/concourse-java.sh -curl --output /opt/concourse-release-scripts.jar https://repo.spring.io/release/io/spring/concourse/releasescripts/concourse-release-scripts/0.3.2/concourse-release-scripts-0.3.2.jar ########################################################### # JAVA diff --git a/ci/pipeline.yml b/ci/pipeline.yml index d4708570..8f941a1c 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -263,7 +263,6 @@ jobs: download_artifacts: false save_build_info: true - task: promote - image: ci-image file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: M @@ -292,7 +291,6 @@ jobs: download_artifacts: false save_build_info: true - task: promote - image: ci-image file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: RC @@ -319,7 +317,6 @@ jobs: download_artifacts: true save_build_info: true - task: promote - image: ci-image file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: RELEASE diff --git a/ci/scripts/promote.sh b/ci/scripts/promote.sh index 30c3ace1..4ce8285b 100755 --- a/ci/scripts/promote.sh +++ b/ci/scripts/promote.sh @@ -1,18 +1,17 @@ #!/bin/bash set -e -source $(dirname $0)/common.sh CONFIG_DIR=git-repo/ci/config version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json -java -jar /opt/concourse-release-scripts.jar \ +java -jar /concourse-release-scripts.jar \ --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ publishToCentral $RELEASE_TYPE $BUILD_INFO_LOCATION artifactory-repo || { exit 1; } -java -jar /opt/concourse-release-scripts.jar \ +java -jar /concourse-release-scripts.jar \ --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ promote $RELEASE_TYPE $BUILD_INFO_LOCATION || { exit 1; } diff --git a/ci/tasks/promote.yml b/ci/tasks/promote.yml index 92b92c34..349d1866 100644 --- a/ci/tasks/promote.yml +++ b/ci/tasks/promote.yml @@ -1,5 +1,12 @@ --- platform: linux +image_resource: + type: registry-image + source: + repository: springio/concourse-release-scripts + tag: '0.3.4' + username: ((docker-hub-username)) + password: ((docker-hub-password)) inputs: - name: git-repo - name: artifactory-repo From 9b14d5c9e8c0d3de8a037831494845e9ea806064 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 13:35:23 -0800 Subject: [PATCH 143/238] Generate sources jar for VSCode extension See gh-142 --- .../spring-javaformat-vscode-extension/pom.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 9313376e..721a0633 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -24,6 +24,18 @@ + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + org.apache.maven.plugins maven-shade-plugin From 34cf2ab32c5a04ad49676fafdf543f0f3777d283 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Tue, 21 Feb 2023 22:37:23 +0000 Subject: [PATCH 144/238] Next development version (v0.0.37-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 40 files changed, 42 insertions(+), 42 deletions(-) diff --git a/README.adoc b/README.adoc index 3ebea46f..a6f6011b 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.35 +:release-version: 0.0.36 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 98a2d21b..bcf36f38 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 929bd3cb..136fb48b 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.36-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.37-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.36-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.37-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index d5a50805..99e4b534 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index d7e1b4f2..de8b66eb 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.36.qualifier" + version="0.0.37.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 999de9e4..85b811c0 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 2b6351bb..b5ec6bb0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 409803ad..bb421056 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 8c6f5258..0c503ce4 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index b3a9b579..c7fa1106 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.36.qualifier +Bundle-Version: 0.0.37.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 9f94ca47..40ba6eb5 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index e7c5b534..99e706a0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.36.qualifier +Bundle-Version: 0.0.37.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index e7c31f42..58edc2fd 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 24fe7ecd..c2b82659 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 5a9a4e8f..9c0833d1 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index e5848529..8561d128 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index b17124e9..f23f3da1 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 14ff88e4..4457d134 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index f1743282..e8542b2d 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index d49d6851..db799eca 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index f0a26622..7450d740 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 74e7c00f..b2b74d9f 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 41197ebf..114ccca2 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 721a0633..04da0864 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 856c0d5d..7b553b68 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 784e7a04..b38e4762 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 01434bbc..f1dc7128 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 587ba2b1..0bd97a80 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.36.qualifier +Bundle-Version: 0.0.37.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 9d7f1a3d..98573939 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 2020c483..f8a10931 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.36.qualifier +Bundle-Version: 0.0.37.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 60417036..63681ee4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 083d6620..04ee62da 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 6be0431c..1ab1d36d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index bba44386..8a4ef4cb 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index b0587449..4a9a823d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index b0fb5f95..1307ac1b 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 2ee7a7aa..3fbca6ac 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index ead2a85c..545cbaba 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 06402206..946c177d 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 8e859fdb..84a998ec 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From cc324705cacdb66960a076a5339f4bf2a3a49d31 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 18:14:54 -0800 Subject: [PATCH 145/238] Change "insert space" setting for type parameters based on Java version Change `insert_space_after_closing_angle_bracket_in_type_parameters` setting when Java 8 is used so that a space is inserted after the parameter type. Later versions of the Eclipse formatter can use `do not insert` and they will correctly format classes. Earlier versions need to use `insert` otherwise the space disappears. This commit effectively reverts commit b11499d4 for Java 8 only. This shouldn't be a problem since records were introduced in Java 14. Fixes gh-363 --- .../formatter/AbstractFormatterTests.java | 17 +++++++++++++---- .../src/test/resources/expected/generics.txt | 8 ++++++++ .../expected/{ => v11}/record-with-generic.txt | 0 .../expected/v8/record-with-generic.txt | 11 +++++++++++ .../src/test/resources/source/generics.txt | 8 ++++++++ .../javaformat/formatter/eclipse/Options.java | 9 +++++++-- 6 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics.txt rename spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/{ => v11}/record-with-generic.txt (100%) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v8/record-with-generic.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index a87814c3..bf873dd2 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -54,18 +54,27 @@ protected static Item[] items(String expectedOverride) { File configDir = new File("src/test/resources/config"); File expectedOverrideDir = new File("src/test/resources/" + expectedOverride); for (File source : sourceDir.listFiles((dir, name) -> !name.startsWith("."))) { - File expected = new File(expectedOverrideDir, source.getName()); - if (!expected.exists()) { - expected = new File(expectedDir, source.getName()); - } File config = new File(configDir, source.getName()); for (JavaBaseline javaBaseline : JavaBaseline.values()) { + File expected = getExpected(source, javaBaseline, expectedOverrideDir, expectedDir); addItem(items, javaBaseline, source, expected, config); } } return items.toArray(new Item[0]); } + private static File getExpected(File source, JavaBaseline javaBaseline, File... expectedDirs) { + for (File expectedDir : expectedDirs) { + File versionSpecificExpectedDir = new File(expectedDir, javaBaseline.toString().toLowerCase()); + File expected = new File(versionSpecificExpectedDir, source.getName()); + expected = (!expected.exists()) ? new File(expectedDir, source.getName()) : expected; + if (expected.exists()) { + return expected; + } + } + throw new IllegalStateException("Unable to find expected file"); + } + private static void addItem(List items, JavaBaseline javaBaseline, File source, File expected, File config) { if (source.getName().contains("lineendings")) { items.add(new Item(javaBaseline, copy(source, LineEnding.CR), copy(expected, LineEnding.CR), config)); diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics.txt new file mode 100644 index 00000000..4c3055e0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics.txt @@ -0,0 +1,8 @@ +package simple; + +/** + * gh-363. + */ +class SpectatorToDoubleGauge extends AbstractMeter implements Gauge { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v11/record-with-generic.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v11/record-with-generic.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v8/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v8/record-with-generic.txt new file mode 100644 index 00000000..d31ccb47 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v8/record-with-generic.txt @@ -0,0 +1,11 @@ +package simple; + +/** + * Record with generic. + * + * @author Andy Wilkinson + * @since 1.0.0 + */ +public record SomeRecord (T item) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics.txt new file mode 100644 index 00000000..4c3055e0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics.txt @@ -0,0 +1,8 @@ +package simple; + +/** + * gh-363. + */ +class SpectatorToDoubleGauge extends AbstractMeter implements Gauge { + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java index 3f50237e..7006feb9 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import java.util.Properties; import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; /** @@ -63,8 +64,12 @@ private Map loadProperties() throws IOException { } private void applyConfig(Map properties, JavaFormatConfig javaFormatConfig) { + String coreFormatter = this.prefix + ".core.formatter."; if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { - properties.put(this.prefix + ".core.formatter.tabulation.char", "space"); + properties.put(coreFormatter + "tabulation.char", "space"); + } + if (javaFormatConfig.getJavaBaseline() == JavaBaseline.V8) { + properties.put(coreFormatter + "insert_space_after_closing_angle_bracket_in_type_parameters", "insert"); } } From 8e9ac6e422f5ba65e3bb3662dffa6ed9bc71f919 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 22 Feb 2023 03:06:59 +0000 Subject: [PATCH 146/238] Next development version (v0.0.38-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 40 files changed, 42 insertions(+), 42 deletions(-) diff --git a/README.adoc b/README.adoc index a6f6011b..392071c1 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.36 +:release-version: 0.0.37 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index bcf36f38..798c685c 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 136fb48b..728b7f2f 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.37-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.38-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.37-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.38-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 99e4b534..bd0c2c58 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index de8b66eb..7935ae39 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.37.qualifier" + version="0.0.38.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 85b811c0..dadf765f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index b5ec6bb0..7f60556b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index bb421056..fec2d915 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 0c503ce4..03313181 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index c7fa1106..0d6d3842 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.37.qualifier +Bundle-Version: 0.0.38.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 40ba6eb5..b813b208 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 99e706a0..362f91ed 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.37.qualifier +Bundle-Version: 0.0.38.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 58edc2fd..9e0c0989 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index c2b82659..c644684b 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 9c0833d1..1870d1a2 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 8561d128..ead61a9a 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index f23f3da1..c02e704c 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 4457d134..9360cad9 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index e8542b2d..0ce86a6b 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index db799eca..efdf4144 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 7450d740..25630426 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index b2b74d9f..95d097e8 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 114ccca2..0c59d877 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 04da0864..bb8bc4ef 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 7b553b68..bbb38b3f 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index b38e4762..b9e8f7ea 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index f1dc7128..715b0259 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 0bd97a80..0a378226 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.37.qualifier +Bundle-Version: 0.0.38.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 98573939..d1ea777c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index f8a10931..fa93cf3b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.37.qualifier +Bundle-Version: 0.0.38.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 63681ee4..4e919dac 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 04ee62da..4bb602dd 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 1ab1d36d..ae08426b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 8a4ef4cb..c1c27cf9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 4a9a823d..b48243ea 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 1307ac1b..ba05b764 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 3fbca6ac..af119039 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 545cbaba..9f5aa5fe 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 946c177d..588471d8 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 84a998ec..dbc07172 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 786df17f0d75e834d55d6f9a69794a4f73f1f7b7 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 21:41:48 -0800 Subject: [PATCH 147/238] Revert "insert space" setting for type parameters Change `insert_space_after_closing_angle_bracket_in_type_parameters` back to `insert` to ensure generics are always formatted correctly. This commit reverts commit b11499d4 as which we no longer need thanks to https://github.com/eclipse-jdt/eclipse.jdt.core/issues/443 Fixes gh-363 --- .../src/test/resources/expected/generics2.txt | 8 ++++++++ .../src/test/resources/source/generics2.txt | 8 ++++++++ .../io/spring/javaformat/formatter/eclipse/Options.java | 4 ---- .../spring/javaformat/formatter/eclipse/formatter.prefs | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics2.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics2.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics2.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics2.txt new file mode 100644 index 00000000..da493d53 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics2.txt @@ -0,0 +1,8 @@ +package simple; + +/** + * gh-363. + */ +public class UnresolvedGenericProperties extends AbstractGenericProperties { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics2.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics2.txt new file mode 100644 index 00000000..da493d53 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics2.txt @@ -0,0 +1,8 @@ +package simple; + +/** + * gh-363. + */ +public class UnresolvedGenericProperties extends AbstractGenericProperties { + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java index 7006feb9..37f4faa9 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java @@ -24,7 +24,6 @@ import java.util.Properties; import io.spring.javaformat.config.IndentationStyle; -import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; /** @@ -68,9 +67,6 @@ private void applyConfig(Map properties, JavaFormatConfig javaFo if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { properties.put(coreFormatter + "tabulation.char", "space"); } - if (javaFormatConfig.getJavaBaseline() == JavaBaseline.V8) { - properties.put(coreFormatter + "insert_space_after_closing_angle_bracket_in_type_parameters", "insert"); - } } } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs index 174274a0..46940cbe 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs +++ b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs @@ -134,7 +134,7 @@ core.formatter.insert_space_after_at_in_annotation_type_declaration=do not inser core.formatter.insert_space_after_binary_operator=insert core.formatter.insert_space_after_bitwise_operator=insert core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert -core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=do not insert +core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert core.formatter.insert_space_after_closing_brace_in_block=insert core.formatter.insert_space_after_closing_paren_in_cast=insert core.formatter.insert_space_after_colon_in_assert=insert From 681e8457bb04108e5b582b5c8c6986157c50c6e5 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 22 Feb 2023 06:15:51 +0000 Subject: [PATCH 148/238] Next development version (v0.0.39-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 40 files changed, 42 insertions(+), 42 deletions(-) diff --git a/README.adoc b/README.adoc index 392071c1..1cdf4342 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.37 +:release-version: 0.0.38 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 798c685c..757cc4ec 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 728b7f2f..d4758cec 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.38-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.39-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.38-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.39-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index bd0c2c58..78461ae8 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 7935ae39..98c32dde 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.38.qualifier" + version="0.0.39.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index dadf765f..ae88a4f5 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 7f60556b..811ba905 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index fec2d915..8a846d3b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 03313181..ba00746c 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 0d6d3842..2e6301cf 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.38.qualifier +Bundle-Version: 0.0.39.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index b813b208..daa19ec8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 362f91ed..ec952e84 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.38.qualifier +Bundle-Version: 0.0.39.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 9e0c0989..36460266 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index c644684b..cc13ee42 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 1870d1a2..1e42646e 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index ead61a9a..f7639a82 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index c02e704c..c0c01285 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 9360cad9..1ad80f6b 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 0ce86a6b..83197903 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index efdf4144..287b0b4b 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 25630426..bf2c3615 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 95d097e8..f2c33325 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 0c59d877..f8d63961 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index bb8bc4ef..4b6eb62c 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index bbb38b3f..318fb80f 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index b9e8f7ea..4d71aa33 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 715b0259..d6973278 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 0a378226..65ec970e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.38.qualifier +Bundle-Version: 0.0.39.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index d1ea777c..cf8ebde6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index fa93cf3b..e33dc865 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.38.qualifier +Bundle-Version: 0.0.39.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 4e919dac..3a6bfd33 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 4bb602dd..7fda24f9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index ae08426b..9bbd235e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index c1c27cf9..4fad8edf 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index b48243ea..4b025367 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index ba05b764..92c8f31d 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index af119039..0d8874b8 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 9f5aa5fe..6dde3788 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 588471d8..1e6034ea 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index dbc07172..c28fe9a3 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 4028226b4f4b440c8cc77fe01f53dfc9555c504f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 23 Feb 2023 11:21:57 -0800 Subject: [PATCH 149/238] Fix 'spring-javaformat.apply.skip' property and use info logging The `spring-javaformat.format.skip` should have been `spring-javaformat.apply.skip` and logging that skip has occurred is better at 'INFO' level. Fixes gh-365 --- .../src/main/java/io/spring/format/maven/ApplyMojo.java | 4 ++-- .../src/main/java/io/spring/format/maven/ValidateMojo.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java index 0514ed7e..abfece47 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java @@ -40,14 +40,14 @@ public class ApplyMojo extends FormatMojo { /** * Skip the execution. */ - @Parameter(property = "spring-javaformat.format.skip", defaultValue = "false") + @Parameter(property = "spring-javaformat.apply.skip", defaultValue = "false") private boolean skip; @Override protected void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException { if (this.skip || skipGlobally()) { - getLog().debug("skipping format apply as per configuration."); + getLog().info("skipping format apply as per configuration."); return; } try { diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index 5d4c0e2c..7d124eac 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -47,7 +47,7 @@ public class ValidateMojo extends FormatMojo { protected void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException { if (this.skip || skipGlobally()) { - getLog().debug("skipping format validate as per configuration."); + getLog().info("skipping format validate as per configuration."); return; } List problems = getFormatter().formatFiles(files, encoding, lineSeparator) From 9da9a349d2d771d3d788b4517e32443b41a2c849 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 24 Feb 2023 09:35:42 +0000 Subject: [PATCH 150/238] Use getInstance() to retrieve ProjectDataManager Fixes gh-367 --- .../spring/format/formatter/intellij/monitor/GradleMonitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java index 9c716249..a1e4f420 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java @@ -58,7 +58,7 @@ public void onImportFinished(@Nullable String projectPath) { private void check() { logger.info("Checking " + getProject().getName() + " for use of Spring Java Format"); - ProjectDataManager projectDataManager = getProject().getService(ProjectDataManager.class); + ProjectDataManager projectDataManager = ProjectDataManager.getInstance(); boolean hasFormatPlugin = hasFormatPlugin( projectDataManager.getExternalProjectsData(getProject(), GradleConstants.SYSTEM_ID)); getTrigger().updateState(hasFormatPlugin ? State.ACTIVE : State.NOT_ACTIVE); From e2f7e9829ce13611202018d06b0ac8974b7e0e31 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 11 May 2023 15:47:44 +0100 Subject: [PATCH 151/238] Remove unwanted output to System.out Closes gh-374 --- .../spring/javaformat/checkstyle/SpringConfigurationLoader.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 202b085f..17e4e403 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -49,7 +49,6 @@ class SpringConfigurationLoader { } public Collection load(PropertyResolver propertyResolver) { - System.out.println(getClass().getResource("spring-checkstyle.xml")); Configuration config = loadConfiguration(getClass().getResourceAsStream("spring-checkstyle.xml"), propertyResolver); return Arrays.stream(config.getChildren()) From c2a1cc92dcac92ec32b0a098aa0e4681f8e621db Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Mon, 15 May 2023 08:55:14 +0000 Subject: [PATCH 152/238] Next development version (v0.0.40-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 40 files changed, 42 insertions(+), 42 deletions(-) diff --git a/README.adoc b/README.adoc index 1cdf4342..bd7cf2a3 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.38 +:release-version: 0.0.39 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 757cc4ec..ad563f51 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index d4758cec..af133b51 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.39-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.40-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.39-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.40-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 78461ae8..d1787e95 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 98c32dde..86e75ce9 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.39.qualifier" + version="0.0.40.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index ae88a4f5..de73a542 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 811ba905..1671bd14 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 8a846d3b..122cd325 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index ba00746c..9ad814cb 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 2e6301cf..e0eaabe7 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.39.qualifier +Bundle-Version: 0.0.40.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index daa19ec8..c478249a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index ec952e84..c792e683 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.39.qualifier +Bundle-Version: 0.0.40.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 36460266..2dfde619 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index cc13ee42..1388f7a5 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 1e42646e..af870f42 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index f7639a82..bfe50daf 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index c0c01285..49a158aa 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 1ad80f6b..1e5a3d97 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 83197903..359131b6 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 287b0b4b..43590141 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index bf2c3615..4e1b694d 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index f2c33325..07924ef3 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index f8d63961..1cd28651 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 4b6eb62c..c76671ed 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 318fb80f..81f95083 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 4d71aa33..c6f69b9c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index d6973278..c29dccfd 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 65ec970e..265335f9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.39.qualifier +Bundle-Version: 0.0.40.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index cf8ebde6..06ae09e3 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index e33dc865..438832d3 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.39.qualifier +Bundle-Version: 0.0.40.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 3a6bfd33..c0b49d6c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 7fda24f9..88c061e4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 9bbd235e..98b380f7 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 4fad8edf..655863ec 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 4b025367..12989051 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 92c8f31d..6222dd58 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 0d8874b8..fc4b092a 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 6dde3788..203a96a0 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 1e6034ea..a50507a4 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index c28fe9a3..fc5611c1 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 9441f26e944367965dc78907146df3160c49b18e Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 24 May 2023 20:53:25 +0100 Subject: [PATCH 153/238] Move Maven Plugin's Maven dependencies into provided scope Closes gh-378 --- pom.xml | 6 ++++++ .../spring-javaformat-maven-plugin/pom.xml | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ad563f51..c1371723 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,7 @@ 5.8.1 3.21.0-GA 1.2 + 3.5.1 1.16.0 1.16.0 3.0.3 @@ -589,6 +590,11 @@ picocontainer ${picocontainer.version} + + org.codehaus.plexus + plexus-utils + ${plexus-utils.version} + org.testcontainers testcontainers diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 07924ef3..aef8d6b2 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -101,15 +101,21 @@ + + org.codehaus.plexus + plexus-utils + + org.apache.maven maven-core + provided org.apache.maven maven-plugin-api + provided - org.apache.maven.plugin-tools maven-plugin-annotations From adf3ecffd8909451af3d8415dbdf6b73b6c39d95 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 24 May 2023 17:37:47 -0700 Subject: [PATCH 154/238] Update CI --- ci/pipeline.yml | 44 ----------------------------------- ci/tasks/build-pr-project.yml | 11 --------- 2 files changed, 55 deletions(-) delete mode 100644 ci/tasks/build-pr-project.yml diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 8f941a1c..128c9014 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -44,12 +44,6 @@ resource_types: tag: "0.0.18" username: ((docker-hub-username)) password: ((docker-hub-password)) -- name: pull-request - type: registry-image - source: - repository: teliaoss/github-pr-resource - username: ((docker-hub-username)) - password: ((docker-hub-password)) - name: slack-notification type: registry-image source: @@ -65,14 +59,6 @@ resources: username: ((github-username)) password: ((github-ci-release-token)) branch: ((branch)) -- name: git-pull-request - type: pull-request - icon: source-pull - source: - access_token: ((github-ci-pull-request-token)) - repository: ((github-owner))/((github-repository)) - base_branch: ((branch)) - ignore_paths: ["ci/*"] - name: github-pre-release type: github-release icon: briefcase-download-outline @@ -165,34 +151,6 @@ jobs: - put: slack-alert params: <<: *slack-success-params -- name: build-pull-requests - serial: true - public: true - plan: - - get: ci-image - - get: git-repo - resource: git-pull-request - trigger: true - version: every - - do: - - put: git-pull-request - params: - path: git-repo - status: pending - - task: build-project - image: ci-image - file: git-repo/ci/tasks/build-pr-project.yml - timeout: ((task-timeout)) - on_success: - put: git-pull-request - params: - path: git-repo - status: success - on_failure: - put: git-pull-request - params: - path: git-repo - status: failure - name: stage-milestone serial: true plan: @@ -366,5 +324,3 @@ groups: jobs: [stage-milestone, stage-rc, stage-release, promote-milestone, promote-rc, promote-release, create-github-release, publish-eclipse-update-site] - name: ci-images jobs: [build-ci-images] -- name: pull-requests - jobs: [build-pull-requests] diff --git a/ci/tasks/build-pr-project.yml b/ci/tasks/build-pr-project.yml deleted file mode 100644 index 9430bc00..00000000 --- a/ci/tasks/build-pr-project.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -platform: linux -inputs: -- name: git-repo -outputs: -- name: distribution-repository -caches: -- path: maven -- path: gradle -run: - path: git-repo/ci/scripts/build-project.sh \ No newline at end of file From 6ed4039ff6affae93810268d9aef32d6b47e773d Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 6 Jun 2023 11:23:45 +0100 Subject: [PATCH 155/238] Enable more compiler warnings and treat warnings as errors Closes gh-381 --- pom.xml | 5 +++++ .../spring-javaformat-gradle-plugin/build.gradle | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c1371723..7c53c89a 100644 --- a/pom.xml +++ b/pom.xml @@ -400,6 +400,11 @@ ${java.version} ${java.version} + -Werror + -Xlint:deprecation + -Xlint:rawtypes + -Xlint:unchecked + -Xlint:varargs diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle index 1a94c0a2..e088814b 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle @@ -61,4 +61,10 @@ artifacts { archives javadocJar } - +tasks.withType(JavaCompile) { + options.compilerArgs.add("-Werror") + options.compilerArgs.add("-Xlint:deprecation") + options.compilerArgs.add("-Xlint:rawtypes") + options.compilerArgs.add("-Xlint:unchecked") + options.compilerArgs.add("-Xlint:varargs") +} From 7e97f323d96758d58ed57701c36cd2c69f9fc0fe Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 6 Jun 2023 11:24:43 +0100 Subject: [PATCH 156/238] Stop using deprecated Gradle APIs Closes gh-380 --- .../io/spring/javaformat/gradle/SpringJavaFormatPlugin.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index 032253ff..95e171a8 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -22,7 +22,7 @@ import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.plugins.JavaBasePlugin; -import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskProvider; @@ -56,8 +56,8 @@ private void addSourceTasks() { TaskProvider checkAllProvider = tasks.register(CheckFormat.NAME); checkAllProvider.configure((checkAll) -> checkAll.setDescription(CheckFormat.DESCRIPTION)); tasks.named(JavaBasePlugin.CHECK_TASK_NAME).configure((check) -> check.dependsOn(checkAllProvider)); - this.project.getConvention() - .getPlugin(JavaPluginConvention.class) + this.project.getExtensions() + .getByType(JavaPluginExtension.class) .getSourceSets() .all((sourceSet) -> addSourceTasks(sourceSet, checkAllProvider, formatAllProvider)); }); From a80b41c5a6463460297856a78f64f1a161d43d19 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 10:27:36 +0100 Subject: [PATCH 157/238] Upgrade to Maven 3.8.8 Closes gh-387 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 7c53c89a..39bcc75e 100644 --- a/pom.xml +++ b/pom.xml @@ -43,9 +43,9 @@ 3.4 2.4.21 2.17.1 - 3.5.0 + 3.8.8 ${maven-core.version} - 3.5 + 3.8.2 3.6.28 5.8.1 3.21.0-GA From f93cdcc3b5c10244b7c37afe48e852145d72cea8 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 10:28:25 +0100 Subject: [PATCH 158/238] Correct version of VS Code extension snapshots Closes gh-388 --- ci/scripts/stage.sh | 1 + .../spring-javaformat-vscode-extension/package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 7236cc9d..43af8e10 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -44,6 +44,7 @@ if [[ $nextVersion != $snapshotVersion ]]; then echo "Setting next development version (v$nextVersion)" run_maven versions:set -DnewVersion=$nextVersion -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata + run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version sed -i "s/:release-version:.*/:release-version: ${stageVersion}/g" README.adoc sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index b37ff6b9..88151cba 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.36-SNAPSHOT", + "version": "0.0.40-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" From 5f138ca975171faa5b12dc5af2f1a05d21f09e7b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 10:39:37 +0100 Subject: [PATCH 159/238] Remove unused dependency management for Gradle modules Closes gh-389 --- pom.xml | 41 ----------------------------------------- 1 file changed, 41 deletions(-) diff --git a/pom.xml b/pom.xml index 39bcc75e..62acc4ac 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,6 @@ 7.3.1 3.8.0 9.3 - 3.4 2.4.21 2.17.1 3.8.8 @@ -535,46 +534,6 @@ groovy ${groovy.version} - - org.gradle - gradle-base-services - ${gradle.version} - - - org.gradle - gradle-base-services-groovy - ${gradle.version} - - - org.gradle - gradle-core - ${gradle.version} - - - org.gradle - gradle-language-java - ${gradle.version} - - - org.gradle - gradle-language-jvm - ${gradle.version} - - - org.gradle - gradle-platform-jvm - ${gradle.version} - - - org.gradle - gradle-plugins - ${gradle.version} - - - org.gradle - gradle-tooling-api - ${gradle.version} - org.javassist javassist From e3716b960b9591075708e2fcbb31bd733e1cd017 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 10:50:49 +0100 Subject: [PATCH 160/238] Update package-lock.json after bumping version See gh-388 --- ci/scripts/stage.sh | 4 ++-- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/pom.xml | 9 +++++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 43af8e10..5a9d6015 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -29,7 +29,7 @@ fi echo "Staging ${stageVersion} (next version will be ${nextVersion})" run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version +run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock git config user.name "Spring Builds" > /dev/null git config user.email "spring-builds@users.noreply.github.com" > /dev/null @@ -44,7 +44,7 @@ if [[ $nextVersion != $snapshotVersion ]]; then echo "Setting next development version (v$nextVersion)" run_maven versions:set -DnewVersion=$nextVersion -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata - run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version + run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock sed -i "s/:release-version:.*/:release-version: ${stageVersion}/g" README.adoc sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 4d147a7a..fb91fed3 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.36-SNAPSHOT", + "version": "0.0.40-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.36-SNAPSHOT", + "version": "0.0.40-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index c76671ed..3354a18f 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -103,6 +103,15 @@ run package + + update-package-lock + + npm + + + install --package-lock-only + + v19.6.0 From fdc84512e9a3648b6afe5a1922fc4090cbf37da9 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 11:12:32 +0100 Subject: [PATCH 161/238] Use an exact version of prettier Closes gh-390 --- .../package-lock.json | 16 ++++++++++++++++ .../package.json | 1 + .../SpringDocumentFormattingEditProvider.ts | 4 ++-- .../src/main/typescript/extension.ts | 4 ++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index fb91fed3..fcf5a077 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -18,6 +18,7 @@ "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", + "prettier": "3.0.3", "typescript": "^4.9.4" }, "engines": { @@ -2852,6 +2853,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 88151cba..32267383 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -37,6 +37,7 @@ "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", + "prettier": "3.0.3", "typescript": "^4.9.4" } } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts index d8fc9788..cd26b056 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts @@ -24,7 +24,7 @@ export default class SpringDocumentFormattingEditProvider implements vscode.Docu provideDocumentFormattingEdits( document: vscode.TextDocument, options: vscode.FormattingOptions, - token: vscode.CancellationToken + token: vscode.CancellationToken, ): vscode.ProviderResult { if (vscode.window.visibleTextEditors.every((editor) => editor.document.fileName !== document.fileName)) { return [] @@ -36,7 +36,7 @@ export default class SpringDocumentFormattingEditProvider implements vscode.Docu console.log(err) return Promise.reject(`Check the console in dev tools to find errors when formatting spring-javaformat`) } - } + }, ) } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts index 0fe3b9a9..3b4fb826 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts @@ -27,7 +27,7 @@ export function activate(context: vscode.ExtensionContext) { scheme: 'file', }, ], - new SpringDocumentFormattingEditProvider() - ) + new SpringDocumentFormattingEditProvider(), + ), ) } From a88d56da5f406cb49bdcf34f805bd45d29cb3eba Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Tue, 3 Oct 2023 14:55:19 +0900 Subject: [PATCH 162/238] Broaden Checkstyle rule for AssertJ assertion enforcement See gh-392 --- src/checkstyle/checkstyle.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 0c6b5e96..0a4758b9 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -137,7 +137,7 @@ - + From 29090605710af73fab15313147b0f0c5da00af1b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 13 Oct 2023 11:46:15 +0100 Subject: [PATCH 163/238] Polish "Broaden Checkstyle rule for AssertJ assertion enforcement" See gh-392 --- .../checkstyle/spring-checkstyle.xml | 2 +- .../check/AssertJBadAssertImport.txt | 2 + .../check/AssertJBadAssertionsImport.txt | 2 + .../source/AssertJBadAssertImport.java | 37 +++++++++++++++++++ .../source/AssertJBadAssertionsImport.java | 37 +++++++++++++++++++ src/checkstyle/checkstyle.xml | 2 +- 6 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertImport.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertionsImport.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 41eb9ebf..c8838541 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -128,7 +128,7 @@ - + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertImport.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertImport.txt new file mode 100644 index 00000000..05108d50 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertImport.txt @@ -0,0 +1,2 @@ ++Please use AssertJ imports. ++3 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertionsImport.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertionsImport.txt new file mode 100644 index 00000000..05108d50 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertionsImport.txt @@ -0,0 +1,2 @@ ++Please use AssertJ imports. ++3 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java new file mode 100644 index 00000000..28d2b972 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java @@ -0,0 +1,37 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.junit.Assert; +import org.junit.jupiter.api.Test; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * Import of banned org.junit.Assert. + * + * @author Andy Wilkinson + */ +public class AssertJBadAssertImport { + + @Test + void useTheImports() { + assertTrue(true); + Assert.assertFalse(false); + fail("oops"); + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java new file mode 100644 index 00000000..7d8e2fe7 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java @@ -0,0 +1,37 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + +/** + * Import of banned org.junit.jupiter.api.Assertions. + * + * @author Andy Wilkinson + */ +public class AssertJBadAssertionsImport { + + @Test + void useTheImports() { + assertTrue(true); + Assertions.assertFalse(false); + fail("oops"); + } + +} diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 0a4758b9..0c6b5e96 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -137,7 +137,7 @@ - + From a9b891286e7d3b921bf87e64cee79b07c0a248b3 Mon Sep 17 00:00:00 2001 From: Kevin Wheeler Date: Thu, 31 Aug 2023 08:48:23 -0500 Subject: [PATCH 164/238] Add links to JAR files for IntelliJ Checkstyle setup See gh-391 --- README.adoc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index bd7cf2a3..ffca7a09 100644 --- a/README.adoc +++ b/README.adoc @@ -264,10 +264,12 @@ To configure the plugin, create your own Checkstyle configuration file with the Once the configuration file is created, configure your IDE to use it: +* Download `spring-javaformat-checkstyle-{release-version}.jar` from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-checkstyle/{release-version}[Maven Central]. +* Download `spring-javaformat-config-{release-version}.jar` from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-config/{release-version}[Maven Central]. * Open `Preferences` - `Tools` - `Checkstyle` * Add `spring-javaformat-checkstyle-{release-version}.jar` and `spring-javaformat-config-{release-version}.jar` to the `Third-Party Checks` * Specify the appropriate `Checkstyle version` -* Add your Checkstyle configuration file +* Add and enable your Checkstyle configuration file From b94292ed3314e2f167d7f2b5131bfae4997cf47f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 16 Nov 2023 11:17:37 +0000 Subject: [PATCH 165/238] Ensure that npm is installed before running it See gh-388 --- ci/scripts/stage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 5a9d6015..5b36e8b4 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -29,7 +29,7 @@ fi echo "Staging ${stageVersion} (next version will be ${nextVersion})" run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock +run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:install-node-and-npm frontend:npm@update-package-lock git config user.name "Spring Builds" > /dev/null git config user.email "spring-builds@users.noreply.github.com" > /dev/null From e875f94f8c962185c2b062a24b45759e04633436 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Thu, 16 Nov 2023 11:36:00 +0000 Subject: [PATCH 166/238] Next development version (v0.0.41-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index ffca7a09..d4dc1834 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.39 +:release-version: 0.0.40 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 62acc4ac..b8b66ea9 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index af133b51..cd1816ab 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.40-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.41-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.40-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.41-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index d1787e95..363abdb5 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 86e75ce9..50bc8d06 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.40.qualifier" + version="0.0.41.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index de73a542..171aaf24 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 1671bd14..3564aae7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 122cd325..ced5a739 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 9ad814cb..b892e873 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index e0eaabe7..2794f1c2 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.40.qualifier +Bundle-Version: 0.0.41.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index c478249a..34859538 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index c792e683..ecb2f730 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.40.qualifier +Bundle-Version: 0.0.41.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 2dfde619..1b4071de 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 1388f7a5..fd99b530 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index af870f42..eabf8d36 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index bfe50daf..b5ba4291 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 49a158aa..78c726cd 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 1e5a3d97..6cc01984 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 359131b6..3fab1c70 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 43590141..f33112ca 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 4e1b694d..7187968b 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index aef8d6b2..5db3a701 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 1cd28651..1cd5bdbc 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index fcf5a077..9599a99e 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.40-SNAPSHOT", + "version": "0.0.41-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.40-SNAPSHOT", + "version": "0.0.41-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 32267383..7a0ed26b 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.40-SNAPSHOT", + "version": "0.0.41-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 3354a18f..ae0a862a 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 81f95083..50e9b82c 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index c6f69b9c..1e87901c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index c29dccfd..b12e6173 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 265335f9..0d85c8da 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.40.qualifier +Bundle-Version: 0.0.41.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 06ae09e3..d548529c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 438832d3..f81fcabf 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.40.qualifier +Bundle-Version: 0.0.41.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index c0b49d6c..b2d08507 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 88c061e4..32b0a37c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 98b380f7..19d197f2 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 655863ec..e981a693 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 12989051..cb457f0f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 6222dd58..404039cb 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index fc4b092a..6cb8c71c 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 203a96a0..5c54d94e 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index a50507a4..e519c0dc 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index fc5611c1..b0d36934 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From fd84f42b9e322cc74990ebb7ed76d5deb9dd5de4 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 14 Dec 2023 12:48:31 +0000 Subject: [PATCH 167/238] Improve compatibility with Checkstyle 10 Closes gh-395 --- .../checkstyle/SpringConfigurationLoader.java | 17 +++-- .../checkstyle/check/SpringJUnit5Check.java | 74 ++++++++++++++----- 2 files changed, 66 insertions(+), 25 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 17e4e403..12bd56c7 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -24,10 +24,11 @@ import com.puppycrawl.tools.checkstyle.ConfigurationLoader; import com.puppycrawl.tools.checkstyle.ConfigurationLoader.IgnoredModulesOptions; import com.puppycrawl.tools.checkstyle.PropertyResolver; -import com.puppycrawl.tools.checkstyle.api.AutomaticBean; import com.puppycrawl.tools.checkstyle.api.CheckstyleException; +import com.puppycrawl.tools.checkstyle.api.Configurable; import com.puppycrawl.tools.checkstyle.api.Configuration; import com.puppycrawl.tools.checkstyle.api.Context; +import com.puppycrawl.tools.checkstyle.api.Contextualizable; import com.puppycrawl.tools.checkstyle.api.FileSetCheck; import org.xml.sax.InputSource; @@ -79,9 +80,7 @@ private Object createModule(Configuration configuration) { String name = configuration.getName(); try { Object module = this.moduleFactory.createModule(name); - if (module instanceof AutomaticBean) { - initialize(configuration, (AutomaticBean) module); - } + initialize(configuration, module); return module; } catch (CheckstyleException ex) { @@ -89,9 +88,13 @@ private Object createModule(Configuration configuration) { } } - private void initialize(Configuration configuration, AutomaticBean bean) throws CheckstyleException { - bean.contextualize(this.context); - bean.configure(configuration); + private void initialize(Configuration configuration, Object module) throws CheckstyleException { + if (module instanceof Contextualizable) { + ((Contextualizable) module).contextualize(this.context); + } + if (module instanceof Configurable) { + ((Configurable) module).configure(configuration); + } } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index 5b5dc191..db7cbbfd 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -19,12 +19,14 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.FullIdent; @@ -38,33 +40,33 @@ */ public class SpringJUnit5Check extends AbstractSpringCheck { - private static final String JUNIT4_TEST_ANNOTATION = "org.junit.Test"; + private static final String JUNIT4_TEST_ANNOTATION_NAME = "org.junit.Test"; - private static final List TEST_ANNOTATIONS; + private static final List TEST_ANNOTATIONS; static { - Set annotations = new LinkedHashSet<>(); - annotations.add("RepeatedTest"); - annotations.add("Test"); - annotations.add("TestFactory"); - annotations.add("TestTemplate"); - annotations.add("ParameterizedTest"); + Set annotations = new LinkedHashSet<>(); + annotations.add(new Annotation("org.junit.jupiter.api", "RepeatedTest")); + annotations.add(new Annotation("org.junit.jupiter.api", "Test")); + annotations.add(new Annotation("org.junit.jupiter.api", "TestFactory")); + annotations.add(new Annotation("org.junit.jupiter.api", "TestTemplate")); + annotations.add(new Annotation("org.junit.jupiter.api", "ParameterizedTest")); TEST_ANNOTATIONS = Collections.unmodifiableList(new ArrayList<>(annotations)); } - private static final List LIFECYCLE_ANNOTATIONS; + private static final List LIFECYCLE_ANNOTATIONS; static { - Set annotations = new LinkedHashSet<>(); - annotations.add("BeforeAll"); - annotations.add("BeforeEach"); - annotations.add("AfterAll"); - annotations.add("AfterEach"); + Set annotations = new LinkedHashSet<>(); + annotations.add(new Annotation("org.junit.jupiter.api", "BeforeAll")); + annotations.add(new Annotation("org.junit.jupiter.api", "BeforeEach")); + annotations.add(new Annotation("org.junit.jupiter.api", "AfterAll")); + annotations.add(new Annotation("org.junit.jupiter.api", "AfterEach")); LIFECYCLE_ANNOTATIONS = Collections.unmodifiableList(new ArrayList<>(annotations)); } private static final Set BANNED_IMPORTS; static { Set bannedImports = new LinkedHashSet<>(); - bannedImports.add(JUNIT4_TEST_ANNOTATION); + bannedImports.add(JUNIT4_TEST_ANNOTATION_NAME); bannedImports.add("org.junit.After"); bannedImports.add("org.junit.AfterClass"); bannedImports.add("org.junit.Before"); @@ -106,14 +108,33 @@ public void visitToken(DetailAST ast) { } private void visitMethodDef(DetailAST ast) { - if (AnnotationUtil.containsAnnotation(ast, TEST_ANNOTATIONS)) { + if (containsAnnotation(ast, TEST_ANNOTATIONS)) { this.testMethods.add(ast); } - if (AnnotationUtil.containsAnnotation(ast, LIFECYCLE_ANNOTATIONS)) { + if (containsAnnotation(ast, LIFECYCLE_ANNOTATIONS)) { this.lifecycleMethods.add(ast); } } + private boolean containsAnnotation(DetailAST ast, List annotations) { + List annotationNames = annotations.stream().flatMap((annotation) -> + Stream.of(annotation.simpleName, annotation.fullyQualifiedName())).collect(Collectors.toList()); + try { + return AnnotationUtil.containsAnnotation(ast, annotationNames); + } + catch (NoSuchMethodError ex) { + // Checkstyle >= 10.3 (https://github.com/checkstyle/checkstyle/issues/14134) + Set annotationNamesSet = new HashSet<>(annotationNames); + try { + return (boolean) AnnotationUtil.class.getMethod("containsAnnotation", DetailAST.class, Set.class) + .invoke(null, ast, annotationNamesSet); + } + catch (Exception ex2) { + throw new RuntimeException("containsAnnotation failed", ex2); + } + } + } + private void visitImport(DetailAST ast) { FullIdent ident = FullIdent.createFullIdentBelow(ast); this.imports.put(ident.getText(), ident); @@ -146,7 +167,7 @@ private void check() { } } for (DetailAST testMethod : this.testMethods) { - if (AnnotationUtil.containsAnnotation(testMethod, JUNIT4_TEST_ANNOTATION)) { + if (AnnotationUtil.containsAnnotation(testMethod, JUNIT4_TEST_ANNOTATION_NAME)) { log(testMethod, "junit5.bannedTestAnnotation"); } } @@ -176,4 +197,21 @@ public void setUnlessImports(String unlessImports) { .unmodifiableList(Arrays.stream(unlessImports.split(",")).map(String::trim).collect(Collectors.toList())); } + private static final class Annotation { + + private final String packageName; + + private final String simpleName; + + private Annotation(String packageName, String simpleName) { + this.packageName = packageName; + this.simpleName = simpleName; + } + + private String fullyQualifiedName() { + return this.packageName + "." + this.simpleName; + } + + } + } From 6f5a0141650e0c4289eacbcd196791d27ce88311 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 10 Jan 2024 12:35:36 +0000 Subject: [PATCH 168/238] Next development version (v0.0.42-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index d4dc1834..ecd7485b 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.40 +:release-version: 0.0.41 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index b8b66ea9..2b397d2d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index cd1816ab..58e98809 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.41-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.42-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.41-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.42-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 363abdb5..3fa9bfe5 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 50bc8d06..1eabec83 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.41.qualifier" + version="0.0.42.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 171aaf24..84a96e0f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 3564aae7..8a7fb79c 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index ced5a739..eefcd0ae 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index b892e873..9cf30470 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 2794f1c2..6c3c7374 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.41.qualifier +Bundle-Version: 0.0.42.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 34859538..4ea96fbe 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index ecb2f730..178842a0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.41.qualifier +Bundle-Version: 0.0.42.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 1b4071de..5a92e70b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index fd99b530..2d46a79b 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index eabf8d36..eeef2201 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index b5ba4291..f5fa9333 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 78c726cd..2f5858a2 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 6cc01984..5d3c5117 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 3fab1c70..bc99603f 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index f33112ca..66560bca 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 7187968b..6af1736a 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 5db3a701..d5c84fe5 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 1cd5bdbc..a2c5c8ce 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 9599a99e..5a0626dc 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.41-SNAPSHOT", + "version": "0.0.42-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.41-SNAPSHOT", + "version": "0.0.42-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 7a0ed26b..639c5b16 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.41-SNAPSHOT", + "version": "0.0.42-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index ae0a862a..f2162ee6 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 50e9b82c..723ab6e1 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 1e87901c..64eb5db8 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index b12e6173..bc6f0d6f 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 0d85c8da..0f12bea2 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.41.qualifier +Bundle-Version: 0.0.42.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index d548529c..2500247e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index f81fcabf..8577d79f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.41.qualifier +Bundle-Version: 0.0.42.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index b2d08507..a985abd6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 32b0a37c..9bf0b692 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 19d197f2..eb9e11fa 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index e981a693..6f6e7cbb 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index cb457f0f..fc24ebcf 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 404039cb..9b1ef323 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 6cb8c71c..76eadbc2 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 5c54d94e..6b857a01 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index e519c0dc..8439c6e9 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index b0d36934..52847b97 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From e17319f68aa0c90243bc80bef4b89974e822a799 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 16:22:21 -0800 Subject: [PATCH 169/238] Add macosx/cocoa/aarch64 to Tycho environments Fixes gh-400 --- pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pom.xml b/pom.xml index 2b397d2d..4a712fdd 100644 --- a/pom.xml +++ b/pom.xml @@ -290,6 +290,11 @@ cocoa x86_64 + + macosx + cocoa + aarch64 + From 1c26723794ae9a13fe4b3b114d8d79d662d890fe Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 16:14:21 -0800 Subject: [PATCH 170/238] Upgrade to Tycho 4.0.4 Closes gh-397 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4a712fdd..25147c18 100644 --- a/pom.xml +++ b/pom.xml @@ -53,8 +53,8 @@ 1.16.0 1.16.0 3.0.3 - 3.0.1 - 3.0.1 + 4.0.4 + 4.0.4 From f4ac97dd7a50f91098b242019070735d72548702 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 19:45:57 -0800 Subject: [PATCH 171/238] Upgrade to ASM 9.6 Closes gh-399 --- pom.xml | 2 +- .../formatter/eclipse/rewrite/EclipseRewriter.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 25147c18..b132f0ba 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ true 1.8.1 1.0b3 - 7.3.1 + 9.6 3.8.0 9.3 2.4.21 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index 60aad783..204a93f0 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -111,7 +111,7 @@ public static void main(String[] args) throws Exception { private static class DefaultCodeFormatterManipulator extends ClassVisitor { DefaultCodeFormatterManipulator(ClassVisitor visitor) { - super(Opcodes.ASM7, visitor); + super(Opcodes.ASM9, visitor); } @Override @@ -140,7 +140,7 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si private static class DefaultCodeFormatterMethodManipulator extends MethodVisitor { DefaultCodeFormatterMethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM7, mv); + super(Opcodes.ASM9, mv); } @Override @@ -160,7 +160,7 @@ public void visitMethodInsn(int opcode, String owner, String name, String desc, private static class NlsJdk8Manipulator extends ClassVisitor { NlsJdk8Manipulator(ClassVisitor visitor) { - super(Opcodes.ASM7, visitor); + super(Opcodes.ASM9, visitor); } @Override @@ -182,7 +182,7 @@ private static class NslJdk8MethodManipulator extends MethodVisitor { private final MethodVisitor methodVisitor; NslJdk8MethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM7, null); + super(Opcodes.ASM9, null); this.methodVisitor = mv; } @@ -205,7 +205,7 @@ public void visitEnd() { private static class NlsJdk11Manipulator extends ClassVisitor { NlsJdk11Manipulator(ClassVisitor visitor) { - super(Opcodes.ASM7, visitor); + super(Opcodes.ASM9, visitor); } @Override @@ -227,7 +227,7 @@ private static class NslJdk11MethodManipulator extends MethodVisitor { private final MethodVisitor methodVisitor; NslJdk11MethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM7, null); + super(Opcodes.ASM9, null); this.methodVisitor = mv; } From 9a3a4438f1494e9a3c12826c6d9fc6bce7c3c8a6 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 17:32:33 -0800 Subject: [PATCH 172/238] Update supported JDK version from 11 to 17 Closes gh-398 --- CONTRIBUTING.adoc | 6 +++--- README.adoc | 2 +- pom.xml | 2 +- .../ProjectSettingsFilesLocatorTests.java | 4 ++-- .../META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/build.properties | 2 +- .../io.spring.javaformat.eclipse/plugin.xml | 8 ++++---- .../io.spring.javaformat.eclipse/pom.xml | 2 +- ...aces.java => SpringCodeFormatterJdk17Spaces.java} | 8 ++++---- ...11Tabs.java => SpringCodeFormatterJdk17Tabs.java} | 8 ++++---- spring-javaformat-eclipse/pom.xml | 4 ++-- spring-javaformat/pom.xml | 4 ++-- .../io/spring/javaformat/config/JavaBaseline.java | 6 +++--- .../spring/javaformat/config/JavaFormatConfig.java | 4 ++-- .../config/PropertiesJavaFormatConfigTests.java | 4 ++-- .../META-INF/MANIFEST.MF | 4 ++-- .../build.properties | 0 .../pom.xml | 8 ++++---- .../pom.xml | 8 ++++---- .../internal/formatter/ExtendedCodeFormatter.java | 2 +- .../eclipse/jdt/internal/formatter/Preparator.java | 2 +- .../formatter/FormatterIntegrationTests.java | 8 ++++---- .../expected/{v11 => v17}/record-with-generic.txt | 0 .../spring-javaformat-formatter/pom.xml | 2 +- .../io/spring/javaformat/formatter/Formatter.java | 6 +++--- .../eclipse/CodeLineBreakPreparator.java | 4 ++-- .../eclipse/EclipseJdk17CodeFormatter.java} | 12 ++++++------ .../eclipse/JavadocLineBreakPreparator.java | 4 ++-- .../jdk8/eclipse/EclipseJdk8CodeFormatter.java | 4 ++-- 29 files changed, 65 insertions(+), 65 deletions(-) rename spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/{SpringCodeFormatterJdk11Spaces.java => SpringCodeFormatterJdk17Spaces.java} (80%) rename spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/{SpringCodeFormatterJdk11Tabs.java => SpringCodeFormatterJdk17Tabs.java} (80%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdk11 => spring-javaformat-formatter-eclipse-jdk17}/META-INF/MANIFEST.MF (83%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdk11 => spring-javaformat-formatter-eclipse-jdk17}/build.properties (100%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdk11 => spring-javaformat-formatter-eclipse-jdk17}/pom.xml (97%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdt-jdk11 => spring-javaformat-formatter-eclipse-jdt-jdk17}/pom.xml (90%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdt-jdk11 => spring-javaformat-formatter-eclipse-jdt-jdk17}/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java (98%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdt-jdk11 => spring-javaformat-formatter-eclipse-jdt-jdk17}/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java (96%) rename spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/{v11 => v17}/record-with-generic.txt (100%) rename spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/{jdk11 => jdk17}/eclipse/CodeLineBreakPreparator.java (97%) rename spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/{jdk11/eclipse/EclipseJdk11CodeFormatter.java => jdk17/eclipse/EclipseJdk17CodeFormatter.java} (80%) rename spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/{jdk11 => jdk17}/eclipse/JavadocLineBreakPreparator.java (97%) diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index a5c92957..c4378ac3 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -29,7 +29,7 @@ should also work without issue. === Building From Source -To build the source you will need to install JDK 11. +To build the source you will need to install JDK 17. @@ -206,9 +206,9 @@ Under `spring-javaformat` the following projects are defined: * `spring-javaformat-formatter-shader` - Shader support classes * `spring-javaformat-formatter-shaded` - A shaded version of the formatter with all dependencies included * `spring-javaformat-formatter-eclipse-jdk8` - The eclipse JDK 8 formatter (repackaged and slightly adapted) -* `spring-javaformat-formatter-eclipse-jdk11` - The eclipse JDK 11 formatter (repackaged and slightly adapted) +* `spring-javaformat-formatter-eclipse-jdk17` - The eclipse JDK 17 formatter (repackaged and slightly adapted) * `spring-javaformat-formatter-eclipse-jdt-jdk8` - The eclipse JDT import for JDK 8 -* `spring-javaformat-formatter-eclipse-jdt-jdk11` - The eclipse JDT import for JDK 8 +* `spring-javaformat-formatter-eclipse-jdt-jdk17` - The eclipse JDT import for JDK 17 * `spring-javaformat-formatter-eclipse-rewriter` - Internal utility used to modify eclipse code * `spring-javaformat-formatter-eclipse-runtime` - Eclipse runtime JAR for use when running outside of Eclipse diff --git a/README.adoc b/README.adoc index ecd7485b..72133a36 100644 --- a/README.adoc +++ b/README.adoc @@ -192,7 +192,7 @@ Your `checkstyle.xml` file should look then like this: === Java 8 Support -By default, the formatter requires Java 11. +By default, the formatter requires Java 17. If you are working on an older project, you can use a variation of the formatter based off Eclipse 2021-03 (the latest Eclipse JDT version built with Java 8). To use the Java 8 version, add a file called `.springjavaformatconfig` to the root of your project with the following content: diff --git a/pom.xml b/pom.xml index b132f0ba..d8eec909 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2022-12/202212071000/ + https://download.eclipse.org/releases/2022-12/202212071000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java index c9261ead..226e0625 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -84,7 +84,7 @@ void jdtCorePrefsFormatterWhenDefaultUsesTabs() throws IOException { Properties properties = new Properties(); properties.load(content); assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) - .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk11.tabs"); + .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk17.tabs"); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 178842a0..b7e8245f 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -21,6 +21,6 @@ Bundle-ClassPath: ., lib/spring-javaformat-config.jar, lib/spring-javaformat-formatter.jar, lib/spring-javaformat-checkstyle.jar, - lib/spring-javaformat-formatter-eclipse-jdt-jdk11.jar, + lib/spring-javaformat-formatter-eclipse-jdt-jdk17.jar, lib/spring-javaformat-formatter-eclipse-jdt-jdk8.jar Bundle-ActivationPolicy: lazy diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties index 7780dc22..9bd6565a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties @@ -6,5 +6,5 @@ bin.includes = META-INF/,\ lib/spring-javaformat-checkstyle.jar,\ lib/spring-javaformat-config.jar,\ lib/spring-javaformat-formatter.jar,\ - lib/spring-javaformat-formatter-eclipse-jdt-jdk11.jar,\ + lib/spring-javaformat-formatter-eclipse-jdt-jdk17.jar,\ lib/spring-javaformat-formatter-eclipse-jdt-jdk8.jar diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml index b6bdf963..f9864bd4 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml @@ -3,13 +3,13 @@ io.spring.javaformat - spring-javaformat-formatter-eclipse-jdt-jdk11 + spring-javaformat-formatter-eclipse-jdt-jdk17 ${project.version} diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java similarity index 80% rename from spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java rename to spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java index e6775b74..8680dbf8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,10 +27,10 @@ * * @author Phillip Webb */ -public class SpringCodeFormatterJdk11Spaces extends SpringCodeFormatter { +public class SpringCodeFormatterJdk17Spaces extends SpringCodeFormatter { - public SpringCodeFormatterJdk11Spaces() { - super(JavaFormatConfig.of(JavaBaseline.V11, IndentationStyle.SPACES)); + public SpringCodeFormatterJdk17Spaces() { + super(JavaFormatConfig.of(JavaBaseline.V17, IndentationStyle.SPACES)); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java similarity index 80% rename from spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java rename to spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java index 78bd7aba..b0301b2e 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,10 +27,10 @@ * * @author Phillip Webb */ -public class SpringCodeFormatterJdk11Tabs extends SpringCodeFormatter { +public class SpringCodeFormatterJdk17Tabs extends SpringCodeFormatter { - public SpringCodeFormatterJdk11Tabs() { - super(JavaFormatConfig.of(JavaBaseline.V11, IndentationStyle.TABS)); + public SpringCodeFormatterJdk17Tabs() { + super(JavaFormatConfig.of(JavaBaseline.V17, IndentationStyle.TABS)); } } diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 2d46a79b..fad27c8b 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -17,9 +17,9 @@ - eclipse-jdk11 + eclipse-jdk17 p2 - ${eclipse.jdk11.repository} + ${eclipse.jdk17.repository} eclipse-checkstyle diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 723ab6e1..697cc5d5 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -38,9 +38,9 @@ spring-javaformat-formatter-tests spring-javaformat-formatter-eclipse-rewriter spring-javaformat-formatter-eclipse-jdk8 - spring-javaformat-formatter-eclipse-jdk11 + spring-javaformat-formatter-eclipse-jdk17 spring-javaformat-formatter-eclipse-jdt-jdk8 - spring-javaformat-formatter-eclipse-jdt-jdk11 + spring-javaformat-formatter-eclipse-jdt-jdk17 spring-javaformat-formatter-eclipse-runtime spring-javaformat-formatter-shader spring-javaformat-formatter-shaded diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java index 90bde24a..492f068c 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,8 +29,8 @@ public enum JavaBaseline { V8, /** - * Use JDK 11+ or higher compatible formatter. + * Use JDK 17+ or higher compatible formatter. */ - V11 + V17 } diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java index 300fcce1..89d19b78 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,7 +32,7 @@ public interface JavaFormatConfig { /** * The default {@link JavaFormatConfig}. */ - JavaFormatConfig DEFAULT = of(JavaBaseline.V11, IndentationStyle.TABS); + JavaFormatConfig DEFAULT = of(JavaBaseline.V17, IndentationStyle.TABS); /** * Java JDK baseline version expected be used when formatting. diff --git a/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java index 135e9e0e..4fc21f26 100644 --- a/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java +++ b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +33,7 @@ class PropertiesJavaFormatConfigTests { void getJavaBaselineWhenNoPropertyReturnsJava11() { Properties properties = new Properties(); PropertiesJavaFormatConfig config = new PropertiesJavaFormatConfig(properties); - assertThat(config.getJavaBaseline()).isEqualTo(JavaBaseline.V11); + assertThat(config.getJavaBaseline()).isEqualTo(JavaBaseline.V17); } @Test diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF similarity index 83% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index 0f12bea2..68f6b967 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 -Bundle-Name: Spring Formatter Eclipse Runtime JDK11 -Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 +Bundle-Name: Spring Formatter Eclipse Runtime JDK17 +Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 Bundle-Version: 0.0.42.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/build.properties b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/build.properties similarity index 100% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/build.properties rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/build.properties diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml similarity index 97% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 2500247e..7ab035a5 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -8,9 +8,9 @@ spring-javaformat 0.0.42-SNAPSHOT - spring-javaformat-formatter-eclipse-jdk11 + spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin - Spring JavaFormat Eclipse JDK-11 + Spring JavaFormat Eclipse JDK-17 ${basedir}/../.. org.eclipse.jdt.core.source,org.eclipse.jface.source,org.eclipse.text.source @@ -23,9 +23,9 @@ - eclipse-jdk11 + eclipse-jdk17 p2 - ${eclipse.jdk11.repository} + ${eclipse.jdk17.repository} diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml similarity index 90% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 9bf0b692..5ce57d4f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -8,15 +8,15 @@ spring-javaformat 0.0.42-SNAPSHOT - spring-javaformat-formatter-eclipse-jdt-jdk11 - Spring JavaFormat Eclipse JDT JDK-11 + spring-javaformat-formatter-eclipse-jdt-jdk17 + Spring JavaFormat Eclipse JDT JDK-17 ${basedir}/../.. io.spring.javaformat - spring-javaformat-formatter-eclipse-jdk11 + spring-javaformat-formatter-eclipse-jdk17 ${project.version} true @@ -48,7 +48,7 @@ - io.spring.javaformat:spring-javaformat-formatter-eclipse-jdk11 + io.spring.javaformat:spring-javaformat-formatter-eclipse-jdk17 org/eclipse/jdt/** diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java similarity index 98% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index 60b0e6e1..46e0f01d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java similarity index 96% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index 9873fc96..ff6b0fc6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index 88d41505..4639a550 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,16 +54,16 @@ void formatCodeWithV8BaselineCanFormatOnAllVersions(String version) throws Excep } @ParameterizedTest - @ValueSource(strings = { "11", "17" }) + @ValueSource(strings = { "17" }) void formatCodeWithV11BaselineCanFormatOn11OrHigher(String version) throws Exception { - runFormatter(JavaBaseline.V11, version); + runFormatter(JavaBaseline.V17, version); } @ParameterizedTest @ValueSource(strings = "8") void formatCodeWithV11BaselineCannotFormatOn8(String version) throws Exception { assertThatExceptionOfType(ContainerLaunchException.class) - .isThrownBy(() -> runFormatter(JavaBaseline.V11, version)); + .isThrownBy(() -> runFormatter(JavaBaseline.V17, version)); } private void runFormatter(JavaBaseline baseline, String version) throws IOException, Exception { diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v11/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v17/record-with-generic.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v11/record-with-generic.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v17/record-with-generic.txt diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 52847b97..f6aef680 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -27,7 +27,7 @@ io.spring.javaformat - spring-javaformat-formatter-eclipse-jdt-jdk11 + spring-javaformat-formatter-eclipse-jdt-jdk17 ${project.version} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 53415a7a..dd87b20c 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,7 @@ import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; import io.spring.javaformat.formatter.eclipse.EclipseCodeFormatter; -import io.spring.javaformat.formatter.jdk11.eclipse.EclipseJdk11CodeFormatter; +import io.spring.javaformat.formatter.jdk17.eclipse.EclipseJdk17CodeFormatter; import io.spring.javaformat.formatter.jdk8.eclipse.EclipseJdk8CodeFormatter; /** @@ -76,7 +76,7 @@ public Formatter() { */ public Formatter(JavaFormatConfig javaFormatConfig) { this.delegate = javaFormatConfig.getJavaBaseline() == JavaBaseline.V8 - ? new EclipseJdk8CodeFormatter(javaFormatConfig) : new EclipseJdk11CodeFormatter(javaFormatConfig); + ? new EclipseJdk8CodeFormatter(javaFormatConfig) : new EclipseJdk17CodeFormatter(javaFormatConfig); } /** diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java similarity index 97% rename from spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java rename to spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java index 15057474..1213ff18 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.javaformat.formatter.jdk11.eclipse; +package io.spring.javaformat.formatter.jdk17.eclipse; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java similarity index 80% rename from spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java rename to spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java index e4d57dc5..fa5ba0a9 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.javaformat.formatter.jdk11.eclipse; +package io.spring.javaformat.formatter.jdk17.eclipse; import java.util.Map; @@ -25,20 +25,20 @@ import io.spring.javaformat.formatter.eclipse.Options; /** - * Internal delegate JDK 11 baseline {@link EclipseCodeFormatter} to apply Spring + * Internal delegate JDK 17 baseline {@link EclipseCodeFormatter} to apply Spring * {@literal formatter.prefs} and add {@link Preparator Preparators}. * * @author Phillip Webb */ -public class EclipseJdk11CodeFormatter extends ExtendedCodeFormatter implements EclipseCodeFormatter { +public class EclipseJdk17CodeFormatter extends ExtendedCodeFormatter implements EclipseCodeFormatter { private final Map appliedOptions; - public EclipseJdk11CodeFormatter(JavaFormatConfig javaFormatConfig) { + public EclipseJdk17CodeFormatter(JavaFormatConfig javaFormatConfig) { this(new Options("io.spring.javaformat.eclipse.jdt.jdk11").load(javaFormatConfig)); } - EclipseJdk11CodeFormatter(Map options) { + EclipseJdk17CodeFormatter(Map options) { super(options); this.appliedOptions = options; addPreparator(new JavadocLineBreakPreparator()); diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java similarity index 97% rename from spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java rename to spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index e367de90..93541b3b 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.javaformat.formatter.jdk11.eclipse; +package io.spring.javaformat.formatter.jdk17.eclipse; import java.util.ArrayList; import java.util.Collections; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java index 7b747cd2..5038538f 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ import io.spring.javaformat.formatter.eclipse.Options; /** - * Internal delegate JDK 11 baseline {@link EclipseCodeFormatter} to apply Spring + * Internal delegate JDK 8 baseline {@link EclipseCodeFormatter} to apply Spring * {@literal formatter.prefs} and add {@link Preparator Preparators}. * * @author Phillip Webb From 634a1ffaecc03b4417b00de42b6d4f84813d7fcc Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 20:47:06 -0800 Subject: [PATCH 173/238] Upgrade to Eclipse 2023-12 Closes gh-401 --- pom.xml | 2 +- .../javaformat/formatter/eclipse/rewrite/EclipseRewriter.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index d8eec909..2aa6be4e 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2022-12/202212071000/ + https://download.eclipse.org/releases/2023-12/202312061001/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index 204a93f0..de0ca267 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -116,7 +116,7 @@ private static class DefaultCodeFormatterManipulator extends ClassVisitor { @Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { - if (access == Opcodes.ACC_PRIVATE && UPDATED_FIELDS.contains(name)) { + if ((access & Opcodes.ACC_PRIVATE) != 0 && UPDATED_FIELDS.contains(name)) { access = Opcodes.ACC_PROTECTED; } return super.visitField(access, name, desc, signature, value); @@ -124,7 +124,7 @@ public FieldVisitor visitField(int access, String name, String desc, String sign @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if (access == Opcodes.ACC_PRIVATE && UPDATED_METHODS.contains(name)) { + if ((access & Opcodes.ACC_PRIVATE) != 0 && UPDATED_METHODS.contains(name)) { access = Opcodes.ACC_PROTECTED; } return new DefaultCodeFormatterMethodManipulator( From 45335a9990e49d9924d1d5649955912a41a854c3 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 11 Jan 2024 16:51:35 -0800 Subject: [PATCH 174/238] Update supported JDK version from 11 to 17 Fix a few items that were missed. See gh-398 --- .../spring/javaformat/eclipse/Activator.java | 2 +- .../ProjectSettingsFilesLocator.java | 3 ++- .../org.eclipse.jdt.core.prefs | 2 +- .../pom.xml | 2 +- .../eclipse/rewrite/EclipseRewriter.java | 12 ++++----- .../eclipse/CodeLineBreakPreparator.java | 26 +++++++++---------- .../eclipse/EclipseJdk17CodeFormatter.java | 6 ++--- .../eclipse/JavadocLineBreakPreparator.java | 26 +++++++++---------- 8 files changed, 40 insertions(+), 39 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java index 4b03b9eb..c6d68bc7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java @@ -41,7 +41,7 @@ public class Activator extends AbstractUIPlugin { public Activator() { this.javaCorePlugins.add(new io.spring.javaformat.eclipse.jdt.jdk8.core.JavaCore()); - this.javaCorePlugins.add(new io.spring.javaformat.eclipse.jdt.jdk11.core.JavaCore()); + this.javaCorePlugins.add(new io.spring.javaformat.eclipse.jdt.jdk17.core.JavaCore()); } @Override diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java index 792d207e..3e18da90 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java @@ -73,7 +73,7 @@ private String updateFormatter(JavaFormatConfig javaFormatConfig, String content String formatterId = getFormatterId(javaFormatConfig); if (formatterId != null) { return content.replace( - "org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk11.tabs", + "org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk17.tabs", "org.eclipse.jdt.core.javaFormatter=" + formatterId); } return content; @@ -81,6 +81,7 @@ private String updateFormatter(JavaFormatConfig javaFormatConfig, String content private String getFormatterId(JavaFormatConfig config) { String jdk = config.getJavaBaseline().name().substring(1); + jdk = (!"11".equals(jdk)) ? jdk : "17"; String indentation = config.getIndentationStyle().name().toLowerCase(); return "io.spring.javaformat.eclipse.formatter.jdk" + jdk + "." + indentation; } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index fd682fe6..34ee06d5 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -101,4 +101,4 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk11.tabs +org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk17.tabs diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 5ce57d4f..ba028fab 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -57,7 +57,7 @@ org.eclipse.jdt - io.spring.javaformat.eclipse.jdt.jdk11 + io.spring.javaformat.eclipse.jdt.jdk17 false diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index de0ca267..e7ccea52 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -80,7 +80,7 @@ private void rewrite(JdkVersion jdkVersion, FileSystem zip) throws IOException { deleteWrapPreparator(zip); } else { - rewrite(zip, "org/eclipse/osgi/util/NLS.class", NlsJdk11Manipulator::new); + rewrite(zip, "org/eclipse/osgi/util/NLS.class", NlsJdk17Manipulator::new); } } @@ -202,16 +202,16 @@ public void visitEnd() { * {@link ClassVisitor} to update the {@code NLS} class in the JDK 8 version so it * doesn't use a System property to disable warning messages. */ - private static class NlsJdk11Manipulator extends ClassVisitor { + private static class NlsJdk17Manipulator extends ClassVisitor { - NlsJdk11Manipulator(ClassVisitor visitor) { + NlsJdk17Manipulator(ClassVisitor visitor) { super(Opcodes.ASM9, visitor); } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { if ("".equals(name)) { - return new NslJdk11MethodManipulator(super.visitMethod(access, name, desc, signature, exceptions)); + return new NslJdk17MethodManipulator(super.visitMethod(access, name, desc, signature, exceptions)); } return super.visitMethod(access, name, desc, signature, exceptions); } @@ -222,11 +222,11 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si * {@link MethodVisitor} to update the {@code NLS} class in the JDK 8 version so it * doesn't use a System property to disable warning messages. */ - private static class NslJdk11MethodManipulator extends MethodVisitor { + private static class NslJdk17MethodManipulator extends MethodVisitor { private final MethodVisitor methodVisitor; - NslJdk11MethodManipulator(MethodVisitor mv) { + NslJdk17MethodManipulator(MethodVisitor mv) { super(Opcodes.ASM9, null); this.methodVisitor = mv; } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java index 1213ff18..51c98b52 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java @@ -16,19 +16,19 @@ package io.spring.javaformat.formatter.jdk17.eclipse; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AbstractTypeDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AnnotationTypeDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.EnumDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.FieldDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.SimpleName; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TypeDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.formatter.CodeFormatter; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.compiler.parser.TerminalTokens; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Token; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.AbstractTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.AnnotationTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.EnumDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.FieldDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.SimpleName; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.TypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.TokenManager; /** * {@link Preparator} to finetune curly-brace line breaks. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java index fa5ba0a9..45103159 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java @@ -19,8 +19,8 @@ import java.util.Map; import io.spring.javaformat.config.JavaFormatConfig; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.ExtendedCodeFormatter; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.ExtendedCodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; import io.spring.javaformat.formatter.eclipse.EclipseCodeFormatter; import io.spring.javaformat.formatter.eclipse.Options; @@ -35,7 +35,7 @@ public class EclipseJdk17CodeFormatter extends ExtendedCodeFormatter implements private final Map appliedOptions; public EclipseJdk17CodeFormatter(JavaFormatConfig javaFormatConfig) { - this(new Options("io.spring.javaformat.eclipse.jdt.jdk11").load(javaFormatConfig)); + this(new Options("io.spring.javaformat.eclipse.jdt.jdk17").load(javaFormatConfig)); } EclipseJdk17CodeFormatter(Map options) { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index 93541b3b..f2e273bf 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -20,19 +20,19 @@ import java.util.Collections; import java.util.List; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AbstractTypeDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Comment; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.CompilationUnit; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Javadoc; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TagElement; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TextElement; -import io.spring.javaformat.eclipse.jdt.jdk11.core.formatter.CodeFormatter; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.compiler.parser.TerminalTokens; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Token; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.AbstractTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Comment; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.CompilationUnit; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Javadoc; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.TagElement; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.TextElement; +import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.TokenManager; /** * {@link Preparator} to finetune Javadoc whitespace. From 7db7c9765fbad3e1c0b8f021dc16533f9d5c10f2 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 11 Jan 2024 17:59:21 -0800 Subject: [PATCH 175/238] Ensure "project specific" formatter settings are applied In Eclipse 2023-12 something other than the `org.eclipse.jdt.core.javaFormatter` setting is need for "project specific settings". We now also set `enabling_tag` and `disabling_tag` which seems to be enough to trigger detection. Fixes gh-402 --- .../eclipse/projectsettings/org.eclipse.jdt.core.prefs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 34ee06d5..41401b15 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -101,4 +101,6 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk17.tabs From 2d1541ff4f0877a1239f9c9082dfd28b52f591d0 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 12:02:19 +0000 Subject: [PATCH 176/238] Move snapshot build and deploy to GitHub Actions Closes gh-409 --- .../workflows/build-and-deploy-snapshot.yml | 34 +++++++++++++++++++ ci/pipeline.yml | 10 ------ 2 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/build-and-deploy-snapshot.yml diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml new file mode 100644 index 00000000..e7536f1b --- /dev/null +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -0,0 +1,34 @@ +name: Build and Deploy Snapshot +on: + push: + branches: + - main +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} +jobs: + build: + if: ${{ github.repository == 'spring-io/spring-javaformat' }} + name: Build and Deploy Snapshot + runs-on: ubuntu-latest + steps: + - name: Check Out Code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - name: Set Up Java + uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 + with: + distribution: 'liberica' + java-version: 17 + cache: maven + - name: Build and Publish + run: ./mvnw clean deploy --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::default::file://$(pwd)/distribution-repository + - name: Deploy + uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 + with: + uri: 'https://repo.spring.io' + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + build-name: spring-javaformat + repository: 'libs-snapshot-local' + folder: 'distribution-repository' + signing-key: ${{ secrets.GPG_PRIVATE_KEY }} + signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 128c9014..92027920 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -138,16 +138,6 @@ jobs: - put: slack-alert params: <<: *slack-fail-params - - put: artifactory-repo - params: - <<: *artifactory-repo-put-params - get_params: - threads: 8 - on_failure: - do: - - put: slack-alert - params: - <<: *slack-fail-params - put: slack-alert params: <<: *slack-success-params From bd5b055b4d0202ffd62d24c46aa16fb8a919ee4c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 12:58:58 +0000 Subject: [PATCH 177/238] Run Maven in batch mode to reduce log output See gh-409 --- .github/workflows/build-and-deploy-snapshot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index e7536f1b..d4ea8fbf 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -20,7 +20,7 @@ jobs: java-version: 17 cache: maven - name: Build and Publish - run: ./mvnw clean deploy --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::default::file://$(pwd)/distribution-repository + run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::default::file://$(pwd)/distribution-repository - name: Deploy uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 with: From 648ab056fcbeba464a6fcbbcfb7e59fc9956e91b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 13:07:53 +0000 Subject: [PATCH 178/238] Remove unknown encoding parameter from Checkstyle plugin configuration --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2aa6be4e..c2087693 100644 --- a/pom.xml +++ b/pom.xml @@ -466,7 +466,6 @@ src/checkstyle/checkstyle-suppressions.xml src/checkstyle/checkstyle-header.txt checkstyle.build.directory=${project.build.directory} - UTF-8 true true true From b3329ba407f915f5d04f8132b6db2e0bb94b850f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 13:10:25 +0000 Subject: [PATCH 179/238] Stop using legacy syntax for alternative repository --- .github/workflows/build-and-deploy-snapshot.yml | 2 +- ci/scripts/build-project.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index d4ea8fbf..ac74bfca 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -20,7 +20,7 @@ jobs: java-version: 17 cache: maven - name: Build and Publish - run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::default::file://$(pwd)/distribution-repository + run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::file://$(pwd)/distribution-repository - name: Deploy uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 with: diff --git a/ci/scripts/build-project.sh b/ci/scripts/build-project.sh index bc833d36..476c837e 100755 --- a/ci/scripts/build-project.sh +++ b/ci/scripts/build-project.sh @@ -5,5 +5,5 @@ source $(dirname $0)/common.sh repository=$(pwd)/distribution-repository pushd git-repo > /dev/null -run_maven clean deploy -U -Dfull -DaltDeploymentRepository=distribution::default::file://${repository} +run_maven clean deploy -U -Dfull -DaltDeploymentRepository=distribution::file://${repository} popd > /dev/null From 12f525ef4525f857b1961634410728d4cfd7d3ac Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 13:26:39 +0000 Subject: [PATCH 180/238] Polish SpringAvoidStaticImportCheck Sort excludes alphabetically and remove a duplicate --- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index 255316b0..ff83fb71 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -46,11 +46,10 @@ public class SpringAvoidStaticImportCheck extends AvoidStaticImportCheck { excludes.add("org.junit.internal.matchers.ThrowableMessageMatcher.*"); excludes.add("org.junit.jupiter.api.Assertions.*"); excludes.add("org.junit.jupiter.api.Assumptions.*"); - excludes.add("org.junit.jupiter.api.Assertions.*"); + excludes.add("org.mockito.AdditionalMatchers.*"); excludes.add("org.mockito.ArgumentMatchers.*"); excludes.add("org.mockito.BDDMockito.*"); excludes.add("org.mockito.Matchers.*"); - excludes.add("org.mockito.AdditionalMatchers.*"); excludes.add("org.mockito.Mockito.*"); excludes.add("org.springframework.boot.configurationprocessor.ConfigurationMetadataMatchers.*"); excludes.add("org.springframework.boot.configurationprocessor.TestCompiler.*"); From 8ec2b87ed0ec4979652a33ca0d7ea07fbdb7f35b Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Mon, 15 Jan 2024 20:48:03 +0100 Subject: [PATCH 181/238] Allow static import of AssertJ BDDAssertions See gh-403 --- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index ff83fb71..2e0de968 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -37,6 +37,7 @@ public class SpringAvoidStaticImportCheck extends AvoidStaticImportCheck { excludes.add("io.restassured.RestAssured.*"); excludes.add("org.assertj.core.api.Assertions.*"); excludes.add("org.assertj.core.api.Assumptions.*"); + excludes.add("org.assertj.core.api.BDDAssertions.*"); excludes.add("org.assertj.core.api.HamcrestCondition.*"); excludes.add("org.awaitility.Awaitility.*"); excludes.add("org.hamcrest.CoreMatchers.*"); From 1317cbcf88b02addf163655de2ea1114f24876a1 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Sat, 23 Mar 2024 09:41:42 +0900 Subject: [PATCH 182/238] Apply UnnecessarySemicolonInEnumeration Checkstyle module This commit also applies it to this project itself and fixes its violations. See gh-408 --- .../io/spring/javaformat/checkstyle/spring-checkstyle.xml | 1 + .../javaformat/checkstyle/SpringConfigurationLoaderTests.java | 4 ++-- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- src/checkstyle/checkstyle.xml | 1 + 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index c8838541..ba9026a6 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -70,6 +70,7 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 82e63f1e..58bc2ee7 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -48,7 +48,7 @@ public void loadShouldLoadChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(60); + assertThat(ordinaryChecks).hasSize(61); } @Test @@ -59,7 +59,7 @@ public void loadWithExcludeShouldExcludeChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(59); + assertThat(ordinaryChecks).hasSize(60); } @Test diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index ff6b0fc6..df66cda6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -54,7 +54,7 @@ enum Phase { /** * Apply the preparator after wrapping. */ - POST_WRAPPING; + POST_WRAPPING } diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index 9873fc96..aaaf3647 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -54,7 +54,7 @@ enum Phase { /** * Apply the preparator after wrapping. */ - POST_WRAPPING; + POST_WRAPPING } diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 0c6b5e96..c13faf85 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -65,6 +65,7 @@ + From fd65dcdaa9e48cab7358701457e2848eba1cf8ab Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 13:36:58 +0000 Subject: [PATCH 183/238] Polish "Apply UnnecessarySemicolonInEnumeration Checkstyle module" See gh-408 --- .../javaformat/checkstyle/SpringConfigurationLoaderTests.java | 2 +- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 58bc2ee7..c16585d5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index aaaf3647..df66cda6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From ad9c60a0089c0532adb3ab3f073d52958e63d0b5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 May 2024 13:48:16 -0700 Subject: [PATCH 184/238] Upgrade to Eclipse 2024-3 Closes gh-412 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c2087693..1ed8adf2 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2023-12/202312061001/ + https://download.eclipse.org/releases/2024-03/202403131000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 From 8555da370e41561683ba6cd6dd500fa7cd57301b Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 May 2024 13:55:51 -0700 Subject: [PATCH 185/238] Prevent NPE when javadoc contains '@formatter:off' Update `JavadocLineBreakPreparator` to protect against a `null` return from `commentToken.getInternalStructure()`. Fixes gh-410 --- .../test/resources/expected/javadoc-with-format-off.txt | 8 ++++++++ .../src/test/resources/source/javadoc-with-format-off.txt | 7 +++++++ .../jdk17/eclipse/JavadocLineBreakPreparator.java | 6 ++++-- .../jdk8/eclipse/JavadocLineBreakPreparator.java | 8 +++++--- 4 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-with-format-off.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-with-format-off.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-with-format-off.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-with-format-off.txt new file mode 100644 index 00000000..157ea11b --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-with-format-off.txt @@ -0,0 +1,8 @@ +/** + * This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. + * @formatter:off + * @formatter:on + */ +public class Format { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-with-format-off.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-with-format-off.txt new file mode 100644 index 00000000..dbfef5c0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-with-format-off.txt @@ -0,0 +1,7 @@ +/** + * This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. + * @formatter:off + * @formatter:on + */ +public class Format { +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index f2e273bf..e0dd5d8c 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -93,7 +93,9 @@ private static class Vistor extends ASTVisitor { public boolean visit(Javadoc node) { int commentIndex = this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameCOMMENT_JAVADOC); Token commentToken = this.tokenManager.get(commentIndex); - this.commentTokenManager = new TokenManager(commentToken.getInternalStructure(), this.tokenManager); + this.commentTokenManager = (commentToken.getInternalStructure() != null) + ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) + : null; this.declaration = node.getParent(); this.firstTagElement = true; this.hasText = false; @@ -108,7 +110,7 @@ public boolean visit(TextElement node) { @Override public boolean visit(TagElement node) { - if (isSquashRequired(node, this.declaration)) { + if (this.commentTokenManager != null && isSquashRequired(node, this.declaration)) { int startIndex = this.commentTokenManager.findIndex(node.getStartPosition(), -1, false); Token token = this.commentTokenManager.get(startIndex); token.clearLineBreaksBefore(); diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java index 68723201..4113bbf2 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -93,7 +93,9 @@ private static class Vistor extends ASTVisitor { public boolean visit(Javadoc node) { int commentIndex = this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameCOMMENT_JAVADOC); Token commentToken = this.tokenManager.get(commentIndex); - this.commentTokenManager = new TokenManager(commentToken.getInternalStructure(), this.tokenManager); + this.commentTokenManager = (commentToken.getInternalStructure() != null) + ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) + : null; this.declaration = node.getParent(); this.firstTagElement = true; this.hasText = false; @@ -108,7 +110,7 @@ public boolean visit(TextElement node) { @Override public boolean visit(TagElement node) { - if (isSquashRequired(node, this.declaration)) { + if (this.commentTokenManager != null && isSquashRequired(node, this.declaration)) { int startIndex = this.commentTokenManager.findIndex(node.getStartPosition(), -1, false); Token token = this.commentTokenManager.get(startIndex); token.clearLineBreaksBefore(); From dee7ea85825cf5c8eb3e78a4f2e03be610384f06 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 May 2024 13:58:14 -0700 Subject: [PATCH 186/238] Update copyright year of changed files --- .../src/io/spring/javaformat/eclipse/Activator.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFilesLocator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java index c6d68bc7..cfa779b0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java index 3e18da90..5062bfe9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 25b6398d7244cd1728b1fd4009712d1eb0b35033 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Sat, 8 Jun 2024 04:29:08 +0100 Subject: [PATCH 187/238] Add missing javadoc jars Closes gh-413 --- .../io.spring.javaformat.eclipse.tests/pom.xml | 18 ++++++++++++++---- .../pom.xml | 16 ++++++++++++++++ .../pom.xml | 16 ++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 4ea96fbe..3b180e7f 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -14,6 +14,7 @@ ${basedir}/../.. 17 + true @@ -31,10 +32,19 @@ org.apache.maven.plugins - maven-javadoc-plugin - - **/*Tests.java - + maven-jar-plugin + + + empty-javadoc-jar + package + + jar + + + javadoc + + + diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 7ab035a5..9608ea8a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -30,6 +30,22 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + empty-javadoc-jar + package + + jar + + + javadoc + + + + org.apache.maven.plugins maven-antrun-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index a985abd6..c14b90c0 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -30,6 +30,22 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + empty-javadoc-jar + package + + jar + + + javadoc + + + + org.apache.maven.plugins maven-antrun-plugin From 541d52985a606621394536f16ca7c98e0fb07ee1 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Sat, 8 Jun 2024 15:42:33 +0100 Subject: [PATCH 188/238] Add missing javadoc jars Closes gh-414 --- .../io.spring.javaformat.eclipse.tests/pom.xml | 12 ++++++++++++ .../io.spring.javaformat.eclipse/pom.xml | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 3b180e7f..7452fede 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -30,6 +30,18 @@ + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + org.apache.maven.plugins maven-jar-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 5c586da7..d309137a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -38,6 +38,18 @@ + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + org.apache.maven.plugins maven-javadoc-plugin From 0d16661e2ff11553c72ecfe2b78e26591eb51b31 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 May 2024 13:08:01 -0700 Subject: [PATCH 189/238] Migrate release process to GitHub Actions Initial migration to GitHub Actions that allows a release to be staged. See gh-411 --- .github/actions/.bats/bats | 1 + .github/actions/.bats/test_helper/bats-assert | 1 + .../actions/.bats/test_helper/bats-support | 1 + .github/actions/deduce-versions/action.yml | 22 ++++ .../deduce-versions/deduce-versions.sh | 116 +++++++++++++++++ .github/actions/deduce-versions/test.sh | 1 + .../deduce-versions/test/bump_version.bats | 58 +++++++++ .../deduce-versions/test/deduce_versions.bats | 96 ++++++++++++++ .../test/get_next_release.bats | 119 ++++++++++++++++++ .../test/strip_snapshot_suffix.bats | 21 ++++ .github/actions/setup/action.yml | 16 +++ .github/actions/stage-code/action.yml | 23 ++++ .github/actions/stage-code/stage.sh | 32 +++++ .../workflows/build-and-deploy-snapshot.yml | 42 +++---- .github/workflows/build-pull-request.yml | 16 +++ .github/workflows/promote.yml | 37 ++++++ .github/workflows/release.yml | 58 +++++++++ .github/workflows/rollback.yml | 41 ++++++ .gitmodules | 12 ++ 19 files changed, 690 insertions(+), 23 deletions(-) create mode 160000 .github/actions/.bats/bats create mode 160000 .github/actions/.bats/test_helper/bats-assert create mode 160000 .github/actions/.bats/test_helper/bats-support create mode 100644 .github/actions/deduce-versions/action.yml create mode 100755 .github/actions/deduce-versions/deduce-versions.sh create mode 100755 .github/actions/deduce-versions/test.sh create mode 100644 .github/actions/deduce-versions/test/bump_version.bats create mode 100644 .github/actions/deduce-versions/test/deduce_versions.bats create mode 100644 .github/actions/deduce-versions/test/get_next_release.bats create mode 100644 .github/actions/deduce-versions/test/strip_snapshot_suffix.bats create mode 100644 .github/actions/setup/action.yml create mode 100644 .github/actions/stage-code/action.yml create mode 100644 .github/actions/stage-code/stage.sh create mode 100644 .github/workflows/build-pull-request.yml create mode 100644 .github/workflows/promote.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/rollback.yml create mode 100644 .gitmodules diff --git a/.github/actions/.bats/bats b/.github/actions/.bats/bats new file mode 160000 index 00000000..902578da --- /dev/null +++ b/.github/actions/.bats/bats @@ -0,0 +1 @@ +Subproject commit 902578da790fbcb035747d2964747f192f6e1603 diff --git a/.github/actions/.bats/test_helper/bats-assert b/.github/actions/.bats/test_helper/bats-assert new file mode 160000 index 00000000..e2d855bc --- /dev/null +++ b/.github/actions/.bats/test_helper/bats-assert @@ -0,0 +1 @@ +Subproject commit e2d855bc78619ee15b0c702b5c30fb074101159f diff --git a/.github/actions/.bats/test_helper/bats-support b/.github/actions/.bats/test_helper/bats-support new file mode 160000 index 00000000..9bf10e87 --- /dev/null +++ b/.github/actions/.bats/test_helper/bats-support @@ -0,0 +1 @@ +Subproject commit 9bf10e876dd6b624fe44423f0b35e064225f7556 diff --git a/.github/actions/deduce-versions/action.yml b/.github/actions/deduce-versions/action.yml new file mode 100644 index 00000000..b8e197c4 --- /dev/null +++ b/.github/actions/deduce-versions/action.yml @@ -0,0 +1,22 @@ +name: 'Deduce Versions' +description: 'Deduce the version to stage and the next SNAPSHOT version' +inputs: + current-version: + required: true + release-type: + required: true +outputs: + release-version: + value: ${{ steps.deduce-versions.outputs.release-version }} + next-version: + value: ${{ steps.deduce-versions.outputs.next-version }} +runs: + using: composite + steps: + - name: Deduce Versions + id: deduce-versions + shell: bash + run: . ${{ github.action_path }}/deduce-versions.sh; deduce_versions + env: + CURRENT_VERSION: "${{ inputs.current-version }}" + RELEASE_TYPE: "${{ inputs.release-type }}" diff --git a/.github/actions/deduce-versions/deduce-versions.sh b/.github/actions/deduce-versions/deduce-versions.sh new file mode 100755 index 00000000..6a3d14e0 --- /dev/null +++ b/.github/actions/deduce-versions/deduce-versions.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash + +# Get the next milestone release for the given number by inspecting current tags +get_next_milestone_release() { + [[ -n $1 ]] || { echo "missing get_next_milestone_release() version argument" >&2; return 1; } + get_next_tag_based_release "$1" "M" +} + +# Get the next RC release for the given number by inspecting current tags +get_next_rc_release() { + [[ -n $1 ]] || { echo "missing get_next_rc_release() version argument" >&2; return 1; } + get_next_tag_based_release "$1" "RC" +} + +# Get the next release for the given number +get_next_release() { + [[ -n $1 ]] || { echo "missing get_next_release() version argument" >&2; return 1; } + if [[ $1 =~ ^(.*)\.BUILD-SNAPSHOT$ ]]; then + local join="." + else + local join="-" + fi + local version + local result + version=$( strip_snapshot_suffix "$1" ) + if [[ -n $2 ]]; then + result="${version}${join}${2}" + else + result="${version}" + fi + echo $result +} + +# Get the next milestone or RC release for the given number by inspecting current tags +get_next_tag_based_release() { + [[ -n $1 ]] || { echo "missing get_next_tag_based_release() version argument" >&2; return 1; } + [[ -n $2 ]] || { echo "missing get_next_tag_based_release() tag type argument" >&2; return 1; } + if [[ $1 =~ ^(.*)\.BUILD-SNAPSHOT$ ]]; then + local join="." + else + local join="-" + fi + local version + local last + version=$( strip_snapshot_suffix "$1" ) + git fetch --tags --all > /dev/null + last=$( git tag --list "v${version}${join}${2}*" | sed -E "s/^.*${2}([0-9]+)$/\1/g" | sort -rn | head -n1 ) + if [[ -z $last ]]; then + last="0" + fi + last="${version}${join}${2}${last}" + bump_version_number "$last" +} + +# Remove any "-SNAPSHOT" or ".BUILD-SNAPSHOT" suffix +strip_snapshot_suffix() { + [[ -n $1 ]] || { echo "missing get_relase_version() argument" >&2; return 1; } + if [[ $1 =~ ^(.*)\.BUILD-SNAPSHOT$ ]]; then + echo "${BASH_REMATCH[1]}" + elif [[ $1 =~ ^(.*)-SNAPSHOT$ ]]; then + echo "${BASH_REMATCH[1]}" + else + echo "$1" + fi +} + +# Bump version number by incrementing the last numeric, RC or M token +bump_version_number() { + local version=$1 + [[ -n $version ]] || { echo "missing bump_version_number() argument" >&2; return 1; } + if [[ $version =~ ^(.*(\.|-)([A-Za-z]+))([0-9]+)$ ]]; then + local prefix=${BASH_REMATCH[1]} + local suffix=${BASH_REMATCH[4]} + (( suffix++ )) + echo "${prefix}${suffix}" + return 0; + fi + local suffix + if [[ $version =~ ^(.*)(\-SNAPSHOT)$ ]]; then + version=${BASH_REMATCH[1]} + suffix="-SNAPSHOT" + fi + tokens=(${version//\./ }) + local bumpIndex + for i in "${!tokens[@]}"; do + if [[ "${tokens[$i]}" =~ ^[0-9]+$ ]] ; then + bumpIndex=$i + fi + done + [[ -n $bumpIndex ]] || { echo "unsupported version number" >&2; return 1; } + (( tokens[bumpIndex]++ )) + local bumpedVersion + IFS=. eval 'bumpedVersion="${tokens[*]}"' + echo "${bumpedVersion}${suffix}" +} + +# Deduce versions +deduce_versions() { + [[ -n ${GITHUB_OUTPUT} ]] || { echo "missing GITHUB_OUTPUT environment variable" >&2; return 1; } + [[ -n ${CURRENT_VERSION} ]] || { echo "missing CURRENT_VERSION environment variable" >&2; return 1; } + [[ -n ${RELEASE_TYPE} ]] || { echo "missing RELEASE_TYPE environment variable" >&2; return 1; } + if [[ ${RELEASE_TYPE,,} = "milestone" ]]; then + releaseVersion=$( get_next_milestone_release ${CURRENT_VERSION}) + nextVersion=${CURRENT_VERSION} + elif [[ ${RELEASE_TYPE,,} = "release-candidate" ]]; then + releaseVersion=$( get_next_rc_release ${CURRENT_VERSION}) + nextVersion=${CURRENT_VERSION} + elif [[ ${RELEASE_TYPE,,} = "release" ]]; then + releaseVersion=$( get_next_release ${CURRENT_VERSION}) + nextVersion=$( bump_version_number ${CURRENT_VERSION}) + else + echo "Unknown release type '${RELEASE_TYPE}'" >&2; exit 1; + fi + echo "release-version=${releaseVersion}" >> "$GITHUB_OUTPUT" + echo "next-version=${nextVersion}" >> "$GITHUB_OUTPUT" +} diff --git a/.github/actions/deduce-versions/test.sh b/.github/actions/deduce-versions/test.sh new file mode 100755 index 00000000..0a8e4130 --- /dev/null +++ b/.github/actions/deduce-versions/test.sh @@ -0,0 +1 @@ +../.bats/bats/bin/bats test/*.bats \ No newline at end of file diff --git a/.github/actions/deduce-versions/test/bump_version.bats b/.github/actions/deduce-versions/test/bump_version.bats new file mode 100644 index 00000000..5efd9f0b --- /dev/null +++ b/.github/actions/deduce-versions/test/bump_version.bats @@ -0,0 +1,58 @@ +#!./test/libs/bats/bin/bats + +load '../../.bats/test_helper/bats-support/load' +load '../../.bats/test_helper/bats-assert/load' + +source "$PWD/deduce-versions.sh" + +@test "bump_version_number() should bump '.M'" { + run bump_version_number "1.2.0.M2" + assert_output "1.2.0.M3" +} + +@test "bump_version_number() should bump '.RC'" { + run bump_version_number "1.2.0.RC3" + assert_output "1.2.0.RC4" +} + +@test "bump_version_number() should bump '-M'" { + run bump_version_number "1.2.0-M2" + assert_output "1.2.0-M3" +} + +@test "bump_version_number() should bump '-RC'" { + run bump_version_number "1.2.0-RC3" + assert_output "1.2.0-RC4" +} + +@test "bump_version_number() should bump without suffix" { + run bump_version_number "1.2.0" + assert_output "1.2.1" +} + +@test "bump_version_number() should bump '.RELEASE'" { + run bump_version_number "1.2.0.RELEASE" + assert_output "1.2.1.RELEASE" +} + +@test "bump_version_number() should bump '-SNAPSHOT'" { + run bump_version_number "1.2.0-SNAPSHOT" + assert_output "1.2.1-SNAPSHOT" +} + +@test "bump_version_number() should bump '.BUILD-SNAPSHOT'" { + run bump_version_number "1.2.0.BUILD-SNAPSHOT" + assert_output "1.2.1.BUILD-SNAPSHOT" +} + +@test "bump_version_number() when missing argument should fail" { + run bump_version_number + assert_output "missing bump_version_number() argument" + assert [ "$status" -eq 1 ] +} + +@test "bump_version_number() when bad argument should fail" { + run bump_version_number "foo.bar.baz" + assert_output "unsupported version number" + assert [ "$status" -eq 1 ] +} diff --git a/.github/actions/deduce-versions/test/deduce_versions.bats b/.github/actions/deduce-versions/test/deduce_versions.bats new file mode 100644 index 00000000..2ffbf599 --- /dev/null +++ b/.github/actions/deduce-versions/test/deduce_versions.bats @@ -0,0 +1,96 @@ +#!./test/libs/bats/bin/bats + +load '../../.bats/test_helper/bats-support/load' +load '../../.bats/test_helper/bats-assert/load' + +source "$PWD/deduce-versions.sh" + +teardown() { + rm .githuboutput | true +} + +@test "deduce_versions() when 'milestone' should export versions" { + repo=$( mock_git_repo "v1.2.3-M1" ) + cd "$repo" + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="milestone" + run deduce_versions + readarray -t githuboutput < .githuboutput + assert [ "$status" -eq 0 ] + assert [ "${githuboutput[0]}" = "release-version=1.2.3-M2" ] + assert [ "${githuboutput[1]}" = "next-version=1.2.3-SNAPSHOT" ] +} + +@test "deduce_versions() when 'release-candidate' should export versions" { + repo=$( mock_git_repo "v1.2.3-M1" "v1.2.3-M2" "v1.2.3-RC1" ) + cd "$repo" + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="release-candidate" + run deduce_versions + readarray -t githuboutput < .githuboutput + assert [ "$status" -eq 0 ] + assert [ "${githuboutput[0]}" = "release-version=1.2.3-RC2" ] + assert [ "${githuboutput[1]}" = "next-version=1.2.3-SNAPSHOT" ] +} + +@test "deduce_versions() when 'release' should export versions" { + repo=$( mock_git_repo "v1.2.3-M1" "v1.2.3-M2" "v1.2.3-RC1" ) + cd "$repo" + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="release" + run deduce_versions + readarray -t githuboutput < .githuboutput + assert [ "$status" -eq 0 ] + assert [ "${githuboutput[0]}" = "release-version=1.2.3" ] + assert [ "${githuboutput[1]}" = "next-version=1.2.4-SNAPSHOT" ] +} + +@test "deduce_versions() when no GITHUB_OUTPUT should fail" { + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="release" + run deduce_versions + assert [ "$status" -eq 1 ] + assert_output "missing GITHUB_OUTPUT environment variable" +} + +@test "deduce_versions() when no CURRENT_VERSION should fail" { + GITHUB_OUTPUT=".githuboutput" + RELEASE_TYPE="release" + run deduce_versions + assert [ "$status" -eq 1 ] + assert_output "missing CURRENT_VERSION environment variable" +} + +@test "deduce_versions() when no RELEASE_TYPE should fail" { + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + run deduce_versions + assert [ "$status" -eq 1 ] + assert_output "missing RELEASE_TYPE environment variable" +} + +@test "deduce_versions() when wrong RELEASE_TYPE should fail" { + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="nope" + run deduce_versions + assert [ "$status" -eq 1 ] + assert_output "Unknown release type 'nope'" +} + +mock_git_repo() { + local tmpdir=$(mktemp -d $BATS_TMPDIR/gitrepo.XXXXXX) >&2 + mkdir -p "$tmpdir" >&2 + cd "$tmpdir" >&2 + git init >&2 + echo "foo" > foo.txt + git add foo.txt >&2 + git commit -m'Initial commit' >&2 + for tag in "$@"; do + git tag "$tag" >&2 + done + echo "$tmpdir" +} \ No newline at end of file diff --git a/.github/actions/deduce-versions/test/get_next_release.bats b/.github/actions/deduce-versions/test/get_next_release.bats new file mode 100644 index 00000000..b9be5c0e --- /dev/null +++ b/.github/actions/deduce-versions/test/get_next_release.bats @@ -0,0 +1,119 @@ +#!./test/libs/bats/bin/bats + +load '../../.bats/test_helper/bats-support/load' +load '../../.bats/test_helper/bats-assert/load' + +source "$PWD/deduce-versions.sh" + +@test "get_next_milestone_release() when has no version should fail" { + run get_next_milestone_release + assert [ "$status" -eq 1 ] + assert_output "missing get_next_milestone_release() version argument" +} + +@test "get_next_rc_release() when has no version should fail" { + run get_next_rc_release + assert [ "$status" -eq 1 ] + assert_output "missing get_next_rc_release() version argument" +} + +@test "get_next_tag_based_release() when has no version should fail" { + run get_next_tag_based_release + assert [ "$status" -eq 1 ] + assert_output "missing get_next_tag_based_release() version argument" +} + +@test "get_next_tag_based_release() when has no tag type should fail" { + run get_next_tag_based_release "1.2.3" + assert [ "$status" -eq 1 ] + assert_output "missing get_next_tag_based_release() tag type argument" +} + +@test "get_next_milestone_release() when has no tag should return M1" { + repo=$( mock_git_repo ) + cd "$repo" + run get_next_milestone_release "1.2.3-SNAPSHOT" + assert_output "1.2.3-M1" +} + +@test "get_next_rc_release() when has no tag should return RC1" { + repo=$( mock_git_repo ) + cd "$repo" + run get_next_rc_release "1.2.3-SNAPSHOT" + assert_output "1.2.3-RC1" +} + +@test "get_next_tag_based_release() when has no tag and dash SNAPSHOT suffix should return dashed X1" { + repo=$( mock_git_repo ) + cd "$repo" + run get_next_tag_based_release "1.2.3-SNAPSHOT" "X" + assert_output "1.2.3-X1" +} + +@test "get_next_tag_based_release() when has no tag and dash BUILD-SNAPSHOT suffix should return dashed X1" { + repo=$( mock_git_repo ) + cd "$repo" + run get_next_tag_based_release "1.2.3.BUILD-SNAPSHOT" "X" + assert_output "1.2.3.X1" +} + +@test "get_next_tag_based_release() when has tags and dashed should return dashed X tag+1" { + repo=$( mock_git_repo "v1.2.3-X1" "v1.2.3-X3" "v1.2.3-X2" ) + cd "$repo" + run get_next_tag_based_release "1.2.3-SNAPSHOT" "X" + assert_output "1.2.3-X4" +} + +@test "get_next_tag_based_release() when has tags and dashed should return dot X tag+1" { + repo=$( mock_git_repo "v1.2.3.X1" "v1.2.3.X3" "v1.2.3.X2" ) + cd "$repo" + run get_next_tag_based_release "1.2.3.BUILD-SNAPSHOT" "X" + assert_output "1.2.3.X4" +} + +@test "get_next_tag_based_release() when has multiple tags should return version match tag+1" { + repo=$( mock_git_repo "v1.5.0.A1" "v1.5.0.A2" "v1.5.0.B1" "v2.0.0.A1" "v2.0.0.B1" "v2.0.0.B2" ) + cd "$repo" + run get_next_tag_based_release "1.5.0.BUILD-SNAPSHOT" "A" + assert_output "1.5.0.A3" + run get_next_tag_based_release "1.5.0.BUILD-SNAPSHOT" "B" + assert_output "1.5.0.B2" + run get_next_tag_based_release "2.0.0.BUILD-SNAPSHOT" "A" + assert_output "2.0.0.A2" + run get_next_tag_based_release "2.0.0.BUILD-SNAPSHOT" "B" + assert_output "2.0.0.B3" +} + +@test "get_next_release() should return next release version with release suffix" { + run get_next_release "1.5.0.BUILD-SNAPSHOT" "RELEASE" + assert_output "1.5.0.RELEASE" + run get_next_release "1.5.0-SNAPSHOT" "RELEASE" + assert_output "1.5.0-RELEASE" +} + +@test "get_next_release() should return next release version" { + run get_next_release "1.5.0.BUILD-SNAPSHOT" + assert_output "1.5.0" + run get_next_release "1.5.0-SNAPSHOT" + assert_output "1.5.0" +} + +@test "get_next_release() when has no version should fail" { + run get_next_release + assert [ "$status" -eq 1 ] + assert_output "missing get_next_release() version argument" +} + +mock_git_repo() { + local tmpdir=$(mktemp -d $BATS_TMPDIR/gitrepo.XXXXXX) >&2 + mkdir -p "$tmpdir" >&2 + cd "$tmpdir" >&2 + git init >&2 + echo "foo" > foo.txt + git add foo.txt >&2 + git commit -m'Initial commit' >&2 + for tag in "$@"; do + git tag "$tag" >&2 + done + echo "$tmpdir" +} diff --git a/.github/actions/deduce-versions/test/strip_snapshot_suffix.bats b/.github/actions/deduce-versions/test/strip_snapshot_suffix.bats new file mode 100644 index 00000000..bef64867 --- /dev/null +++ b/.github/actions/deduce-versions/test/strip_snapshot_suffix.bats @@ -0,0 +1,21 @@ +#!./test/libs/bats/bin/bats + +load '../../.bats/test_helper/bats-support/load' +load '../../.bats/test_helper/bats-assert/load' + +source "$PWD/deduce-versions.sh" + +@test "strip_snapshot_suffix() should strip '-SNAPSHOT" { + run strip_snapshot_suffix "1.2.0-SNAPSHOT" + assert_output "1.2.0" +} + +@test "strip_snapshot_suffix() should strip '.BUILD-SNAPSHOT" { + run strip_snapshot_suffix "1.2.0.BUILD-SNAPSHOT" + assert_output "1.2.0" +} + +@test "strip_snapshot_suffix() when no suffix should return unchanged" { + run strip_snapshot_suffix "1.2.0" + assert_output "1.2.0" +} diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml new file mode 100644 index 00000000..7f8bc0e2 --- /dev/null +++ b/.github/actions/setup/action.yml @@ -0,0 +1,16 @@ +name: 'Setup' +runs: + using: composite + steps: + - name: Set Up Utilities + shell: bash + run: sudo apt-get -y install libxml2-utils + - name: Set Up Java + uses: actions/setup-java@v4 + with: + distribution: 'liberica' + java-version: '17' + cache: maven + - name: Disable Java Problem Matcher + shell: bash + run: echo "::remove-matcher owner=java::" diff --git a/.github/actions/stage-code/action.yml b/.github/actions/stage-code/action.yml new file mode 100644 index 00000000..a71086eb --- /dev/null +++ b/.github/actions/stage-code/action.yml @@ -0,0 +1,23 @@ +name: 'Stage ' +description: 'Stage Code' +inputs: + current-version: + required: true + release-version: + required: true + next-version: + required: true +outputs: + distribution-repository: + value: ${{ steps.stage.outputs.distribution-repository }} +runs: + using: composite + steps: + - name: Stage + id: stage + shell: bash + run: . ${{ github.action_path }}/stage.sh; + env: + CURRENT_VERSION: "${{ inputs.current-version }}" + RELEASE_VERSION: "${{ inputs.release-version }}" + NEXT_VERSION: "${{ inputs.next-version }}" diff --git a/.github/actions/stage-code/stage.sh b/.github/actions/stage-code/stage.sh new file mode 100644 index 00000000..6ac9c2f0 --- /dev/null +++ b/.github/actions/stage-code/stage.sh @@ -0,0 +1,32 @@ +repository=${GITHUB_WORKSPACE}/distribution-repository + +echo "Staging ${RELEASE_VERSION} to ${repository} (next version will be ${NEXT_VERSION})" + +./mvnw versions:set --batch-mode --no-transfer-progress -DnewVersion=${RELEASE_VERSION} -DgenerateBackupPoms=false +./mvnw org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata --batch-mode --no-transfer-progress +./mvnw --projects io.spring.javaformat:spring-javaformat-vscode-extension --batch-mode --no-transfer-progress -P '!formatter-dependencies' antrun:run@update-version frontend:install-node-and-npm frontend:npm@update-package-lock + +git config user.name "Spring Builds" > /dev/null +git config user.email "spring-builds@users.noreply.github.com" > /dev/null +git add pom.xml > /dev/null +git commit -m"Release v${RELEASE_VERSION}" > /dev/null +git tag -a "v${RELEASE_VERSION}" -m"Release v${RELEASE_VERSION}" > /dev/null + +./mvnw clean deploy --batch-mode --no-transfer-progress -U -Dfull -DaltDeploymentRepository=distribution::file://${repository} + +git reset --hard HEAD^ > /dev/null +if [[ ${NEXT_VERSION} != ${CURRENT_VERSION} ]]; then + echo "Setting next development version (v${NEXT_VERSION})" + ./mvnw versions:set --batch-mode --no-transfer-progress -DnewVersion=${NEXT_VERSION} -DgenerateBackupPoms=false + ./mvnw org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata --batch-mode --no-transfer-progress + ./mvnw --projects io.spring.javaformat:spring-javaformat-vscode-extension --batch-mode --no-transfer-progress -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock + sed -i "s/:release-version:.*/:release-version: ${RELEASE_VERSION}/g" README.adoc + sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${NEXT_VERSION}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle + sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${NEXT_VERSION}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle + sed -i "s|.*|${NEXT_VERSION}|" samples/spring-javaformat-maven-sample/pom.xml + git add -u . > /dev/null + git commit -m"Next development version (v${NEXT_VERSION})" > /dev/null +fi; + +echo "Staged the following files:" +find ${repository} diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index ac74bfca..d269a903 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -6,29 +6,25 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} jobs: - build: - if: ${{ github.repository == 'spring-io/spring-javaformat' }} + build-and-deploy-snapshot: name: Build and Deploy Snapshot runs-on: ubuntu-latest + if: ${{ github.repository == 'spring-io/spring-javaformat' }} steps: - - name: Check Out Code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - name: Set Up Java - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 - with: - distribution: 'liberica' - java-version: 17 - cache: maven - - name: Build and Publish - run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::file://$(pwd)/distribution-repository - - name: Deploy - uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 - with: - uri: 'https://repo.spring.io' - username: ${{ secrets.ARTIFACTORY_USERNAME }} - password: ${{ secrets.ARTIFACTORY_PASSWORD }} - build-name: spring-javaformat - repository: 'libs-snapshot-local' - folder: 'distribution-repository' - signing-key: ${{ secrets.GPG_PRIVATE_KEY }} - signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up + uses: ./.github/actions/setup + - name: Build + run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -DaltDeploymentRepository=distribution::file://$(pwd)/distribution-repository + - name: Deploy + uses: spring-io/artifactory-deploy-action@v0.0.1 + with: + folder: 'distribution-repository' + uri: 'https://repo.spring.io' + repository: 'libs-snapshot-local' + build-name: spring-javaformat + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + signing-key: ${{ secrets.GPG_PRIVATE_KEY }} + signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/build-pull-request.yml b/.github/workflows/build-pull-request.yml new file mode 100644 index 00000000..0965a8c3 --- /dev/null +++ b/.github/workflows/build-pull-request.yml @@ -0,0 +1,16 @@ +name: Build Pull Request +on: pull_request +permissions: + contents: read +jobs: + build: + name: Build Pull Request + runs-on: ubuntu-latest + if: ${{ github.repository == 'spring-projects/spring-boot' }} + steps: + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up + uses: ./.github/actions/setup + - name: Build + run: ./mvnw clean install --batch-mode --no-transfer-progress --update-snapshots diff --git a/.github/workflows/promote.yml b/.github/workflows/promote.yml new file mode 100644 index 00000000..968b265f --- /dev/null +++ b/.github/workflows/promote.yml @@ -0,0 +1,37 @@ +name: Promote +run-name: >- + Promote of version ${{ inputs.version }} (build number ${{ inputs.build-number}}) by ${{ github.actor }} to '${{ inputs.environment }}' environment' +on: + workflow_call: + inputs: + environment: + type: string + required: true + version: + type: string + required: true + build-number: + type: string + required: true + workflow_dispatch: + inputs: + environment: + description: Environment + type: environment + required: true + version: + description: The version number to promote + type: string + required: true + build-number: + description: The build number to promote + type: string + required: true +jobs: + promote: + environment: ${{ inputs.environment }} + name: Promote + runs-on: ubuntu-latest + steps: + - name: Promote + run: echo "Promote happens here" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..4e5d4746 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,58 @@ +name: Release +run-name: >- + Release of '${{ github.ref_name }}' branch to '${{ inputs.environment }}' environment by ${{ github.actor }} +on: + workflow_dispatch: + inputs: + environment: + description: Environment + type: environment + required: true +jobs: + stage: + name: Stage + runs-on: ubuntu-latest + steps: + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up + uses: ./.github/actions/setup + - name: Get Current Version + id: get-version + run: echo "current-version=$(xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml)" >> $GITHUB_OUTPUT + - name: Deduce Versions + id: deduce-versions + uses: ./.github/actions/deduce-versions + with: + current-version: ${{ steps.get-version.outputs.current-version }} + release-type: ${{ inputs.environment }} + - name: Stage Code + id: stage-code + uses: ./.github/actions/stage-code + with: + current-version: ${{ steps.get-version.outputs.current-version }} + release-version: ${{ steps.deduce-versions.outputs.release-version }} + next-version: ${{ steps.deduce-versions.outputs.next-version }} + - name: Deploy to Staging + uses: spring-io/artifactory-deploy-action@v0.0.1 + with: + folder: distribution-repository + uri: 'https://repo.spring.io' + repository: 'libs-staging-local' + build-name: ${{ format('spring-javaformat-{0}', steps.deduce-versions.outputs.release-version)}} + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + signing-key: ${{ secrets.GPG_PRIVATE_KEY }} + signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} + - name: Push + run: git push origin HEAD --tags + outputs: + release-version: ${{ steps.deduce-versions.outputs.release-version }} + promote: + name: Promote + needs: stage + uses: ./.github/workflows/promote.yml + with: + environment: ${{ inputs.environment }} + version: ${{needs.stage.outputs.release-version}} + build-number: ${{ github.run_number }} diff --git a/.github/workflows/rollback.yml b/.github/workflows/rollback.yml new file mode 100644 index 00000000..43e04a4d --- /dev/null +++ b/.github/workflows/rollback.yml @@ -0,0 +1,41 @@ +name: Rollback +run-name: >- + Rollback of version ${{ inputs.version }} (build number ${{ inputs.build-number}}) by ${{ github.actor }} +on: + workflow_dispatch: + inputs: + environment: + description: Environment + type: environment + required: true + version: + description: The version number to roll back + type: string + required: true + build-number: + description: The build number to roll back + type: string + required: true +jobs: + rollback: + environment: ${{ inputs.environment }} + name: Roll Back + runs-on: ubuntu-latest + steps: + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up JFrog CLI + uses: jfrog/setup-jfrog-cli@7c95feb32008765e1b4e626b078dfd897c4340ad # v4.1.2 + env: + JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} + - name: Delete Staged Artifacts + run: | + url=${{ format('libs-staging-local/io/spring/javaformat/spring-javaformat/{0}/spring-javaformat-{0}.pom', inputs.version) }} + artifact_count=$( jf rt s ${url} --count ) + if [ "${artifact_count}" != 1 ]; then + echo "Unexpected aretifact count ${artifact_count}" + exit 1 + fi + build_name=${{ format('spring-javaformat-{0}', inputs.version)}} + build_number=${{ inputs.build-number }} + jf rt delete --build ${build_name}/${build_number} diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..64d1aa9d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,12 @@ +[submodule ".github/actions/.bats/bats"] + path = .github/actions/.bats/bats + url = https://github.com/bats-core/bats-core.git + tag = v1.11.0 +[submodule ".github/actions/.bats/test_helper/bats-support"] + path = .github/actions/.bats/test_helper/bats-support + url = https://github.com/bats-core/bats-support.git + tag = v0.3.0 +[submodule ".github/actions/.bats/test_helper/bats-assert"] + path = .github/actions/.bats/test_helper/bats-assert + url = https://github.com/bats-core/bats-assert.git + tag = v2.1.0 From 8495f2972c4f8d2bb229901382ea2cc5f7c2759a Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Sat, 8 Jun 2024 15:24:12 +0000 Subject: [PATCH 190/238] Next development version (v0.0.43-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index 72133a36..60e85607 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.41 +:release-version: 0.0.42 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 1ed8adf2..a619156b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 58e98809..b3bc0f41 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.42-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.43-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.42-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.43-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 3fa9bfe5..cec0c38e 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 1eabec83..b50eb61c 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.42.qualifier" + version="0.0.43.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 84a96e0f..f0447048 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 8a7fb79c..3bb9eaf8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index eefcd0ae..511b7d62 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 9cf30470..806bab83 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 6c3c7374..eed2c0de 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.42.qualifier +Bundle-Version: 0.0.43.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 7452fede..29003f38 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index b7e8245f..5bbf628e 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.42.qualifier +Bundle-Version: 0.0.43.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index d309137a..81e1a81b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index fad27c8b..c1f85ed9 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index eeef2201..650c586f 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index f5fa9333..e0da30d0 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 2f5858a2..c96c929e 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 5d3c5117..3605f2a0 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index bc99603f..46ee2658 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 66560bca..8575c456 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 6af1736a..299baf24 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index d5c84fe5..3e2efc32 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index a2c5c8ce..703c3a3c 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 5a0626dc..9572cc6f 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.42-SNAPSHOT", + "version": "0.0.43-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.42-SNAPSHOT", + "version": "0.0.43-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 639c5b16..cdb080b7 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.42-SNAPSHOT", + "version": "0.0.43-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index f2162ee6..cdac8ac0 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 697cc5d5..fc14a0f0 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 64eb5db8..98a45e42 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index bc6f0d6f..39d27d20 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index 68f6b967..e8f28aee 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.42.qualifier +Bundle-Version: 0.0.43.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 9608ea8a..cda64abf 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 8577d79f..6ceab19d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.42.qualifier +Bundle-Version: 0.0.43.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index c14b90c0..0016a013 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index ba028fab..3f8b1057 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index eb9e11fa..83f65fb9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 6f6e7cbb..44a54dbd 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index fc24ebcf..12ae265c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 9b1ef323..72eb47c8 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 76eadbc2..601f6dd7 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 6b857a01..9f247485 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 8439c6e9..bc439188 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index f6aef680..3a6c41c3 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 97a9a641a07214c5838d16de4dcc3e88b7dcfdef Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 4 Jun 2024 17:01:33 -0700 Subject: [PATCH 191/238] Migrate release process to GitHub Actions Complete migration to GitHub Actions. See gh-411 --- .../actions/create-github-release/action.yml | 21 +++++++ .../changelog-generator.yml | 2 + .../publish-eclipse-update-site/action.yml | 22 +++++++ ...blish-eclipse-update-site-pom-template.xml | 60 +++++++++++++++++++ .../publish-eclipse-update-site.sh | 51 ++++++++++++++++ .github/actions/stage-code/action.yml | 1 - .github/artifacts.spec | 23 +++++++ .github/workflows/promote.yml | 59 +++++++++++++++++- 8 files changed, 236 insertions(+), 3 deletions(-) create mode 100644 .github/actions/create-github-release/action.yml create mode 100644 .github/actions/create-github-release/changelog-generator.yml create mode 100644 .github/actions/publish-eclipse-update-site/action.yml create mode 100755 .github/actions/publish-eclipse-update-site/publish-eclipse-update-site-pom-template.xml create mode 100644 .github/actions/publish-eclipse-update-site/publish-eclipse-update-site.sh create mode 100644 .github/artifacts.spec diff --git a/.github/actions/create-github-release/action.yml b/.github/actions/create-github-release/action.yml new file mode 100644 index 00000000..1d72cd3a --- /dev/null +++ b/.github/actions/create-github-release/action.yml @@ -0,0 +1,21 @@ +name: Create GitHub Release +description: Create the release on GitHub with a changelog +inputs: + milestone: + required: true + token: + required: true +runs: + using: composite + steps: + - name: Generate Changelog + uses: spring-io/github-changelog-generator@v0.0.10 + with: + milestone: ${{ inputs.milestone }} + token: ${{ inputs.token }} + config-file: .github/actions/create-github-release/changelog-generator.yml + - name: Create GitHub Release + env: + GITHUB_TOKEN: ${{ inputs.token }} + shell: bash + run: gh release create ${{ format('v{0}', inputs.milestone) }} --notes-file changelog.md diff --git a/.github/actions/create-github-release/changelog-generator.yml b/.github/actions/create-github-release/changelog-generator.yml new file mode 100644 index 00000000..2ce74a09 --- /dev/null +++ b/.github/actions/create-github-release/changelog-generator.yml @@ -0,0 +1,2 @@ +changelog: + repository: spring-io/spring-javaformat diff --git a/.github/actions/publish-eclipse-update-site/action.yml b/.github/actions/publish-eclipse-update-site/action.yml new file mode 100644 index 00000000..4235c9e8 --- /dev/null +++ b/.github/actions/publish-eclipse-update-site/action.yml @@ -0,0 +1,22 @@ +name: 'Publish Eclipse Update Site ' +inputs: + version: + required: true + build-number: + required: true + artifactory-username: + required: true + artifactory-password: + required: true +runs: + using: composite + steps: + - name: Stage + id: stage + shell: bash + run: . ${{ github.action_path }}/publish-eclipse-update-site.sh; + env: + VERSION: "${{ inputs.version }}" + BUILD_NUMBER: "${{ inputs.build-number }}" + ARTIFACTORY_USERNAME: "${{ inputs.artifactory-username }}" + ARTIFACTORY_PASSWORD: "${{ inputs.artifactory-password }}" diff --git a/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site-pom-template.xml b/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site-pom-template.xml new file mode 100755 index 00000000..6ee635e0 --- /dev/null +++ b/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site-pom-template.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + org.eclipse.m2e.maveneclipse + m2eclipse-maveneclipse-publish + 0.0.0-SNAPSHOT + pom + + 1.1.0 + + + + + org.eclipse.tycho.extras + tycho-p2-extras-plugin + ${tycho-extras-version} + + + prepare-package + + mirror + + + + + +##repositories## + + ${project.build.directory}/repository + true + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.8 + + + prepare-package + + mvn + + + + + + + + + + + run + + + + + + + diff --git a/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site.sh b/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site.sh new file mode 100644 index 00000000..9ddcee29 --- /dev/null +++ b/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site.sh @@ -0,0 +1,51 @@ +buildInfo=$( jfrog rt curl api/build/spring-javaformat-${VERSION}/${BUILD_NUMBER} ) +groupId=$( echo ${buildInfo} | jq -r '.buildInfo.modules[0].id' | sed 's/\(.*\):.*:.*/\1/' ) +version=$( echo ${buildInfo} | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) + +echo "Publishing ${buildName}/${buildNumber} (${groupId}:${version}) to Eclipse Update Site" + +jfrog rt dl --build spring-javaformat-${VERSION}/${BUILD_NUMBER} '**/io.spring.javaformat.eclipse.site*.zip' + +curl \ + -s \ + --connect-timeout 240 \ + --max-time 2700 \ + -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ + -f \ + -H "X-Explode-Archive: true" \ + -X PUT \ + -T "io/spring/javaformat/io.spring.javaformat.eclipse.site/${version}/io.spring.javaformat.eclipse.site-${version}.zip" \ + "https://repo.spring.io/javaformat-eclipse-update-site/${version}/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + +releasedVersions=$( curl -s -f -X GET https://repo.spring.io/api/storage/javaformat-eclipse-update-site | jq -r '.children[] | .uri' | cut -c 2- | grep '[0-9].*' | sort -V ) + +repositories="" +while read -r releasedVersion; do + echo "Adding repository for ${releasedVersion}" + repositories="${repositories}https://repo.spring.io/javaformat-eclipse-update-site/${releasedVersion}p2" +done <<< "${releasedVersions}" + +sed "s|##repositories##|${repositories}|" ${GITHUB_ACTION_PATH}/publish-eclipse-update-site-pom-template.xml > publish-eclipse-update-site-pom.xml +./mvnw -f publish-eclipse-update-site-pom.xml clean package || { echo "Failed to publish" >&2; exit 1; } + +curl \ + -s \ + --connect-timeout 240 \ + --max-time 2700 \ + -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ + -f \ + -X PUT \ + -T "target/repository/content.jar" \ + "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + +curl \ + -s \ + --connect-timeout 240 \ + --max-time 2700 \ + -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ + -f \ + -X PUT \ + -T "target/repository/artifacts.jar" \ + "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + +echo "Publish complete" diff --git a/.github/actions/stage-code/action.yml b/.github/actions/stage-code/action.yml index a71086eb..1fc1f060 100644 --- a/.github/actions/stage-code/action.yml +++ b/.github/actions/stage-code/action.yml @@ -1,5 +1,4 @@ name: 'Stage ' -description: 'Stage Code' inputs: current-version: required: true diff --git a/.github/artifacts.spec b/.github/artifacts.spec new file mode 100644 index 00000000..0f6c3aac --- /dev/null +++ b/.github/artifacts.spec @@ -0,0 +1,23 @@ +{ + "files": [ + { + "aql": { + "items.find": { + "$and": [ + { + "@build.name": "${buildName}", + "@build.number": "${buildNumber}", + "name": { + "$nmatch": "*.zip" + }, + "name": { + "$nmatch": "*.zip.asc" + } + } + ] + } + }, + "target": "nexus/" + } + ] +} diff --git a/.github/workflows/promote.yml b/.github/workflows/promote.yml index 968b265f..cad6e40b 100644 --- a/.github/workflows/promote.yml +++ b/.github/workflows/promote.yml @@ -33,5 +33,60 @@ jobs: name: Promote runs-on: ubuntu-latest steps: - - name: Promote - run: echo "Promote happens here" + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up JFrog CLI + uses: jfrog/setup-jfrog-cli@7c95feb32008765e1b4e626b078dfd897c4340ad # v4.1.2 + env: + JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} + - name: Check Maven Central Sync Status + id: check-sync-status + run: | + url=${{ format('https://repo.maven.apache.org/maven2/io/spring/javaformat/spring-javaformat/{0}/spring-javaformat-{0}.pom', inputs.version) }} + status_code=$( curl --write-out '%{http_code}' --head --silent --output /dev/null ${url} ) + if [ "${status_code}" != 200 ] && [ "${status_code}" != 404 ]; then + echo "Unexpected status code ${status_code}" + exit 1 + fi + echo "status-code=${status_code}" >> $GITHUB_OUTPUT + - name: Download Release Artifacts + if: ${{ steps.check-sync-status.outputs.status-code == '404' }} + run: jf rt download --spec ./.github/artifacts.spec --spec-vars 'buildName=${{ format('spring-javaformat-{0}', inputs.version) }};buildNumber=${{ inputs.build-number }}' + - name: Sync to Maven Central + if: ${{ steps.check-sync-status.outputs.status-code == '404' }} + uses: spring-io/nexus-sync-action@v0.0.1 + with: + username: ${{ secrets.OSSRH_S01_TOKEN_USERNAME }} + password: ${{ secrets.OSSRH_S01_TOKEN_PASSWORD }} + staging-profile-name: ${{ secrets.OSSRH_S01_STAGING_PROFILE }} + create: true + upload: true + close: true + release: true + generate-checksums: true + - name: Await Maven Central Sync + if: ${{ steps.check-sync-status.outputs.status-code == '404' }} + run: | + url=${{ format('https://repo.maven.apache.org/maven2/io/spring/javaformat/spring-javaformat/{0}/spring-javaformat-{0}.pom', inputs.version) }} + echo "Waiting for $url" + until curl --fail --head --silent $url > /dev/null + do + echo "." + sleep 60 + done + echo "$url is available" + - name: Promote Build + if: ${{ steps.check-sync-status.outputs.status-code == '404' }} + run: jfrog rt build-promote ${{ format('spring-javaformat-{0}', inputs.version)}} ${{ inputs.build-number }} libs-release-local + - name: Publish Eclipse Update Site + uses: ./.github/actions/publish-eclipse-update-site + with: + version: ${{ inputs.version }} + build-number: ${{ inputs.build-number }} + artifactory-username: ${{ secrets.ARTIFACTORY_USERNAME }} + artifactory-password: ${{ secrets.ARTIFACTORY_PASSWORD }} + - name: Create GitHub Release + uses: ./.github/actions/create-github-release + with: + milestone: ${{ inputs.version }} + token: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} From 66bf43f70d043452590330c68effdb18efe40e70 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 10 Jun 2024 09:28:28 -0700 Subject: [PATCH 192/238] Delete Concourse CI Closes gh-411 --- ci/README.adoc | 18 - ci/config/release-scripts.yml | 10 - ci/images/README.adoc | 21 -- ci/images/ci-image/Dockerfile | 11 - ci/images/docker-lib.sh | 112 ------- ci/images/get-docker-url.sh | 5 - ci/images/setup.sh | 38 --- ci/parameters.yml | 10 - ci/pipeline.yml | 316 ------------------ ci/scripts/build-project.sh | 9 - ci/scripts/common.sh | 9 - ci/scripts/generate-changelog.sh | 11 - ci/scripts/promote.sh | 18 - ...blish-eclipse-update-site-pom-template.xml | 60 ---- ci/scripts/publish-eclipse-update-site.sh | 57 ---- ci/scripts/stage.sh | 58 ---- ci/scripts/sync-to-maven-central.sh | 7 - ci/tasks/build-ci-image.yml | 28 -- ci/tasks/build-project.yml | 17 - ci/tasks/generate-changelog.yml | 16 - ci/tasks/promote.yml | 14 - ci/tasks/publish-eclipse-update-site.yml | 7 - ci/tasks/stage.yml | 16 - 23 files changed, 868 deletions(-) delete mode 100644 ci/README.adoc delete mode 100644 ci/config/release-scripts.yml delete mode 100644 ci/images/README.adoc delete mode 100644 ci/images/ci-image/Dockerfile delete mode 100755 ci/images/docker-lib.sh delete mode 100755 ci/images/get-docker-url.sh delete mode 100755 ci/images/setup.sh delete mode 100644 ci/parameters.yml delete mode 100644 ci/pipeline.yml delete mode 100755 ci/scripts/build-project.sh delete mode 100644 ci/scripts/common.sh delete mode 100755 ci/scripts/generate-changelog.sh delete mode 100755 ci/scripts/promote.sh delete mode 100755 ci/scripts/publish-eclipse-update-site-pom-template.xml delete mode 100755 ci/scripts/publish-eclipse-update-site.sh delete mode 100755 ci/scripts/stage.sh delete mode 100755 ci/scripts/sync-to-maven-central.sh delete mode 100644 ci/tasks/build-ci-image.yml delete mode 100644 ci/tasks/build-project.yml delete mode 100644 ci/tasks/generate-changelog.yml delete mode 100644 ci/tasks/promote.yml delete mode 100644 ci/tasks/publish-eclipse-update-site.yml delete mode 100644 ci/tasks/stage.yml diff --git a/ci/README.adoc b/ci/README.adoc deleted file mode 100644 index bdf75bd5..00000000 --- a/ci/README.adoc +++ /dev/null @@ -1,18 +0,0 @@ -== Concourse pipeline - -Ensure that you've setup the target and can login - -[source] ----- -$ fly -t spring-javaformat login -n spring-javaformat -c https://ci.spring.io ----- - -The pipeline can be deployed using the following command: - -[source] ----- -$ fly -t spring-javaformat set-pipeline -p spring-javaformat -c ci/pipeline.yml -l ci/parameters.yml ----- - -NOTE: This assumes that you have credhub integration configured with the appropriate -secrets. diff --git a/ci/config/release-scripts.yml b/ci/config/release-scripts.yml deleted file mode 100644 index d31f8cba..00000000 --- a/ci/config/release-scripts.yml +++ /dev/null @@ -1,10 +0,0 @@ -logging: - level: - io.spring.concourse: DEBUG -spring: - main: - banner-mode: off -sonatype: - exclude: - - 'build-info\.json' - - '.*\.zip' diff --git a/ci/images/README.adoc b/ci/images/README.adoc deleted file mode 100644 index 84eae160..00000000 --- a/ci/images/README.adoc +++ /dev/null @@ -1,21 +0,0 @@ -== CI Images - -These images are used by CI to run the actual builds. - -To build the image locally run the following from this directory: - ----- -$ docker build --no-cache -f /Dockerfile . ----- - -For example - ----- -$ docker build --no-cache -f spring-boot-ci-image/Dockerfile . ----- - -To test run: - ----- -$ docker run -it --entrypoint /bin/bash ✈ ----- diff --git a/ci/images/ci-image/Dockerfile b/ci/images/ci-image/Dockerfile deleted file mode 100644 index fbdbb4c0..00000000 --- a/ci/images/ci-image/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM ubuntu:focal-20210401 - -ADD setup.sh /setup.sh -ADD get-docker-url.sh /get-docker-url.sh -RUN ./setup.sh - -ENV JAVA_HOME /opt/openjdk -ENV PATH $JAVA_HOME/bin:$PATH -ADD docker-lib.sh /docker-lib.sh - -ENTRYPOINT [ "switch", "shell=/bin/bash", "--", "codep", "/bin/docker daemon" ] diff --git a/ci/images/docker-lib.sh b/ci/images/docker-lib.sh deleted file mode 100755 index 4c7b1d58..00000000 --- a/ci/images/docker-lib.sh +++ /dev/null @@ -1,112 +0,0 @@ -# Based on: https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh - -DOCKER_LOG_FILE=${DOCKER_LOG_FILE:-/tmp/docker.log} -SKIP_PRIVILEGED=${SKIP_PRIVILEGED:-false} -STARTUP_TIMEOUT=${STARTUP_TIMEOUT:-120} - -sanitize_cgroups() { - mkdir -p /sys/fs/cgroup - mountpoint -q /sys/fs/cgroup || \ - mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup - - mount -o remount,rw /sys/fs/cgroup - - sed -e 1d /proc/cgroups | while read sys hierarchy num enabled; do - if [ "$enabled" != "1" ]; then - # subsystem disabled; skip - continue - fi - - grouping="$(cat /proc/self/cgroup | cut -d: -f2 | grep "\\<$sys\\>")" || true - if [ -z "$grouping" ]; then - # subsystem not mounted anywhere; mount it on its own - grouping="$sys" - fi - - mountpoint="/sys/fs/cgroup/$grouping" - - mkdir -p "$mountpoint" - - # clear out existing mount to make sure new one is read-write - if mountpoint -q "$mountpoint"; then - umount "$mountpoint" - fi - - mount -n -t cgroup -o "$grouping" cgroup "$mountpoint" - - if [ "$grouping" != "$sys" ]; then - if [ -L "/sys/fs/cgroup/$sys" ]; then - rm "/sys/fs/cgroup/$sys" - fi - - ln -s "$mountpoint" "/sys/fs/cgroup/$sys" - fi - done - - if ! test -e /sys/fs/cgroup/systemd ; then - mkdir /sys/fs/cgroup/systemd - mount -t cgroup -o none,name=systemd none /sys/fs/cgroup/systemd - fi -} - -start_docker() { - mkdir -p /var/log - mkdir -p /var/run - - if [ "$SKIP_PRIVILEGED" = "false" ]; then - sanitize_cgroups - - # check for /proc/sys being mounted readonly, as systemd does - if grep '/proc/sys\s\+\w\+\s\+ro,' /proc/mounts >/dev/null; then - mount -o remount,rw /proc/sys - fi - fi - - local mtu=$(cat /sys/class/net/$(ip route get 8.8.8.8|awk '{ print $5 }')/mtu) - local server_args="--mtu ${mtu}" - local registry="" - - server_args="${server_args}" - - for registry in $3; do - server_args="${server_args} --insecure-registry ${registry}" - done - - if [ -n "$4" ]; then - server_args="${server_args} --registry-mirror $4" - fi - - try_start() { - dockerd --data-root /scratch/docker ${server_args} >$DOCKER_LOG_FILE 2>&1 & - echo $! > /tmp/docker.pid - - sleep 1 - - echo waiting for docker to come up... - until docker info >/dev/null 2>&1; do - sleep 1 - if ! kill -0 "$(cat /tmp/docker.pid)" 2>/dev/null; then - return 1 - fi - done - } - - export server_args DOCKER_LOG_FILE - declare -fx try_start - trap stop_docker EXIT - - if ! timeout ${STARTUP_TIMEOUT} bash -ce 'while true; do try_start && break; done'; then - echo Docker failed to start within ${STARTUP_TIMEOUT} seconds. - return 1 - fi -} - -stop_docker() { - local pid=$(cat /tmp/docker.pid) - if [ -z "$pid" ]; then - return 0 - fi - - kill -TERM $pid -} - diff --git a/ci/images/get-docker-url.sh b/ci/images/get-docker-url.sh deleted file mode 100755 index 221b3462..00000000 --- a/ci/images/get-docker-url.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -set -e - -version="20.10.6" -echo "https://download.docker.com/linux/static/stable/x86_64/docker-$version.tgz"; diff --git a/ci/images/setup.sh b/ci/images/setup.sh deleted file mode 100755 index 6c90192c..00000000 --- a/ci/images/setup.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -set -ex - -########################################################### -# UTILS -########################################################### -export DEBIAN_FRONTEND=noninteractive -apt-get update -apt-get install --no-install-recommends -y tzdata ca-certificates net-tools libxml2-utils git curl libudev1 libxml2-utils iptables iproute2 jq fontconfig -ln -fs /usr/share/zoneinfo/UTC /etc/localtime -dpkg-reconfigure --frontend noninteractive tzdata -rm -rf /var/lib/apt/lists/* -curl https://raw.githubusercontent.com/spring-io/concourse-java-scripts/v0.0.4/concourse-java.sh > /opt/concourse-java.sh - -########################################################### -# JAVA -########################################################### -JDK_URL=https://github.com/bell-sw/Liberica/releases/download/17.0.6+10/bellsoft-jdk17.0.6+10-linux-amd64.tar.gz - -mkdir -p /opt/openjdk -cd /opt/openjdk -curl -L ${JDK_URL} | tar zx --strip-components=1 -test -f /opt/openjdk/bin/java -test -f /opt/openjdk/bin/javac - -########################################################### -# DOCKER -########################################################### -cd / -DOCKER_URL=$( ./get-docker-url.sh ) -curl -L ${DOCKER_URL} | tar zx -mv /docker/* /bin/ -chmod +x /bin/docker* -export ENTRYKIT_VERSION=0.4.0 -curl -L https://github.com/progrium/entrykit/releases/download/v${ENTRYKIT_VERSION}/entrykit_${ENTRYKIT_VERSION}_Linux_x86_64.tgz | tar zx -chmod +x entrykit && \ -mv entrykit /bin/entrykit && \ -entrykit --symlink \ No newline at end of file diff --git a/ci/parameters.yml b/ci/parameters.yml deleted file mode 100644 index d4564cd2..00000000 --- a/ci/parameters.yml +++ /dev/null @@ -1,10 +0,0 @@ -project: spring-javaformat -branch: main -milestone: 0.0.x -github-owner: spring-io -github-repository: spring-javaformat -docker-hub-ci-organization: springci -ci-image: spring-javaformat-ci -artifactory-server: https://repo.spring.io -build-name: spring-javaformat -task-timeout: 2h00m diff --git a/ci/pipeline.yml b/ci/pipeline.yml deleted file mode 100644 index 92027920..00000000 --- a/ci/pipeline.yml +++ /dev/null @@ -1,316 +0,0 @@ -anchors: - github-release-source: &github-release-source - owner: ((github-owner)) - repository: ((github-repository)) - access_token: ((github-ci-release-token)) - artifactory-repo-put-params: &artifactory-repo-put-params - signing_key: ((signing-key)) - signing_passphrase: ((signing-passphrase)) - repo: libs-snapshot-local - folder: distribution-repository - build_uri: https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME} - build_number: ${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME} - disable_checksum_uploads: true - threads: 8 - sonatype-task-params: &sonatype-task-params - SONATYPE_USERNAME: ((sonatype-username)) - SONATYPE_PASSWORD: ((sonatype-password)) - SONATYPE_URL: ((sonatype-url)) - SONATYPE_STAGING_PROFILE_ID: ((sonatype-staging-profile-id)) - artifactory-task-params: &artifactory-task-params - ARTIFACTORY_SERVER: ((artifactory-server)) - ARTIFACTORY_USERNAME: ((artifactory-username)) - ARTIFACTORY_PASSWORD: ((artifactory-password)) - docker-hub-task-params: &docker-hub-task-params - DOCKER_HUB_USERNAME: ((docker-hub-username)) - DOCKER_HUB_PASSWORD: ((docker-hub-password)) - slack-fail-params: &slack-fail-params - text: > - :concourse-failed: - silent: true - icon_emoji: ":concourse:" - username: concourse-ci - slack-success-params: &slack-success-params - text: > - :concourse-succeeded: - silent: true - icon_emoji: ":concourse:" - username: concourse-ci -resource_types: -- name: artifactory-resource - type: registry-image - source: - repository: springio/artifactory-resource - tag: "0.0.18" - username: ((docker-hub-username)) - password: ((docker-hub-password)) -- name: slack-notification - type: registry-image - source: - repository: cfcommunity/slack-notification-resource - username: ((docker-hub-username)) - password: ((docker-hub-password)) -resources: -- name: git-repo - type: git - icon: github - source: - uri: https://github.com/((github-owner))/((github-repository)).git - username: ((github-username)) - password: ((github-ci-release-token)) - branch: ((branch)) -- name: github-pre-release - type: github-release - icon: briefcase-download-outline - source: - <<: *github-release-source - pre_release: true - release: false -- name: github-release - type: github-release - icon: briefcase-download - source: - <<: *github-release-source - pre_release: false - release: true -- name: ci-images-git-repo - type: git - icon: github - source: - uri: https://github.com/((github-owner))/((github-repository)).git - branch: ((branch)) - paths: ["ci/images/*"] -- name: ci-image - type: registry-image - icon: docker - source: - username: ((docker-hub-username)) - password: ((docker-hub-password)) - tag: ((milestone)) - repository: ((docker-hub-ci-organization))/((ci-image)) -- name: artifactory-repo - type: artifactory-resource - icon: package-variant - source: - uri: ((artifactory-server)) - username: ((artifactory-username)) - password: ((artifactory-password)) - build_name: ((build-name)) -- name: slack-alert - type: slack-notification - icon: slack - source: - url: ((slack-webhook-url)) -jobs: -- name: build-ci-images - plan: - - get: ci-images-git-repo - trigger: true - - get: git-repo - - task: build-ci-image - privileged: true - file: git-repo/ci/tasks/build-ci-image.yml - params: - DOCKER_HUB_AUTH: ((docker-hub-auth)) - output_mapping: - image: ci-image - - put: ci-image - params: - image: ci-image/image.tar -- name: build - serial: true - public: true - plan: - - get: ci-image - - get: git-repo - trigger: true - - do: - - task: build-project - image: ci-image - privileged: true - timeout: ((task-timeout)) - file: git-repo/ci/tasks/build-project.yml - params: - <<: *docker-hub-task-params - BRANCH: ((branch)) - on_failure: - do: - - put: slack-alert - params: - <<: *slack-fail-params - - put: slack-alert - params: - <<: *slack-success-params -- name: stage-milestone - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - task: stage - image: ci-image - file: git-repo/ci/tasks/stage.yml - params: - <<: *docker-hub-task-params - RELEASE_TYPE: M - - put: artifactory-repo - params: - <<: *artifactory-repo-put-params - repo: libs-staging-local - - put: git-repo - params: - repository: stage-git-repo -- name: stage-rc - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - task: stage - image: ci-image - file: git-repo/ci/tasks/stage.yml - params: - <<: *docker-hub-task-params - RELEASE_TYPE: RC - - put: artifactory-repo - params: - <<: *artifactory-repo-put-params - repo: libs-staging-local - - put: git-repo - params: - repository: stage-git-repo -- name: stage-release - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - task: stage - image: ci-image - file: git-repo/ci/tasks/stage.yml - params: - <<: *docker-hub-task-params - RELEASE_TYPE: RELEASE - - put: artifactory-repo - params: - <<: *artifactory-repo-put-params - repo: libs-staging-local - - put: git-repo - params: - repository: stage-git-repo -- name: promote-milestone - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - get: artifactory-repo - trigger: false - passed: [stage-milestone] - params: - download_artifacts: false - save_build_info: true - - task: promote - file: git-repo/ci/tasks/promote.yml - params: - RELEASE_TYPE: M - <<: *artifactory-task-params - - task: generate-changelog - file: git-repo/ci/tasks/generate-changelog.yml - params: - RELEASE_TYPE: M - GITHUB_USERNAME: ((github-username)) - GITHUB_TOKEN: ((github-ci-release-token)) - - put: github-pre-release - params: - name: generated-changelog/tag - tag: generated-changelog/tag - body: generated-changelog/changelog.md -- name: promote-rc - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - get: artifactory-repo - trigger: false - passed: [stage-rc] - params: - download_artifacts: false - save_build_info: true - - task: promote - file: git-repo/ci/tasks/promote.yml - params: - RELEASE_TYPE: RC - <<: *artifactory-task-params - - task: generate-changelog - file: git-repo/ci/tasks/generate-changelog.yml - params: - RELEASE_TYPE: RC - - put: github-pre-release - params: - name: generated-changelog/tag - tag: generated-changelog/tag - body: generated-changelog/changelog.md -- name: promote-release - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - get: artifactory-repo - trigger: false - passed: [stage-release] - params: - download_artifacts: true - save_build_info: true - - task: promote - file: git-repo/ci/tasks/promote.yml - params: - RELEASE_TYPE: RELEASE - <<: *artifactory-task-params - <<: *sonatype-task-params -- name: create-github-release - serial: true - plan: - - get: ci-image - - get: git-repo - - get: artifactory-repo - trigger: true - passed: [promote-release] - params: - download_artifacts: false - save_build_info: true - - task: generate-changelog - file: git-repo/ci/tasks/generate-changelog.yml - params: - RELEASE_TYPE: RELEASE - - put: github-release - params: - name: generated-changelog/tag - tag: generated-changelog/tag - body: generated-changelog/changelog.md -- name: publish-eclipse-update-site - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - get: artifactory-repo - trigger: false - passed: [promote-release] - params: - save_build_info: true - - task: publish-eclipse-update-site - image: ci-image - file: git-repo/ci/tasks/publish-eclipse-update-site.yml - params: - ARTIFACTORY_USERNAME: ((artifactory-username)) - ARTIFACTORY_PASSWORD: ((artifactory-password)) -groups: -- name: builds - jobs: [build] -- name: releases - jobs: [stage-milestone, stage-rc, stage-release, promote-milestone, promote-rc, promote-release, create-github-release, publish-eclipse-update-site] -- name: ci-images - jobs: [build-ci-images] diff --git a/ci/scripts/build-project.sh b/ci/scripts/build-project.sh deleted file mode 100755 index 476c837e..00000000 --- a/ci/scripts/build-project.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh -repository=$(pwd)/distribution-repository - -pushd git-repo > /dev/null -run_maven clean deploy -U -Dfull -DaltDeploymentRepository=distribution::file://${repository} -popd > /dev/null diff --git a/ci/scripts/common.sh b/ci/scripts/common.sh deleted file mode 100644 index 8eea3f79..00000000 --- a/ci/scripts/common.sh +++ /dev/null @@ -1,9 +0,0 @@ -source /opt/concourse-java.sh - -setup_symlinks - -if [[ -n $DOCKER_HUB_USERNAME ]]; then - docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD -fi - -cleanup_maven_repo "io.spring.javaformat" diff --git a/ci/scripts/generate-changelog.sh b/ci/scripts/generate-changelog.sh deleted file mode 100755 index 1e4b6e5b..00000000 --- a/ci/scripts/generate-changelog.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -set -e - -version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) - -java -jar /github-changelog-generator.jar \ - --changelog.repository=spring-io/spring-javaformat \ - ${version} generated-changelog/changelog.md - -echo ${version} > generated-changelog/version -echo v${version} > generated-changelog/tag diff --git a/ci/scripts/promote.sh b/ci/scripts/promote.sh deleted file mode 100755 index 4ce8285b..00000000 --- a/ci/scripts/promote.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -set -e - -CONFIG_DIR=git-repo/ci/config - -version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) - -export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json - -java -jar /concourse-release-scripts.jar \ - --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ - publishToCentral $RELEASE_TYPE $BUILD_INFO_LOCATION artifactory-repo || { exit 1; } - -java -jar /concourse-release-scripts.jar \ - --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ - promote $RELEASE_TYPE $BUILD_INFO_LOCATION || { exit 1; } - -echo "Promotion complete" diff --git a/ci/scripts/publish-eclipse-update-site-pom-template.xml b/ci/scripts/publish-eclipse-update-site-pom-template.xml deleted file mode 100755 index 6ee635e0..00000000 --- a/ci/scripts/publish-eclipse-update-site-pom-template.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - 4.0.0 - org.eclipse.m2e.maveneclipse - m2eclipse-maveneclipse-publish - 0.0.0-SNAPSHOT - pom - - 1.1.0 - - - - - org.eclipse.tycho.extras - tycho-p2-extras-plugin - ${tycho-extras-version} - - - prepare-package - - mirror - - - - - -##repositories## - - ${project.build.directory}/repository - true - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.8 - - - prepare-package - - mvn - - - - - - - - - - - run - - - - - - - diff --git a/ci/scripts/publish-eclipse-update-site.sh b/ci/scripts/publish-eclipse-update-site.sh deleted file mode 100755 index 761f74c3..00000000 --- a/ci/scripts/publish-eclipse-update-site.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh - -buildName=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.name' ) -buildNumber=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.number' ) -groupId=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/\(.*\):.*:.*/\1/' ) -version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) - -echo "Publishing ${buildName}/${buildNumber} to Eclipse Update Site" -curl \ - -s \ - --connect-timeout 240 \ - --max-time 2700 \ - -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ - -f \ - -H "X-Explode-Archive: true" \ - -X PUT \ - -T "artifactory-repo/io/spring/javaformat/io.spring.javaformat.eclipse.site/${version}/io.spring.javaformat.eclipse.site-${version}.zip" \ - "https://repo.spring.io/javaformat-eclipse-update-site/${version}/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } - -releasedVersions=$( curl -s -f -X GET https://repo.spring.io/api/storage/javaformat-eclipse-update-site | jq -r '.children[] | .uri' | cut -c 2- | grep '[0-9].*' | sort -V ) - -repositories="" -while read -r releasedVersion; do - echo "Adding repository for ${releasedVersion}" - repositories="${repositories}https://repo.spring.io/javaformat-eclipse-update-site/${releasedVersion}p2" -done <<< "${releasedVersions}" - -pushd git-repo > /dev/null -sed "s|##repositories##|${repositories}|" ci/scripts/publish-eclipse-update-site-pom-template.xml > publish-eclipse-update-site-pom.xml -run_maven -f publish-eclipse-update-site-pom.xml clean package || { echo "Failed to publish" >&2; exit 1; } - -curl \ - -s \ - --connect-timeout 240 \ - --max-time 2700 \ - -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ - -f \ - -X PUT \ - -T "target/repository/content.jar" \ - "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } - -curl \ - -s \ - --connect-timeout 240 \ - --max-time 2700 \ - -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ - -f \ - -X PUT \ - -T "target/repository/artifacts.jar" \ - "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } - -popd > /dev/null - -echo "Publish complete" diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh deleted file mode 100755 index 5b36e8b4..00000000 --- a/ci/scripts/stage.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh -repository=$(pwd)/distribution-repository - -pushd git-repo > /dev/null -git fetch --tags --all > /dev/null -popd > /dev/null - -git clone git-repo stage-git-repo > /dev/null - -pushd stage-git-repo > /dev/null - -snapshotVersion=$( xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml ) -if [[ $RELEASE_TYPE = "M" ]]; then - stageVersion=$( get_next_milestone_release $snapshotVersion) - nextVersion=$snapshotVersion -elif [[ $RELEASE_TYPE = "RC" ]]; then - stageVersion=$( get_next_rc_release $snapshotVersion) - nextVersion=$snapshotVersion -elif [[ $RELEASE_TYPE = "RELEASE" ]]; then - stageVersion=$( get_next_release $snapshotVersion) - nextVersion=$( bump_version_number $snapshotVersion) -else - echo "Unknown release type $RELEASE_TYPE" >&2; exit 1; -fi - -echo "Staging ${stageVersion} (next version will be ${nextVersion})" -run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false -run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:install-node-and-npm frontend:npm@update-package-lock - -git config user.name "Spring Builds" > /dev/null -git config user.email "spring-builds@users.noreply.github.com" > /dev/null -git add pom.xml > /dev/null -git commit -m"Release v${stageVersion}" > /dev/null -git tag -a "v${stageVersion}" -m"Release v${stageVersion}" > /dev/null - -run_maven clean deploy -U -Dfull -DaltDeploymentRepository=distribution::default::file://${repository} - -git reset --hard HEAD^ > /dev/null -if [[ $nextVersion != $snapshotVersion ]]; then - echo "Setting next development version (v$nextVersion)" - run_maven versions:set -DnewVersion=$nextVersion -DgenerateBackupPoms=false - run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata - run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock - sed -i "s/:release-version:.*/:release-version: ${stageVersion}/g" README.adoc - sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle - sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle - sed -i "s|.*|${nextVersion}|" samples/spring-javaformat-maven-sample/pom.xml - git add -u . > /dev/null - git commit -m"Next development version (v${nextVersion})" > /dev/null -fi; - -popd > /dev/null - -echo "Staging Complete" diff --git a/ci/scripts/sync-to-maven-central.sh b/ci/scripts/sync-to-maven-central.sh deleted file mode 100755 index f691b9f9..00000000 --- a/ci/scripts/sync-to-maven-central.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json -version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) -java -jar /opt/concourse-release-scripts.jar syncToCentral "RELEASE" $BUILD_INFO_LOCATION || { exit 1; } - -echo "Sync complete" diff --git a/ci/tasks/build-ci-image.yml b/ci/tasks/build-ci-image.yml deleted file mode 100644 index 6f4de778..00000000 --- a/ci/tasks/build-ci-image.yml +++ /dev/null @@ -1,28 +0,0 @@ ---- -platform: linux -image_resource: - type: registry-image - source: - repository: concourse/oci-build-task - tag: 0.10.0 - username: ((docker-hub-username)) - password: ((docker-hub-password)) -inputs: -- name: ci-images-git-repo -outputs: -- name: image -caches: -- path: ci-image-cache -params: - CONTEXT: ci-images-git-repo/ci/images - DOCKERFILE: ci-images-git-repo/ci/images/ci-image/Dockerfile -run: - path: /bin/sh - args: - - "-c" - - | - mkdir -p /root/.docker - cat > /root/.docker/config.json < Date: Wed, 24 Jul 2024 14:24:03 +0100 Subject: [PATCH 193/238] Upgrade to Java 17.0.12 Closes gh-419 --- .sdkmanrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.sdkmanrc b/.sdkmanrc index 14fdc133..828308d2 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=17.0.6-librca +java=17.0.12-librca From 70373338ffdd0be298536a0a044eaf4bee6e9e2a Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 24 Jul 2024 14:26:54 +0100 Subject: [PATCH 194/238] Report unnecessary and unsupported warning suppressions at info level Closes gh-418 --- .../eclipse/projectsettings/org.eclipse.jdt.core.prefs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 41401b15..09b98f97 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -82,7 +82,7 @@ org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=info org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore @@ -99,7 +99,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference= org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=info org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on From 2c8dbd91adc3323028d609e8088dcf969c16c334 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 24 Jul 2024 16:16:47 +0100 Subject: [PATCH 195/238] Only require test classes to have a name ending in Tests Previously, the check would apply to interfaces and annotations as well. This commit tightens up the check so that it only applies to classes. Closes gh-364 --- .../check/SpringTestFileNameCheck.java | 24 +++++++++++++++--- .../checkstyle/SpringChecksTests.java | 8 +++--- .../src/test/java/AnnotationEndingInTest.txt | 1 + .../src/test/java/InterfaceEndingInTest.txt | 1 + .../src/test/java/AnnotationEndingInTest.java | 25 +++++++++++++++++++ .../src/test/java/InterfaceEndingInTest.java | 25 +++++++++++++++++++ 6 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/AnnotationEndingInTest.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/InterfaceEndingInTest.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java index eeda7a05..da188129 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,14 +18,19 @@ import java.io.File; +import com.puppycrawl.tools.checkstyle.JavaParser; +import com.puppycrawl.tools.checkstyle.JavaParser.Options; import com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck; import com.puppycrawl.tools.checkstyle.api.CheckstyleException; +import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.FileText; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; /** - * Checks that test filenames end {@literal Tests.java} and not {@literal Test.java}. + * Checks that test class filenames end {@literal Tests.java} and not {@literal Test.java}. * * @author Phillip Webb + * @author Andy Wilkinson */ public class SpringTestFileNameCheck extends AbstractFileSetCheck { @@ -33,8 +38,19 @@ public class SpringTestFileNameCheck extends AbstractFileSetCheck { protected void processFiltered(File file, FileText fileText) throws CheckstyleException { String path = file.getPath().replace('\\', '/'); if (path.contains("src/test/java") && file.getName().endsWith("Test.java")) { - log(1, "testfilename.wrongName"); + visitCompilationUnit(JavaParser.parseFileText(fileText, Options.WITHOUT_COMMENTS)); } } - + + private void visitCompilationUnit(DetailAST ast) { + DetailAST child = ast.getFirstChild(); + while (child != null) { + if (child.getType() == TokenTypes.CLASS_DEF) { + log(1, "testfilename.wrongName"); + return; + } + child = child.getNextSibling(); + } + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index 7d789a94..f3d31175 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -123,8 +123,10 @@ public static Collection paramaters() throws IOException { .map(Parameter::new) .collect(Collectors.toCollection(ArrayList::new)); parameters.add(new Parameter(new File(SOURCES_DIR, "nopackageinfo/NoPackageInfo.java"))); - parameters.add(new Parameter(new File(SOURCES_DIR, "src/test/java/NamedTest.java"))); - parameters.add(new Parameter(new File(SOURCES_DIR, "src/test/java/NamedTests.java"))); + Arrays.stream(new File(SOURCES_DIR, "src/test/java").listFiles(SpringChecksTests::sourceFile)) + .sorted() + .map(Parameter::new) + .forEach(parameters::add); return parameters; } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/AnnotationEndingInTest.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/AnnotationEndingInTest.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/AnnotationEndingInTest.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/InterfaceEndingInTest.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/InterfaceEndingInTest.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/InterfaceEndingInTest.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java new file mode 100644 index 00000000..7579aac2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java @@ -0,0 +1,25 @@ +/* + * Copyright 2017-2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This is an annotation with a legal name. Only test classes must + * have a name that ends with {@code Tests}. + * + * @author Andy Wilkinson + */ +public @interface AnnotationEndingInTest { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java new file mode 100644 index 00000000..b2aad5f9 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java @@ -0,0 +1,25 @@ +/* + * Copyright 2017-2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This is an interface with a legal name. Only test classes must + * have a name that ends with {@code Tests}. + * + * @author Andy Wilkinson + */ +public interface InterfaceEndingInTest { + +} From 096af47c74e0352849fda9053d45d03500198bc8 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 24 Jul 2024 17:54:50 +0100 Subject: [PATCH 196/238] Check that JUnit 5 test classes are package-private Closes gh-281 --- .../checkstyle/check/SpringJUnit5Check.java | 51 ++++++++++++++----- .../check/SpringTestFileNameCheck.java | 4 +- .../checkstyle/check/messages.properties | 3 ++ .../resources/check/JUnit5BadModifier.txt | 4 ++ .../resources/source/JUnit5BadModifier.java | 15 ++++++ .../test/resources/source/JUnit5Valid.java | 4 +- 6 files changed, 64 insertions(+), 17 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index db7cbbfd..59eb1bec 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -63,6 +63,8 @@ public class SpringJUnit5Check extends AbstractSpringCheck { LIFECYCLE_ANNOTATIONS = Collections.unmodifiableList(new ArrayList<>(annotations)); } + private static final Annotation NESTED_ANNOTATION = new Annotation("org.junit.jupiter.api", "Nested"); + private static final Set BANNED_IMPORTS; static { Set bannedImports = new LinkedHashSet<>(); @@ -84,9 +86,13 @@ public class SpringJUnit5Check extends AbstractSpringCheck { private final List lifecycleMethods = new ArrayList<>(); + private final List nestedTestClasses = new ArrayList<>(); + + private DetailAST testClass; + @Override public int[] getAcceptableTokens() { - return new int[] { TokenTypes.METHOD_DEF, TokenTypes.IMPORT }; + return new int[] { TokenTypes.METHOD_DEF, TokenTypes.IMPORT, TokenTypes.CLASS_DEF }; } @Override @@ -101,9 +107,13 @@ public void visitToken(DetailAST ast) { switch (ast.getType()) { case TokenTypes.METHOD_DEF: visitMethodDef(ast); + break; case TokenTypes.IMPORT: visitImport(ast); break; + case TokenTypes.CLASS_DEF: + visitClassDefinition(ast); + break; } } @@ -140,6 +150,17 @@ private void visitImport(DetailAST ast) { this.imports.put(ident.getText(), ident); } + private void visitClassDefinition(DetailAST ast) { + if (ast.getParent().getType() == TokenTypes.COMPILATION_UNIT) { + this.testClass = ast; + } + else { + if (containsAnnotation(ast, Arrays.asList(NESTED_ANNOTATION))) { + this.nestedTestClasses.add(ast); + } + } + } + @Override public void finishTree(DetailAST rootAST) { if (shouldCheck()) { @@ -148,7 +169,7 @@ public void finishTree(DetailAST rootAST) { } private boolean shouldCheck() { - if (this.testMethods.isEmpty() && this.lifecycleMethods.isEmpty()) { + if (this.testMethods.isEmpty() && this.lifecycleMethods.isEmpty() && this.nestedTestClasses.isEmpty()) { return false; } for (String unlessImport : this.unlessImports) { @@ -160,6 +181,10 @@ private boolean shouldCheck() { } private void check() { + if (this.testClass != null) { + checkVisibility(Arrays.asList(this.testClass), "junit5.publicClass", null); + } + checkVisibility(this.nestedTestClasses, "junit5.publicNestedClass", "junit5.privateNestedClass"); for (String bannedImport : BANNED_IMPORTS) { FullIdent ident = this.imports.get(bannedImport); if (ident != null) { @@ -171,25 +196,25 @@ private void check() { log(testMethod, "junit5.bannedTestAnnotation"); } } - checkMethodVisibility(this.testMethods, "junit5.testPublicMethod", "junit5.testPrivateMethod"); - checkMethodVisibility(this.lifecycleMethods, "junit5.lifecyclePublicMethod", "junit5.lifecyclePrivateMethod"); + checkVisibility(this.testMethods, "junit5.testPublicMethod", "junit5.testPrivateMethod"); + checkVisibility(this.lifecycleMethods, "junit5.lifecyclePublicMethod", "junit5.lifecyclePrivateMethod"); } - private void checkMethodVisibility(List methods, String publicMessageKey, String privateMessageKey) { - for (DetailAST method : methods) { - DetailAST modifiers = method.findFirstToken(TokenTypes.MODIFIERS); + private void checkVisibility(List asts, String publicMessageKey, String privateMessageKey) { + for (DetailAST ast : asts) { + DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); if (modifiers.findFirstToken(TokenTypes.LITERAL_PUBLIC) != null) { - log(method, publicMessageKey); + log(ast, publicMessageKey); } - if (modifiers.findFirstToken(TokenTypes.LITERAL_PRIVATE) != null) { - log(method, privateMessageKey); + if ((privateMessageKey != null) && (modifiers.findFirstToken(TokenTypes.LITERAL_PRIVATE) != null)) { + log(ast, privateMessageKey); } } } - private void log(DetailAST method, String key) { - String name = method.findFirstToken(TokenTypes.IDENT).getText(); - log(method.getLineNo(), method.getColumnNo(), key, name); + private void log(DetailAST ast, String key) { + String name = ast.findFirstToken(TokenTypes.IDENT).getText(); + log(ast.getLineNo(), ast.getColumnNo(), key, name); } public void setUnlessImports(String unlessImports) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java index da188129..b2041870 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -41,7 +41,7 @@ protected void processFiltered(File file, FileText fileText) throws CheckstyleEx visitCompilationUnit(JavaParser.parseFileText(fileText, Options.WITHOUT_COMMENTS)); } } - + private void visitCompilationUnit(DetailAST ast) { DetailAST child = ast.getFirstChild(); while (child != null) { @@ -52,5 +52,5 @@ private void visitCompilationUnit(DetailAST ast) { child = child.getNextSibling(); } } - + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 9982830e..a27f9263 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -16,6 +16,9 @@ junit5.bannedImport=Import ''{0}'' should not be used in a JUnit 5 test. junit5.bannedTestAnnotation=JUnit 4 @Test annotation should not be used in a JUnit 5 test. junit5.lifecyclePrivateMethod=Lifecycle method ''{0}'' should not be private. junit5.lifecyclePublicMethod=Lifecycle method ''{0}'' should not be public. +junit5.publicClass=Test class ''{0}'' should not be public. +junit5.publicNestedClass=Nested test class ''{0}'' should not be public. +junit5.privateNestedClass=Nested test class ''{0}'' should not be private. junit5.testPrivateMethod=Test method ''{0}'' should not be private. junit5.testPublicMethod=Test method ''{0}'' should not be public. lambda.missingParen=Lambda argument missing parentheses. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5BadModifier.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5BadModifier.txt index 376aa13c..7ec1d4de 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5BadModifier.txt +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5BadModifier.txt @@ -1,7 +1,11 @@ ++Test class 'JUnit5BadModifier' should not be public ++Nested test class 'PublicNestedTests' should not be public ++Nested test class 'PrivateNestedTests' should not be private +Test method 'doSomethingWorks' should not be public +Test method 'doSomethingElseWorks' should not be private +Test method 'doSomethingWithTemplateWorks' should not be public +Test method 'doSomethingElseWithTemplateWorks' should not be private ++Test method 'nestedPublicTest' should not be public +Lifecycle method 'publicBeforeAll' should not be public +Lifecycle method 'publicBeforeEach' should not be public +Lifecycle method 'publicAfterAll' should not be public diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java index e9b91697..9c59c587 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java @@ -88,4 +88,19 @@ private void doSomethingElseWithTemplateWorks() { // test here } + @Nested + public static class PublicNestedTests { + + @Test + public void nestedPublicTest() { + + } + + } + + @Nested + private static class PrivateNestedTests { + + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java index cc7b4cd0..bad7023d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ * * @author Phillip Webb */ -public class JUnit5Valid { +class JUnit5Valid { @Test void doSomethingWorks() { From 1adc8b1c145dca113ae1c133f549ea827a1f7708 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 09:12:50 +0000 Subject: [PATCH 197/238] Bump xml2js to 0.5.0 and @vscode/vsce to 2.19.0 Bumps [xml2js](https://github.com/Leonidas-from-XIV/node-xml2js) to 0.5.0 and updates ancestor dependency [@vscode/vsce](https://github.com/Microsoft/vsce). These dependencies need to be updated together. Updates `xml2js` from 0.4.23 to 0.5.0 - [Commits](https://github.com/Leonidas-from-XIV/node-xml2js/commits/0.5.0) Updates `@vscode/vsce` from 2.17.0 to 2.19.0 - [Release notes](https://github.com/Microsoft/vsce/releases) - [Commits](https://github.com/Microsoft/vsce/compare/v2.17.0...v2.19.0) --- updated-dependencies: - dependency-name: xml2js dependency-type: indirect - dependency-name: "@vscode/vsce" dependency-type: direct:development ... Signed-off-by: dependabot[bot] See gh-375 --- .../package-lock.json | 23 ++++++++++++------- .../package.json | 2 +- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 9572cc6f..cf72087a 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -14,7 +14,7 @@ "@types/vscode": "^1.75.0", "@typescript-eslint/eslint-plugin": "^5.52.0", "@vscode/test-electron": "^2.2.2", - "@vscode/vsce": "^2.17.0", + "@vscode/vsce": "^2.19.0", "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", @@ -376,9 +376,9 @@ } }, "node_modules/@vscode/vsce": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.17.0.tgz", - "integrity": "sha512-W4HN5MtTVj/mroQU1d82bUEeWM3dUykMFnMYZPtZ6jrMiHN1PUoN3RGcS896N0r2rIq8KpWDtufcQHgK8VfgpA==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.19.0.tgz", + "integrity": "sha512-dAlILxC5ggOutcvJY24jxz913wimGiUrHaPkk16Gm9/PGFbz1YezWtrXsTKUtJws4fIlpX2UIlVlVESWq8lkfQ==", "dev": true, "dependencies": { "azure-devops-node-api": "^11.0.1", @@ -387,6 +387,7 @@ "commander": "^6.1.0", "glob": "^7.0.6", "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", "leven": "^3.1.0", "markdown-it": "^12.3.2", "mime": "^1.3.4", @@ -397,7 +398,7 @@ "tmp": "^0.2.1", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", - "xml2js": "^0.4.23", + "xml2js": "^0.5.0", "yauzl": "^2.3.1", "yazl": "^2.2.2" }, @@ -2138,6 +2139,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/keytar": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", @@ -3636,9 +3643,9 @@ "dev": true }, "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, "dependencies": { "sax": ">=0.6.0", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index cdb080b7..86a6b65b 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -33,7 +33,7 @@ "@types/vscode": "^1.75.0", "@typescript-eslint/eslint-plugin": "^5.52.0", "@vscode/test-electron": "^2.2.2", - "@vscode/vsce": "^2.17.0", + "@vscode/vsce": "^2.19.0", "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", From 09679cce7e84ba756262006e6ae8ee36e1725c16 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 26 Jul 2024 13:53:23 +0100 Subject: [PATCH 198/238] Include MissingDeprecated in the default checks Closes gh-420 --- .../eclipse/projectsettings/org.eclipse.jdt.core.prefs | 2 +- .../spring/javaformat/checkstyle/spring-checkstyle.xml | 1 + .../checkstyle/SpringConfigurationLoaderTests.java | 10 ++++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 09b98f97..c08217ef 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -45,7 +45,7 @@ org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=default org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index ba9026a6..a41c37bf 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -22,6 +22,7 @@ + ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(61); + Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); + assertThat(commentChecks).hasSize(6); } @Test public void loadWithExcludeShouldExcludeChecks() { - Set excludes = Collections - .singleton("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck"); + Set excludes = new HashSet(Arrays.asList("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck", + "com.puppycrawl.tools.checkstyle.checks.annotation.MissingDeprecatedCheck")); Collection checks = load(excludes); assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(60); + Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); + assertThat(commentChecks).hasSize(5); } @Test From ab2ecf7eb9c96bc07fe9ba75504c2d4de9450f9c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 26 Jul 2024 16:58:22 +0100 Subject: [PATCH 199/238] Polish "Check that JUnit 5 test classes are package-private" - Clear the new fields each time a new tree is begun. This prevents state from one tree affecting the checking of another. - Allow abstract test classes to be public Closes gh-281 --- .../checkstyle/check/SpringJUnit5Check.java | 9 +++++- .../check/JUnit5PublicAbstractIsValid.txt | 1 + .../source/JUnit5PublicAbstractIsValid.java | 32 +++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5PublicAbstractIsValid.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index 59eb1bec..e110eab7 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -97,9 +97,11 @@ public int[] getAcceptableTokens() { @Override public void beginTree(DetailAST rootAST) { + this.testClass = null; this.imports.clear(); this.testMethods.clear(); this.lifecycleMethods.clear(); + this.nestedTestClasses.clear(); } @Override @@ -181,7 +183,7 @@ private boolean shouldCheck() { } private void check() { - if (this.testClass != null) { + if (this.testClass != null && !isAbstract(this.testClass)) { checkVisibility(Arrays.asList(this.testClass), "junit5.publicClass", null); } checkVisibility(this.nestedTestClasses, "junit5.publicNestedClass", "junit5.privateNestedClass"); @@ -200,6 +202,11 @@ private void check() { checkVisibility(this.lifecycleMethods, "junit5.lifecyclePublicMethod", "junit5.lifecyclePrivateMethod"); } + private boolean isAbstract(DetailAST ast) { + DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); + return modifiers.findFirstToken(TokenTypes.ABSTRACT) != null; + } + private void checkVisibility(List asts, String publicMessageKey, String privateMessageKey) { for (DetailAST ast : asts) { DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5PublicAbstractIsValid.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5PublicAbstractIsValid.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5PublicAbstractIsValid.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java new file mode 100644 index 00000000..d56bbbd6 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017-2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.junit.jupiter.api.Test; + +/** + * This is a valid example. We allow abstract test classes to be + * public so that classes in other packages can extend them. + * + * @author Andy Wilkinson + */ +public abstract class JUnit5PublicAbstractIsValid { + + @Test + void doSomethingWorks() { + // test here + } + +} From 9eeeee17446836ae98ee1ee4fd3d5e1127081162 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 13 Aug 2024 11:19:45 +0100 Subject: [PATCH 200/238] Reformat code --- .../javaformat/checkstyle/check/SpringJUnit5Check.java | 9 +++++---- .../checkstyle/check/SpringTestFileNameCheck.java | 3 ++- .../checkstyle/SpringConfigurationLoaderTests.java | 5 +++-- .../jdk17/eclipse/JavadocLineBreakPreparator.java | 3 +-- .../jdk8/eclipse/JavadocLineBreakPreparator.java | 3 +-- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index e110eab7..cdd8efc4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -129,8 +129,9 @@ private void visitMethodDef(DetailAST ast) { } private boolean containsAnnotation(DetailAST ast, List annotations) { - List annotationNames = annotations.stream().flatMap((annotation) -> - Stream.of(annotation.simpleName, annotation.fullyQualifiedName())).collect(Collectors.toList()); + List annotationNames = annotations.stream() + .flatMap((annotation) -> Stream.of(annotation.simpleName, annotation.fullyQualifiedName())) + .collect(Collectors.toList()); try { return AnnotationUtil.containsAnnotation(ast, annotationNames); } @@ -138,8 +139,8 @@ private boolean containsAnnotation(DetailAST ast, List annotations) // Checkstyle >= 10.3 (https://github.com/checkstyle/checkstyle/issues/14134) Set annotationNamesSet = new HashSet<>(annotationNames); try { - return (boolean) AnnotationUtil.class.getMethod("containsAnnotation", DetailAST.class, Set.class) - .invoke(null, ast, annotationNamesSet); + return (boolean) AnnotationUtil.class.getMethod("containsAnnotation", DetailAST.class, Set.class) + .invoke(null, ast, annotationNamesSet); } catch (Exception ex2) { throw new RuntimeException("containsAnnotation failed", ex2); diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java index b2041870..01708750 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -27,7 +27,8 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; /** - * Checks that test class filenames end {@literal Tests.java} and not {@literal Test.java}. + * Checks that test class filenames end {@literal Tests.java} and not + * {@literal Test.java}. * * @author Phillip Webb * @author Andy Wilkinson diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 760d5ed2..33536e6b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -57,8 +57,9 @@ public void loadShouldLoadChecks() { @Test public void loadWithExcludeShouldExcludeChecks() { - Set excludes = new HashSet(Arrays.asList("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck", - "com.puppycrawl.tools.checkstyle.checks.annotation.MissingDeprecatedCheck")); + Set excludes = new HashSet( + Arrays.asList("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck", + "com.puppycrawl.tools.checkstyle.checks.annotation.MissingDeprecatedCheck")); Collection checks = load(excludes); assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index e0dd5d8c..b66efa27 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -94,8 +94,7 @@ public boolean visit(Javadoc node) { int commentIndex = this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameCOMMENT_JAVADOC); Token commentToken = this.tokenManager.get(commentIndex); this.commentTokenManager = (commentToken.getInternalStructure() != null) - ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) - : null; + ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) : null; this.declaration = node.getParent(); this.firstTagElement = true; this.hasText = false; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java index 4113bbf2..3a4a5f41 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java @@ -94,8 +94,7 @@ public boolean visit(Javadoc node) { int commentIndex = this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameCOMMENT_JAVADOC); Token commentToken = this.tokenManager.get(commentIndex); this.commentTokenManager = (commentToken.getInternalStructure() != null) - ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) - : null; + ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) : null; this.declaration = node.getParent(); this.firstTagElement = true; this.hasText = false; From 30ce46901ff03f2205b347ea4b957e978472f9c3 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 13 Aug 2024 11:17:38 +0100 Subject: [PATCH 201/238] Skip SpringLeadingWhitespaceCheck in text blocks Closes gh-421 --- .../check/SpringLeadingWhitespaceCheck.java | 53 ++++++++++++++++++- .../LeadingWhitespaceTabsAndTextBlock.txt | 1 + .../LeadingWhitespaceTabsAndTextBlock.java | 33 ++++++++++++ 3 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabsAndTextBlock.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java index 188e6781..8e3fa83f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java @@ -17,7 +17,9 @@ package io.spring.javaformat.checkstyle.check; import java.io.File; +import java.util.ArrayDeque; import java.util.Collections; +import java.util.Deque; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; @@ -26,6 +28,7 @@ import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.FileContents; import com.puppycrawl.tools.checkstyle.api.FileText; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; import io.spring.javaformat.config.IndentationStyle; import io.spring.javaformat.config.JavaFormatConfig; @@ -49,14 +52,32 @@ public class SpringLeadingWhitespaceCheck extends AbstractSpringCheck { private IndentationStyle indentationStyle; + private final Deque textBlockPairs = new ArrayDeque<>(); + @Override public int[] getAcceptableTokens() { - return NO_REQUIRED_TOKENS; + return new int[] { TokenTypes.TEXT_BLOCK_LITERAL_BEGIN, TokenTypes.TEXT_BLOCK_LITERAL_END }; + } + + @Override + public void visitToken(DetailAST ast) { + super.visitToken(ast); + if (ast.getType() == TokenTypes.TEXT_BLOCK_LITERAL_BEGIN) { + this.textBlockPairs.add(new TextBlockPair(ast)); + } + else if (ast.getType() == TokenTypes.TEXT_BLOCK_LITERAL_END) { + this.textBlockPairs.getLast().end(ast); + } } @Override public void beginTree(DetailAST rootAST) { super.beginTree(rootAST); + this.textBlockPairs.clear(); + } + + @Override + public void finishTree(DetailAST rootAST) { FileContents fileContents = getFileContents(); FileText fileText = fileContents.getText(); File file = fileText.getFile(); @@ -66,8 +87,11 @@ public void beginTree(DetailAST rootAST) { IndentationStyle indentationStyle = (this.indentationStyle != null) ? this.indentationStyle : JavaFormatConfig.findFrom(file.getParentFile()).getIndentationStyle(); for (int i = 0; i < fileText.size(); i++) { - String line = fileText.get(i); int lineNo = i + 1; + if (isInTextBlock(lineNo)) { + continue; + } + String line = fileText.get(i); Matcher matcher = PATTERN.matcher(line); boolean found = matcher.find(0); while (found @@ -78,6 +102,11 @@ public void beginTree(DetailAST rootAST) { log(lineNo, "leadingwhitespace.incorrect", indentationStyle.toString().toLowerCase()); } } + super.finishTree(rootAST); + } + + private boolean isInTextBlock(int lineNo) { + return this.textBlockPairs.stream().anyMatch((textBlockPair) -> textBlockPair.contains(lineNo)); } public void setIndentationStyle(String indentationStyle) { @@ -85,4 +114,24 @@ public void setIndentationStyle(String indentationStyle) { ? IndentationStyle.valueOf(indentationStyle.toUpperCase()) : null; } + private static class TextBlockPair { + + private final DetailAST begin; + + private DetailAST end; + + TextBlockPair(DetailAST begin) { + this.begin = begin; + } + + public boolean contains(int lineNo) { + return (lineNo > this.begin.getLineNo()) && (lineNo <= this.end.getLineNo()); + } + + void end(DetailAST end) { + this.end = end; + } + + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabsAndTextBlock.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabsAndTextBlock.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabsAndTextBlock.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java new file mode 100644 index 00000000..e9e27b7b --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Leading whitepace with a text block. + * + * @author Phillip Webb + */ +public class LeadingWhitespaceTabsAndTextBlock { + + /** + * Comments are ignored. + */ + public void hello() { + System.out.println("""" + Hello + World!"""); + } + +} From bbd8fa95abe07c2cf998443a0cb56dc12563d092 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Tue, 13 Aug 2024 13:21:33 +0000 Subject: [PATCH 202/238] Next development version (v0.0.44-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index 60e85607..d8ed6e45 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.42 +:release-version: 0.0.43 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index a619156b..c7e0ba80 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index b3bc0f41..251a0478 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.43-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.44-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.43-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.44-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index cec0c38e..cf225184 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index b50eb61c..9f08618a 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.43.qualifier" + version="0.0.44.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index f0447048..0393db0c 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 3bb9eaf8..e3ad51fd 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 511b7d62..fc5cf2eb 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 806bab83..7d8f71ce 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index eed2c0de..4f9fbff4 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.43.qualifier +Bundle-Version: 0.0.44.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 29003f38..bf8669b4 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 5bbf628e..46b89ccb 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.43.qualifier +Bundle-Version: 0.0.44.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 81e1a81b..dec698d9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index c1f85ed9..b0d1b674 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 650c586f..21ea0f9b 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index e0da30d0..e3026aee 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index c96c929e..f6967ca0 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 3605f2a0..1daa8cad 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 46ee2658..a1e09a0e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 8575c456..3e577cbd 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 299baf24..896f87b8 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 3e2efc32..bdcb704c 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 703c3a3c..e87f39f0 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index cf72087a..f991a7ab 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.43-SNAPSHOT", + "version": "0.0.44-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.43-SNAPSHOT", + "version": "0.0.44-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 86a6b65b..290ae51f 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.43-SNAPSHOT", + "version": "0.0.44-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index cdac8ac0..66239a95 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index fc14a0f0..e5991b91 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 98a45e42..3ea8357e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 39d27d20..cf59a073 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index e8f28aee..abc2e727 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.43.qualifier +Bundle-Version: 0.0.44.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index cda64abf..2eff5105 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 6ceab19d..24f373c1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.43.qualifier +Bundle-Version: 0.0.44.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 0016a013..d2ce8030 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 3f8b1057..5e64f7b4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 83f65fb9..88f90cfc 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 44a54dbd..2a686bb6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 12ae265c..9be91feb 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 72eb47c8..d047564d 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 601f6dd7..6485c73e 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 9f247485..a2315b1f 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index bc439188..41e52b05 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 3a6c41c3..c604551e 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From def2b30c59589a7457a97da1df1ffe225d978ab1 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 15 Jan 2025 09:41:11 +0000 Subject: [PATCH 203/238] Switch from CLA to DCO --- .github/dco.yml | 2 ++ CONTRIBUTING.adoc | 7 +++---- 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 .github/dco.yml diff --git a/.github/dco.yml b/.github/dco.yml new file mode 100644 index 00000000..0c4b142e --- /dev/null +++ b/.github/dco.yml @@ -0,0 +1,2 @@ +require: + members: false diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index c4378ac3..a7e07f62 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -12,10 +12,9 @@ Please report unacceptable behavior to spring-code-of-conduct@pivotal.io. -== Sign the Contributor License Agreement -Before we accept a non-trivial patch or pull request we will need you to https://cla.pivotal.io/sign/spring[sign the Contributor License Agreement]. -Signing the contributor's agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions, and you will get an author credit if we do. -Active contributors might be asked to join the core team, and given the ability to merge pull requests. +== Include a Signed-off-by Trailer +All commits must include a __Signed-off-by__ trailer at the end of each commit message to indicate that the contributor agrees to the https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin[Developer Certificate of Origin (DCO)]. +For additional details, please refer to the blog post https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring[Hello DCO, Goodbye CLA: Simplifying Contributions to Spring]. From bdd396fef8a7fa34be2bc44eae19102373ff170e Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 23 Apr 2025 15:35:43 +0100 Subject: [PATCH 204/238] Upgrade to Java 17.0.14 --- .sdkmanrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.sdkmanrc b/.sdkmanrc index 828308d2..83ec5a0a 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=17.0.12-librca +java=17.0.14-librca From 601aa275b425d3b06ed32221725fc0cc8ad2cc0f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 23 Apr 2025 19:10:43 +0100 Subject: [PATCH 205/238] Tolerate breaking change in Checkstyle 10.22 In Checkstyle 10.22 the scope property on JavadocVariableCheck was renamed to accessModifiers. This commit tolerates this change by templating spring-checkstyle.xml and replacing the property name in the XML based on the name of the method that's available on JavadocVariableCheck. Closes gh-433 --- .../checkstyle/SpringConfigurationLoader.java | 44 ++++++++++++++++--- .../checkstyle/spring-checkstyle.xml | 2 +- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 12bd56c7..42ca7311 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,11 @@ package io.spring.javaformat.checkstyle; +import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collection; import java.util.stream.Collectors; @@ -30,6 +34,8 @@ import com.puppycrawl.tools.checkstyle.api.Context; import com.puppycrawl.tools.checkstyle.api.Contextualizable; import com.puppycrawl.tools.checkstyle.api.FileSetCheck; +import com.puppycrawl.tools.checkstyle.api.Scope; +import com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocVariableCheck; import org.xml.sax.InputSource; /** @@ -50,17 +56,45 @@ class SpringConfigurationLoader { } public Collection load(PropertyResolver propertyResolver) { - Configuration config = loadConfiguration(getClass().getResourceAsStream("spring-checkstyle.xml"), - propertyResolver); + Configuration config = loadConfiguration(loadConfigurationSource(), propertyResolver); return Arrays.stream(config.getChildren()) .filter(this.moduleFactory::nonFiltered) .map(this::load) .collect(Collectors.toList()); } - private Configuration loadConfiguration(InputStream inputStream, PropertyResolver propertyResolver) { + private String loadConfigurationSource() { + try (InputStream stream = getClass().getResourceAsStream("spring-checkstyle.xml")) { + StringBuilder builder = new StringBuilder(); + byte[] buffer = new byte[4096]; + int read; + while ((read = stream.read(buffer)) > 0) { + builder.append(new String(buffer, 0, read, StandardCharsets.UTF_8)); + } + return preprocessConfigurationSource(builder.toString()); + } + catch (IOException ex) { + throw new UncheckedIOException(ex); + } + } + + private String preprocessConfigurationSource(String source) { + return source.replace("{{javadocVariableCheckScopeProperty}}", javadocVariableCheckScopeProperty()); + } + + private String javadocVariableCheckScopeProperty() { + try { + JavadocVariableCheck.class.getMethod("setScope", Scope.class); + return "scope"; + } + catch (NoSuchMethodException ex) { + return "accessModifiers"; + } + } + + private Configuration loadConfiguration(String source, PropertyResolver propertyResolver) { try { - InputSource inputSource = new InputSource(inputStream); + InputSource inputSource = new InputSource(new StringReader(source)); return ConfigurationLoader.loadConfiguration(inputSource, propertyResolver, IgnoredModulesOptions.EXECUTE); } catch (CheckstyleException ex) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index a41c37bf..fa6f8a64 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -90,7 +90,7 @@ - + From 35984352460298190f8ae9e45d5dd35a74b30518 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Sat, 21 Sep 2024 21:25:25 +0900 Subject: [PATCH 206/238] Polish sample in README See gh-423 --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index d8ed6e45..cb549f97 100644 --- a/README.adoc +++ b/README.adoc @@ -391,7 +391,7 @@ For example: [source,java,indent=0,subs="normal"] ---- -class Name { +public class Name { private final String first; From f923fae0f490126f6eabb51dcb7b690ccc10717c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 28 Apr 2025 13:53:11 +0100 Subject: [PATCH 207/238] Fix copy-paste error in build-pull-request workflow --- .github/workflows/build-pull-request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-pull-request.yml b/.github/workflows/build-pull-request.yml index 0965a8c3..9e085b69 100644 --- a/.github/workflows/build-pull-request.yml +++ b/.github/workflows/build-pull-request.yml @@ -6,7 +6,7 @@ jobs: build: name: Build Pull Request runs-on: ubuntu-latest - if: ${{ github.repository == 'spring-projects/spring-boot' }} + if: ${{ github.repository == 'spring-io/spring-javaformat' }} steps: - name: Check Out uses: actions/checkout@v4 From 61466c2e234865f3b83344497b3b7df53df2f242 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Sun, 27 Apr 2025 22:44:29 +0900 Subject: [PATCH 208/238] Throw VerificationException for build verification failures See gh-436 Signed-off-by: Johnny Lim --- .../java/io/spring/javaformat/gradle/tasks/CheckFormat.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index 096e1109..7e531d42 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -24,10 +24,10 @@ import java.util.List; import java.util.stream.Collectors; -import org.gradle.api.GradleException; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.VerificationException; import io.spring.javaformat.formatter.FileEdit; @@ -63,7 +63,7 @@ public void checkFormatting() throws IOException, InterruptedException { message.append("\nRun `format` to fix."); Files.write(this.reportLocation.toPath(), Collections.singletonList(message.toString()), StandardOpenOption.CREATE); - throw new GradleException(message.toString()); + throw new VerificationException(message.toString()); } else { this.reportLocation.createNewFile(); From 79d64af8ddf0c847abd6bd113b5577dff58f41dc Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 2 May 2025 19:45:48 -0700 Subject: [PATCH 209/238] Upgrade tests to use Java 17 --- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 41e52b05..6a0da60a 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -12,7 +12,7 @@ Spring JavaFormat Formatter Tests ${basedir}/../.. - 11 + 17 From 355abdc953839b4318af7b67cb4a8337dc5ddf1d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 2 May 2025 19:45:57 -0700 Subject: [PATCH 210/238] Add JSpecifyPreparator to consistently format `@Nullable` Fixes gh-435 --- .../projectsettings/org.eclipse.jdt.ui.prefs | 1 + .../formatter/AbstractFormatterTests.java | 2 +- .../src/test/resources/expected/nullable.txt | 21 +++++ .../src/test/resources/source/nullable.txt | 20 ++++ .../eclipse/EclipseJdk17CodeFormatter.java | 3 +- .../jdk17/eclipse/JSpecifyPreparator.java | 94 +++++++++++++++++++ .../eclipse/EclipseJdk8CodeFormatter.java | 3 +- .../jdk8/eclipse/JSpecifyPreparator.java | 94 +++++++++++++++++++ 8 files changed, 235 insertions(+), 3 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs index af9117f9..23d79e64 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs @@ -1,3 +1,4 @@ +cleanup.add_all=false cleanup.add_default_serial_version_id=true cleanup.add_generated_serial_version_id=false cleanup.add_missing_annotations=true diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index bf873dd2..c01324c2 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt new file mode 100644 index 00000000..b077cb5d --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -0,0 +1,21 @@ +package example; + +import org.jspecify.annotations.Nullable; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override + @Nullable String myMethod(String param); + + @Override + public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt new file mode 100644 index 00000000..b2952241 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -0,0 +1,20 @@ +package example; + +import org.jspecify.annotations.Nullable; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override @Nullable String myMethod(String param); + + @Override public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String @Nullable [] array, @Nullable + String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java index 45103159..b902e3f3 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,6 +43,7 @@ public EclipseJdk17CodeFormatter(JavaFormatConfig javaFormatConfig) { this.appliedOptions = options; addPreparator(new JavadocLineBreakPreparator()); addPreparator(new CodeLineBreakPreparator()); + addPreparator(new JSpecifyPreparator()); } @Override diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java new file mode 100644 index 00000000..7d017570 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -0,0 +1,94 @@ +/* + * Copyright 2017-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter.jdk17.eclipse; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Annotation; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.IExtendedModifier; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.MethodDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.SingleVariableDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.TokenManager; + +public class JSpecifyPreparator implements Preparator { + + private static final Set ANNOTATION_NAMES = new HashSet<>( + Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + + @Override + public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { + if ((kind & CodeFormatter.K_COMPILATION_UNIT) != 0) { + ASTVisitor visitor = new Vistor(tokenManager); + astRoot.accept(visitor); + } + } + + private static class Vistor extends ASTVisitor { + + private final TokenManager tokenManager; + + Vistor(TokenManager tokenManager) { + this.tokenManager = tokenManager; + } + + @Override + @SuppressWarnings("unchecked") + public boolean visit(MethodDeclaration node) { + Annotation lastAnnotation = getLastAnnotation((List) node.modifiers()); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); + } + return true; + } + + @Override + @SuppressWarnings("unchecked") + public void endVisit(SingleVariableDeclaration node) { + if (node.isVarargs()) { + List annotations = node.varargsAnnotations(); + Annotation lastAnnotation = getLastAnnotation(annotations); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).spaceAfter(); + } + } + } + + private Annotation getLastAnnotation(List modifiers) { + Annotation annotation = null; + for (IExtendedModifier modifier : modifiers) { + if (!modifier.isAnnotation()) { + return annotation; + } + annotation = (Annotation) modifier; + } + return annotation; + } + + private boolean isJSpecifyAnnotation(Annotation annotation) { + return (annotation != null) && ANNOTATION_NAMES.contains(annotation.getTypeName().toString()); + } + + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java index 5038538f..fa365db4 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,6 +43,7 @@ public EclipseJdk8CodeFormatter(JavaFormatConfig javaFormatConfig) { this.appliedOptions = options; addPreparator(new JavadocLineBreakPreparator()); addPreparator(new CodeLineBreakPreparator()); + addPreparator(new JSpecifyPreparator()); } @Override diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java new file mode 100644 index 00000000..620b462f --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -0,0 +1,94 @@ +/* + * Copyright 2017-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter.jdk8.eclipse; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Annotation; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.IExtendedModifier; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.MethodDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.SingleVariableDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; + +public class JSpecifyPreparator implements Preparator { + + private static final Set ANNOTATION_NAMES = new HashSet<>( + Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + + @Override + public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { + if ((kind & CodeFormatter.K_COMPILATION_UNIT) != 0) { + ASTVisitor visitor = new Vistor(tokenManager); + astRoot.accept(visitor); + } + } + + private static class Vistor extends ASTVisitor { + + private final TokenManager tokenManager; + + Vistor(TokenManager tokenManager) { + this.tokenManager = tokenManager; + } + + @Override + @SuppressWarnings("unchecked") + public boolean visit(MethodDeclaration node) { + Annotation lastAnnotation = getLastAnnotation((List) node.modifiers()); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); + } + return true; + } + + @Override + @SuppressWarnings("unchecked") + public void endVisit(SingleVariableDeclaration node) { + if (node.isVarargs()) { + List annotations = node.varargsAnnotations(); + Annotation lastAnnotation = getLastAnnotation(annotations); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).spaceAfter(); + } + } + } + + private Annotation getLastAnnotation(List modifiers) { + Annotation annotation = null; + for (IExtendedModifier modifier : modifiers) { + if (!modifier.isAnnotation()) { + return annotation; + } + annotation = (Annotation) modifier; + } + return annotation; + } + + private boolean isJSpecifyAnnotation(Annotation annotation) { + return (annotation != null) && ANNOTATION_NAMES.contains(annotation.getTypeName().toString()); + } + + } + +} From c497b86370b2a62c1c5aff34969251c110263c08 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 14 May 2025 11:53:32 -0700 Subject: [PATCH 211/238] Attempt to fix apt-get install problem --- .github/actions/setup/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 7f8bc0e2..c1d38d98 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -4,7 +4,7 @@ runs: steps: - name: Set Up Utilities shell: bash - run: sudo apt-get -y install libxml2-utils + run: sudo apt-get update && sudo apt-get -y install libxml2-utils - name: Set Up Java uses: actions/setup-java@v4 with: From 2ffeb8ef2bb96d588bcc7c13e6041c77755947f9 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 14 May 2025 19:13:53 +0000 Subject: [PATCH 212/238] Next development version (v0.0.45-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index cb549f97..6ebfec9a 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.43 +:release-version: 0.0.44 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index c7e0ba80..ff0d2732 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 251a0478..cebfcad0 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.44-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.45-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.44-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.45-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index cf225184..e7492a31 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 9f08618a..bbd37c1f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.44.qualifier" + version="0.0.45.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 0393db0c..80811b23 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index e3ad51fd..b1a0200a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index fc5cf2eb..0b2c41b6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 7d8f71ce..6272fb89 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 4f9fbff4..f9dc324d 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.44.qualifier +Bundle-Version: 0.0.45.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index bf8669b4..68810401 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 46b89ccb..30ff2e88 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.44.qualifier +Bundle-Version: 0.0.45.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index dec698d9..9f05ae23 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index b0d1b674..22815dd0 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 21ea0f9b..e9925fbb 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index e3026aee..5ad6e456 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index f6967ca0..233242b6 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 1daa8cad..2a7bdf51 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index a1e09a0e..6c454f53 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 3e577cbd..e46a0764 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 896f87b8..b014b693 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index bdcb704c..9ea0fc98 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index e87f39f0..5d2cc25d 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index f991a7ab..8390499b 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.44-SNAPSHOT", + "version": "0.0.45-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.44-SNAPSHOT", + "version": "0.0.45-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 290ae51f..b6be66c5 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.44-SNAPSHOT", + "version": "0.0.45-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 66239a95..446a2c54 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index e5991b91..ff871443 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 3ea8357e..5ab40720 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index cf59a073..54ddd0c9 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index abc2e727..7f5780eb 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.44.qualifier +Bundle-Version: 0.0.45.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 2eff5105..1ba8c47a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 24f373c1..2c93d052 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.44.qualifier +Bundle-Version: 0.0.45.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index d2ce8030..869a7fd8 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 5e64f7b4..b36d3e7e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 88f90cfc..2a6af271 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 2a686bb6..09a3ad1b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 9be91feb..eb28f8e8 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index d047564d..96af85e1 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 6485c73e..caae72af 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index a2315b1f..ef0f059b 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 6a0da60a..b9269ce4 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index c604551e..1537e2fd 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 4122a3e5528fef124c38a2bd027464bf6423140a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 14 May 2025 12:41:00 -0700 Subject: [PATCH 213/238] Upgrade to jfrog/setup-jfrog-cli v4.5.11 --- .github/workflows/promote.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/promote.yml b/.github/workflows/promote.yml index cad6e40b..e1faac58 100644 --- a/.github/workflows/promote.yml +++ b/.github/workflows/promote.yml @@ -36,7 +36,7 @@ jobs: - name: Check Out uses: actions/checkout@v4 - name: Set Up JFrog CLI - uses: jfrog/setup-jfrog-cli@7c95feb32008765e1b4e626b078dfd897c4340ad # v4.1.2 + uses: jfrog/setup-jfrog-cli@ff5cb544114ffc152db9cea1cd3d5978d5074946 # v4.5.11 env: JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} - name: Check Maven Central Sync Status From e0f76992415e8ff441b4fa7d52a4de0f7d6e9ce5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 15 May 2025 12:20:16 -0700 Subject: [PATCH 214/238] Refine JSpecify support Update formatter to ignore non JSpecify `@Nullable` annotations and relax checkstyle to allow `@Nullable` on the same line. Fixes gh-440 --- .../check/SpringAnnotationLocationCheck.java | 124 ++++++++++++++++++ .../checkstyle/check/messages.properties | 2 + .../checkstyle/spring-checkstyle.xml | 5 +- .../resources/check/AnnotationOnNewLine.txt | 1 + .../resources/source/AnnotationOnNewLine.java | 45 +++++++ .../formatter/AbstractFormatterTests.java | 6 + .../expected/nullable-not-jspecify.txt | 23 ++++ .../expected/nullable-wildcard-import.txt | 22 ++++ .../src/test/resources/expected/nullable.txt | 3 +- .../source/nullable-not-jspecify.txt | 20 +++ .../source/nullable-wildcard-import.txt | 20 +++ .../src/test/resources/source/nullable.txt | 2 +- .../jdk17/eclipse/JSpecifyPreparator.java | 37 +++++- .../jdk8/eclipse/JSpecifyPreparator.java | 37 +++++- 14 files changed, 339 insertions(+), 8 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationOnNewLine.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-not-jspecify.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-wildcard-import.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-not-jspecify.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-wildcard-import.txt diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java new file mode 100644 index 00000000..f0fc0d5e --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java @@ -0,0 +1,124 @@ +/* + * Copyright 2017-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.checkstyle.check; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import com.puppycrawl.tools.checkstyle.api.AbstractCheck; +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; +import com.puppycrawl.tools.checkstyle.checks.annotation.AnnotationLocationCheck; +import com.puppycrawl.tools.checkstyle.utils.CommonUtil; + +/** + * Spring variant of {@link AnnotationLocationCheck}. + * + * @author Phillip Webb + */ +public class SpringAnnotationLocationCheck extends AbstractCheck { + + private static final Set JSPECIFY_ANNOTATION_NAMES = new HashSet<>( + Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + + @Override + public int[] getDefaultTokens() { + return new int[] { TokenTypes.CLASS_DEF, TokenTypes.INTERFACE_DEF, TokenTypes.PACKAGE_DEF, + TokenTypes.ENUM_CONSTANT_DEF, TokenTypes.ENUM_DEF, TokenTypes.METHOD_DEF, TokenTypes.CTOR_DEF, + TokenTypes.VARIABLE_DEF, TokenTypes.RECORD_DEF, TokenTypes.COMPACT_CTOR_DEF, }; + } + + @Override + public int[] getAcceptableTokens() { + return new int[] { TokenTypes.CLASS_DEF, TokenTypes.INTERFACE_DEF, TokenTypes.PACKAGE_DEF, + TokenTypes.ENUM_CONSTANT_DEF, TokenTypes.ENUM_DEF, TokenTypes.METHOD_DEF, TokenTypes.CTOR_DEF, + TokenTypes.VARIABLE_DEF, TokenTypes.ANNOTATION_DEF, TokenTypes.ANNOTATION_FIELD_DEF, + TokenTypes.RECORD_DEF, TokenTypes.COMPACT_CTOR_DEF, }; + } + + @Override + public int[] getRequiredTokens() { + return CommonUtil.EMPTY_INT_ARRAY; + } + + @Override + public void visitToken(DetailAST ast) { + if (ast.getType() != TokenTypes.VARIABLE_DEF || ast.getParent().getType() == TokenTypes.OBJBLOCK) { + DetailAST node = ast.findFirstToken(TokenTypes.MODIFIERS); + node = (node != null) ? node : ast.findFirstToken(TokenTypes.ANNOTATIONS); + checkAnnotations(node, getExpectedAnnotationIndentation(node)); + } + } + + private int getExpectedAnnotationIndentation(DetailAST node) { + return node.getColumnNo(); + } + + private void checkAnnotations(DetailAST node, int correctIndentation) { + DetailAST annotation = node.getFirstChild(); + while (annotation != null && annotation.getType() == TokenTypes.ANNOTATION) { + checkAnnotation(correctIndentation, annotation); + annotation = annotation.getNextSibling(); + } + } + + private void checkAnnotation(int correctIndentation, DetailAST annotation) { + String annotationName = getAnnotationName(annotation); + if (!isCorrectLocation(annotation) && !isJSpecifyAnnotation(annotationName)) { + log(annotation, AnnotationLocationCheck.MSG_KEY_ANNOTATION_LOCATION_ALONE, annotationName); + } + else if (annotation.getColumnNo() != correctIndentation && !hasNodeBefore(annotation)) { + log(annotation, AnnotationLocationCheck.MSG_KEY_ANNOTATION_LOCATION, annotationName, + annotation.getColumnNo(), correctIndentation); + } + } + + private String getAnnotationName(DetailAST annotation) { + DetailAST identNode = annotation.findFirstToken(TokenTypes.IDENT); + if (identNode == null) { + identNode = annotation.findFirstToken(TokenTypes.DOT).findFirstToken(TokenTypes.IDENT); + } + return identNode.getText(); + } + + private boolean isCorrectLocation(DetailAST annotation) { + return !hasNodeBeside(annotation); + } + + private boolean hasNodeBeside(DetailAST annotation) { + return hasNodeBefore(annotation) || hasNodeAfter(annotation); + } + + private boolean hasNodeBefore(DetailAST annotation) { + int annotationLineNo = annotation.getLineNo(); + DetailAST previousNode = annotation.getPreviousSibling(); + return (previousNode != null) && (annotationLineNo == previousNode.getLineNo()); + } + + private boolean hasNodeAfter(DetailAST annotation) { + int annotationLineNo = annotation.getLineNo(); + DetailAST nextNode = annotation.getNextSibling(); + nextNode = (nextNode != null) ? nextNode : annotation.getParent().getNextSibling(); + return annotationLineNo == nextNode.getLineNo(); + } + + private boolean isJSpecifyAnnotation(String annotationName) { + return JSPECIFY_ANNOTATION_NAMES.contains(annotationName); + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index a27f9263..cdea619e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -1,3 +1,5 @@ +annotation.location=Annotation ''{0}'' have incorrect indentation level {1}, expected level should be {2}. +annotation.location.alone=Annotation ''{0}'' should be alone on line. catch.singleLetter=Single letter catch variable (use "ex" instead). catch.wideEye=''o_O'' catch variable (use "ex" instead). header.unexpected=Unexpected header. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index fa6f8a64..4da52558 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -24,10 +24,7 @@ - - - + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationOnNewLine.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationOnNewLine.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationOnNewLine.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java new file mode 100644 index 00000000..8799aae3 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java @@ -0,0 +1,45 @@ +/* + * Copyright 2017-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.jspecify.annotations.Nullable; + +/** + * This is a valid example. + * + * @author Phillip Webb + */ +public class AnnotationOnNewLine { + + @Override + public String toString() { + return ""; + } + + @Nullable String test1() { + return ""; + } + + @Override + @Nullable String test2() { + return ""; + } + + @Override + public @Nullable String test3() { + return ""; + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index c01324c2..f2bebe0a 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -21,6 +21,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import io.spring.javaformat.config.JavaBaseline; @@ -60,6 +61,7 @@ protected static Item[] items(String expectedOverride) { addItem(items, javaBaseline, source, expected, config); } } + items.sort(Comparator.comparing(Item::getName)); return items.toArray(new Item[0]); } @@ -139,6 +141,10 @@ private JavaFormatConfig loadConfig(JavaBaseline javaBaseline, File configFile) return JavaFormatConfig.of(javaBaseline, config.getIndentationStyle()); } + String getName() { + return this.source.getName(); + } + public File getSource() { return this.source; } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-not-jspecify.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-not-jspecify.txt new file mode 100644 index 00000000..dbdb1f45 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-not-jspecify.txt @@ -0,0 +1,23 @@ +package example; + +import com.example.Nullable; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override + @Nullable + String myMethod(String param); + + @Override + public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, + @Nullable String @Nullable... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-wildcard-import.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-wildcard-import.txt new file mode 100644 index 00000000..053cbc13 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-wildcard-import.txt @@ -0,0 +1,22 @@ +package example; + +import org.jspecify.annotations.*; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override + @Nullable String myMethod(String param); + + @Override + public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, + @Nullable String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt index b077cb5d..8c2d80e6 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -16,6 +16,7 @@ public interface ExampleNullables { @Override public @Nullable String myPublicMethod(String param); - Object myArrayMethod(@Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, + @Nullable String @Nullable ... varargs); } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-not-jspecify.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-not-jspecify.txt new file mode 100644 index 00000000..011a2189 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-not-jspecify.txt @@ -0,0 +1,20 @@ +package example; + +import com.example.Nullable; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override @Nullable String myMethod(String param); + + @Override public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable + String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-wildcard-import.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-wildcard-import.txt new file mode 100644 index 00000000..11c65198 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-wildcard-import.txt @@ -0,0 +1,20 @@ +package example; + +import org.jspecify.annotations.*; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override @Nullable String myMethod(String param); + + @Override public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable + String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt index b2952241..286e78fc 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -14,7 +14,7 @@ public interface ExampleNullables { @Override public @Nullable String myPublicMethod(String param); - Object myArrayMethod(@Nullable String @Nullable [] array, @Nullable + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index 7d017570..e99256c2 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -17,14 +17,20 @@ package io.spring.javaformat.formatter.jdk17.eclipse; import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Annotation; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.CompilationUnit; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.IExtendedModifier; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.MethodDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.SingleVariableDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; @@ -33,9 +39,15 @@ public class JSpecifyPreparator implements Preparator { + private static final String PACKAGE_NAME = "org.jspecify.annotations"; + private static final Set ANNOTATION_NAMES = new HashSet<>( Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + private static final Set FULLY_QUALIFIED_ANNOTATION_NAMES = ANNOTATION_NAMES.stream() + .map((annotationName) -> PACKAGE_NAME + "." + annotationName) + .collect(Collectors.toSet()); + @Override public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { if ((kind & CodeFormatter.K_COMPILATION_UNIT) != 0) { @@ -48,10 +60,31 @@ private static class Vistor extends ASTVisitor { private final TokenManager tokenManager; + private final Map fullyQualified = new HashMap<>(); + Vistor(TokenManager tokenManager) { this.tokenManager = tokenManager; } + @Override + public boolean visit(CompilationUnit node) { + this.fullyQualified.clear(); + return super.visit(node); + } + + @Override + public boolean visit(ImportDeclaration node) { + String name = node.getName().toString(); + if (name.equals(PACKAGE_NAME) || name.startsWith(PACKAGE_NAME)) { + Set annotationNames = (node.isOnDemand()) ? ANNOTATION_NAMES + : Collections.singleton(name.substring(name.lastIndexOf(".") + 1)); + for (String annotationName : annotationNames) { + this.fullyQualified.put(annotationName, PACKAGE_NAME + "." + annotationName); + } + } + return super.visit(node); + } + @Override @SuppressWarnings("unchecked") public boolean visit(MethodDeclaration node) { @@ -86,7 +119,9 @@ private Annotation getLastAnnotation(List modifiers } private boolean isJSpecifyAnnotation(Annotation annotation) { - return (annotation != null) && ANNOTATION_NAMES.contains(annotation.getTypeName().toString()); + String fullyQualifiedName = (annotation != null) + ? this.fullyQualified.get(annotation.getTypeName().toString()) : null; + return (fullyQualifiedName != null) && FULLY_QUALIFIED_ANNOTATION_NAMES.contains(fullyQualifiedName); } } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index 620b462f..e1f0e121 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -17,14 +17,20 @@ package io.spring.javaformat.formatter.jdk8.eclipse; import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Annotation; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.CompilationUnit; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.IExtendedModifier; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.MethodDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.SingleVariableDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; @@ -33,9 +39,15 @@ public class JSpecifyPreparator implements Preparator { + private static final String PACKAGE_NAME = "org.jspecify.annotations"; + private static final Set ANNOTATION_NAMES = new HashSet<>( Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + private static final Set FULLY_QUALIFIED_ANNOTATION_NAMES = ANNOTATION_NAMES.stream() + .map((annotationName) -> PACKAGE_NAME + "." + annotationName) + .collect(Collectors.toSet()); + @Override public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { if ((kind & CodeFormatter.K_COMPILATION_UNIT) != 0) { @@ -48,10 +60,31 @@ private static class Vistor extends ASTVisitor { private final TokenManager tokenManager; + private final Map fullyQualified = new HashMap<>(); + Vistor(TokenManager tokenManager) { this.tokenManager = tokenManager; } + @Override + public boolean visit(CompilationUnit node) { + this.fullyQualified.clear(); + return super.visit(node); + } + + @Override + public boolean visit(ImportDeclaration node) { + String name = node.getName().toString(); + if (name.equals(PACKAGE_NAME) || name.startsWith(PACKAGE_NAME)) { + Set annotationNames = (node.isOnDemand()) ? ANNOTATION_NAMES + : Collections.singleton(name.substring(name.lastIndexOf(".") + 1)); + for (String annotationName : annotationNames) { + this.fullyQualified.put(annotationName, PACKAGE_NAME + "." + annotationName); + } + } + return super.visit(node); + } + @Override @SuppressWarnings("unchecked") public boolean visit(MethodDeclaration node) { @@ -86,7 +119,9 @@ private Annotation getLastAnnotation(List modifiers } private boolean isJSpecifyAnnotation(Annotation annotation) { - return (annotation != null) && ANNOTATION_NAMES.contains(annotation.getTypeName().toString()); + String fullyQualifiedName = (annotation != null) + ? this.fullyQualified.get(annotation.getTypeName().toString()) : null; + return (fullyQualifiedName != null) && FULLY_QUALIFIED_ANNOTATION_NAMES.contains(fullyQualifiedName); } } From 43a13d291a2533e6754200e1b87d7e6c6286531f Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Tue, 20 May 2025 00:37:16 +0000 Subject: [PATCH 215/238] Next development version (v0.0.46-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index 6ebfec9a..2c00258a 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.44 +:release-version: 0.0.45 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index ff0d2732..3374b863 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index cebfcad0..cf53cc79 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.45-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.46-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.45-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.46-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index e7492a31..22ac6ca4 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index bbd37c1f..566fc75f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.45.qualifier" + version="0.0.46.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 80811b23..8781b88f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index b1a0200a..a7901f2c 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 0b2c41b6..542c8623 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 6272fb89..73044003 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index f9dc324d..6dc39cf8 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.45.qualifier +Bundle-Version: 0.0.46.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 68810401..3e3b7156 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 30ff2e88..62909cb6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.45.qualifier +Bundle-Version: 0.0.46.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 9f05ae23..6c1fa6a7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 22815dd0..1a2639c5 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index e9925fbb..93f26ee8 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 5ad6e456..39880551 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 233242b6..0c7792a2 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 2a7bdf51..42d82863 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 6c454f53..f5581b69 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index e46a0764..bdbf48d4 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index b014b693..02900b22 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 9ea0fc98..100d5a83 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 5d2cc25d..ed69c065 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 8390499b..7a1dbc61 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.45-SNAPSHOT", + "version": "0.0.46-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.45-SNAPSHOT", + "version": "0.0.46-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index b6be66c5..0b7e7feb 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.45-SNAPSHOT", + "version": "0.0.46-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 446a2c54..afa9b39a 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index ff871443..c7815e7c 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 5ab40720..709a2f6a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 54ddd0c9..897d4d9a 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index 7f5780eb..b66f5efe 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.45.qualifier +Bundle-Version: 0.0.46.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 1ba8c47a..32c72950 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 2c93d052..a6aef027 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.45.qualifier +Bundle-Version: 0.0.46.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 869a7fd8..3d3c8a4c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index b36d3e7e..4b0ce32f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 2a6af271..0f557001 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 09a3ad1b..eb7b4352 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index eb28f8e8..a9bd4c45 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 96af85e1..13723df1 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index caae72af..2eea794d 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index ef0f059b..97190e18 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index b9269ce4..e43f5e4c 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 1537e2fd..0f2ce215 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From cbf53be4fedc606f5d1af1435ef2aab57dcafe0d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 27 May 2025 08:05:59 -0700 Subject: [PATCH 216/238] Further Refine JSpecify support Support `@Nullable` annotations in method bodies. Fixes gh-442 --- .../src/test/resources/expected/nullable.txt | 7 +++++++ .../src/test/resources/source/nullable.txt | 7 +++++++ .../jdk17/eclipse/JSpecifyPreparator.java | 21 ++++++++++++++----- .../jdk8/eclipse/JSpecifyPreparator.java | 21 ++++++++++++++----- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt index 8c2d80e6..b3e8f925 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -19,4 +19,11 @@ public interface ExampleNullables { Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); + default Object inBody() { + @Nullable Object[] args = new Object[length]; + @Nullable List<@Nullable Object> list = new Object[length]; + Object @Nullable [] moreArgs = new Object[length]; + return args; + } + } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt index 286e78fc..acbefead 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -17,4 +17,11 @@ public interface ExampleNullables { Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); + default Object inBody() { + @Nullable Object[] args = new Object[length]; + @Nullable List<@Nullable Object> list = new Object[length]; + Object @Nullable [] moreArgs = new Object[length]; + return args; + } + } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index e99256c2..645bf75d 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -33,6 +33,7 @@ import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.MethodDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.SingleVariableDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.VariableDeclarationStatement; import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.TokenManager; @@ -86,12 +87,14 @@ public boolean visit(ImportDeclaration node) { } @Override - @SuppressWarnings("unchecked") public boolean visit(MethodDeclaration node) { - Annotation lastAnnotation = getLastAnnotation((List) node.modifiers()); - if (isJSpecifyAnnotation(lastAnnotation)) { - this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); - } + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); + return true; + } + + @Override + public boolean visit(VariableDeclarationStatement node) { + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); return true; } @@ -107,6 +110,14 @@ public void endVisit(SingleVariableDeclaration node) { } } + @SuppressWarnings("unchecked") + private void clearLineBreaksIfHasJSpecifyAnnotation(List modifiers) { + Annotation lastAnnotation = getLastAnnotation((List) modifiers); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); + } + } + private Annotation getLastAnnotation(List modifiers) { Annotation annotation = null; for (IExtendedModifier modifier : modifiers) { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index e1f0e121..4bc1aa0e 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -33,6 +33,7 @@ import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.MethodDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.SingleVariableDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.VariableDeclarationStatement; import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Preparator; import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; @@ -86,12 +87,14 @@ public boolean visit(ImportDeclaration node) { } @Override - @SuppressWarnings("unchecked") public boolean visit(MethodDeclaration node) { - Annotation lastAnnotation = getLastAnnotation((List) node.modifiers()); - if (isJSpecifyAnnotation(lastAnnotation)) { - this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); - } + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); + return true; + } + + @Override + public boolean visit(VariableDeclarationStatement node) { + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); return true; } @@ -107,6 +110,14 @@ public void endVisit(SingleVariableDeclaration node) { } } + @SuppressWarnings("unchecked") + private void clearLineBreaksIfHasJSpecifyAnnotation(List modifiers) { + Annotation lastAnnotation = getLastAnnotation((List) modifiers); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); + } + } + private Annotation getLastAnnotation(List modifiers) { Annotation annotation = null; for (IExtendedModifier modifier : modifiers) { From 5f3470b3344682d78da10c57ca16b3805063bcb3 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Mon, 2 Jun 2025 18:24:21 +0000 Subject: [PATCH 217/238] Next development version (v0.0.47-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index 2c00258a..bf0a6e1c 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.45 +:release-version: 0.0.46 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 3374b863..99e69cc7 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index cf53cc79..9e1f5c9a 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.46-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.47-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.46-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.47-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 22ac6ca4..9eb60913 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 566fc75f..aebcd72d 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.46.qualifier" + version="0.0.47.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 8781b88f..7b4a2a51 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index a7901f2c..cc2c89a7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 542c8623..20f32d4b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 73044003..982bb285 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 6dc39cf8..d9e188f3 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.46.qualifier +Bundle-Version: 0.0.47.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 3e3b7156..99fa280e 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 62909cb6..12cac3a6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.46.qualifier +Bundle-Version: 0.0.47.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 6c1fa6a7..72042fa1 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 1a2639c5..3590c925 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 93f26ee8..be5f1d3e 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 39880551..c13954a9 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 0c7792a2..5a6de1f3 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 42d82863..4d8c434c 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index f5581b69..611a99fe 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index bdbf48d4..dc437a12 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 02900b22..a14e54eb 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 100d5a83..88294ec8 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index ed69c065..c217c403 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 7a1dbc61..5ea30c21 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.46-SNAPSHOT", + "version": "0.0.47-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.46-SNAPSHOT", + "version": "0.0.47-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 0b7e7feb..63e3b775 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.46-SNAPSHOT", + "version": "0.0.47-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index afa9b39a..3c439b79 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index c7815e7c..7c086cc7 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 709a2f6a..7d74f0cc 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 897d4d9a..72fe7b7b 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index b66f5efe..f3b70674 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.46.qualifier +Bundle-Version: 0.0.47.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 32c72950..cd3752e1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index a6aef027..652b5065 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.46.qualifier +Bundle-Version: 0.0.47.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 3d3c8a4c..f22c974e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 4b0ce32f..8621592f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 0f557001..0689734b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index eb7b4352..306b6166 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index a9bd4c45..73007642 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 13723df1..5476a0c9 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 2eea794d..0648a5b4 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 97190e18..e34149fe 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index e43f5e4c..ce9bf2a2 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 0f2ce215..24b89552 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 7308be977d601574313cd3c1145f49164ce34667 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 2 Jun 2025 11:52:03 -0700 Subject: [PATCH 218/238] Fix release workflow to use correct build number --- .github/workflows/release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4e5d4746..c80a4091 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -48,6 +48,7 @@ jobs: run: git push origin HEAD --tags outputs: release-version: ${{ steps.deduce-versions.outputs.release-version }} + release-build-number: ${{ github.run_number }} promote: name: Promote needs: stage @@ -55,4 +56,4 @@ jobs: with: environment: ${{ inputs.environment }} version: ${{needs.stage.outputs.release-version}} - build-number: ${{ github.run_number }} + build-number: ${{ needs.stage.outputs.release-build-number }} From 8ba5651f86da448af5b76b5d3801afc08d42f635 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 20 Jun 2025 15:43:42 -0700 Subject: [PATCH 219/238] Support '20NN-present' format in headers Closes gh-448 --- .../checkstyle/check/SpringHeaderCheck.java | 2 +- .../check/HeaderWithDateToPresent.txt | 1 + .../source/HeaderWithDateToPresent.java | 24 +++++++++++++++++++ .../source/HeaderWithSingleDate.java | 2 +- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/HeaderWithDateToPresent.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithDateToPresent.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java index 7820d4b3..95053274 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java @@ -61,7 +61,7 @@ public class SpringHeaderCheck extends AbstractFileSetCheck { /** * The default header copyright pattern. */ - public static final String DEFAULT_HEADER_COPYRIGHT_PATTERN = "20\\d\\d(-20\\d\\d)?"; + public static final String DEFAULT_HEADER_COPYRIGHT_PATTERN = "20\\d\\d(-20\\d\\d|-present)?"; private static final String DEFAULT_CHARSET = System.getProperty("file.encoding", StandardCharsets.UTF_8.name()); diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/HeaderWithDateToPresent.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/HeaderWithDateToPresent.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/HeaderWithDateToPresent.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithDateToPresent.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithDateToPresent.java new file mode 100644 index 00000000..5f6957b3 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithDateToPresent.java @@ -0,0 +1,24 @@ +/* + * Copyright 2019-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * The header uses NNNN-present. + * + * @author Phillip Webb + */ +public class HeaderWithDateToPresent { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java index a3045e8e..28b3eb6f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2019 the original author or authors. + * Copyright 2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 6d85b73432e42eda6bc6a916d86108b4fe85c16a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 20 Jun 2025 15:48:00 -0700 Subject: [PATCH 220/238] Don't format `@NullMarked` and `@NullUnmarked` Fixes gh-446 --- .../src/test/resources/expected/nullable.txt | 8 ++++++++ .../src/test/resources/source/nullable.txt | 8 ++++++++ .../formatter/jdk17/eclipse/JSpecifyPreparator.java | 3 +-- .../formatter/jdk8/eclipse/JSpecifyPreparator.java | 3 +-- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt index b3e8f925..219786a9 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -1,6 +1,8 @@ package example; import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.NullUnmarked; /** * Nullable. @@ -26,4 +28,10 @@ public interface ExampleNullables { return args; } + @NullMarked + void withNullMarked(String str); + + @NullUnmarked + void withNullUnmarked(String str); + } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt index acbefead..b3458f3f 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -1,6 +1,8 @@ package example; import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.NullUnmarked; /** * Nullable. @@ -24,4 +26,10 @@ public interface ExampleNullables { return args; } + @NullMarked + void withNullMarked(String str); + + @NullUnmarked + void withNullUnmarked(String str); + } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index 645bf75d..72bdee79 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -42,8 +42,7 @@ public class JSpecifyPreparator implements Preparator { private static final String PACKAGE_NAME = "org.jspecify.annotations"; - private static final Set ANNOTATION_NAMES = new HashSet<>( - Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + private static final Set ANNOTATION_NAMES = new HashSet<>(Arrays.asList("NonNull", "Nullable")); private static final Set FULLY_QUALIFIED_ANNOTATION_NAMES = ANNOTATION_NAMES.stream() .map((annotationName) -> PACKAGE_NAME + "." + annotationName) diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index 4bc1aa0e..1a6fac06 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -42,8 +42,7 @@ public class JSpecifyPreparator implements Preparator { private static final String PACKAGE_NAME = "org.jspecify.annotations"; - private static final Set ANNOTATION_NAMES = new HashSet<>( - Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + private static final Set ANNOTATION_NAMES = new HashSet<>(Arrays.asList("NonNull", "Nullable")); private static final Set FULLY_QUALIFIED_ANNOTATION_NAMES = ANNOTATION_NAMES.stream() .map((annotationName) -> PACKAGE_NAME + "." + annotationName) From dc894dbab1378b485da438439b628e663dc9fb6c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 20 Jun 2025 15:53:28 -0700 Subject: [PATCH 221/238] Support JSpecify on fields with default visibility Fixes gh-447 --- .../src/test/resources/expected/nullable.txt | 13 +++++++++++++ .../src/test/resources/source/nullable.txt | 13 +++++++++++++ .../formatter/jdk17/eclipse/JSpecifyPreparator.java | 7 +++++++ .../formatter/jdk8/eclipse/JSpecifyPreparator.java | 7 +++++++ 4 files changed, 40 insertions(+) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt index 219786a9..aa859a6e 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -1,5 +1,6 @@ package example; +import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.NullUnmarked; @@ -34,4 +35,16 @@ public interface ExampleNullables { @NullUnmarked void withNullUnmarked(String str); + static class Fields { + + @Nullable Object one; + + @NonNull Object two; + + private @Nullable Object three; + + private @NonNull Object four; + + } + } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt index b3458f3f..45c9c0da 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -1,5 +1,6 @@ package example; +import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.NullUnmarked; @@ -32,4 +33,16 @@ public interface ExampleNullables { @NullUnmarked void withNullUnmarked(String str); + static class Fields { + + @Nullable Object one; + + @NonNull Object two; + + private @Nullable Object three; + + private @NonNull Object four; + + } + } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index 72bdee79..31c89782 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -29,6 +29,7 @@ import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Annotation; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.CompilationUnit; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.FieldDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.IExtendedModifier; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.MethodDeclaration; @@ -85,6 +86,12 @@ public boolean visit(ImportDeclaration node) { return super.visit(node); } + @Override + public boolean visit(FieldDeclaration node) { + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); + return super.visit(node); + } + @Override public boolean visit(MethodDeclaration node) { clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index 1a6fac06..e2615a5f 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -29,6 +29,7 @@ import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Annotation; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.CompilationUnit; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.FieldDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.IExtendedModifier; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.MethodDeclaration; @@ -85,6 +86,12 @@ public boolean visit(ImportDeclaration node) { return super.visit(node); } + @Override + public boolean visit(FieldDeclaration node) { + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); + return super.visit(node); + } + @Override public boolean visit(MethodDeclaration node) { clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); From 38e106549f2e5f92eb228b562b6c2c51bd239ed8 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 20 Jun 2025 15:56:01 -0700 Subject: [PATCH 222/238] Update license headers Closes gh-449 --- .../src/main/java/sample/SampleApplication.java | 2 +- .../src/main/java/sample/SampleApplication.java | 2 +- .../src/io/spring/javaformat/eclipse/MessagesTests.java | 2 +- .../eclipse/projectsettings/ProjectPropertiesTests.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFileTests.java | 2 +- .../projectsettings/ProjectSettingsFilesLocatorTests.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFilesTests.java | 2 +- .../src/io/spring/javaformat/eclipse/Activator.java | 2 +- .../src/io/spring/javaformat/eclipse/Executor.java | 2 +- .../src/io/spring/javaformat/eclipse/Messages.java | 2 +- .../src/io/spring/javaformat/eclipse/Startup.java | 2 +- .../javaformat/eclipse/formatter/SpringCodeFormatter.java | 2 +- .../eclipse/formatter/SpringCodeFormatterJdk17Spaces.java | 2 +- .../eclipse/formatter/SpringCodeFormatterJdk17Tabs.java | 2 +- .../eclipse/formatter/SpringCodeFormatterJdk8Spaces.java | 2 +- .../eclipse/formatter/SpringCodeFormatterJdk8Tabs.java | 2 +- .../eclipse/gradle/GradleProjectSettingsConfigurator.java | 2 +- .../eclipse/m2e/MavenProjectSettingsConfigurator.java | 2 +- .../javaformat/eclipse/projectsettings/ProjectProperties.java | 2 +- .../javaformat/eclipse/projectsettings/ProjectSettingsFile.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFiles.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFilesLocator.java | 2 +- .../io/spring/javaformat/gradle/SpringJavaFormatPlugin.java | 2 +- .../java/io/spring/javaformat/gradle/tasks/CheckFormat.java | 2 +- .../src/main/java/io/spring/javaformat/gradle/tasks/Format.java | 2 +- .../java/io/spring/javaformat/gradle/tasks/FormatterTask.java | 2 +- .../test/java/io/spring/javaformat/gradle/CheckTaskTests.java | 2 +- .../test/java/io/spring/javaformat/gradle/FormatTaskTests.java | 2 +- .../java/io/spring/javaformat/gradle/testkit/GradleBuild.java | 2 +- .../spring/javaformat/gradle/testkit/GradleBuildExtension.java | 2 +- .../formatter/intellij/formatting/EclipseDocumentAdapter.java | 2 +- .../formatter/intellij/formatting/EclipseRegionAdapter.java | 2 +- .../intellij/formatting/SpringJavaFormatFormattingService.java | 2 +- .../spring/format/formatter/intellij/monitor/FileMonitor.java | 2 +- .../spring/format/formatter/intellij/monitor/GradleMonitor.java | 2 +- .../spring/format/formatter/intellij/monitor/MavenMonitor.java | 2 +- .../io/spring/format/formatter/intellij/monitor/Monitor.java | 2 +- .../io/spring/format/formatter/intellij/monitor/Monitors.java | 2 +- .../io/spring/format/formatter/intellij/monitor/Trigger.java | 2 +- .../intellij/startup/ManagedSpringJavaFormatProject.java | 2 +- .../intellij/startup/SpringJavaFormatStartupActivity.java | 2 +- .../java/io/spring/format/formatter/intellij/state/State.java | 2 +- .../io/spring/format/formatter/intellij/ui/StatusIndicator.java | 2 +- .../intellij/formatting/EclipseDocumentAdapterTests.java | 2 +- .../intellij/formatting/EclipseRegionAdapterTests.java | 2 +- .../formatting/SpringJavaFormatFormattingServiceTests.java | 2 +- .../src/main/java/io/spring/format/maven/ApplyMojo.java | 2 +- .../src/main/java/io/spring/format/maven/FormatMojo.java | 2 +- .../src/main/java/io/spring/format/maven/ValidateMojo.java | 2 +- .../src/test/java/io/spring/format/maven/VerifyApply.java | 2 +- .../java/io/spring/format/vscode/VisualStudioCodeFormatter.java | 2 +- .../io/spring/javaformat/checkstyle/FilteredModuleFactory.java | 2 +- .../main/java/io/spring/javaformat/checkstyle/SpringChecks.java | 2 +- .../spring/javaformat/checkstyle/SpringConfigurationLoader.java | 2 +- .../spring/javaformat/checkstyle/check/AbstractSpringCheck.java | 2 +- .../checkstyle/check/SpringAnnotationLocationCheck.java | 2 +- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 2 +- .../io/spring/javaformat/checkstyle/check/SpringCatchCheck.java | 2 +- .../javaformat/checkstyle/check/SpringDeprecatedCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringHeaderCheck.java | 2 +- .../checkstyle/check/SpringHideUtilityClassConstructor.java | 2 +- .../javaformat/checkstyle/check/SpringImportOrderCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringJUnit5Check.java | 2 +- .../spring/javaformat/checkstyle/check/SpringJavadocCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringLambdaCheck.java | 2 +- .../checkstyle/check/SpringLeadingWhitespaceCheck.java | 2 +- .../javaformat/checkstyle/check/SpringMethodOrderCheck.java | 2 +- .../checkstyle/check/SpringMethodVisibilityCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringNoThisCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringParenPadCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringTernaryCheck.java | 2 +- .../javaformat/checkstyle/check/SpringTestFileNameCheck.java | 2 +- .../io/spring/javaformat/checkstyle/filter/CheckFilter.java | 2 +- .../spring/javaformat/checkstyle/filter/IdentCheckFilter.java | 2 +- .../javaformat/checkstyle/filter/RequiresOuterThisFilter.java | 2 +- .../spring/javaformat/checkstyle/AssertionsAuditListener.java | 2 +- .../spring/javaformat/checkstyle/SpringChecksTestParameter.java | 2 +- .../java/io/spring/javaformat/checkstyle/SpringChecksTests.java | 2 +- .../javaformat/checkstyle/SpringConfigurationLoaderTests.java | 2 +- .../src/test/resources/source/AnnotationOnNewLine.java | 2 +- .../src/test/resources/source/AsciidoctorCallout.java | 2 +- .../src/test/resources/source/AssertJBadAssertImport.java | 2 +- .../src/test/resources/source/AssertJBadAssertionsImport.java | 2 +- .../src/test/resources/source/CatchE.java | 2 +- .../src/test/resources/source/CatchEx.java | 2 +- .../src/test/resources/source/CatchOo.java | 2 +- .../src/test/resources/source/CatchWord.java | 2 +- .../src/test/resources/source/DeprecatedBadCase.java | 2 +- .../src/test/resources/source/DeprecatedValid.java | 2 +- .../src/test/resources/source/FiltersToSkipThis.java | 2 +- .../src/test/resources/source/HeaderDate.java | 2 +- .../src/test/resources/source/HeaderMismatch.java | 2 +- .../src/test/resources/source/HeaderTooLong.java | 2 +- .../src/test/resources/source/HeaderTooShort.java | 2 +- .../src/test/resources/source/HeaderWithSingleDate.java | 2 +- .../resources/source/HideUtilityClassConstructorInvalid.java | 2 +- .../source/HideUtilityClassConstructorSpringApplication.java | 2 +- .../source/HideUtilityClassConstructorSpringConfiguration.java | 2 +- .../test/resources/source/ImportOrderCustomPackageInvalid.java | 2 +- .../test/resources/source/ImportOrderCustomPackageValid.java | 2 +- .../src/test/resources/source/JUnit5BadAnnotation.java | 2 +- .../src/test/resources/source/JUnit5BadImport.java | 2 +- .../src/test/resources/source/JUnit5BadImportWithOptOut.java | 2 +- .../src/test/resources/source/JUnit5BadModifier.java | 2 +- .../src/test/resources/source/JUnit5PublicAbstractIsValid.java | 2 +- .../src/test/resources/source/JUnit5Valid.java | 2 +- .../src/test/resources/source/JavadocAuthorWithoutSpace.java | 2 +- .../src/test/resources/source/JavadocBadCase.java | 2 +- .../test/resources/source/JavadocMethodEmptyLineBeforeTag.java | 2 +- .../source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java | 2 +- .../src/test/resources/source/JavadocMissingSince.java | 2 +- .../src/test/resources/source/JavadocNonJavadocComment.java | 2 +- .../src/test/resources/source/JavadocNonPublicSince.java | 2 +- .../resources/source/JavadocNonPublicSinceInsideAnnotation.java | 2 +- .../resources/source/JavadocNonPublicSinceInsideInterface.java | 2 +- .../src/test/resources/source/JavadocSoundtrack.java | 2 +- .../src/test/resources/source/JavadocValid.java | 2 +- .../src/test/resources/source/LambdaExtraParens.java | 2 +- .../src/test/resources/source/LambdaMissingParens.java | 2 +- .../src/test/resources/source/LambdaNecessaryBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryEmptyBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryIfBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryIfElseBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryThrowBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryTryBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryVoidCallable.java | 2 +- .../src/test/resources/source/LambdaSwitch.java | 2 +- .../src/test/resources/source/LambdaUnnecessaryBlock.java | 2 +- .../src/test/resources/source/LambdaValid.java | 2 +- .../src/test/resources/source/LeadingWhitespaceSpaces.java | 2 +- .../src/test/resources/source/LeadingWhitespaceTabs.java | 2 +- .../resources/source/LeadingWhitespaceTabsAndTextBlock.java | 2 +- .../src/test/resources/source/MethodOrderInvalid.java | 2 +- .../src/test/resources/source/MethodOrderValid.java | 2 +- .../source/MethodVisibilityInnerClassesWithPublicMethod.java | 2 +- .../source/MethodVisibilityPackagePrivateWithPublicMethod.java | 2 +- .../src/test/resources/source/MethodVisibilityWithOverride.java | 2 +- .../src/test/resources/source/NestedInterfaceItems.java | 2 +- .../src/test/resources/source/NewlineAtEndOfFile.java | 2 +- .../src/test/resources/source/NoThis.java | 2 +- .../src/test/resources/source/OuterTypeFilenameInvalid.java | 2 +- .../src/test/resources/source/OuterTypeFilenameValid.java | 2 +- .../src/test/resources/source/SpringApplication.java | 2 +- .../src/test/resources/source/TernaryEqualsEquals.java | 2 +- .../src/test/resources/source/TernaryEqualsEqualsAny.java | 2 +- .../src/test/resources/source/TernaryEqualsEqualsNever.java | 2 +- .../src/test/resources/source/TernaryInArray.java | 2 +- .../src/test/resources/source/TernaryInIf.java | 2 +- .../src/test/resources/source/TernaryInWhile.java | 2 +- .../src/test/resources/source/TernaryParensAndPlus.java | 2 +- .../src/test/resources/source/TernaryParensInvalid.java | 2 +- .../src/test/resources/source/TernaryParensValid.java | 2 +- .../src/test/resources/source/TryWithResources.java | 2 +- .../src/test/resources/source/Valid.java | 2 +- .../src/test/resources/source/nopackageinfo/NoPackageInfo.java | 2 +- .../resources/source/package-info-header-must-be-missing.java | 2 +- .../resources/source/src/test/java/AnnotationEndingInTest.java | 2 +- .../resources/source/src/test/java/InterfaceEndingInTest.java | 2 +- .../src/test/resources/source/src/test/java/NamedTest.java | 2 +- .../src/test/resources/source/src/test/java/NamedTests.java | 2 +- .../io/spring/javaformat/config/DefaultJavaFormatConfig.java | 2 +- .../main/java/io/spring/javaformat/config/IndentationStyle.java | 2 +- .../src/main/java/io/spring/javaformat/config/JavaBaseline.java | 2 +- .../main/java/io/spring/javaformat/config/JavaFormatConfig.java | 2 +- .../io/spring/javaformat/config/PropertiesJavaFormatConfig.java | 2 +- .../javaformat/config/PropertiesJavaFormatConfigTests.java | 2 +- .../eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java | 2 +- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- .../eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java | 2 +- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- .../javaformat/formatter/eclipse/rewrite/EclipseRewriter.java | 2 +- .../content/IContentTypeManager$ContentTypeChangeEvent.java | 2 +- .../content/IContentTypeManager$IContentTypeChangeListener.java | 2 +- .../javaformat/formatter/shader/PrefsResourceTransformer.java | 2 +- .../main/java/io/spring/javaformat/formatter/FormatterApp.java | 2 +- .../io/spring/javaformat/formatter/AbstractFormatterTests.java | 2 +- .../test/java/io/spring/javaformat/formatter/FileEditTests.java | 2 +- .../java/io/spring/javaformat/formatter/FileFormatterTests.java | 2 +- .../spring/javaformat/formatter/FormatterIntegrationTests.java | 2 +- .../java/io/spring/javaformat/formatter/FormatterTests.java | 2 +- .../test/java/io/spring/javaformat/formatter/JavaContainer.java | 2 +- .../java/io/spring/javaformat/formatter/StreamsEditTests.java | 2 +- .../io/spring/javaformat/formatter/StreamsFormatterTests.java | 2 +- .../src/main/java/io/spring/javaformat/formatter/Edit.java | 2 +- .../src/main/java/io/spring/javaformat/formatter/FileEdit.java | 2 +- .../main/java/io/spring/javaformat/formatter/FileFormatter.java | 2 +- .../io/spring/javaformat/formatter/FileFormatterException.java | 2 +- .../src/main/java/io/spring/javaformat/formatter/Formatter.java | 2 +- .../main/java/io/spring/javaformat/formatter/StreamsEdit.java | 2 +- .../java/io/spring/javaformat/formatter/StreamsFormatter.java | 2 +- .../javaformat/formatter/eclipse/EclipseCodeFormatter.java | 2 +- .../java/io/spring/javaformat/formatter/eclipse/Options.java | 2 +- .../formatter/jdk17/eclipse/CodeLineBreakPreparator.java | 2 +- .../formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java | 2 +- .../javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java | 2 +- .../formatter/jdk17/eclipse/JavadocLineBreakPreparator.java | 2 +- .../formatter/jdk8/eclipse/CodeLineBreakPreparator.java | 2 +- .../formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java | 2 +- .../javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java | 2 +- .../formatter/jdk8/eclipse/JavadocLineBreakPreparator.java | 2 +- src/checkstyle/checkstyle-header.txt | 2 +- 201 files changed, 201 insertions(+), 201 deletions(-) diff --git a/samples/spring-javaformat-gradle-sample/src/main/java/sample/SampleApplication.java b/samples/spring-javaformat-gradle-sample/src/main/java/sample/SampleApplication.java index a01d0bb3..480785d1 100644 --- a/samples/spring-javaformat-gradle-sample/src/main/java/sample/SampleApplication.java +++ b/samples/spring-javaformat-gradle-sample/src/main/java/sample/SampleApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/samples/spring-javaformat-maven-sample/src/main/java/sample/SampleApplication.java b/samples/spring-javaformat-maven-sample/src/main/java/sample/SampleApplication.java index a01d0bb3..480785d1 100644 --- a/samples/spring-javaformat-maven-sample/src/main/java/sample/SampleApplication.java +++ b/samples/spring-javaformat-maven-sample/src/main/java/sample/SampleApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java index 2db40cd9..7684c764 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java index 3ab28f27..a8568832 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java index 31bda8ff..769226b6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java index 226e0625..26ca3380 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java index 20c06744..a5eb2ed1 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java index cfa779b0..bef6af6b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Executor.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Executor.java index c5c0ec77..7782afd3 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Executor.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Executor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Messages.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Messages.java index 8db3c5dc..3fc7ab01 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Messages.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Messages.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Startup.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Startup.java index bf20fc1a..c19e50e9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Startup.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Startup.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java index 01d5499e..d26d70bd 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java index 8680dbf8..d0682ff2 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java index b0301b2e..718e9846 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java index 1b78c15a..536c85ef 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java index 6381f3e4..0750be23 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java index d21fe831..9ab4bb69 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java index 67f669d6..62e94e26 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java index 9cb095f0..982777bd 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java index d07f1cf9..ec7ef383 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java index c7480cf6..2b40f5ae 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java index 5062bfe9..e5d5f412 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index 95e171a8..b0c48331 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index 7e531d42..d6504edf 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java index d89abe61..b1f6b312 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java index ed55a945..b99ded44 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index 16d3aa4a..3f413277 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index ed1648cc..e3d29e16 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java index a045feb5..1414da78 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java index d5b1cc80..bb5b8a6d 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java index 8d874234..255a72f1 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java index 20888b55..1b1fdc9e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java index a457072f..60e40a70 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java index ac930e50..84128c15 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java index a1e4f420..8a41e441 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java index 5af1f808..6ddb20e8 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java index ec69d85e..d0663c86 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java index 5af61007..cfe8dc4a 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java index 8bab9300..f1c7d223 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java index 043de49c..2b87dd56 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java index 4d9c4a98..f11e345c 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java index c093671b..6d8fe7c1 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java index 85287af9..935b738e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java index 11ae23e8..4fe90665 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java index 873d7fec..f4c2d2a4 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java index c49bae99..39c24c5f 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java index abfece47..3d8bdc6d 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java index effde959..6270b549 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index 7d124eac..c9a77b81 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index 74899016..4338b633 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java index 811ccc78..1c4178f5 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/FilteredModuleFactory.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/FilteredModuleFactory.java index 3a5a9921..e595863f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/FilteredModuleFactory.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/FilteredModuleFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java index c006edcb..244b7edf 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 42ca7311..0be1ecc6 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/AbstractSpringCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/AbstractSpringCheck.java index 347f1ed1..af4511d2 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/AbstractSpringCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/AbstractSpringCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java index f0fc0d5e..c697521f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index 2e0de968..b9b3c3e4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringCatchCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringCatchCheck.java index 638951c1..81d2144b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringCatchCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringCatchCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java index 3e56dd2d..42bf0f4b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java index 95053274..c58e74c4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java index 84b25ec4..882b9b9a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java index 94198a8b..69f8bf31 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index cdd8efc4..722c8868 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index 7fd8a0dd..d0d0844a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java index 42822761..c0f45f07 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java index 8e3fa83f..abeba9de 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java index d5efe2f3..bbb088bc 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java index ab431020..2a32b244 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoThisCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoThisCheck.java index ffeda211..1a4ee466 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoThisCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoThisCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java index 9d8e271f..a49789b0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java index 23c79dda..caf82d1e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java index 01708750..31dda6a0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java index 5e83fccf..5388e5bd 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/IdentCheckFilter.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/IdentCheckFilter.java index d8950d5e..6e434bcc 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/IdentCheckFilter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/IdentCheckFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java index e12e8b4f..080bf8ec 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java index 5812901c..6b36f545 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTestParameter.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTestParameter.java index 2cad6835..62e4a959 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTestParameter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTestParameter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index f3d31175..0be6bdb9 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 33536e6b..37f9b9c4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java index 8799aae3..f4893731 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java index 3f32c462..4f8a00ef 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java index 28d2b972..7646caff 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java index 7d8e2fe7..5d877c52 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchE.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchE.java index aedce6b2..c1e81c66 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchE.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchE.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchEx.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchEx.java index 68bb8c00..e9739ae0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchEx.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchEx.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchOo.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchOo.java index 9e48ba4a..1d21cda5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchOo.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchOo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchWord.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchWord.java index 50bc7af6..3c7d230b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchWord.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchWord.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java index 84292469..b806639d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java index f9cf915c..e52e3ae1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/FiltersToSkipThis.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/FiltersToSkipThis.java index 82c0a957..e25b5cf8 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/FiltersToSkipThis.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/FiltersToSkipThis.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderDate.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderDate.java index ecf31c47..2f23d85c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderDate.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderDate.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderMismatch.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderMismatch.java index d410278e..48e94313 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderMismatch.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderMismatch.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this foil except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooLong.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooLong.java index cdf92b18..8b8a0b85 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooLong.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooLong.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooShort.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooShort.java index 467a2381..0325be9e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooShort.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooShort.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java index 28b3eb6f..11600fcd 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 the original author or authors. + * Copyright 2019-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorInvalid.java index 414731c4..5a6b3543 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringApplication.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringApplication.java index 23ee070d..ece74108 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringApplication.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringConfiguration.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringConfiguration.java index 080feb69..cafe6164 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringConfiguration.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageInvalid.java index 796175c7..7aa089cf 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageValid.java index 129348fb..427075e6 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadAnnotation.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadAnnotation.java index e157a8fa..e9c41790 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadAnnotation.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadAnnotation.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImport.java index 92d8f1ab..2870f5fb 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImport.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImport.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImportWithOptOut.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImportWithOptOut.java index 668ca7c8..4b471be5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImportWithOptOut.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImportWithOptOut.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java index 9c59c587..0e665db0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java index d56bbbd6..dee91ee2 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java index bad7023d..df921319 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAuthorWithoutSpace.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAuthorWithoutSpace.java index d96d4e66..8a421b44 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAuthorWithoutSpace.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAuthorWithoutSpace.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocBadCase.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocBadCase.java index 8bdca2a1..4a5df596 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocBadCase.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocBadCase.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTag.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTag.java index ff292fc9..dcb778a8 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTag.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTag.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java index a6704c45..2d92f513 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMissingSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMissingSince.java index 9f22ace8..c9afd407 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMissingSince.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMissingSince.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonJavadocComment.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonJavadocComment.java index 8f4b66d2..047b2a05 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonJavadocComment.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonJavadocComment.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java index 58e914d3..c76a57a3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java index e05c6c89..da8c6f46 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java index a8fa5f47..edefdd29 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocSoundtrack.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocSoundtrack.java index ea598898..846bf48d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocSoundtrack.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocSoundtrack.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java index 21d30add..30eec4c3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaExtraParens.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaExtraParens.java index c4f17b30..5e82a117 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaExtraParens.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaExtraParens.java @@ -1,6 +1,6 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaMissingParens.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaMissingParens.java index 4e621d28..9ab33a37 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaMissingParens.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaMissingParens.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryBlock.java index 86807333..cfb42294 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryEmptyBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryEmptyBlock.java index d1f83089..b8246fee 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryEmptyBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryEmptyBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfBlock.java index 4208b212..5468bb48 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfElseBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfElseBlock.java index 059bb564..473fa096 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfElseBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfElseBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryThrowBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryThrowBlock.java index 24f4da47..61350fe8 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryThrowBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryThrowBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryTryBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryTryBlock.java index d2f5cde9..2c874d0d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryTryBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryTryBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryVoidCallable.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryVoidCallable.java index c9cab5fa..54864d72 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryVoidCallable.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryVoidCallable.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java index 59d213ac..55640621 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaUnnecessaryBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaUnnecessaryBlock.java index b5f9b616..df215545 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaUnnecessaryBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaUnnecessaryBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaValid.java index 465f92c0..768488e7 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java index 88621291..0e69080a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java index dda09ef0..53d64c19 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java index e9e27b7b..21a2311a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderInvalid.java index 9271ba92..0db3e04c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderValid.java index 2bffbcae..b44ad87b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityInnerClassesWithPublicMethod.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityInnerClassesWithPublicMethod.java index cf10eb76..262a258f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityInnerClassesWithPublicMethod.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityInnerClassesWithPublicMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityPackagePrivateWithPublicMethod.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityPackagePrivateWithPublicMethod.java index 75d5b080..c6377f3d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityPackagePrivateWithPublicMethod.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityPackagePrivateWithPublicMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java index 2be96a19..f1c9d6f4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NestedInterfaceItems.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NestedInterfaceItems.java index d41dbaee..8f9bb820 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NestedInterfaceItems.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NestedInterfaceItems.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NewlineAtEndOfFile.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NewlineAtEndOfFile.java index 2e80c229..436c72a4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NewlineAtEndOfFile.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NewlineAtEndOfFile.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NoThis.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NoThis.java index aa8fe05d..556214ab 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NoThis.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NoThis.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameInvalid.java index 0c2f80ad..59f7dc88 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameValid.java index c9ee62bc..6814ed2f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java index 0dd10214..d72c300b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEquals.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEquals.java index 355cfad5..afd0926d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEquals.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEquals.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsAny.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsAny.java index bc73a067..9eb48eb9 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsAny.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsAny.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsNever.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsNever.java index 8371a02e..3a30c31a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsNever.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsNever.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInArray.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInArray.java index 1fedecbe..99c43de5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInArray.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInArray.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java index c3fc5a56..6414b748 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java index 84e14ac6..1bef3bee 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensAndPlus.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensAndPlus.java index 942b1bce..36e22af3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensAndPlus.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensAndPlus.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensInvalid.java index 69fc4218..cbd7ce9e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensValid.java index 42f842c3..f9f490ee 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TryWithResources.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TryWithResources.java index 473889ae..c68396dc 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TryWithResources.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TryWithResources.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/Valid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/Valid.java index da4f0436..e14319f1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/Valid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/Valid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java index a6f8b3ae..5ae26280 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info-header-must-be-missing.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info-header-must-be-missing.java index b426e3ba..039f3f05 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info-header-must-be-missing.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info-header-must-be-missing.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this foil except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java index 7579aac2..cdc31f8c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java index b2aad5f9..d79b6453 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java index a8da0363..a042f613 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java index aa494a65..423428e5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java index 60f615ff..d2b5ee8c 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java index 7477b099..f6e2144d 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java index 492f068c..a27c3df0 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java index 89d19b78..23bf45c8 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java index 23d87a59..d631312d 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java index 4fc21f26..2c702617 100644 --- a/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java +++ b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index 46e0f01d..a2664b72 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index df66cda6..bfd16b37 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index 60b0e6e1..a2664b72 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index df66cda6..bfd16b37 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index e7ccea52..7053dc0c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java index 913abdea..78e9cd52 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java index 52462f79..6458ef5a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-shader/src/main/java/io/spring/javaformat/formatter/shader/PrefsResourceTransformer.java b/spring-javaformat/spring-javaformat-formatter-shader/src/main/java/io/spring/javaformat/formatter/shader/PrefsResourceTransformer.java index 47ba9843..09882163 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/src/main/java/io/spring/javaformat/formatter/shader/PrefsResourceTransformer.java +++ b/spring-javaformat/spring-javaformat-formatter-shader/src/main/java/io/spring/javaformat/formatter/shader/PrefsResourceTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java b/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java index 9adaacc6..ca679983 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java +++ b/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index f2bebe0a..1af21b70 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java index 79570f7d..015b9eb7 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java index 5c43641b..f9d14f7c 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index 4639a550..383b07cd 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java index d6af9c71..cc1c8b50 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java index 9eacfbc6..8f847bbb 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java index be73afcc..b054f57d 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java index 34477c47..388c123c 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java index ee14ed94..8e6a9c4d 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java index a0fe488e..457fcc7c 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java index 7f6fbf34..49b05234 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatterException.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatterException.java index 09f17a5d..2d054698 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatterException.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatterException.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index dd87b20c..ed6169c4 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java index 168d40b6..7263a5e6 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java index 289577a4..fb8257d7 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java index 4f17a95a..121ddc4a 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java index 37f4faa9..b80c0346 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java index 51c98b52..3f5a7337 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java index b902e3f3..a7530156 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index 31c89782..2f9b8aeb 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index b66efa27..28b369c7 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java index df26a623..2cb2ef68 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java index fa365db4..9887ccb2 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index e2615a5f..89397c6d 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java index 3a4a5f41..a5b8a035 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/checkstyle/checkstyle-header.txt b/src/checkstyle/checkstyle-header.txt index 39429ee6..7e182ab3 100644 --- a/src/checkstyle/checkstyle-header.txt +++ b/src/checkstyle/checkstyle-header.txt @@ -1,5 +1,5 @@ ^\Q/*\E$ -^\Q * Copyright \E20\d\d\-20\d\d\Q the original author or authors.\E$ +^\Q * Copyright \E20\d\d\-present\Q the original author or authors.\E$ ^\Q *\E$ ^\Q * Licensed under the Apache License, Version 2.0 (the "License");\E$ ^\Q * you may not use this file except in compliance with the License.\E$ From cdcd8fcce92c5230881a9d354fd8d02b8657c79e Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Mon, 19 May 2025 11:55:42 +0300 Subject: [PATCH 223/238] Fix UnsupportedOperationException with IDEA 'scratch file' See gh-441 Signed-off-by: Dmytro Nosan --- .../SpringJavaFormatFormattingService.java | 2 +- ...pringJavaFormatFormattingServiceTests.java | 52 +++++++++++++++++-- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java index 60e40a70..70bb51e9 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java @@ -78,7 +78,7 @@ public boolean canFormat(@NotNull PsiFile file) { public void formatDocument(@NotNull Document document, @NotNull List formattingRanges, @NotNull FormattingContext formattingContext, boolean canChangeWhiteSpaceOnly, boolean quickFormat) { VirtualFile file = formattingContext.getVirtualFile(); - Path path = (file != null) ? file.toNioPath() : null; + Path path = (file != null) ? file.getFileSystem().getNioPath(file) : null; JavaFormatConfig config = JavaFormatConfig.findFrom(path); Formatter formatter = new Formatter(config); String source = document.getText(); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java index 39c24c5f..6524e10d 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java @@ -16,6 +16,8 @@ package io.spring.format.formatter.intellij.formatting; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Collections; import com.intellij.formatting.FormattingContext; @@ -25,16 +27,21 @@ import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.local.CoreLocalFileSystem; +import com.intellij.openapi.vfs.local.CoreLocalVirtualFile; import com.intellij.psi.PsiFile; +import com.intellij.testFramework.LightVirtualFile; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import io.spring.format.formatter.intellij.state.State; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willAnswer; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; /** * Tests for {@link SpringJavaFormatFormattingService}. @@ -72,14 +79,49 @@ void canFormatWhenJavaFileAndActiveReturnsTrue() { assertThat(this.service.canFormat(file)).isTrue(); } + @Test + void formatDocumentAppliesFormatting(@TempDir Path projectDir) throws Exception { + Files.writeString(projectDir.resolve(".springjavaformatconfig"), "indentation-style=spaces"); + Document document = mockDocument("public class Hello{" + + "\tpublic void hello() {" + + "\tString value =\t\"Hello World\";}}"); + FormattingContext formattingContext = mock(FormattingContext.class); + VirtualFile virtualFile = new CoreLocalVirtualFile(new CoreLocalFileSystem(), projectDir.resolve("Hello.java")); + given(formattingContext.getVirtualFile()).willReturn(virtualFile); + this.service.formatDocument(document, Collections.emptyList(), formattingContext, false, false); + assertThat(document.getText()).isEqualTo("public class Hello {\n\n" + + " public void hello() {\n" + + " String value = \"Hello World\";\n" + + " }\n\n" + + "}"); + } + @Test void formatDocumentAppliesFormatting() { - Document document = mock(Document.class); - String text = "public class Hello {}"; - given(document.getText()).willReturn(text); + Document document = mockDocument("public class Hello{" + + "\tpublic void hello() {" + + "\tString value =\t\"Hello World\";}}"); FormattingContext formattingContext = mock(FormattingContext.class); + VirtualFile virtualFile = new LightVirtualFile("Hello.java", document.getText()); + given(formattingContext.getVirtualFile()).willReturn(virtualFile); this.service.formatDocument(document, Collections.emptyList(), formattingContext, false, false); - verify(document).replaceString(20, 20, "\n\n"); + assertThat(document.getText()).isEqualTo("public class Hello {\n\n" + + "\tpublic void hello() {\n" + + "\t\tString value = \"Hello World\";\n" + + "\t}\n\n" + + "}"); + } + + + private Document mockDocument(String text) { + Document document = mock(Document.class); + StringBuilder documentText = new StringBuilder(text); + willAnswer((invocation) -> { + documentText.replace(invocation.getArgument(0), invocation.getArgument(1), invocation.getArgument(2)); + return null; + }).given(document).replaceString(any(Integer.class), any(Integer.class), any(CharSequence.class)); + given(document.getText()).willAnswer((invocation) -> documentText.toString()); + return document; } private PsiFile mockFile(FileType fileType, State state) { From 77dc2f6d4da4e3640d33f3fdead3d76a5ca172ec Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Fri, 20 Jun 2025 23:29:51 +0000 Subject: [PATCH 224/238] Next development version (v0.0.48-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index bf0a6e1c..3894a5ea 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.46 +:release-version: 0.0.47 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 99e69cc7..57d056c6 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 9e1f5c9a..3fa4c986 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.47-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.48-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.47-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.48-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 9eb60913..9354db42 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index aebcd72d..5204ad42 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.47.qualifier" + version="0.0.48.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 7b4a2a51..7b294c42 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index cc2c89a7..325568f3 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 20f32d4b..4fc99abc 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 982bb285..5d4e2f97 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index d9e188f3..650cb7b0 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.47.qualifier +Bundle-Version: 0.0.48.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 99fa280e..532aefb8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 12cac3a6..2e0f34c4 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.47.qualifier +Bundle-Version: 0.0.48.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 72042fa1..3ccfe109 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 3590c925..7bed9c79 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index be5f1d3e..1c2e0383 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index c13954a9..681a1645 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 5a6de1f3..ee8098c1 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 4d8c434c..9de7cec6 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 611a99fe..7915af9f 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index dc437a12..b6202b0d 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index a14e54eb..61cb5d27 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 88294ec8..af8474d3 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index c217c403..f42bc4bb 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 5ea30c21..5da1cec7 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.47-SNAPSHOT", + "version": "0.0.48-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.47-SNAPSHOT", + "version": "0.0.48-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 63e3b775..c10d286e 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.47-SNAPSHOT", + "version": "0.0.48-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 3c439b79..7891d15d 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 7c086cc7..849cefc1 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 7d74f0cc..5605577e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 72fe7b7b..e984a073 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index f3b70674..5e2e9099 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.47.qualifier +Bundle-Version: 0.0.48.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index cd3752e1..0e73c0e4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 652b5065..3c5dbb8b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.47.qualifier +Bundle-Version: 0.0.48.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index f22c974e..0e52bf06 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 8621592f..9aef9a9a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 0689734b..30a2af39 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 306b6166..9be11ea0 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 73007642..dab30621 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 5476a0c9..6aeff1c4 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 0648a5b4..a07cf239 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index e34149fe..1f72a67a 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index ce9bf2a2..30ea6a7e 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 24b89552..d4642459 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From aa7536f21db419f734682a0931d707d4b7f89ffd Mon Sep 17 00:00:00 2001 From: Stefano Cordio Date: Sat, 21 Jun 2025 19:25:22 +0200 Subject: [PATCH 225/238] Polish README Signed-off-by: Stefano Cordio See gh-450 --- README.adoc | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.adoc b/README.adoc index 3894a5ea..e3d7786f 100644 --- a/README.adoc +++ b/README.adoc @@ -81,8 +81,8 @@ If you want to skip both, you can use `-Dspring-javaformat.skip=true`. -=== Checkstyle -To enforce checksyle conventions add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: +==== Checkstyle +To enforce checkstyle conventions, add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: [source,xml,indent=0,subs="normal"] ---- @@ -149,7 +149,7 @@ For source formatting, add the `spring-javaformat-gradle-plugin` to your `build` The plugin adds `format` and `checkFormat` tasks to your project. The `checkFormat` task is automatically applied when running the standard Gradle `check` task. -In case you want to exclude a package from being checked, for example if you generate sources, you can do this by adding following configuration: +In case you want to exclude a package from being checked, for example if you generate sources, you can do this by adding the following configuration: [source,groovy,indent=0,subs="normal"] ---- @@ -161,7 +161,7 @@ tasks.withType(io.spring.javaformat.gradle.tasks.CheckFormat) { ==== Checkstyle -To enforce checksyle conventions add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: +To enforce checkstyle conventions, add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: [source,groovy,indent=0,subs="normal"] ---- @@ -208,9 +208,9 @@ java-baseline=8 The Eclipse plugin provides a custom formatter implementation and automatically applies project specific settings. The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script. -If you need to customize the project specific settings that the plugin applies you should add a `.eclipse` folder in the root of your project. +If you need to customize the project specific settings that the plugin applies, you should add a `.eclipse` folder in the root of your project. All `.prefs` files from this folder will be copied to the project `.settings` folders. -Usually you'll provide your own `org.eclipse.jdt.core.prefs` and `org.eclipse.jdt.ui.prefs` files. +Usually, you'll provide your own `org.eclipse.jdt.core.prefs` and `org.eclipse.jdt.ui.prefs` files. You can also add a `.eclipse/eclipse.properties` file to customize the following items: @@ -232,7 +232,7 @@ The plugin is automatically activated whenever the Maven or Gradle plugins are d A Spring Java Format icon (image:spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/spring-javaformat/formatOn.png[title="Icon"]) will also be displayed in the status bar to indicate the formatter is active. You can use the standard `code` -> `reformat code` action to format the code. -To install the plugin use the `spring-javaformat-intellij-idea-plugin` jar file. +To install the plugin, use the `spring-javaformat-intellij-idea-plugin` jar file. You can download the latest version from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-intellij-idea-plugin/{release-version}[Maven Central]. @@ -275,24 +275,24 @@ Once the configuration file is created, configure your IDE to use it: === Visual Studio Code The Visual Studio Code extension provides custom formatter support for Microsoft Visual Studio Code. -The extension using the https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider[`DocumentFormattingEditProvider`] API. +The extension uses the https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider[`DocumentFormattingEditProvider`] API. Once installed it may be activated by using the "`Format Document`" action available in the editor context menu or from the Command Palette. -To install the extension select "`Install from VSIX`" in the extensions panel and choose the `spring-javaformat-vscode-extension` vsix file. +To install the extension, select "`Install from VSIX`" in the extensions panel and choose the `spring-javaformat-vscode-extension` vsix file. You can download the latest version from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-vscode-extension/{release-version}[Maven Central]. === About the Conventions -Most of the coding conventions and style comes from the Spring Framework and Spring Boot projects. -Spring Framework manually formats code, where as Spring Boot uses automatic formatting. +Most of the coding conventions and style come from the Spring Framework and Spring Boot projects. +Spring Framework manually formats code, whereas Spring Boot uses automatic formatting. === Indenting With Spaces -By default tabs are used for indenting formatted code. +By default, tabs are used for indenting formatted code. We strongly recommend that this default is not changed, especially for official Spring projects. -If, however, you feel that you can't live with tabs then switching to spaces is the one configuration option that we do support. +If, however, you feel that you can't live with tabs, then switching to spaces is the one configuration option that we do support. To use spaces rather than tabs, add a file called `.springjavaformatconfig` to the root of your project with the following content: @@ -331,7 +331,7 @@ If you want most `SpringChecks` but need to exclude one or two, you can do somet Some code isn't particularly amenable to automatic formatting. For example, Spring Security configurations often work better when manually formatted. -If you need to disable formatting for a specific block of code you can enclose it in a `@formatter:off` / `@formatter:on` set: +If you need to disable formatting for a specific block of code, you can enclose it in a `@formatter:off` / `@formatter:on` set: [source,java] ---- @@ -350,8 +350,8 @@ making use of available horizontal space in your IDE and avoiding unwanted addit wrapping when viewing code on GitHub and the like. If you're used to longer lines, 120 chars can take some getting used to. Specifically, if -you have many nesting levels things can start to look quite bad. Generally, if you see -code bunched up to the right of your screen you should take that as a signal to use the +you have many nesting levels, things can start to look quite bad. Generally, if you see +code bunched up to the right of your screen, you should take that as a signal to use the "`extract method`" refactor. Extracting small private methods will improve formatting and it helps when reading the code and debugging. @@ -359,8 +359,8 @@ it helps when reading the code and debugging. ==== Whitespace Keeping whitespace lines out of method bodies can help make the code easier to scan. -If blank lines are only included between methods it becomes easier to see the overall structure of the class. -If you find you need whitespace inside your method, consider if extracting a private method might give a better result. +If blank lines are only included between methods, it becomes easier to see the overall structure of the class. +If you find you need whitespace inside your method, consider whether extracting a private method might give a better result. @@ -375,18 +375,18 @@ They will also ensure that `@author` tags are well formed. ==== Final Private members should be `final` whenever possible. -Local variable and parameters should generally not be explicitly declared as final since it adds so much noise. +Local variables and parameters should generally not be explicitly declared as final since it adds so much noise. ==== Read-down Methods, Fields and Parameters Methods don't need to be organized by scope. There's no need to group all `private`, `protected` and `public` methods together. -Instead try to make your code easy to read when scanning the file from top to bottom. -In other words, try to have methods only reference method further down in the file. +Instead, try to make your code easy to read when scanning the file from top to bottom. +In other words, try to have methods only reference methods further down in the file. Keep private methods as close to the thing that calls them as possible. -It's also recommend that you try to keep consistent ordering with fields and constructor parameters. +It's also recommended that you try to keep consistent ordering with fields and constructor parameters. For example: [source,java,indent=0,subs="normal"] From 87cb6dbb415d5c336afcc1889f29d37fa86cb6ce Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 23 Jun 2025 09:03:08 +0100 Subject: [PATCH 226/238] Polish "Polish README" See gh-450 --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index e3d7786f..6c7e7510 100644 --- a/README.adoc +++ b/README.adoc @@ -292,7 +292,7 @@ Spring Framework manually formats code, whereas Spring Boot uses automatic forma === Indenting With Spaces By default, tabs are used for indenting formatted code. We strongly recommend that this default is not changed, especially for official Spring projects. -If, however, you feel that you can't live with tabs, then switching to spaces is the one configuration option that we do support. +If, however, you feel that you can't live with tabs, switching to spaces is the one configuration option that we do support. To use spaces rather than tabs, add a file called `.springjavaformatconfig` to the root of your project with the following content: From 048828049753e6079c6f6cad5a67d3a4537c947f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 8 Jul 2025 13:56:12 +0100 Subject: [PATCH 227/238] Check that annotation attribute values are concise When the value of an annotation's attribute references something defined by an inner type of the annotation, the inner type should be imported and referenced directly rather than through the containing type. Consider the following: @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) The repetition of SpringBootTest in both the annotation itself and the value of one of its attributes is overly verbose. Instead, we prefer to import WebEnvironment and refer to it directly: @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) This commit adds a check that enforces the style described above. In the event of there being an existing import for a different WebEnvironment type, no error will be reported as the more verbose style is necessary to avoid referencing the wrong WebEnvironment. Closes gh-452 --- ...gAnnotationAttributeConciseValueCheck.java | 151 ++++++++++++++++++ .../checkstyle/check/messages.properties | 1 + .../checkstyle/spring-checkstyle.xml | 1 + .../SpringConfigurationLoaderTests.java | 4 +- ...asConciseReferenceToContainedEnumValue.txt | 1 + ...lueThatHasReferenceToContainedConstant.txt | 1 + ...asVerboseReferenceToContainedEnumValue.txt | 2 + ...asConciseReferenceToContainedEnumValue.txt | 1 + ...lyVerboseReferenceToContainedEnumValue.txt | 1 + ...lueThatHasReferenceToContainedConstant.txt | 1 + ...asVerboseReferenceToContainedEnumValue.txt | 2 + ...sConciseReferenceToContainedEnumValue.java | 20 +++ ...ueThatHasReferenceToContainedConstant.java | 20 +++ ...sVerboseReferenceToContainedEnumValue.java | 20 +++ ...sConciseReferenceToContainedEnumValue.java | 20 +++ ...yVerboseReferenceToContainedEnumValue.java | 24 +++ ...ueThatHasReferenceToContainedConstant.java | 20 +++ ...sVerboseReferenceToContainedEnumValue.java | 20 +++ 18 files changed, 308 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java new file mode 100644 index 00000000..703d9919 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java @@ -0,0 +1,151 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.checkstyle.check; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.puppycrawl.tools.checkstyle.api.AbstractCheck; +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; + +/** + * Spring-specific check of the concision of an annotation's attribute values. + * + * @author Andy Wilkinson + */ +public class SpringAnnotationAttributeConciseValueCheck extends AbstractCheck { + + private final List imports = new ArrayList<>(); + + @Override + public int[] getDefaultTokens() { + return getRequiredTokens(); + } + + @Override + public int[] getAcceptableTokens() { + return getRequiredTokens(); + } + + @Override + public int[] getRequiredTokens() { + return new int[] { TokenTypes.ANNOTATION, TokenTypes.IMPORT }; + } + + @Override + public void init() { + this.imports.clear(); + } + + @Override + public void visitToken(DetailAST ast) { + if (ast.getType() == TokenTypes.IMPORT) { + visitImport(ast); + } + else if (ast.getType() == TokenTypes.ANNOTATION) { + visitAnnotation(ast); + } + } + + private void visitImport(DetailAST importNode) { + List components = dotSeparatedComponents(importNode.getFirstChild()); + if (components != null) { + this.imports.add(new ImportStatement(components)); + } + } + + private void visitAnnotation(DetailAST annotation) { + int valuePairCount = annotation.getChildCount(TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR); + if (valuePairCount == 0) { + DetailAST valueExpression = annotation.findFirstToken(TokenTypes.EXPR); + visitValueExpression(valueExpression, annotation, "value"); + } + else { + DetailAST candidate = annotation.getFirstChild(); + while (candidate != null) { + if (candidate.getType() == TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR) { + visitMemberValuePair(candidate); + } + candidate = candidate.getNextSibling(); + } + } + } + + private void visitMemberValuePair(DetailAST annotationValue) { + DetailAST annotation = annotationValue.getParent(); + DetailAST attribute = annotationValue.findFirstToken(TokenTypes.IDENT); + DetailAST valueExpression = annotationValue.findFirstToken(TokenTypes.EXPR); + visitValueExpression(valueExpression, annotation, attribute.getText()); + } + + private void visitValueExpression(DetailAST valueExpression, DetailAST annotation, String attributeName) { + if (valueExpression != null && valueExpression.getChildCount() == 1) { + List expressionComponents = dotSeparatedComponents(valueExpression.getFirstChild()); + if (expressionComponents != null && expressionComponents.size() > 2) { + String outerTypeName = expressionComponents.get(0); + String annotationName = annotation.findFirstToken(TokenTypes.IDENT).getText(); + if (outerTypeName.equals(annotationName)) { + String innerTypeName = expressionComponents.get(1); + if (!existingClashingImport(outerTypeName, innerTypeName)) { + String toImport = outerTypeName + "." + innerTypeName; + String replacement = String.join(".", expressionComponents.subList(1, expressionComponents.size())); + log(valueExpression.getLineNo(), valueExpression.getColumnNo(), + "annotation.attribute.overlyVerboseValue", attributeName, toImport, replacement); + } + } + } + } + } + + private List dotSeparatedComponents(DetailAST ast) { + if (ast.getType() == TokenTypes.IDENT) { + return Collections.singletonList(ast.getText()); + } + if (ast.getType() == TokenTypes.DOT) { + List left = dotSeparatedComponents(ast.getFirstChild()); + List right = dotSeparatedComponents(ast.getLastChild()); + if (left != null && right != null) { + List components = new ArrayList<>(); + components.addAll(left); + components.addAll(right); + return components; + } + } + return null; + } + + private boolean existingClashingImport(String outer, String inner) { + return this.imports.stream().filter((imported) -> imported.clashesWith(outer, inner)).findFirst().isPresent(); + } + + static class ImportStatement { + + private final String imported; + + ImportStatement(List components) { + this.imported = String.join(".", components); + } + + boolean clashesWith(String outer, String inner) { + return this.imported.endsWith("." + inner) && !this.imported.endsWith("." + outer + "." + inner); + } + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index cdea619e..4c865ff0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -1,3 +1,4 @@ +annotation.attribute.overlyVerboseValue=Value of ''{0}'' attribute is overly verbose. Import ''{1}'' and use ''{2}'' instead. annotation.location=Annotation ''{0}'' have incorrect indentation level {1}, expected level should be {2}. annotation.location.alone=Annotation ''{0}'' should be alone on line. catch.singleLetter=Single letter catch variable (use "ex" instead). diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 4da52558..7fc6d02e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -25,6 +25,7 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 37f9b9c4..e1e60608 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -50,7 +50,7 @@ public void loadShouldLoadChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(61); + assertThat(ordinaryChecks).hasSize(62); Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); assertThat(commentChecks).hasSize(6); } @@ -64,7 +64,7 @@ public void loadWithExcludeShouldExcludeChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(60); + assertThat(ordinaryChecks).hasSize(61); Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); assertThat(commentChecks).hasSize(5); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..17a91c25 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt @@ -0,0 +1,2 @@ ++AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java:17:84: Value of 'value' attribute is overly verbose. Import 'ConditionalOnWebApplicationType.WebApplicationType' and use 'WebApplicationType.SERVLET' instead. [SpringAnnotationAttributeConciseValue] ++1 error \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..2c02256f --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt @@ -0,0 +1,2 @@ ++AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java:17:91: Value of 'type' attribute is overly verbose. Import 'ConditionalOnWebApplicationType.WebApplicationType' and use 'WebApplicationType.SERVLET' instead. [SpringAnnotationAttributeConciseValue] ++1 error \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..d7ea8e09 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@ConditionalOnWebApplicationType(WebApplicationType.A.B.C.D.SERVLET) +public class AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.java new file mode 100644 index 00000000..edc98fb7 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@ConditionalOnSomething(ConditionalOnSomething.TYPE_ONE) +public class AnnotationAttributeWithValueThatHasReferenceToContainedConstant { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..8594fc9b --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@ConditionalOnWebApplicationType(ConditionalOnWebApplicationType.WebApplicationType.SERVLET) +public class AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..ea1a39cd --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@ConditionalOnWebApplicationType(type = WebApplicationType.A.B.C.D.SERVLET) +public class AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..12557326 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.java @@ -0,0 +1,24 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.example.some.other.WebApplicationType; + +@ConditionalOnWebApplicationType(type = ConditionalOnWebApplicationType.WebApplicationType.SERVLET) +public class AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue { + + WebApplicationType type; + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.java new file mode 100644 index 00000000..44d6eb5a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@ConditionalOnSomething(type = ConditionalOnSomething.TYPE_ONE) +public class AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..c652976e --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@ConditionalOnWebApplicationType(type = ConditionalOnWebApplicationType.WebApplicationType.SERVLET) +public class AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue { + +} From 2ba40a67587cd8b50574907279880510f6b272a8 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 9 Jul 2025 10:47:52 +0100 Subject: [PATCH 228/238] Modernize Gradle instructions in the README --- README.adoc | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/README.adoc b/README.adoc index 6c7e7510..e472cb07 100644 --- a/README.adoc +++ b/README.adoc @@ -9,7 +9,7 @@ A set of plugins that can be applied to any Java project to provide a consistent The set currently consists of: * A source formatter that applies wrapping and whitespace conventions -* A checkstyle plugin that enforces consistency across a codebase +* A Checkstyle plugin that enforces consistency across a codebase Since the aim of this project is to provide consistency, each plugin is not generally configurable. You need to change your code to match the required conventions. @@ -82,7 +82,7 @@ If you want to skip both, you can use `-Dspring-javaformat.skip=true`. ==== Checkstyle -To enforce checkstyle conventions, add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: +To enforce Checkstyle conventions, add the Checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: [source,xml,indent=0,subs="normal"] ---- @@ -126,46 +126,49 @@ To enforce checkstyle conventions, add the checkstyle plugin and include a depen === Gradle +A plugin is provided. +To use it, first update `settings.gradle` to add Maven Central as a plugin repository: +[source,groovy,indent=0,subs="normal"] +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + } +} - -==== Source Formatting -For source formatting, add the `spring-javaformat-gradle-plugin` to your `build` plugins as follows: +The plugin can then be added in the usual way in `build.gradle`: [source,groovy,indent=0,subs="normal"] ---- - buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:{release-version}") - } - } - - apply plugin: 'io.spring.javaformat' +plugins { + id "io.spring.javaformat" version "{release-version}"" +} ---- +==== Source Formatting The plugin adds `format` and `checkFormat` tasks to your project. -The `checkFormat` task is automatically applied when running the standard Gradle `check` task. +The `checkFormat` task is automatically executed when running the standard Gradle `check` task. -In case you want to exclude a package from being checked, for example if you generate sources, you can do this by adding the following configuration: +In case you want to exclude a package from being checked, for example if you generate sources, add configuration similar to the following: [source,groovy,indent=0,subs="normal"] ---- tasks.withType(io.spring.javaformat.gradle.tasks.CheckFormat) { - exclude "package/to/exclude" + exclude "package/to/exclude" } ---- ==== Checkstyle -To enforce checkstyle conventions, add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: +To enforce Checkstyle conventions, add the `checkstyle` plugin and include a dependency on `spring-javaformat-checkstyle`: [source,groovy,indent=0,subs="normal"] ---- -apply plugin: 'checkstyle' +plugins { + id "checkstyle" +} checkstyle { toolVersion = "{checkstyle-version}" @@ -176,7 +179,7 @@ dependencies { } ---- -Your `checkstyle.xml` file should look then like this: +To use the Spring checks, your `checkstyle.xml` file should look like this: [source,xml,indent=0] ---- @@ -368,7 +371,7 @@ If you find you need whitespace inside your method, consider whether extracting Try to add javadoc for each public method and constant. Private methods shouldn't generally need javadoc, unless it provides a natural place to document unusual behavior. -The checkstyle rules will enforce that all public classes have javadoc. +The Checkstyle rules will enforce that all public classes have javadoc. They will also ensure that `@author` tags are well formed. From 4dddd32ee6147e7c0e05152488b20681903a6fd0 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 8 Jul 2025 20:26:22 +0100 Subject: [PATCH 229/238] Improve Gradle integration This commit adds improved Gradle integration. The Java Format Gradle plugin now: - Reacts to the Checkstyle plugin being applied by adding a dependency on spring-javaformat-checkstyle - Provide a DSL extension that can be used to: - Apply the default checkstyle.xml configuration - Opt out of the automatic dependency configuration Closes gh-443 Closes gh-453 --- README.adoc | 38 +++++--- .../spring-javaformat-gradle-plugin/pom.xml | 6 ++ .../gradle/SpringJavaFormatExtension.java | 90 +++++++++++++++++++ .../gradle/SpringJavaFormatPlugin.java | 49 ++++++++++ .../javaformat/gradle/CheckstyleTests.java | 59 ++++++++++++ .../build.gradle | 27 ++++++ .../build.gradle | 25 ++++++ .../checkstyle-configure/build.gradle | 21 +++++ .../checkstyle-do-not-configure/build.gradle | 23 +++++ .../pom.xml | 5 ++ 10 files changed, 331 insertions(+), 12 deletions(-) create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatExtension.java create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckstyleTests.java create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-apply-default-config/build.gradle create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure-with-custom-tool-version/build.gradle create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure/build.gradle create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-do-not-configure/build.gradle diff --git a/README.adoc b/README.adoc index e472cb07..ee170a9e 100644 --- a/README.adoc +++ b/README.adoc @@ -162,34 +162,48 @@ tasks.withType(io.spring.javaformat.gradle.tasks.CheckFormat) { ==== Checkstyle -To enforce Checkstyle conventions, add the `checkstyle` plugin and include a dependency on `spring-javaformat-checkstyle`: +To enforce Checkstyle conventions, apply the Checkstyle plugin in addition to the `io.spring.javaformat` plugin: [source,groovy,indent=0,subs="normal"] ---- plugins { + id "io.spring.javaformat" version "{release-version}" id "checkstyle" } +The Spring Java Format plugin will react to the Checkstyle plugin being applied and configure the necessary dependencies in the `checkstyle` configuration. + +You should also configure Checkstyle's tool version: + +[source,groovy,indent=0,subs="normal"] +---- checkstyle { toolVersion = "{checkstyle-version}" } +---- + +To configure Checkstyle to use the default Spring checks, add the following configuration: -dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:{release-version}") +[source,groovy,indent=0,subs="normal"] +---- +springJavaFormat { + checkstyle { + applyDefaultConfig() + } } ---- -To use the Spring checks, your `checkstyle.xml` file should look like this: +Alternatively, provide your own `checkstyle.xml` that configures the `io.spring.javaformat.checkstyle.SpringChecks` module. -[source,xml,indent=0] +If you want to use both Spring Java Format and Checkstyle but you do not want to use Spring Java Format's checks, disable the aforementioned dependency configuration: + +[source,groovy,indent=0,subs="normal"] ---- - - - - - +springJavaFormat { + checkstyle { + configureDependencies = false + } +} ---- diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index ee8098c1..3170b015 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -115,6 +115,12 @@ spring-javaformat-formatter-shaded ${project.version} + + + io.spring.javaformat + spring-javaformat-checkstyle + ${project.version} + diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatExtension.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatExtension.java new file mode 100644 index 00000000..2f173b99 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatExtension.java @@ -0,0 +1,90 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.gradle; + +import java.io.PrintWriter; +import java.io.StringWriter; + +import javax.inject.Inject; + +import org.gradle.api.Action; +import org.gradle.api.Project; +import org.gradle.api.plugins.quality.CheckstyleExtension; +import org.gradle.api.provider.Property; +import org.gradle.api.resources.TextResource; + +/** + * DSL extension for Spring Java Format. + * + * @author Andy Wilkinson + */ +public abstract class SpringJavaFormatExtension { + + private final Checkstyle checkstyle; + + @Inject + public SpringJavaFormatExtension(Project project) { + this.checkstyle = project.getObjects().newInstance(Checkstyle.class, project); + this.checkstyle.getConfigureDependencies().convention(true); + } + + public Checkstyle getCheckstyle() { + return this.checkstyle; + } + + public void checkstyle(Action action) { + action.execute(this.checkstyle); + } + + public abstract static class Checkstyle { + + private final Project project; + + @Inject + public Checkstyle(Project project) { + this.project = project; + } + + /** + * Property that controls whether Checkstyle's dependencies should be configured to + * use Spring Java Format's checks. + * @return the property + */ + public abstract Property getConfigureDependencies(); + + /** + * Applies Spring Java Format's default Checkstyle config, enabling all Spring checks. + * @see CheckstyleExtension#setConfig(TextResource) + */ + public void applyDefaultConfig() { + CheckstyleExtension extension = this.project.getExtensions().getByType(CheckstyleExtension.class); + StringWriter defaultConfig = new StringWriter(); + PrintWriter writer = new PrintWriter(defaultConfig); + writer.println(""); + writer.println(""); + writer.println(""); + writer.println(" "); + writer.println(" "); + writer.println(""); + extension.setConfig(this.project.getResources().getText().fromString(defaultConfig.toString())); + } + + } + +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index b0c48331..4dc2f423 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -17,17 +17,24 @@ package io.spring.javaformat.gradle; import java.io.File; +import java.util.ArrayList; +import java.util.List; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; +import org.gradle.api.artifacts.Dependency; +import org.gradle.api.artifacts.DependencySet; import org.gradle.api.plugins.JavaBasePlugin; import org.gradle.api.plugins.JavaPluginExtension; +import org.gradle.api.plugins.quality.CheckstyleExtension; +import org.gradle.api.plugins.quality.CheckstylePlugin; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskProvider; import io.spring.javaformat.config.JavaFormatConfig; +import io.spring.javaformat.formatter.Formatter; import io.spring.javaformat.gradle.tasks.CheckFormat; import io.spring.javaformat.gradle.tasks.Format; import io.spring.javaformat.gradle.tasks.FormatterTask; @@ -46,6 +53,13 @@ public class SpringJavaFormatPlugin implements Plugin { public void apply(Project project) { this.project = project; addSourceTasks(); + SpringJavaFormatExtension extension = registerExtension(); + new CheckstyleConfigurer(project, extension).apply(); + } + + private SpringJavaFormatExtension registerExtension() { + SpringJavaFormatExtension extension = this.project.getExtensions().create("springJavaFormat", SpringJavaFormatExtension.class); + return extension; } private void addSourceTasks() { @@ -90,4 +104,39 @@ private TaskProvider addFormatterTask(SourceSet sou return provider; } + private static final class CheckstyleConfigurer { + + private final Project project; + + private final SpringJavaFormatExtension extension; + + private CheckstyleConfigurer(Project project, SpringJavaFormatExtension extension) { + this.project = project; + this.extension = extension; + } + + private void apply() { + this.project.getPlugins().withType(CheckstylePlugin.class).configureEach((checkstylePlugin) -> { + CheckstyleExtension checkstyle = this.project.getExtensions().getByType(CheckstyleExtension.class); + DependencySet checkstyleDependencies = this.project.getConfigurations().getByName("checkstyle").getDependencies(); + checkstyleDependencies.addAllLater(this.project.provider(() -> checkstyleDependencies(checkstyle))); + }); + } + + private List checkstyleDependencies(CheckstyleExtension checkstyle) { + List dependencies = new ArrayList<>(); + if (configuringCheckstyleDependencies()) { + dependencies.add(this.project.getDependencies().create("com.puppycrawl.tools:checkstyle:" + checkstyle.getToolVersion())); + dependencies.add(this.project.getDependencies().create("io.spring.javaformat:spring-javaformat-checkstyle:" + + Formatter.class.getPackage().getImplementationVersion())); + } + return dependencies; + } + + private boolean configuringCheckstyleDependencies() { + return Boolean.TRUE.equals(this.extension.getCheckstyle().getConfigureDependencies().get()); + } + + } + } diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckstyleTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckstyleTests.java new file mode 100644 index 00000000..8995edad --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckstyleTests.java @@ -0,0 +1,59 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.gradle; + +import org.gradle.testkit.runner.BuildResult; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import io.spring.javaformat.gradle.testkit.GradleBuild; +import io.spring.javaformat.gradle.testkit.GradleBuildExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(GradleBuildExtension.class) +class CheckstyleTests { + + private final GradleBuild gradleBuild = new GradleBuild(); + + @Test + void configureCheckstyle() { + BuildResult result = this.gradleBuild.source("src/test/resources/checkstyle-configure").build("checkstyleDependencies"); + assertThat(result.getOutput()).contains("io.spring.javaformat:spring-javaformat-checkstyle:"); + assertThat(result.getOutput()).contains("com.puppycrawl.tools:checkstyle:8.45.1"); + } + + @Test + void configureCheckstyleWithCustomToolVersion() { + BuildResult result = this.gradleBuild.source("src/test/resources/checkstyle-configure-with-custom-tool-version").build("checkstyleDependencies"); + assertThat(result.getOutput()).contains("io.spring.javaformat:spring-javaformat-checkstyle:"); + assertThat(result.getOutput()).contains("com.puppycrawl.tools:checkstyle:10.26.1"); + } + + @Test + void doNotConfigureCheckstyle() { + BuildResult result = this.gradleBuild.source("src/test/resources/checkstyle-do-not-configure").build("checkstyleDependencies"); + assertThat(result.getOutput()).doesNotContain("spring-javaformat-checkstyle"); + } + + @Test + void applyDefaultConfigToCheckstyle() { + BuildResult result = this.gradleBuild.source("src/test/resources/checkstyle-apply-default-config").build("checkstyleConfig"); + assertThat(result.getOutput()).contains(""); + } + +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-apply-default-config/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-apply-default-config/build.gradle new file mode 100644 index 00000000..302352be --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-apply-default-config/build.gradle @@ -0,0 +1,27 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'checkstyle' +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +springJavaFormat { + checkstyle { + applyDefaultConfig() + } +} + +tasks.register("checkstyleConfig") { + doFirst { + println checkstyle.config.asString() + } +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure-with-custom-tool-version/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure-with-custom-tool-version/build.gradle new file mode 100644 index 00000000..cc42d068 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure-with-custom-tool-version/build.gradle @@ -0,0 +1,25 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'checkstyle' +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +checkstyle { + toolVersion = "10.26.1" +} + +tasks.register("checkstyleDependencies") { + doFirst { + configurations.checkstyle.dependencies.each { println "${it.group}:${it.name}:${it.version}" } + } +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure/build.gradle new file mode 100644 index 00000000..08207b88 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure/build.gradle @@ -0,0 +1,21 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'checkstyle' +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +tasks.register("checkstyleDependencies") { + doFirst { + configurations.checkstyle.dependencies.each { println "${it.group}:${it.name}:${it.version}" } + } +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-do-not-configure/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-do-not-configure/build.gradle new file mode 100644 index 00000000..561ffa61 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-do-not-configure/build.gradle @@ -0,0 +1,23 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'checkstyle' +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 + +springJavaFormat { + checkstyle { + configureDependencies = false + } +} + +tasks.register("checkstyleDependencies") { + doFirst { + configurations.checkstyle.dependencies.each { println "${it.group}:${it.name}:${it.version}" } + } +} diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 6aeff1c4..330f53c9 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -80,6 +80,11 @@ + + + ${project.version} + + From 2f512ea067c186ff48ef34b375e0d54c51e0d1c3 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Thu, 10 Jul 2025 09:24:55 +0200 Subject: [PATCH 230/238] Fix readme --- README.adoc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index ee170a9e..d5dfb4ea 100644 --- a/README.adoc +++ b/README.adoc @@ -130,19 +130,21 @@ A plugin is provided. To use it, first update `settings.gradle` to add Maven Central as a plugin repository: [source,groovy,indent=0,subs="normal"] +---- pluginManagement { repositories { gradlePluginPortal() mavenCentral() } } +---- The plugin can then be added in the usual way in `build.gradle`: [source,groovy,indent=0,subs="normal"] ---- plugins { - id "io.spring.javaformat" version "{release-version}"" + id "io.spring.javaformat" version "{release-version}" } ---- @@ -170,6 +172,7 @@ plugins { id "io.spring.javaformat" version "{release-version}" id "checkstyle" } +---- The Spring Java Format plugin will react to the Checkstyle plugin being applied and configure the necessary dependencies in the `checkstyle` configuration. From 3a3e69dd3b8312ffcc9c9fca4cd9e713be22cb96 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 15 Jul 2025 11:08:43 +0100 Subject: [PATCH 231/238] Relax NoWhitespaceBeforeCheck to allow annotated varags Closes gh-454 --- .../check/SpringNoWhitespaceBeforeCheck.java | 52 +++++++++++++++++++ .../checkstyle/spring-checkstyle.xml | 2 +- .../check/WhitespaceNullableArray.txt | 1 + .../check/WhitespaceNullableArrayElements.txt | 1 + .../check/WhitespaceNullableVarargs.txt | 1 + .../resources/check/WhitespaceVarargs.txt | 2 + .../source/WhitespaceNullableArray.java | 28 ++++++++++ .../WhitespaceNullableArrayElements.java | 28 ++++++++++ .../source/WhitespaceNullableVarargs.java | 28 ++++++++++ .../resources/source/WhitespaceVarargs.java | 28 ++++++++++ 10 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoWhitespaceBeforeCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArray.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArrayElements.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableVarargs.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceVarargs.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArray.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArrayElements.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableVarargs.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceVarargs.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoWhitespaceBeforeCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoWhitespaceBeforeCheck.java new file mode 100644 index 00000000..f06a88c5 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoWhitespaceBeforeCheck.java @@ -0,0 +1,52 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.checkstyle.check; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; +import com.puppycrawl.tools.checkstyle.checks.whitespace.NoWhitespaceBeforeCheck; + +/** + * Spring-specific customization of {@link NoWhitespaceBeforeCheck} that permits + * whitespace before {@code ...} when it is a separator after an annotation, for + * example {@code int @Nullable ...}. + * + * @author Andy Wilkinson + */ +public class SpringNoWhitespaceBeforeCheck extends NoWhitespaceBeforeCheck { + + @Override + public void visitToken(DetailAST ast) { + if (ast.getType() != TokenTypes.ELLIPSIS) { + super.visitToken(ast); + } + else { + visitEllipsis(ast); + } + } + + private void visitEllipsis(DetailAST ellipsis) { + DetailAST previousSibling = ellipsis.getPreviousSibling(); + if (previousSibling.getType() == TokenTypes.TYPE && + previousSibling.getChildCount() == 2 && + previousSibling.getLastChild().getType() == TokenTypes.ANNOTATIONS) { + return; + } + super.visitToken(ellipsis); + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 7fc6d02e..38071be9 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -145,7 +145,7 @@ - + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArray.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArray.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArray.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArrayElements.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArrayElements.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArrayElements.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableVarargs.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableVarargs.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableVarargs.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceVarargs.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceVarargs.txt new file mode 100644 index 00000000..1ec0d7e2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceVarargs.txt @@ -0,0 +1,2 @@ ++WhitespaceVarargs.java:24:24: '...' is preceded with whitespace. [SpringNoWhitespaceBefore] ++1 error \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArray.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArray.java new file mode 100644 index 00000000..2d25cfa7 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArray.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Whitespace is expected before {@code []} when @Nullable. + * + * @author Andy Wilkinson + */ +public class WhitespaceNullableArray { + + void bytes(int @Nullable [] elements) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArrayElements.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArrayElements.java new file mode 100644 index 00000000..6e23b7fb --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArrayElements.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Whitespace is expected before {@code type[]} when @Nullable. + * + * @author Andy Wilkinson + */ +public class WhitespaceNullableArrayElements { + + void bytes(@Nullable int[] elements) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableVarargs.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableVarargs.java new file mode 100644 index 00000000..1b4eaeae --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableVarargs.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Whitespace is expected before ... when @Nullable. + * + * @author Andy Wilkinson + */ +public class WhitespaceNullableVarargs { + + void bytes(int @Nullable ... elements) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceVarargs.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceVarargs.java new file mode 100644 index 00000000..2a962abe --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceVarargs.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Whitespace is not expected before {@code ...}. + * + * @author Andy Wilkinson + */ +public class WhitespaceVarargs { + + void bytes(int ... elements) { + + } + +} From 4f4e08a171fe5ccb545e242e935b98a48e478416 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 29 Jul 2025 12:12:43 +0100 Subject: [PATCH 232/238] Ignore fully-qualified annotation in attribute value concision check Closes gh-455 --- ...gAnnotationAttributeConciseValueCheck.java | 34 +++++++++++-------- ...asConciseReferenceToContainedEnumValue.txt | 1 + ...sConciseReferenceToContainedEnumValue.java | 20 +++++++++++ 3 files changed, 41 insertions(+), 14 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java index 703d9919..b8b0ad81 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java @@ -95,20 +95,26 @@ private void visitMemberValuePair(DetailAST annotationValue) { } private void visitValueExpression(DetailAST valueExpression, DetailAST annotation, String attributeName) { - if (valueExpression != null && valueExpression.getChildCount() == 1) { - List expressionComponents = dotSeparatedComponents(valueExpression.getFirstChild()); - if (expressionComponents != null && expressionComponents.size() > 2) { - String outerTypeName = expressionComponents.get(0); - String annotationName = annotation.findFirstToken(TokenTypes.IDENT).getText(); - if (outerTypeName.equals(annotationName)) { - String innerTypeName = expressionComponents.get(1); - if (!existingClashingImport(outerTypeName, innerTypeName)) { - String toImport = outerTypeName + "." + innerTypeName; - String replacement = String.join(".", expressionComponents.subList(1, expressionComponents.size())); - log(valueExpression.getLineNo(), valueExpression.getColumnNo(), - "annotation.attribute.overlyVerboseValue", attributeName, toImport, replacement); - } - } + if (valueExpression == null || valueExpression.getChildCount() != 1) { + return; + } + List expressionComponents = dotSeparatedComponents(valueExpression.getFirstChild()); + if (expressionComponents == null || expressionComponents.size() <= 2) { + return; + } + String outerTypeName = expressionComponents.get(0); + DetailAST annotationIdent = annotation.findFirstToken(TokenTypes.IDENT); + if (annotationIdent == null) { + return; + } + String annotationName = annotationIdent.getText(); + if (outerTypeName.equals(annotationName)) { + String innerTypeName = expressionComponents.get(1); + if (!existingClashingImport(outerTypeName, innerTypeName)) { + String toImport = outerTypeName + "." + innerTypeName; + String replacement = String.join(".", expressionComponents.subList(1, expressionComponents.size())); + log(valueExpression.getLineNo(), valueExpression.getColumnNo(), + "annotation.attribute.overlyVerboseValue", attributeName, toImport, replacement); } } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..614e11c0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@com.example.web.condition.ConditionalOnWebApplicationType(type = WebApplicationType.A.B.C.D.SERVLET) +public class AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue { + +} From bcd9ab0948d637f8509e5a1f40edb5da698f65d4 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 14 Aug 2025 15:16:28 -0700 Subject: [PATCH 233/238] Update README for Eclipse update site Closes gh-457 --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index d5dfb4ea..907d9a2c 100644 --- a/README.adoc +++ b/README.adoc @@ -242,7 +242,7 @@ You can also add a `.eclipse/eclipse.properties` file to customize the following To install the plugin use the `io.spring.javaformat.eclipse.site` zip file. You can download the latest version from https://repo1.maven.org/maven2/io/spring/javaformat/io.spring.javaformat.eclipse.site/{release-version}[Maven Central] -or use the https://repo.spring.io/javaformat-eclipse-update-site/[update site]. +or use the `https://repo.spring.io/javaformat-eclipse-update-site/` as an Eclipse update site (do not use the `/ui/native/` links that you are redirected to when using a web browser). From 3d3db5fdbcfcc07d4a20f68ada86f0ba191d2074 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 31 Oct 2025 10:34:11 +0000 Subject: [PATCH 234/238] Check since tags on nested elements Closes gh-462 --- .../checkstyle/check/SpringJavadocCheck.java | 142 ++++++++++++++++-- .../checkstyle/check/messages.properties | 2 + .../JavadocAnnotationFieldHasEarlierSince.txt | 2 + .../JavadocInnerClassHasEarlierSince.txt | 2 + .../check/JavadocMethodHasEarlierSince.txt | 2 + ...JavadocAnnotationFieldHasEarlierSince.java | 32 ++++ .../JavadocInnerClassHasEarlierSince.java | 34 +++++ .../source/JavadocMethodHasEarlierSince.java | 33 ++++ .../source/JavadocNonPublicSince.java | 2 +- ...JavadocNonPublicSinceInsideAnnotation.java | 2 +- .../JavadocNonPublicSinceInsideInterface.java | 2 +- 11 files changed, 238 insertions(+), 17 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocAnnotationFieldHasEarlierSince.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocInnerClassHasEarlierSince.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodHasEarlierSince.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAnnotationFieldHasEarlierSince.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocInnerClassHasEarlierSince.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodHasEarlierSince.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index d0d0844a..d9cd08f5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -81,7 +81,7 @@ public class SpringJavadocCheck extends AbstractSpringCheck { @Override public int[] getDefaultTokens() { return new int[] { TokenTypes.INTERFACE_DEF, TokenTypes.CLASS_DEF, TokenTypes.ENUM_DEF, - TokenTypes.ANNOTATION_DEF, TokenTypes.METHOD_DEF, TokenTypes.CTOR_DEF }; + TokenTypes.ANNOTATION_DEF, TokenTypes.METHOD_DEF, TokenTypes.CTOR_DEF, TokenTypes.ANNOTATION_FIELD_DEF }; } @Override @@ -130,6 +130,7 @@ private void checkJavadoc(DetailAST ast, TextBlock javadoc) { checkTagCase(ast, javadoc); checkSinceTag(ast, javadoc); checkMethodJavaDoc(ast, javadoc); + checkAnnotationFieldJavaDoc(ast, javadoc); } private void checkBannedTags(DetailAST ast, TextBlock javadoc) { @@ -164,25 +165,54 @@ private void checkSinceTag(DetailAST ast, TextBlock javadoc) { if (!TOP_LEVEL_TYPES.contains(ast.getType())) { return; } - String[] text = javadoc.getText(); DetailAST interfaceOrAnnotationDef = getInterfaceOrAnnotationDef(ast); boolean privateType = !isPublicOrProtected(ast) && (interfaceOrAnnotationDef == null || !isPublicOrProtected(interfaceOrAnnotationDef)); - boolean innerType = ast.getParent() != null && ast.getParent().getType() != TokenTypes.COMPILATION_UNIT; - boolean found = false; - for (int i = 0; i < text.length; i++) { - Matcher matcher = SINCE_TAG_PATTERN.matcher(text[i]); - if (matcher.find()) { - found = true; - String description = matcher.group(1).trim(); - if (this.publicOnlySinceTags && privateType) { - log(javadoc.getStartLineNo() + i, text[i].length() - description.length(), "javadoc.publicSince"); - } + SinceTag sinceTag = SinceTag.find(ast, javadoc); + if (sinceTag != null) { + if (this.publicOnlySinceTags && privateType) { + log(sinceTag.lineNumber, sinceTag.columnNumber, "javadoc.publicSince"); + } + else { + checkContainingSince(ast, sinceTag); } } - if (this.requireSinceTag && !innerType && !found && !(this.publicOnlySinceTags && privateType)) { - log(javadoc.getStartLineNo(), 0, "javadoc.missingSince"); + else { + boolean innerType = ast.getParent() != null && ast.getParent().getType() != TokenTypes.COMPILATION_UNIT; + if (this.requireSinceTag && !innerType && sinceTag == null && !(this.publicOnlySinceTags && privateType)) { + log(javadoc.getStartLineNo(), 0, "javadoc.missingSince"); + } + } + } + + private void checkContainingSince(DetailAST ast, SinceTag currentTag) { + SinceTag containingSince = findContainingSince(ast); + if (containingSince != null) { + SinceVersion current = currentTag.version; + SinceVersion container = containingSince.version; + int comparison = current.compareTo(container); + if (comparison < 0) { + log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.earlierSince", current, container, containingSince.lineNumber, containingSince.columnNumber); + } + else if (comparison == 0) { + log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.sameSince", current, containingSince.lineNumber, containingSince.columnNumber); + } + } + } + + private SinceTag findContainingSince(DetailAST ast) { + DetailAST parent = ast.getParent(); + while (parent != null && parent.getType() != TokenTypes.COMPILATION_UNIT) { + TextBlock javadoc = getFileContents().getJavadocBefore(parent.getLineNo()); + if (javadoc != null) { + SinceTag sinceTag = SinceTag.find(ast, javadoc); + if (sinceTag != null) { + return sinceTag; + } + } + parent = parent.getParent(); } + return null; } private void checkMethodJavaDoc(DetailAST ast, TextBlock javadoc) { @@ -196,6 +226,20 @@ private void checkMethodJavaDoc(DetailAST ast, TextBlock javadoc) { log(javadoc.getStartLineNo() + i - 1, 0, "javadoc.emptyLineBeforeTag"); } } + SinceTag sinceTag = SinceTag.find(ast, javadoc); + if (sinceTag != null) { + checkContainingSince(ast, sinceTag); + } + } + + private void checkAnnotationFieldJavaDoc(DetailAST ast, TextBlock javadoc) { + if (TokenTypes.ANNOTATION_FIELD_DEF != ast.getType()) { + return; + } + SinceTag sinceTag = SinceTag.find(ast, javadoc); + if (sinceTag != null) { + checkContainingSince(ast, sinceTag); + } } private boolean startsWithUppercase(String description) { @@ -251,4 +295,74 @@ private boolean isPublicOrProtected(DetailAST ast) { || modifiers.findFirstToken(TokenTypes.LITERAL_PROTECTED) != null; } + private static final class SinceTag { + + private final int lineNumber; + + private final int columnNumber; + + private final SinceVersion version; + + private SinceTag(int lineNumber, int columnNumber, SinceVersion version) { + this.lineNumber = lineNumber; + this.columnNumber = columnNumber; + this.version = version; + } + + private static SinceTag find(DetailAST ast, TextBlock javadoc) { + String[] text = javadoc.getText(); + for (int i = 0; i < text.length; i++) { + Matcher matcher = SINCE_TAG_PATTERN.matcher(text[i]); + if (matcher.find()) { + String description = matcher.group(1).trim(); + return new SinceTag(javadoc.getStartLineNo() + i, text[i].length() - description.length(), SinceVersion.of(description)); + } + } + return null; + } + } + + private static final class SinceVersion implements Comparable { + + private final int major; + + private final int minor; + + private final int patch; + + private final String text; + + private SinceVersion(int major, int minor, int patch, String text) { + this.major = major; + this.minor = minor; + this.patch = patch; + this.text = text; + } + + private static SinceVersion of(String text) { + String[] components = text.split("\\."); + int major = (components.length > 0) ? Integer.parseInt(components[0]) : 0; + int minor = (components.length > 1) ? Integer.parseInt(components[1]) : 0; + int patch = (components.length > 2) ? Integer.parseInt(components[2]) : 0; + return new SinceVersion(major, minor, patch, text); + } + + public String toString() { + return this.text; + } + + @Override + public int compareTo(SinceVersion other) { + int diff = this.major - other.major; + if (diff == 0) { + diff = this.minor - other.minor; + if (diff == 0) { + diff = this.patch - other.patch; + } + } + return diff; + } + + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 4c865ff0..3d402e0b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -11,7 +11,9 @@ import.avoidStatic=Using a static member import should be avoided - {0}. import.ordering=Wrong order for ''{0}'' import. javadoc.badCase=Javadoc element descriptions should not start with an uppercase letter. javadoc.bannedTag=Javadoc tag ''{0}'' should not be used. +javadoc.earlierSince=Javadoc @since version ''{0}'' is earlier than @since version ''{1}'' at {2}:{3}. javadoc.missingSince=Missing Javadoc @since tag. +javadoc.sameSince=Javadoc @since version ''{0}'' is unnecessary as it is the same as the @since version at {1}:{2}. javadoc.publicSince=Javadoc @since tag should not be used on private classes. javadoc.emptyLineBeforeTag=Method Javadoc should not have empty line before tag. javadoc.nonJavadocComment=Comments should not include \"(non-Javadoc)\". diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocAnnotationFieldHasEarlierSince.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocAnnotationFieldHasEarlierSince.txt new file mode 100644 index 00000000..e5c19bf9 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocAnnotationFieldHasEarlierSince.txt @@ -0,0 +1,2 @@ ++28:19: Javadoc @since version '1.1.0' is earlier than @since version '1.2.0' at 21:10. ++1 error diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocInnerClassHasEarlierSince.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocInnerClassHasEarlierSince.txt new file mode 100644 index 00000000..73737acb --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocInnerClassHasEarlierSince.txt @@ -0,0 +1,2 @@ ++28:19: Javadoc @since version '1.2.3' is earlier than @since version '2.0.0' at 21:10. ++1 error diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodHasEarlierSince.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodHasEarlierSince.txt new file mode 100644 index 00000000..7d3a7148 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodHasEarlierSince.txt @@ -0,0 +1,2 @@ ++27:19: Javadoc @since version '1.2.3' is earlier than @since version '2.0.0' at 21:10. ++1 error diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAnnotationFieldHasEarlierSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAnnotationFieldHasEarlierSince.java new file mode 100644 index 00000000..2ecaf03c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAnnotationFieldHasEarlierSince.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Javadoc with a good since tag. + * + * @author Andy Wilkinson + * @since 1.2.0 + */ +public @interface JavadocAnnotationFieldHasEarlierSince { + + /** + * An attribute. + * @return the value + * @since 1.1.0 + */ + boolean attribute() default true; + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocInnerClassHasEarlierSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocInnerClassHasEarlierSince.java new file mode 100644 index 00000000..2ad74700 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocInnerClassHasEarlierSince.java @@ -0,0 +1,34 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Javadoc with an earlier since tag on an inner class. + * + * @author Phillip Webb + * @since 2.0.0 + */ +class JavadocInnerClassHasEarlierSince { + + /** + * Inner class. + * + * @since 1.2.3 + */ + private static class Inner { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodHasEarlierSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodHasEarlierSince.java new file mode 100644 index 00000000..d23d74ee --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodHasEarlierSince.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Javadoc with an earlier since tag on a method. + * + * @author Andy Wilkinson + * @since 2.0.0 + */ +public class JavadocMethodHasEarlierSince { + + /** + * Some method. + * @since 1.2.3 + */ + public void someMethod() { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java index c76a57a3..4f0f2fde 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java @@ -25,7 +25,7 @@ class JavadocNonPublicSince { /** * Inner class. * - * @since 1.2.3 + * @since 1.2.4 */ private static class Inner { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java index da8c6f46..b79a5a85 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java @@ -25,7 +25,7 @@ /** * Inner enum. * - * @since 1.2.3 + * @since 1.2.4 */ enum Inner { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java index edefdd29..c0e4b412 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java @@ -25,7 +25,7 @@ public interface JavadocNonPublicSinceInsideInterface { /** * Inner enum. * - * @since 1.2.3 + * @since 1.2.4 */ enum Inner { From 40f2ff5d19035350052d8cbf515843aeaecdfd61 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 29 Jan 2026 11:06:01 +0000 Subject: [PATCH 235/238] Ignore date-like since when comparing with nested since See gh-462 --- .../checkstyle/check/SpringJavadocCheck.java | 36 +++++++++++++------ .../test/resources/source/JavadocValid.java | 30 ++++++++++++++++ 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index d9cd08f5..56f7ea63 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -190,12 +190,14 @@ private void checkContainingSince(DetailAST ast, SinceTag currentTag) { if (containingSince != null) { SinceVersion current = currentTag.version; SinceVersion container = containingSince.version; - int comparison = current.compareTo(container); - if (comparison < 0) { - log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.earlierSince", current, container, containingSince.lineNumber, containingSince.columnNumber); - } - else if (comparison == 0) { - log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.sameSince", current, containingSince.lineNumber, containingSince.columnNumber); + if (current != SinceVersion.UNKNOWN && container != SinceVersion.UNKNOWN) { + int comparison = current.compareTo(container); + if (comparison < 0) { + log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.earlierSince", current, container, containingSince.lineNumber, containingSince.columnNumber); + } + else if (comparison == 0) { + log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.sameSince", current, containingSince.lineNumber, containingSince.columnNumber); + } } } } @@ -324,6 +326,10 @@ private static SinceTag find(DetailAST ast, TextBlock javadoc) { private static final class SinceVersion implements Comparable { + private static final SinceVersion UNKNOWN = new SinceVersion(-1, -1, -1, "unknown"); + + private static final Pattern DATE_PATTERN = Pattern.compile("[0-3][0-9]\\.[0-1][0-9]\\.20[0-2][0-9]"); + private final int major; private final int minor; @@ -340,11 +346,19 @@ private SinceVersion(int major, int minor, int patch, String text) { } private static SinceVersion of(String text) { - String[] components = text.split("\\."); - int major = (components.length > 0) ? Integer.parseInt(components[0]) : 0; - int minor = (components.length > 1) ? Integer.parseInt(components[1]) : 0; - int patch = (components.length > 2) ? Integer.parseInt(components[2]) : 0; - return new SinceVersion(major, minor, patch, text); + if (DATE_PATTERN.matcher(text).matches()) { + return UNKNOWN; + } + try { + String[] components = text.split("\\."); + int major = (components.length > 0) ? Integer.parseInt(components[0]) : 0; + int minor = (components.length > 1) ? Integer.parseInt(components[1]) : 0; + int patch = (components.length > 2) ? Integer.parseInt(components[2]) : 0; + return new SinceVersion(major, minor, patch, text); + } + catch (NumberFormatException ex) { + return UNKNOWN; + } } public String toString() { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java index 30eec4c3..6584ef36 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java @@ -46,4 +46,34 @@ public void test2(String something) { public String test3(String something) throws RuntimeException { } + /** + * Class with a numeric date since. + * @since 28.12.2003 + */ + public class NumericDateSince { + + /** + * Method with version-based since. + * @since 1.3.0 + */ + public void versionSince() { + } + + } + + /** + * Class with an alphanumeric date since. + * @since 16 April 2001 + */ + public class AlphanumericDateSince { + + /** + * Method with version-based since. + * @since 1.3.0 + */ + public void versionSince() { + } + + } + } From 2fac7723af97eeaae47344774fbc9f0168af4cb4 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 29 Jan 2026 11:08:11 +0000 Subject: [PATCH 236/238] Enforce Spring team's nullability style and conventions - JSpecify annotations are used to express nullability - Type use annotations (@Nullable and @NonNull) are positioned immediately before the type Closes gh-465 --- .../check/SpringNullabilityCheck.java | 140 ++++++++++++++++++ .../checkstyle/check/messages.properties | 2 + .../checkstyle/spring-checkstyle.xml | 1 + .../SpringConfigurationLoaderTests.java | 4 +- .../check/NullabilityBannedNonNull.txt | 3 + .../check/NullabilityBannedNullable.txt | 1 + ...llabilityNullableNotPrecedingFieldType.txt | 1 + ...ilityNullableNotPrecedingParameterType.txt | 1 + ...labilityNullableNotPrecedingReturnType.txt | 1 + .../NullabilityNullableOnSeparateLine.txt | 0 .../test/resources/check/NullabilityValid.txt | 1 + .../source/NullabilityBannedNonNull.java | 32 ++++ .../source/NullabilityBannedNullable.java | 30 ++++ ...labilityNullableNotPrecedingFieldType.java | 28 ++++ ...lityNullableNotPrecedingParameterType.java | 30 ++++ ...abilityNullableNotPrecedingReturnType.java | 30 ++++ .../NullabilityNullableOnSeparateLine.java | 31 ++++ .../resources/source/NullabilityValid.java | 59 ++++++++ 18 files changed, 393 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNullabilityCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNonNull.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNullable.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingFieldType.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingParameterType.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingReturnType.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableOnSeparateLine.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityValid.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNonNull.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNullable.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingFieldType.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingParameterType.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingReturnType.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableOnSeparateLine.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityValid.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNullabilityCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNullabilityCheck.java new file mode 100644 index 00000000..4c48c381 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNullabilityCheck.java @@ -0,0 +1,140 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.checkstyle.check; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.FullIdent; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; + +/** + * Checks compliance with Spring team's nullability conventions. JSpecify annotations + * should be used to express nullability and type-use annotations ({@code @Nullable} + * and {@code @NonNull}) should appear immediately before a type. + * + * @author Andy Wilkinson + */ +public class SpringNullabilityCheck extends AbstractSpringCheck { + + private final Set unwantedNullabilityImports = new HashSet<>(); + + private final List modifiers = new ArrayList<>(); + + @Override + public int[] getAcceptableTokens() { + return new int[] { TokenTypes.IMPORT, TokenTypes.MODIFIERS }; + } + + @Override + public void beginTree(DetailAST rootAST) { + this.modifiers.clear(); + this.unwantedNullabilityImports.clear(); + } + + @Override + public void finishTree(DetailAST rootAST) { + this.modifiers.forEach(this::visitModifiers); + } + + @Override + public void visitToken(DetailAST ast) { + switch (ast.getType()) { + case TokenTypes.IMPORT: + visitImport(ast); + break; + case TokenTypes.MODIFIERS: + this.modifiers.add(ast); + break; + } + } + + private void visitImport(DetailAST ast) { + FullIdent ident = FullIdent.createFullIdentBelow(ast); + if (!isFullyQualifiedJSpecifyAnnotation(ident)) { + String simpleName = simpleNameOf(ident); + for (JSpecifyAnnotation annotation: JSpecifyAnnotation.values()) { + if (annotation.replaces.contains(simpleName)) { + log(ident.getLineNo(), ident.getColumnNo(), "nullability.bannedImport", ident.getText(), annotation.name); + this.unwantedNullabilityImports.add(simpleName); + } + } + } + } + + private boolean isFullyQualifiedJSpecifyAnnotation(FullIdent ident) { + for (JSpecifyAnnotation annotation: JSpecifyAnnotation.values()) { + if (ident.getText().equals(annotation.name)) { + return true; + } + } + return false; + } + + private String simpleNameOf(FullIdent ident) { + String identText = ident.getText(); + return identText.substring(identText.lastIndexOf(".") + 1); + } + + private void visitModifiers(DetailAST ast) { + DetailAST annotation = ast.findFirstToken(TokenTypes.ANNOTATION); + if (annotation != null) { + DetailAST ident = annotation.findFirstToken(TokenTypes.IDENT); + if (ident != null) { + String identText = ident.getText(); + DetailAST lastChild = ast.getLastChild(); + if (isJSpecifyAnnotation(ident) && !annotation.equals(lastChild)) { + log(annotation.getLineNo(), annotation.getColumnNo(), "nullability.annotationLocation", identText); + } + } + } + } + + private boolean isJSpecifyAnnotation(DetailAST ident) { + for (JSpecifyAnnotation annotation: JSpecifyAnnotation.values()) { + if (ident.getText().equals(annotation.simpleName) && !this.unwantedNullabilityImports.contains(ident.getText())) { + return true; + } + } + return false; + } + + private enum JSpecifyAnnotation { + + NULLABLE("Nullable", "Nullable"), + + NON_NULL("NonNull", "NonNull", "Nonnull"); + + private final String simpleName; + + private final String name; + + private Set replaces; + + JSpecifyAnnotation(String simpleName, String... replaces) { + this.simpleName = simpleName; + this.name = "org.jspecify.annotations." + simpleName; + this.replaces = new HashSet<>(Arrays.asList(replaces)); + } + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 3d402e0b..ed574211 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -32,6 +32,8 @@ lambda.unnecessaryParen=Lambda argument has unnecessary parentheses. methodorder.outOfOrder=Method ''{0}'' is out of order, expected {1}. methodvisibility.publicMethod=Method ''{0}'' in private class should not be public. nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\". +nullability.bannedImport=Nullability should be expressed using JSpecify. Replace ''{0}'' with ''{1}''. +nullability.annotationLocation=''{0}'' should only be used immediately before a type. ternary.equalOperator=Ternary operation should use != when testing. ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\". testfilename.wrongName=Test classes should have a name ending with 'Tests.java'. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 38071be9..829e6959 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -161,6 +161,7 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index e1e60608..2c81cdd4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -50,7 +50,7 @@ public void loadShouldLoadChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(62); + assertThat(ordinaryChecks).hasSize(63); Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); assertThat(commentChecks).hasSize(6); } @@ -64,7 +64,7 @@ public void loadWithExcludeShouldExcludeChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(61); + assertThat(ordinaryChecks).hasSize(62); Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); assertThat(commentChecks).hasSize(5); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNonNull.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNonNull.txt new file mode 100644 index 00000000..2565624c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNonNull.txt @@ -0,0 +1,3 @@ ++NullabilityBannedNonNull.java:17:8: Nullability should be expressed using JSpecify. Replace 'javax.annotation.Nonnull' with 'org.jspecify.annotations.NonNull'. [SpringNullability] ++NullabilityBannedNonNull.java:19:8: Nullability should be expressed using JSpecify. Replace 'org.checkerframework.checker.nullness.qual.NonNull' with 'org.jspecify.annotations.NonNull'. [SpringNullability] ++2 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNullable.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNullable.txt new file mode 100644 index 00000000..f3829412 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNullable.txt @@ -0,0 +1 @@ ++Nullability should be expressed using JSpecify. Replace 'javax.annotation.Nullable' with 'org.jspecify.annotations.Nullable'. [SpringNullability] diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingFieldType.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingFieldType.txt new file mode 100644 index 00000000..de4383d2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingFieldType.txt @@ -0,0 +1 @@ ++NullabilityNullableNotPrecedingFieldType.java:26:17: 'Nullable' should only be used immediately before a type. [SpringNullability] diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingParameterType.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingParameterType.txt new file mode 100644 index 00000000..7b47421a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingParameterType.txt @@ -0,0 +1 @@ +NullabilityNullableNotPrecedingParameterType.java:26:30: 'Nullable' should only be used immediately before a type. [SpringNullability] diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingReturnType.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingReturnType.txt new file mode 100644 index 00000000..fe62aa47 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingReturnType.txt @@ -0,0 +1 @@ ++NullabilityNullableNotPrecedingReturnType.java:26:9: 'Nullable' should only be used immediately before a type. [SpringNullability] diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableOnSeparateLine.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableOnSeparateLine.txt new file mode 100644 index 00000000..e69de29b diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityValid.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityValid.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityValid.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNonNull.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNonNull.java new file mode 100644 index 00000000..870a40e9 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNonNull.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import javax.annotation.Nonnull; + +import org.checkerframework.checker.nullness.qual.NonNull; + +/** + * JSpecify's NonNull annotation should be used. + * + * @author Andy Wilkinson + */ +public class NullabilityBannedNonNull { + + public void method(@Nonnull String one, @NonNull String two) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNullable.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNullable.java new file mode 100644 index 00000000..61d918d1 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNullable.java @@ -0,0 +1,30 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import javax.annotation.Nullable; + +/** + * JSpecify's Nullable annotation should be used. + * + * @author Andy Wilkinson + */ +public class NullabilityBannedNullable { + + public void method(@Nullable String one) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingFieldType.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingFieldType.java new file mode 100644 index 00000000..a54069ef --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingFieldType.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.jspecify.annotations.Nullable; + +/** + * {@code @Nullable} should appear immediately before the parameter type. + * + * @author Andy Wilkinson + */ +public class NullabilityNullableNotPrecedingFieldType { + + private @Nullable static String field = null; + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingParameterType.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingParameterType.java new file mode 100644 index 00000000..bd55d9d2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingParameterType.java @@ -0,0 +1,30 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.jspecify.annotations.Nullable; + +/** + * {@code @Nullable} should appear immediately before the parameter type. + * + * @author Andy Wilkinson + */ +public class NullabilityNullableNotPrecedingParameterType { + + public String method(@Nullable final String arg) { + return "result"; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingReturnType.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingReturnType.java new file mode 100644 index 00000000..9b9b8a4e --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingReturnType.java @@ -0,0 +1,30 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.jspecify.annotations.Nullable; + +/** + * {@code @Nullable} should appear immediately before the return type. + * + * @author Andy Wilkinson + */ +public class NullabilityNullableNotPrecedingReturnType { + + @Nullable public String method() { + return "result"; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableOnSeparateLine.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableOnSeparateLine.java new file mode 100644 index 00000000..b18ee10a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableOnSeparateLine.java @@ -0,0 +1,31 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.jspecify.annotations.Nullable; + +/** + * {@code @Nullable} should appear immediately before the return type. + * + * @author Andy Wilkinson + */ +public class NullabilityNullableOnSeparateLine { + + @Nullable + public String method() { + return "result"; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityValid.java new file mode 100644 index 00000000..e0ea5cca --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityValid.java @@ -0,0 +1,59 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.util.Collections; +import java.util.Map; + +import org.jspecify.annotations.Nullable; + +/** + * Valid use of nullability annotations. + * + * @author Andy Wilkinson + */ +public class NullabilityValid { + + private @Nullable String field; + + public NullabilityValid(@Nullable String arg, final @Nullable String anotherArg) { + + } + + public @Nullable String publicMethod() { + return "result"; + } + + @Nullable String packagePrivateMethod() { + return "result"; + } + + public Map genericReturnType() { + return Collections.emptyMap(); + } + + void genericParameter(Map<@Nullable ? extends String, @Nullable String> arg) { + + } + + void parameter(@Nullable String arg) { + + } + + void finalParameter(final @Nullable String arg) { + + } + +} From 42864387bff197a5f2a4ebc37dfef6dd90393dc1 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 10 Feb 2026 16:20:29 +0000 Subject: [PATCH 237/238] Prohibit protected methods without @Override in final classes Closes gh-466 --- .../check/SpringMethodVisibilityCheck.java | 34 +++++++++++++++++-- .../checkstyle/check/messages.properties | 1 + ...MethodVisibilityFinalClassWithOverride.txt | 1 + ...isibilityFinalClassWithProtectedMethod.txt | 2 ++ ...hodVisibilityProtectedWithPublicMethod.txt | 1 + ...ethodVisibilityFinalClassWithOverride.java | 33 ++++++++++++++++++ ...sibilityFinalClassWithProtectedMethod.java | 30 ++++++++++++++++ ...odVisibilityProtectedWithPublicMethod.java | 33 ++++++++++++++++++ .../source/MethodVisibilityWithOverride.java | 2 +- 9 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithOverride.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithProtectedMethod.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityProtectedWithPublicMethod.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithOverride.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithProtectedMethod.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityProtectedWithPublicMethod.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java index 2a32b244..ca5bd3ef 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java @@ -20,10 +20,17 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; /** - * Checks that protected, package-private and private classes to not have public methods - * unless they are also annotated with {@link Override @Override}. + * Check for compliance with Spring-style method visibility. Checks that: + * + *

* * @author Phillip Webb + * @author Andy Wilkinson */ public class SpringMethodVisibilityCheck extends AbstractSpringCheck { @@ -38,6 +45,9 @@ public void visitToken(DetailAST ast) { if (modifiers.findFirstToken(TokenTypes.LITERAL_PUBLIC) != null) { visitPublicMethod(modifiers, ast); } + else if (modifiers.findFirstToken(TokenTypes.LITERAL_PROTECTED) != null) { + visitProtectedMethod(modifiers, ast); + } } private void visitPublicMethod(DetailAST modifiers, DetailAST method) { @@ -56,6 +66,18 @@ private void visitPublicMethod(DetailAST modifiers, DetailAST method) { log(ident.getLineNo(), ident.getColumnNo(), "methodvisibility.publicMethod", ident.getText()); } + private void visitProtectedMethod(DetailAST modifiers, DetailAST method) { + if (hasOverrideAnnotation(modifiers)) { + return; + } + DetailAST classDef = getClassDef(method.getParent()); + if (classDef == null || !isFinal(classDef)) { + return; + } + DetailAST ident = method.findFirstToken(TokenTypes.IDENT); + log(ident.getLineNo(), ident.getColumnNo(), "methodvisibility.protectedMethodInFinalClass", ident.getText()); + } + private boolean hasOverrideAnnotation(DetailAST modifiers) { DetailAST candidate = modifiers.getFirstChild(); while (candidate != null) { @@ -98,4 +120,12 @@ private boolean isPublicOrProtected(DetailAST ast) { || modifiers.findFirstToken(TokenTypes.LITERAL_PROTECTED) != null; } + private boolean isFinal(DetailAST ast) { + DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); + if (modifiers == null) { + return false; + } + return modifiers.findFirstToken(TokenTypes.FINAL) != null; + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index ed574211..eaaec1f1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -31,6 +31,7 @@ lambda.unnecessaryBlock=Lambda block is unnecessary. lambda.unnecessaryParen=Lambda argument has unnecessary parentheses. methodorder.outOfOrder=Method ''{0}'' is out of order, expected {1}. methodvisibility.publicMethod=Method ''{0}'' in private class should not be public. +methodvisibility.protectedMethodInFinalClass=Method ''{0}'' in final class should be package-private rather than protected. nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\". nullability.bannedImport=Nullability should be expressed using JSpecify. Replace ''{0}'' with ''{1}''. nullability.annotationLocation=''{0}'' should only be used immediately before a type. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithOverride.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithOverride.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithOverride.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithProtectedMethod.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithProtectedMethod.txt new file mode 100644 index 00000000..20293abd --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithProtectedMethod.txt @@ -0,0 +1,2 @@ ++Method 'bad' in final class should be package-private rather than protected. ++Method 'badStatic' in final class should be package-private rather than protected. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityProtectedWithPublicMethod.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityProtectedWithPublicMethod.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityProtectedWithPublicMethod.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithOverride.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithOverride.java new file mode 100644 index 00000000..6a74b3b7 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithOverride.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Good visibility because, while class is final, protected methods are + * annotated with {@code @Override}. + * + * @author Andy Wilkinson + */ +public final class MethodVisibilityFinalClassWithOverride { + + @Override + protected void good() { + } + + @Override + protected static void goodStatic() { + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithProtectedMethod.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithProtectedMethod.java new file mode 100644 index 00000000..7452e21f --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithProtectedMethod.java @@ -0,0 +1,30 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Bad visibility because class is final. + * + * @author Andy Wilkinson + */ +public final class MethodVisibilityFinalClassWithProtectedMethod { + + protected void bad() { + } + + protected static void badStatic() { + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityProtectedWithPublicMethod.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityProtectedWithPublicMethod.java new file mode 100644 index 00000000..fe36ec8c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityProtectedWithPublicMethod.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Good visibility because class is protected. + * + * @author Phillip Webb + */ +protected class MethodVisibilityProtectedWithPublicMethod { + + MethodVisibilityPackagePrivateWithPublicMethod() { + } + + public void bad() { + } + + public static void badStatic() { + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java index f1c9d6f4..c4b8d3b3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java @@ -15,7 +15,7 @@ */ /** - * Bad visibility because of public method. + * Good visibility because of {@code @Override} annotation. * * @author Phillip Webb */ From 93837e136cb4cbe3a18e38dbb19765701d5fc9ee Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 30 Mar 2026 11:20:30 +0100 Subject: [PATCH 238/238] Upgrade to Plexus Utils 4.0.3 Closes gh-469 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 57d056c6..c07e765a 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ 5.8.1 3.21.0-GA 1.2 - 3.5.1 + 4.0.3 1.16.0 1.16.0 3.0.3

LJ=2?zE9odZWt9K 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 vDu^)ELEu9M2Hk|w^N;3 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�x=Rj`mC7KhdHhRDZWLF3C2%ET>o4UE1yxE)TL7Ete zn(kqmzFC~cd7Q|ZoXWYJ%&9KGxtN>SoYFa+)LEU@d7aovozHoi(V3mz`JLbyp5i&4 zZ~q9j_PCi)&6 zDxn^l9w2(6F8ZP{8ly65qAB{JD~cX1I-@$eqdeN9K02N?%Az-V9y$7>MtY=3nxsm~ znL&!9LuwvHsvZx}25oSUdo%~q@T4hK2GURsb1(+i2y4bDonRJ9pr#rD4)hQQ&*89gFkSG95W1=!2x$zh z7pxpRqd8zab6^ESFa%BD5@>L&1(K{#I*HlaI<~j z2ZhkB*fFW$!9e&LJPg1POtvoCU~&#&0a8I870Y297jxC14c0^+P8&7qv9#hcI!ss) za`6a{S9o^82Xm?swCNrUFbv0#ux0T8#da99TZWtz_T=@ zXgftx77V1d;1RVP$F8_&9;w?NryDK<^|hyUP{o31&*4N^haPa0dSwx-44V*2Ko8`g zhoXJ|(253;xtrU$ zLHiHy!ePdU9YrC!2jKy)>k<|)i|WW8?^iVMYZ4YfiyASEKah(aumm~4ya@3XOlv@@ zs}T`Uzy7;e6&qro+mc66x+akW18fo$(ZG}l!T(=!1Z}Fo;K2drSQhm-6pUfJ=Y$Yy zv6*Hu7`^Kd`B)YvEU+1iz#0Jo%3qbpT@(OCp!eyo3tp3y@|=P;o-98aWIUK1klC~ z-=JWJK*tV&2<+ep1)-Yg@GlS}5bUrHh7<(Q79mD?zJ;K2-B2W-Os@!m1M=4s|CbPnP-Q|x z$@bF?M?iBvumcXqWMnYQ4ABiq*95Kn%Kv+15Y^zxuZ$xHF$XEP4;8EcCOChp3=^DM z6b7gfPk;~d$`4p+G%Yd857-UTSP;#efb$B?6F1GD3lUJzfe*+Jx>OLze5nuEzh$8T zZumA6Wd|*!2eI{of2Yne@q#Aap2Y{#mE(w!E z5e2Ux4s=To^KjDhU=ADNux}6r;ZV}!pacmq4k$ejZ(tH{5DxUP)5hxx5KtZ8EU*2b zx>`~V7BI_|oMa3z4H<|J>?+C=h!31vf|Q)iR-7^qxJ*iiVf4%p_S~l|^U8yi5UaPb z4gnMO8pdkvp7c_zv@{LTd&Z56UjNz)E)U`e=eL^wat;T9B0~vagX~m?&H+!C6XlT1FXj|* zqHjeZVP{bb@DSUwE!(wV9S7%e#T?o}_XIVjZ!|a63NRDbP;#!kCjGzjyMw;^MoZ@}It`Ol5(amvKIW-D55}rI_PW!DxLEat*6Zn8Z zOVM*3$8!1bO1|B3x{VOu9o`HPfk|^S_&|URS>3oD6xglAD2yt0AkcP^2X$~pVdp52 z$17wswp}>3dC)5gZ4gsL8UL1r5M@+Pk2ghcH?{~RdVfk9KA4zFMhbbGu90RgV?3f{2Ob~|m>Ko8~s4nc0?wu%;06W$*Y zKUzX0;62NmJ-;5-6Ca1mG3a5?oy`2hfU9lZ+I$ewaByht5dRI`0#1+2eGTRu6xG1b zsFuM6xYm9ipMjJVOAu^j0I1Vj9}0jUXdI|?-RR>Yx$8i0H<@L(5Vfd4abGgg)ZPo_+Ll@AZV03*SWPhbYrjkF1|CuMQ93Bf@7uvi^* z)e2An&R!5uz;Yut7XNUO$t30q0L&<8CJb@U4s_2cbi}T%e~#rU6kVv01%hHfMKc2hjk@r3-O%7UDn;!;28b zYrJ_|5MHp;NZ=5~OXLah2J|ovlc)q2@Ekkv5ezv5J~nalmq`4_5T(06_Z$IZAWbJG zJ;_drX_;h%Vi8wY$G=I=VITU{ZR(G7JSi*5XzG$ ziaytx=;-2-A^&ID@&6*N1|dEMK|bhkjtWpA?=ZdyK?UuQ4hj|lKPBqv`^eVe-WFRU z3ef5b&|x4`I<)?ri$;&L&Um5VNn|SOv}fK8#a? zz_6bk8$M7cJ~>?00K3&jEKE6j0EiWT5Qm2l{Dcr2E=HO%P%w-Tv?IMH{lg|L(=oWy zD&P=6><~>pvD(o}Gy)L&6bzj6@86t(1AiDCldy?FGYKUoT=?(FM123WC7kxJ9|MWk z3?7*{kpG*;k_t}#^C3~1L68Hxp-iZaW=aJNjvbSM)8|j1L4^(_TGZ%Kq)C-7W!lu~ zQ>am;PNiDa>Q$^+wQl7qk<7Gdb8-yak!V^IiA|Fe`b;fWvKz2lK^O`$+TNfa8SwBNsJ6U}&(*b$$^Z8s%; zzL@gmX^j7_Nz90^wcejg4B||^aiUG%17H4o;PW$%ff>^btOok0$ZjQ}kOrDDbjpgw zB{qkxU}o@vPeu;x*e~e5f6FJLN2tID!{7h5m9&mC`$X;uPj(-e!{CmIrZbNzJtC@`4_5d;*7_S0+M&o_S)F=*Kv4a)q98lvwIBGA6RZAnghwZoPvN zdP$(43gS|tH2(SWyNSg6hoq8D0#Cnx_*1~Ye*jGGA8NMyryQV+Ipzl3`tIJj+rd-L4$S0)PJbVW0;-L#rg#a1yDXeWI22v;XK4 zdg3!Nr7;rFU~#H%BGX(F^QX@qE$5$x6lks*i7b#tn{M#ghg#{V`{~<~MiW!oXg?cJ zfsE>u2u?J^{3j-y9x&*(gxvXuUH1$+Hl%;5rOmmN^yRl-drz_$S&0L*SE&RaOlXft zBuvN-3LkO#WeQc4h(Zff!tf4>G)OR#DI{V!kAzZ8N$8Xw$na&CL#$9DJUGOo=8|IA z31Og?bS2?==y77AH|PPU=&XCdDT=JU_5vw|_ubf_B?uaMPHAeY7^vp(ER)JP1x|?I zl+^5dZi&*KSb=a8LT|R8h&e_RMH_egamXW=d~(Vww|vmAq6{3YDyJD-0sl+e>oZeB zH!ZzWLmy!09a1Gq;vII3Jmj5526|ncM<*gou#^;meI4L~2mTw0F3U`)%{oi!Gqw`i z!Jw8BnkgH%znrMqlxFg%AMU&F=VJvds0Q19^fs!Vd(u~5{d$z@HYN5-@={zkum2~Z zbJJZnA!@MY2OoI>P9g#d3ce;X9PcI2aQ}!~;Kri>Gsy`j&x=!<{G$RBfew8z zRuTjzuzPG;li)=5FQsrGM0t>c6fgvd6D0&g9HJqGfHo1DT__Sbn+VGwArTHx=uwY| zgcOFRAe;oThBbuRKuS=cm^E=AGS~@G#6gd47!MCJrPR zWe5flVfU6bzt}WT0q0s%Nm4VPiDb|&=#eAH&h)oBszfykFrh-Ig$6Usq#vkD$u5r3 ziOWS&l9QxlB`tYLOlA@&P?$!#Bw`i|C}0O*nL{Z{X_m0eL4tE3U7<|pN=6c@3b1Ry zL|j!ni7>`54cJ{uJTRFJ;KWpl5Q_15r97m3Msx#th_J%rk>WV)I?S>NPHX}`pgdp> z84+MnYVl2QhO-v#+f7OgNS-#)k6iZ~NdB1fFt>pwlmqGD2@CkaiJ;+a=EP_C9_Rss zs3&0yD~ZD(mciW7vzv38Wl-WcgKp_qkg##P~X+mJIlM@KV0z{f;N#sBeYm|f>T1&}Kg9?-$xFT!j z=&4XDV2~jI1&$Y!<2C7ar;?aSJLj~(11I7)h)$%C133ae3}TRdFbpS(%Y-J~`c}Bc zRjzZTYh8yh4K#?AbD#rDU;WzG&%LFUgnA`mV>u|k_$6?F;ax(4@Q!sTz!0>(B+v!62caBXDF48UtB~UY1*{1f>p+IfloBXt z3Q~~bKpMmcqSSOEH!DeaBT-TXNFfrBPyk1Hh$1AesE9|20LogLlb!S=C_CyAPLMPa z9S~_-139ozwunWed?v45Vl7oUf?JiS|B$5_TQrg4p%@&K?j)l!K-mIZwLV+$-HEIwW^R|Y$%!Xo*wf_hA3B{Dm7)G~1G zc*h5T_W_*v&JmYoRZxt{S!5pNGj5tm{a(_IGv^k%5;+1vk3!l&#dacL>W7h%^{d-D zHzA+FA8*z5Sw031J=kpXKRf^w<(7m2pD|xbn*YNOaCuc<%Pfga>}DVGija& zu_?E-N(2XeTml)Wc7)GFm0RWH=QgzSfdAB3PXVu4XP@==+1hY7HPua9A5-!yd((ND z4@g7w!uJ`7DPRcLS}`}T(NhbI!7e!Xj2v@-p5RQEV%WqwPP87lu9Hx#^Y)|F`T38U zbC*JO072p5n`@OeQ3E|I3CcXWUXdmw0y|R~f+Ep0lcmJHzg9qrQYK|5&RPLeI6Q_P zKafrwV;4esg|x-k#ff||j3wD3>`UT>3rwW-Un_}7WRsE|fZa%A@T7*}_GvMB@&QXw zcc=fMk50X0k&*&?LdNb@iEKCfrJi@ypKydDr1~eCI0i9%Vu5J!7~tz?fBW74e)uEH z;E6Z`qXzyHg<}fgutb!@12xNUNdJd*_=ZLxjCH^Qk7Ear!-?5>hjdtkM)(FSJB(Xt z2Xu(QTSCxI6giuSCHM?}=!R}EtA0=`rpqm->#cz>7!~XW?y)M_YLgY@G|(xQ@7acO zusWL%69Af*b0ZwI62Tk%j1}{Mb3rS7z?SBjgJRi-ZE%Or*oU5yyM*vGion8d&_XU$ zLwWfOPtra@;=6&EIvk7_D^vh%3A-LzqLeX`{%RRL&;ufhgp_CymBNEO(1Tfd^ZJ1gKL17IqU{)xCYS?#P0IFv+{^*ur~!z z9LB+kF))bzi$8~aNQjI`iL9IlAOlpI1~M?nwxG1TV7Nf>KR^M=KjDic_yEFy9SQUa z-(iQ0O9=@umC10xl6XnLn2Z5zEL}MsmFuiz5{PLaAH+$CLSw{~_{p>KhrnApvpTDN zV8kWhrn4#^jeLtAoc{<9fI>Fv2IM#(3`+?i$a!mmjDQx75ite0 zfnzX+6TC3dn*T@u4Nw6cPy)RQACnx93`vOl6OkMg2}pveG!;+@iU;KZjr@R;v^Ng? z2@h-v9}v3pBgCTdfhSnd2>8D0L>3Z#0`a4qBM7XkV1OTJf~n-LBWQvY9hfKZ0fSt= zCfG`x$N|3mi6K~m9&LgJJ&GLI(H>!+4gkHBfB`*mG2cW29jMV8QvoDEf+=-~*GdTz-2puH z%@S2LBUQB_r3&%jhs#U^ya_cuv4Q0J2kI$MOTAP~%~VaboCIaiB<+(1jhrj!i$QgY z4fTl*&HswR*;H12D~=*f1!w>h2^1DF6#XoQoN84-u?e_Ln9Uzz&jsMJrW5|X6Oo*q_GkN`2fDKrI?Kfrx)lYragGH1Gcz_RR z1HkAwu22I(nAnN^gOV@-ik(dHu5^6 zo&VaZXaFesM5pnSrr{7+rCLpT0B(X7vJ51zEnBlaTeQUuqty#&y^FRr6h`=lZ&-v0 ztg#4)7koIowB6gKa3MY513k!tIvCTrm;ybRMO)+BOfmxz+y{KltzPTBUhK_Y?cH9Y zfZplV-S6dI@f~0CEno9JU*7dzt)SklU|;loU-*q*`JG?-1yJ>EU+`Vu{HtMWit?z2Xs(7t1+~EW0ZyW* zssMolVT#;TsXBn5ONQFztKBwX#Z%gV1R2NOQ!r) z7mVsY8D*|0WzkB5Vu{KL`;#SDO2uS~A{L4@`UkAO3xkp9v&x4BdQW^9>p}d7w)r-i z7!IOrv;RB-w`5ASY9?%YD!3jDm;xa&O(gA=%JQL46TwAxCwJnW#H zI*AUBLaQG$oHNYchvriN@*9SK2I%0;0kfC`D;R_Mf_2J=pdG4SuMc!J_akMAMwplmK~h!<>` zrnJdxoC&HjK6BQRb zuku(l*rqm_12j-&i2(3w5O4xdh&d>3vl>F;79AfjgEVN4he$Lu!5iPfJ+$^-gaoIjtbz83Ym6_<)$%?iteMp*WMJ0pE7BQsJ%lm zt2I-K^6m;EO7Hy&n!!_wN{?@%aDbw20ib9BrFH-a-v95Wun7(~6dZsE$xKvKKkx^) z3a?HG4=9#yKp30o2i?XB^w@_^F_6t3pP-;v@@uS0EfCWu)p!6q z##ddC^X28FGXRQFLSp^n6azk#KyQjcFPiYnCLci3ZkGxT_-LZ=HKCy4pP+&L>~;ts zhk3|RKz@K8*ma)OfscQZFkFgB2Z{*r<)-kwp?GBda&84E5MomRFNOHd<5EtKRhRb( zNk|1t5DH631xYA%-TDDqelyhq3J*~Ep9r!c@c-$i7>$a?3G_(y3Rr?4s8I`G`h;P6 zuAYb;Sc0Q>Hm)xTAFzvAf2TUblIu(e9GK^nNckF#((0U!q%XvHFNu`*WBwf*?V%(Ds!0_NL(c^ZN|-2orvI zO>@r|aSMvl_X&3|i8c$MBv13guP&cpfJjADeV1LcNYcCNcS70o-|lm$_;aWzcwai^1z3WJ_6K)J%AZInnVFHq#So3ckVnP?rGW%kd?^}&d78%qlySs7 zRscJ=C_RWNMN2k5`H3ia1#u{wXpBa4i2sovd4nhjhq3{PaY_^rEI4i+!g+5BG9>sW z9KDG2$hm^h@FK%%`1<|p=<(mahWI{S!^qIezkVhO&e`X2pP7|1LF9Q9=_byb92$by zgA-Dni;yBoX;>!`B!(sOJ|CFS_105}K5qjDXB#ndUEvUc|$PtuA zN1v5d%|F`YkWzjo?NA;@PjtjUfh)QA4~$`9*iQrxBu3yx+AVicWc|EXmXBer_>XxE zb%+m!x)sFHf4g;b+G95yV@!=0b@&gDF?#tWm|==JCYfcLc_x}^s<|ecZOW9xG>Me8 z#582M38ooP+!^K%N$%-opMQo~VOeHqBOih*b@YTu7!uY^Z-h1U14sQq%2AhLHGot> zM@3>sK{hp}08>)%fz+vy1pmd59eL<+Q&9~?kO!?d=|L;4B`_3$PmtU?R3y4KM8lO? znk0uc){H}sILRi<3T*SxCoK^s0s}Hs#69dOb}CgK;kRNL|r6FDwaHENh*@KX;*LXO1I&8|73F!iTDuYLA>wA z+l`1nH`q@(i28$Fc)zvlQb=r`_|G&l0qyRi@fNKBiT-xeU`J6BU#%ee+1U<(PZK^p^)l zo#5M`QB6>U|4i5rp$cHA%@Y6cGirx^i8>aVWjdTr(<;Yaz zMN?Pp82T%1e^H0~Jiw7*1VKpfHBA1u+rWnC#V4uuz&_UAOaJpzy*e72-En> z63Q@#GSH<{vurAyy;pa;97~hp;Q5e~QZE9$^)vKtfmw072{+A~BiV1OzL&gTo+Z2c+mw0lGLwE*>Ke zdU(MkN{9$KqEHYoL<9*K`J%Qk@&$++(7>rcRgfiK%qa{3!NfdvldUu)kdaskQ=&)^4ZO-?4Y@=rSnwDYqyiNS zXcJmeLM5(A#y%;jqDwNv5RNd)B;qN@dzvG^&i#XTKd2>}#8aaB$b^q5X1tNT4mH+?PnjZOxhOiZca)e=BYY^lT0X_*cDJ)TqelXCB9LH}m@j*wDNRYB6=|-$m zfIsm8(2?lRODx2Qf*3NRS{Cn|e^a6IDwng&M6Vzt`B7M+*BBBtt|9NcNchN<)37wb zBmMYhk5q~gVQK@Y{1U4BSk#dCDPS7^;6_2Cgr1t3B^Sro#Y#MYkA18XgsT zv6k?HWjMn$(wf#YG=vOleXE`p7(%d;kgg|0;Z(<<*S*HoK#4Mm3xjG$r|M5UcKi|^ zf)z1>5hRd#7-A%xXck7Aq=_csz)eO*kOmBek_9=&F=*fz3(#X8Lt=;=N;{B(kd_`Q z!2d{U)rApq$>B_LEK423g2#(6zz(z|JVTmAE2Fg@y@*IDbVy7 z0=3`z3_kp{C(bTnfsXjHBj#JlR7K(;dDagu9f>PP`g>9d_qLb6g{eQk=_ten4|o9^ zTJ)dm*J9^oP3$=3A4xm0`3jxOPKlw6{adus*;?ifCzA;KKD~Vi~k7{ z0Uxm02kJEmv5rC3In%k$cD^&7z2w#hnr8=zm_}D0(1a!YUEV-4*ZYR}g;YjLB&^1YCFJcqV z4n+@ma22p>ZIUTIwvxid2vcOu5JE;mvkG`YDPsgmQL;(J4G~Y{oGM`jXy>pBIPXO; zv~LzWXqtps@t@2vn|-VkBLFu`WGI~+A~$5l80zT1JG_#S$O&)oGzq2};{Virk$0XA z8L)*jzCKs_EtOTY;pD1akg35}0UeR0ehZ$n0~aI$|1C&~%W`6g&bR=bKw`fjdUWx? zX)a?+5BV~T(J_Tk>SHuRS;!d=ut~%_WfS!UF?`_497=ZSBD@nF1^dl`NG-Qq75SO&Vg^?&oiyq+U;+UE(lV|_u%R}Vh z8|g#i{oq#D)sda`r;gi{JuJ89Q@Dd3_OOScl>52oz6ew5zgg)Lqy;UD5zMrJcbQy4 zIF&xgj&D@Z{QN^#6%@i1M04~*_>EqUbx&LDgESDEn;ZdKe3yMaAVV-f8dL+MixWkU*f!OIcyb2bR0pXlI0Z-!ig9`41wu2#EBhG$T5UGjmmvYp!oR> z<E!&G{6vvn@r?hL+oBdWD->r3`58O zXlW4_dC^2%1Z|yBHm*buU`s@ZgBgX1_N@f>nMAbF3)tnNLlwxiT?D(i8_C$-aoK?s zlmG~vqNgCm9+-?HnOphcUnJZ?Lu^VUKm|dtjLQ@V%*af=MO4L!SsUsMOO)ZmO=L>2 zV@+AWaL@)d6p#hXm+D<4Lzn@7=tJg7)Yp;JM?0~j5~36@RnQz#A$Xw2gXEkI5=792MHXHe=PAI6na4Roh!`#% z#-$)Z=#mZmU z$|aI{UvuotnI%|5G>0A%1Zas?C_W}+My6zn&;`wr0{q!&8OSuK9s#jp3Ay5D!Xg97 zVp!1PMPOP%R6s{Gm|3_^rGQ{q_=E!dUc^{TFfznd;2v^S*7;!s6zShe{M|7GURjWq zX&nna$QDD813fU`MZ{KF^Z>P#OJ+VsInohQqT>}3#6JJEBbmIT?)7FPITtfF1a;Mc z6#b+91>`dhWI^(u0{Gu0$XhB1;6uKb$o&KLd>vf&;>u;3E#4biI!0`yjsYztJ;7!) z4U;ROpc$$YOR^vrf+ay{M?a)N$8g+D{=+G9Wq>LGi1^JDHbjUP6wWC?PjM)BZs$d8 zWfKxaISeRkJy;4|Wl&lWi(W)kX2cfaloz^aSAvOYKInqPO(GT)myJZgOdSXj#)(Kz z8Ri_k49yS*=3N0I_}HaP90>J5qCp)MV6Fs$R%lylPa|5L2V9N?xI~oX4|B+9L!1Dv zO(vbzsh!@bnK%&K5sxXB<}|2c0ePkff##r!<^unb=9WfjL7-+q?WtpUfJ;oMStM35 z&Ld{sUNY)tB!wsKnP$ZL+kuL0N<{Z`yA(N7;_w7>^qL*M! z>qU579~$46V5xv{L|om-waVST`WwqyDg6J8pLkRQn-WCHHK1ay1o0gM$>OQc{w&bi z=>w$IkT70UVuS?{ZR9E1D~c7NUf!%Gs>Ct`x8}@Vn#GVdK{bHjsKp*Zq?*@eDy!`# zMwI6f-9!kOMKSn~StOfs0!H*TpY=f>JxE_!Jb<)}BSTbxG)Tj(uEcd>gtspkvpxhF#;D?^M0SU3jh9#anF zK!=`1M?B?_6Z5yVIf2YW&_43 zhVg5VLdG=I8~~MJNEL+J>>GLv+X2S_9{0E;MilHnWG3sq3REnyc-EdWu7ueVgiin` zLqHKEbgBk;RzY;aRhh*r%q=&j5kqX_MWB&McmW(SL>NEco9Z0k#%lLMTaJb(&OJaH z7!}oZ?0c$;NwAw|X@E~0s{;Q_F+seF012P7b)uKQyn3t^|24jXn9z0s_a+>{mfquo?IUDS~K9+;JYe*u%yz zdN?zL2oo^@&NhsS4~%K?V4aSxZ({y~K2#Lic(eBc>U~^o=h?3s9tXTCKssH+s4Rit zuoIlJhcAPK6&UUjh=@!4C-GFNnF=OBIB=9{DMmEUT^#f;k||)u@+^zTPyMBloaq&6 znb=ToH~cLKW5g~T11|rp1R0DTXPz)k*R)L^P;A7>8K9L4qv8Xhff=-LPuH+rIjx~8 z5TZ8OH5^Lcbi+1igXD0NHf#gnzzbBH)Era_P3ptF=A1sr%Qo~4XF6Fzhi6h01WvSP z6f;B}+`+fq#2)0q9oRwIdMZ+Un;z7)n)yT!>46?h#YOCFu7yQvF-y02!)p-)bT$NY zI;R3e0V{ON7LkKBxPmLVLA1=nxwry2Fy}bv!1KOKSOo5eEOp%|jy7C_Ed4+=ybj|$ zbu|o$FzrL;iJxU=+>v6$BJaT+xJv9$7axFIFvgA{D*)`>wZ;r2BP+me_x8gK5hRN) zLs+t7fRcThgxmi(XpEo*Kh#WEcZ5SXO-eNG-Yf>BY)u8IhUiE~KKF+<$e?dP)e$pJ zn9MdlxP$ohb3TK_>lDp0rG&f;)VL0BgcgJqa0EZJ%S>vVFzJK6m`yTo=<4PSVQjjv^Aq>p%<+w04Mt zA#5i}dZ&ate0PM?^9{vsL3EQpG_C>+>HVIRz{XrkY!z+rk?ihGJEj4DY?W_N&xz?V zVlqSq|JXW;9XbX(u>TcZ_}GcUy4X%Yx7~Y(p>p!;fDB(^%aN zdc+?&3W@*QjY$aSCW7m~-n61GI-|GA1CYU=r4<>Fm{6xxB0#}}Cmhp;rcsYoQpf9) zd0+8_`icI4WdOLMRYMwjL^r_Z0wy{`_(UR8@oft0TB~0)VlKtxMEfZ~9RSP1L~%=J zQCL_2xkSV~i~~ckDypg~K|q8=MEkU`7C1@-Imp4aI@R#J>upo`lS$ZpggX5agc;07 zN|*>n#OQX&LjV{t3M6aYIPAklKSds9FRQ$#m>Du4sbn^}<3C1h6| zOR!m>1!GtaZE&3<=JsI>hB(v9s)K|8bw^+H12vo?KSO+3q`_>k`b;+!#q-V>%*S__ zAusd1EbKsT&< ze^3Wu6fq%Ji!i}q6Zv-75u=2SAZFS z{sM782*{(XfB+H&Xa6{6u_J*FjQ*HBfC?Z164*Y9+U^29z!EgUo0$Xyl)<>K!~_5E zeyC+G2LDnRQ>$P@Dy2m>5}XrdgTUc>{eJ}gGS z6CA;{-oJVPga-u!2^Lf!?O(qK1{pRq_+Up9C^;NH^znpZ!yHd6RP^Z3LX(9RA1oR2 z5v9Q)K2rYp;jrI7GXs5`{8+LHj+7{IEE#FA+rMiAL;fUrq)Eq}6?6Dp`f*1Yqfe<4 zwD4p{RgYJ7YW4aRY*>O2C1wAXejIsn<;$5HG>qFZ^u^7oSN}+v*k$Y6xu0Di zx)SJy;Kf(m_Ak+353^(M`}eYYe1hy@+m?SH@|=D9`SX7}0r11* z=wr>k8g+b1KmUB(kH#IvVjve{g8QffA668S$tInAaxV#Eqi{+Kp}Z2yEVabTgMYkC zh@~yXEa=9~avT%QG}T;_%{I}L5;iL1w9?Hw?Yy(Q2)e-spKFxDvq}Ga_OXJtYxbE2 z&_oqol+i{VjqtDvbCdJYN-ez<(@Ztpl+#W<{d7?{S)+6_Qb9cx)l^komDN^VeHB(l zMJ<)i%uJ0H*IaeomDgT<{S{bXXVvUh%!&;b*<_Vnmf2>VeHPl-hPAa;W2=o8+ibPn zmfLQ<{Z`Xytp%6da?L##-E`GmH&JmVJC@ye<(-$_dhNXzU$oqf4BmYG{TJYX1s<4S zSoejj-+~ohnBj&Uei&i~4}L7+h%LSttl1;XEV#X>yndO#U zei`PNFHIS-m1Vve=bUxknP-p4Y63oxhJa#;KOdu+Fq;uOfr0-Hdwv?~sHL77SPSNu z2J30kYp98=v0g$lqz6-)Fit-4qz0#{UYqT<-F_R-91@vk4l9Njq6vl`Cuf zY}jP~i}t~gSN{3#z5gEkkcXgKfhEeAql};lx_So>tVrVwDKmx4aF6a+O=i z-n6zP!7z|74g^dLKCy|>T@Z#bl;I3nCBQ_?k03vg9#ODXJOxm1fj*?waTq{@#BCxI za-rc8nb<@p;wghhGwx`0V_?YK{zOHC z1g~{l6e6);mzfhJE)z3|0prftM?d}%kjEL{@Cp*bpImJ^m{X%1rE{Dbd;$}Jl;k8S zS;@$R&}cf`+CTtk5Fj#AQpQ2v3@lknQ=Sr)V8PrRMk0Z$6)%LNf zOa4;XOJDvnl@GXDBF-Q{x=rPP=)2l9YywJf+kYR3EBg2w%uuQtu zu`jsHi!S@Z%W9qzo#}+31&rp92YkSmv6~~cjKcuisS}_1)aO1OB2K)JQ!fm7y#~vxSb736@&;6>4rQIVb$r6~m@ zNzYm9JRJYG4UlSnJJmT!#Mz)nFCdSjP^=uTKH&V|Bz>%3c<;c8P3a zz?oS)S=O_m741$oyOYUsrwd>x!l@*Xgx!I5w6R6#&(s%z9o!bTx$SITO52j%UMUv$ zXa!$lKm+bIgbG(s?sAvAAPKDF9j=W}5ou7+voL^Zy2`3oW!v3-S`C2((cu8S79_^> zwlTluj%vda+~MlQ29;4_LnQDH``-7y>rf6Au#l1~yki{_xQ`}|F%0W|B?b>YZmeMI zT?bcFZgjI7-U^ZfG+Y?N7rq)HkA~QHsnx|^$IyjcAQ;JB75T_%Hs$K#_>}0?vdN)5jtW%ZGZhqJ0v-u2iBmEG zJTt_-AS?m}&O)G0padQ7XoFrppkto}A)X-Qfk&SEjt$sF0+U9`1A-vnv*4gBUtxeT zj$s3|-1E%;Q1hx&`8%rcP01a0@@~3Ni+bGS9`&e2EDB-)P}~C7xP}KP4AKf($RpVG zPp9)G01?{Kt3+Q5!=TzV|uV8@mX(gt)u z7r@_;aX}hzh;-Z+9nvL;x+VW`1$49nz&0+(6&isKcG#C42{*S<;Gl4JsG}khSOmP+ zfelaZn;jmw!Z{B9j&$g|DnvjAG@=m=X!JsDp@0T7Qc%c||3Yn)F@}$qf@)sfHLtAJ zc_80hl?Y(%;T?L2>E~g7DL*h^$aO2KSOl^Y1PtGwfZE~F5ViBUArFXlEmk{_6tKPQxUL1E6_A2j z+~XErsd8LUl4Z|Vq|4S}AsV0&w9F_zfby_G(-hzXsGuMuARXFa(FOtn-vRRmq6+K_ z9TuhYal)Vx+YKosKCC~Ap{iw3+xNzc48Ew0U1Iq6iluH z3PKd3;TaZ!_i(VF!fY3YFPd^?ySA#URE_zbu#5o6n6jqL($Cf6?3r-m0g!FVmZA%A zZAH$nB0wS6TCV>hithUqK>O-}<{W~@QiAXB%f9}v?w|_}6rcbbVJgl+%RXWR4I<0F zfglh8z{afw?JMUzz`oGUXAZ6g6~F_aD+UK5%dmkUy6hbskRZa%5K|%xprILhkRT?Y zQH`kkF%`P!?yAFEZ$x2BL$e;e#3?c+AV0j3+mW0N3d6DINgV z(r_Te&>?2w9-8e8@1Yh9A_Z{G454_8X^PJ zA@2%;5&Cc-?oQwcA_(kjDrOKJQo;rGiy^wq5%%#N1o0i+ksy-b9oS(Vmtq;BArz#s z6A{~MOtjsHF zAQL?;JgtvLofsNG4jOHAV4rB{?H%@QUDp^?&d8Y z8KVCHFK{VN!Q@sBIDvB+7=i&35*kF&Bj7@Uv?6g@=py$LI-`>z(rAsQp`8XofV4<3 zhb}g>ul#&w{n}3f7yvU10x}IE+N4g;Oe`lIlPbb28$Tk^z>y>h5a8%;Am5=K4zdL4 z@goQkAPZtX4MGtuZPTE#-71eEJOJPv?J5}py1sHLR`C>eVhBl2_dMbR-~um~;sjy< zaXz62q?1HTlpqGlFIU6@u;x02E(>Wx81EsTmhK+%j388?JPG1F&67Q!u?y=iN0*`# zj^PL?&AvJ@{qoQd0IVFP(jit;1mB@56@VZ^(;(~-ADuKD`_Uk}EI?(GAb6l4BaQzd z5>gaWLKS`Q2cN;m_OA^;0(3m#O-+ixUDFTWfdm=i1N2iulOX@m5|&D} z6b~)1Dt-_eOpzc`AQg9S6?=6cZjenYf+u})Sd-9LPZkP=No$HpgI1&$Sp&U3;tj_%g-4}|Uy?OgI6W+B?PRRwO1*OEGaBz5yG~VFd^AAI)v@Jnj({029+;^S)u+B;XJf zfe{+v;2Lic5Wx@&kntEn-Pi#?U9})0v??kb`Ck#M4~IVp4ZP1~}9q!c7iekRZDD92H<-8Nv|YE#B~RAgDu5!q2J^B~rlq;t7KR*e|ZJNC%^}O4T4DAPIOt zG*8db8Z9VGxPCu^2axnHaKH%ILM&XdL%qUmB1(aGn1}hofgJ*ZwPZk!VKa{dO7X-u zgbytq$%W>$ho2aVJ>rKOB8Y{UKn&zK2oWpUWQegCE$k_bJU9P}$C!*8Vu~4}iiLO= zh+#Q-qkHd!NQ@*e7yv{wL5#~7kIDFq4I+)9<@6RXj{{kdb!Csm>m>2TVR3bk7nzY) zrI2&zkQ-T&Cs~~yc_8|jk~3M8m&lS80FyTvltX!fI{A}D*_2PYdq_EwyJ(eB*_B@z zXHKDLH@y}y<(}E`X8M7I4WQo z0>=!}KrmtgtN+1?Gvf%PAti>uOG2$p;w!~AO%Bji0hE9q$l)oXfF8yH0{r3$v?>kW znNJAD;T5rrifjr`{ze2Q4yR=dJIMRTsQDXle+##%01GY(9Ikcf4c47>wx=m2* zh8ZFb=HZ{^fF7)&7^C0awqkD_{wJAfDXgz8PW;{z1P{!Ut9xC5GTS`THz@@;Pkj-f$Gc|EyQCQXER4OnkHqQxuX8YFr(J_64N;tBA< zAH1X=5XB%`T_oMZOZFkKJ^3HHK>^Uf)_*-r)an6Xq#x3N0fHi{3*rc}L9D$5AB0)~ zEI=FZq1q)nNYbDid>y9Yn;?!)tovabuG7C2;0Ve=toH$|=R+o>*dO}gzJmfEros&L z;oS8>tJg=|_n|HbA}F5V34DFDji&zz!hNj6WFV&cOSl|_uHoGAA)^W6JctHHyo4X( zeJSc766$~;Kt2+#2ofNHAWmKZKtK;5Arc}15~QFYN+1tj-sbZ_%nL&0r@-Z5-VPk1 z+rEt?Tmc+bnjYo>>5*Oz2!gKl+7-ru9**7>rsBAhejF-72VB7%qWy|Lf8A^0Vw|LatGj3L@Hq3m#@6G3&vCakLh+&(ou=P_6AA?4cH9p%(0c zJpuJQ6+jhmZOY)m9_F0a%~<~%7@pi6V%Gm2ANJ(d(S9IipCQgew>SPaa_ArO;m04^ zJ*GS;_GJ01VXeGGs9)M2c0V7!0T0yl4-60$hWY?KIbqXm*?K(5@!SfRluWThD# zh|k|Ye3?s|R^TBY%5vRS`m3oh%|Cxf6dsY-lB}j<#4>9$Smw0w;lzs@KaM=P^5x8% zJAV#6y7cMPt6RU0J-hbp+`D^6K4jV)1xw1zDf0v8l4;YL>KU z@W@k3LJ!~tD*-8jGS&*0{Nt9B03OrDzLK5Xj z7M1^KlaLR%*(BpZ^U>)8NwV!DrvhjgR9iv}?U|qgKd5;V6eykMgFz$R^xHoEDd1T@ z9VzhAXdUHH5Rk$}5XmD(byY_~I^AJZReErcPyB{_i{Lu+OxqpFP6c+-vlHHV#TH*o9Td})aRz%H zpMg_&9$WvhuzeEiH!;c;2RI;E1;S%fEcc|S5QO*8l39VE*rdumFe@N4hziIv3oZ31 zcuy=Y{=?50PCq?H!V0Bp8oM@av!_kd%$U%NO+)SUzAH^*6E$2*YEU_hnd|63YAayI zKW>usTRvm{QzuzxGDbB?OBl4nn<#BcmP7^}ZV~jUaSH~K|;82UD+|L?Ih(< zyG^_GCY&quxRU2Q^mt>F^2~qhd=EGwL6137C&zYaeP?DhNmxU!z}D(Qmt;RUko15= z<0=27r{4JSLt`;m2eV zQ&|NiC^421=s-3BgU=phAfe$T1qP}RNhn~T6es``_t+VPRMCoiV2Fh~BhHHuhq%=N z>TF~QpPl}3B$8OcAp5!@4h^!p9T?A|1bq(Jn1Ks{0dE|?4nPWi^DfR@(BaQ)E7LYd~p(uDDD;RWx! zc=@iCVXM%HfXUcr*FyP)qxb-Zq0*DhGhj4cE>9W#M{YPbVVo># z)0tsNhHVn-_~x1{6}}0U^r#T60y7~U_NqZZoEcW>fmL`=z)=70kQ7>_I5UonL>&l+ z$r$S{ST?z9!kj6}(@3v*^spXD-XK`&wYxMAcmpYy$2}&Sw`!732&MmF>FoSQ%cc2E z;!cBZG%I}J3~#u@9}aQlga-{?jjfX`F2s%TN4E~+ZO8H4Fg-8#9>Z0DJ(c@s0|k?W z_b{PCPF<^9BtynlP+$nIB9P}L@jJQ zV(ENdQ#E7udlQB{^=`8Uc7RRu8+-^!hY3-(g>6#0CiQwW4eXOX|89nbLmCPK2ppGu=wzD9iZw6DGGZ;$%{K7c(;^k#&gJ`D?> zv(De)c*8t?e2_D276FxK$xjZ#dt6s%HesQ1J;*|OuCRskZ1m{o&hIa_jhNW|{@Ap3 zHcyK&)bJ%W)(Fm!ntJ`#o!M@v)DG*f3swJ&5mI`>o-h%ROq3%L)KD4>(GN`2IZ|^3 z1~Dp(QEWD$ME_7_3Q-Q3!)$j4KY4c(4-_~zK|HjBV=snDI3{C2kr|0c5)A-j!%`H( zgJKGC1IJJdr||&J;}$r9Sc6qqI;btfv4c0!1l9i_el`($IN@_oR)kVQ93GGZ%9j}p zSb8?$C$^>lLh^x(Q4Gg$1G(pgUkHX_D28L`99AG6^C1E7L45GxUJ2n%(*T9mVSEgO zd~_Ix{}Ds*P)mG963~ZF(w7WpG8BT|TTbgr5q8Et@Fo~5|4GDvZtu}1L(J6U@1F!Y~1;GuPgAcEB6EeUo z9%)AhLxv@3k|&9hDH&!D03V5P1|4&TC2>Gz0F%=|G8;#HA9rUKqXG;vA+bOUHIxv1 zs1SZ=Tq;)@un-}&5DV4Sd@8~q@&G?RDUzo_bXj!`mVpx8unpR9E)P%*+OQ3eG7w&g zSqd-*aDorzpbrB`Uf-tx28R#ZFcZJFbj!AWq{vdHSczGt4Qhg4p0y7kfe&k@A{kW< zAVEG$04Mqo5vKSvff11LfC^Dm z_&}J1g9Bknmm1NP)$l15uv6}^4H@-&T;*XLND^2w8&w$sKY@c(tu`B37KqJ*&16poA3jhWZ4a7$vJAtmTuX0mx&yY*PBq9F<~4?qSB#2#d@Jr+=t;sI^lF^3CNhcJ4F|Iq~n zVj%X=3M4_4#D#KzRvKSmqdxzmeI&t%IHM4ZNHaTE8e4Nj-?f2F`dMg)4~Daq#CMfA zkp{K451<8#c-eHL_+EQ?NCtB_{Lm8nu!H{dXmJv3ZxrN(uojc;TzQ zIuG~a21r(`-awFE#bs;9pQH$-y!KU4%B4RrrH7McIXP+uaf`oEBGANpFh{3^C-TTLXJ zk~%va3~)d2s&x@_JXMKn1gExntG9d0w|#39WXm6B8@Ooew}qQOY>Sd^`?g_`3GccR z9*Z9{NDL=XaQXjfxR;B$nX9=a3Ap$nxSmV6n=85sgSaQDxNo})#2}CDDh*t^Ff>36 zyI{9SM|PuYySIzGxm#MDOCO)xyP>PQ!CM`rYm%ocyvK{Y$*a7}JA1tQ9lra#z{|YT zOB~m*4?lI1dhiG#K)v1Tz26JI;k!T1>mATrzS1kc>8rl$%f9XFzVDm2%RqTzz2-L39P^ij2r;G9RmEo1kAt_Ou-dw!556d z!t21=0l^$B!5Iv~AuPfpOu{8Bh8vt69c;oY%)%|~!Y>TN>x#nIp~5k2!#9k>IjqAw zyt~$Fhdlob#6c{?Lrla)OffTj9W`vkOU%Sg?8HyZ!$@o$N({wSY{gfM#aZ0HQd}KW zti@jp#$hbRV=TH{OdVcK#%Zj^Ys|)Ne3E879cb*vb4!O;xuN5-`HLwYvzzLyj%E2tm!%WPZ zyL&d78RrBt3SmIYOlK$a!PjvDpYREkTg=yt&DpHYVXHCDj9t_4fDf=hm^{e1e6|?V z%LMio|C4A22B&|#JX-=whYQ7Op$ z%ol_){Or#I4bc%T(G%@I;V~ZNaULLsaSCxxZCHHfJh%u-6J$)Po6hU9IK(4$4>@fyUs4?*IS|4507ZU@Y zunE@e(^E~=RlU>O)J+EMH!NKq47AX8b}-GYwg#64cMftW;Zd;LkEXA+0+(u0==9GGY|v79N3X9*^~dR z#S`b&*X2#FOVbQ}F*WcBm_XT~E!v}<#mC%xTFp1pVApq@*cHRiGeFw0E!(p##AZla z36X{{O%}PW*_#d47UR&gE!@LR+$+qI-}I6PBsFJH2Ig@j6TtP9l?#==Z)U!jlc5B7!Tk9wv5=)O)(6R&gyO7_l@68EZ)zd z&(pyGp8W}so!1t910E{HGl~Vc{Q6;w5h4864uvG2$oA;w|pt{F~y+vEnaI<27#M-y7q}G2=JR<30cGV=Z_BQ9B#=hjZQYPqKWVUiJs>CAq?@L45om8kuK_^F5zT=2B(hd zr_LS{v`tp91TYET_qyr$AqJ+P4Dlcgj!x>k&g0;pQ*{=Q5YBmd97cN5)?y$aFI)m||VPztv$48C9l zBv11-U(9Ks+w9}*3NQxT&GIcz3dtT1T43`{G7XT69ULzlr4SFkko9Me_G*00zO^3Sob>yyPP6_W^Pcu~Z}(T6 z)b0IdDx%cIF87=c@OLlxgU`eZH11J$KrngRPcJcaPxy}y`8fX^9*NLpKVZpcAjr`n z_NU?ak?;ARFU0QMFq=DW|0JL=O_1Yau4zbFxY=zXUT(F~>}KR$Fhy)xKGC z<+WE|e+BlnU4tdISYwYxwya^3Wwu#opM`d(Wuv9GT5GSx)}m>%<+fXIzh!n?aK|OL zTys$s_gr*H|Drwk89HSW06NDxn!RZm8uIcif{-FmtAI=Ar({rD+vjV zoMMVB!&5ot18p`rXg=MFtLU8vdLV}-ny{|Nu4K8V6^G!tr|NrDk-2IMSW2ReLk?-9 zicd>A$p zqar|22ym&rT7-4;S8s!;2M$@UA=+)Hi3neqiN}=4@7GVX(nvdvpfeIH!xEq{IR~w& zbK`qREl9_ZF8J&uWqU_D8gYn4e1je8xS2tc@Qy2Vga=ii3Lo^KyGZOo4<|&S9)7nI z5jI2$Z!;bY38Dc#xa|>nsKXuh5Q*uDBmz8C$sHo`km_A8A==~KMqp8o@OiE)=y=CB z8ZkvGHllq(F~mDI;E)g21P989M>0&I1^kt8NccMxo7(Jwz7p+a^yg{A)hvLQl*o=1*XkQzpUkOcw3*g!G`Ag1IILu|+mj!_Kk zDTD#VI7TKk0uLr8M0{S6!0N7uln1N>9Y_&FJd`0xGu9G6(P7A-(nu+kF-`@YqzKf; z_kdqAgpM4UKoKU8kw&~@5f9nmD=PjonCBt~^1?{u?jiPUh&mU7he|S} zpWHl10}x72w>1O?#yAEI8bX6(9Aj@6Nx?lziI7t&-~mOTz(Z89%pi|gvuE~%OtTO+b*hEO#p2-m&05zK*Xuw5GQ9oNY6+h;IXhAx)OHuU_Cb6hT z5sIKdkOsp^)FT!I5vCGG*VV5c`AmRRv5S7F4SmJZRAci>%`v zRA7i98j%jxvBR+J_=Z6a!Hz3LKoL;9=}-x>j>EDeeFw3i2U5q5)ulsr8f*k-S6A83 zIwS-;T%OyG1_IPZ0untWryh2fT1XfKoea@H9%c)PJp3*XZ;JpPc58=$fPjaTjKm0~ zuscXVuK`nNB=78SH0aKDd9@u#a9g{)M;62m*44v23$k3dL85sARlp_9xe(U!?zINd zKynrEUEbv(o(lh{gKSe9i98%+3f6suK?%ap5VW_v-Bkbx@^H!higzHoI7TiWk_+oq zqzJLNMLnt}SFzG;AmZDqhVKE7FB}9O@=$;ZXdz;F@U`;V3uCR`Ely)E=XoO!oYejp@fii&$_qszs1TUTc9@4^zaiXif+fIV(jf zzF7gZs{;RFUCG%F5<~)uXaw!v;bf$7RuS(&N3J=G(}G-q9qstW*Zi7}MWC7?#*G9Y z>hN2);Q_V^K<*y$(8%>pd%>>FL%8#B2irRG*~~p5bNBgMDe%Fy?yjV9W!uQ_>erk< zbgdqA>$d(9#M_tTt+>gZU2(fj-{LMoK_ak2Na%aE2`>n8Z@5GKA`jmJR*1y6ZSb9O z0Nl~ucL@t}hj8!ihT^`q0vMXyJfQa4ztwHSqbuMNgu9XA4)=W(z<`d*;2|;S=m{v& zg;~skt3^k88x;V!71x6nw6L0s2|~3ZXc!)(yoUq9V0Bs4Lc_KAlmb0mgsRnoAb@kR z3N-&L4_b6u!zH!|6kUCgEUp8aTyC;K5HW0YTsex0HLMhM&4_{^!ffe~pdWUZ6s1e-DU0fNHhySqh|15nUs~s0Z=D>b97W2Mn9aCgn9j zsBlw+Z2zXURsa@OSK1Hw6|e(o!`~xP!+tBk3(;h0%j2^n=bR#rwL zdq-4AQK|Fu{rw5|eLo)e^}ep_^?E-4J~vPyt>D2}vJnyAN<=G#QrikM@fe39Y_Q5% zmU05JfdCWZ5rgUlKW|FHEs56C;-GOKjf-Hxf`xj}Uj#+g;5Jye(ekd+W^a33RY^{= z_H4d19xr@-8c9zs3Dkpf^-07J5&aMeBt(MW1Th)WnW+nbVrO#0gvAi8OTn-!jbya`g|RQT+2Ij1r_|y+I}q60-v7q_csc(P*ouo|Ri> z^Ezo|*eEdU*~yJJaey8|6$&LML-01jlQj<=umqTK!d#IJiDXlyk{sA8)sg7ni1R3y zRVbIQyhxJLFT4ydcFlk|4|T*gHmsROjfem& zF@>mk%aI^X()(h=|9NQTSo-24>9!CRwiN7QOHW+0DE1zB`{9`FEr8A6aZxL1%9IRg zwaU-i_*lK7yRNCm{_SrkXy>Ro0oQT((cJV#JmbOJ%bO-L>hd&54fItE6zZF(6#t?i z`ZazvZrnKWM)#%O=tLH^u0A!W3}-iw4 zYTjgw37Z7!2?WW43KN*kZaV3L{P9V1Zlh`sL4vmO(CvN?LGLnTNRBA#B zUq`MhsNKVS)q`Sl`XZ4;d|>5mGF}1+?#=H^aG}8R@InIP)=SFEAD`(zn#L%S{t7}P z6-X%qYwUCb=B2AC{diHK>wQ7%Z3So?r!ltz^cT9v;L*pu7fTKx!XI1Ps?X0h&EXS1#It4eV~;(_ngT`TZg(;3hPq(2g;_&z9f* zy2&t5l2nl;sn$C?)6d!lm(Dh3Q71DB|AmTZKqVAi+(1v=oB#_34qbQTCGWV17Iwr7 zCFu>%#jP$90|&4-Nze76JBp-8MJOY#ZU&VIONHWV8vgWZ-NTS7#$2mSpp#ujACFz* zRqD?LIaod?gFA{T3uE^^-V*}f$H7W%O`sOe+Hvb8NxKF}&&MPJm0 zG+8kmnP)W>05QK#@ax0NV@*kR!g_gl&c^xMvCzX*x2HlX&3DGItB$9CT?sB%kdn|+ zp7~_>m5Nly$_lf_zm5qmtI?y@k;xy!#8%>h$DeDE>NQr0eBSmEoA|(Uc+tXvQ!i-( zEZ(x}*6;1n?Vi-#tLEf_|BI)o!C%H{Q)?C~ z)^yo*ws#zoF}UuuLcXx6<62LgpgT_(BI zIOKgA_{!qx0F_@&o!yeWx7@uTf1Bo#*IB}!W2OLLs@B{(PRr!m z`r;F)%4S@~o38@jTwj}kK3rk5@+RyAU3`qcD-b~Ma@{RLu>2CvrO?;bZ6SGeM*5Na zG*MtK6)w|5JI?mi*oob$;G3!vd%3VXQEEJ;tn~ufkOm0cZ4;w z1`?W37<|>$Q4J_F&$ZTpTPyz(Y+Z}zq@a4jr0Yw5$pDkVgrgB$4pD`D*q-IV^P98Z zb)z!kT^l^t11z+2yoWa zzMSq)3zbvWpKJZ(r7fr{%0O_;s4aQu*uHbU{UfK!<~rflLZQJ(dC&>uM) zcb@pE{MI`FE0Z2A&}HqR@ZNxwEbm0}DkK*wQy1^D)6w+mdO7gw^Q)xioe+0YJf=3j zbzQF5{Iv6Vyz8oZ&0D#L0E^)OwT{=LJjzhZJ{#eT=5Pu__^N_aHlX)QI2Y+uIUW^PeZCgsf}r;e=g?7?7hueM$f%nBl1E(TvD%@rW#-!r~aVPVXBwgxFsirvTJF4AYAFU3Peph7p0K_U6E;Ctbnl5Ht6D~VlX;W;RDtAY2 zrsh(E?-Mw@*d3Km6#}St?~myy?EN z`NBrR0FK<2g=eFotUBU2Ku?4WiRvigw9V+MW;2i$@LyW6BOSB|ZZUEbu>ReiRa9Xl zWi(&rDy-CxQ}2W9wP${PeDHgAsOicN4FCQ%d({h(|6oX~k)1RdoYG4?r5$4>BCR1Q-RIv#3G&{V%NEYu?8#>!nuyWo#~fXtQ>9WGIa#PMf@ra< zSWDVtv%GannM7lO>hf#{x9SS}#~+uUA3(9xr{Ar`lbuxG(>ZR^N(P0aS5@Pq`g{v+ zC8vN~&n3O01Tj?if6K3Oklc>U*Sq2UcJ?XD7q zj?1I52O|Eov6uOcyb6^a4R7k>a`b5Gzi@3!Wk4`&v1w3*0B;^zy}rN5u9Nb#d076% zV)KYHwGR2#s}TNTOl#xmi*dd0i+iJPGm9@K&|ID^lV;)uEAL$C3tOgb(LyiZJEFVQ zFIhVlzWm@Gw)AqA(fuCJhb!5htsk$I6-LzgxNEe|-=+$+Erv}mAr_opdA2Rbd|zr? zQTWtISS4`Xe-7e31N3tmWkk&^Ic*8a(@6tP+O~52ie7EojnPz7KNS=H5imO8Y|&!q zypvO>%oh+-j)Q*6Tj^rHj#ppWHj4DV`jaO+zjeo?9jz6;^XcdG%TemORAbrS5zVz& zHXNfmT4c^Dy;Icvb0O@?3ET9j>f}12M0JdRTvg=J_uYFOe`E4u@#ZJrr?0&E>zKO& zwlTw{-|yak&Th~YEMn_q2d}<~k2rBh&WO}UA0csOUpBUsJAuhO!b=By> z%j;0#=ipG8p^!A1d%93J-fZ`+e>#`?rU8t92*oKGHy0xz@4h>H`FeF&DZzYKKQY18 zD>(b}Zuup{yV;BVlif`Gv2dXae_|@Q)#XtLqtzwy|PdaSx>o_JZEUcuBHOPgGciuIeyv9+8F# z?Akw~*p>esks0_A3ivEaKs{$MXQ7OV{5%(X6m2|MYj=?oG(Q&i`Wac}iI{OfDU*{S zA{nKFV!56{5pYqjR4c5;jHs|)JSLV2(<87;;!}?@)TOzr5)BmW#@)ELz{LlBEJ2^& zKQq=yz46r47RA+77}{L3|D@jl%Qv1i3|1h+YVEoCXI_+QJZB!gdg^^d5LF)p72eo8 zI!zM3?Q4>8kmqd|mSw~9VFTwkTH?lhV~*-Oo+T7-F3}U2p!S}V?6OpGX|@c{lcvJk zLMp}l&d+wA+YoNne(1_^V}82y=Pfk(>W02I!^GV*7J)lYJ>L;7*M<8$6lsB|CRf`P z;?@b?))M@VHx@UlBl=8)@-dU%Tr{_5on)0_TMR0&Pz2po7cBI zrM+LRNHsO)biJ&veL#0vHT`9zU)g5+ps}!8=E={EQt+!G3oo_o?g;-<3I2gcx6~fh z-V7ia+?BB(ILv9--%=*rz2eF{{5WoLOQlR_?7Hb}9>L+NMDg9R(4vclAv0IWUHro# z^%sl(>|Zln`Xzn$!%-3K<_=nX9vk5dfD|CNmQAozd z7ukxjXJ`QfdEg667~aiRjzK-J(N5z zO5rKDXAQ~`?U&60vTmQ3$YwcPi>Q)VF=W^KnGgD1yy2BEL3wG~L?lBdQcpK4&19&+ z#ED|;knwz9ajfTkwlPnw7%)lqE+hEPYSRC1En-GCfuRTDRyj!a&|?XvV?GG@bUHm) zWNUjX;URsRN|*Ki*jb|?N))oEPi%>mN~YUzQsm5=jGUD-Qn4( zXD)gq;Zeeh+x@^(wJJ{UfkLDrKU9tPNGTe43yGi}_P6=RJ+LA;R865BkDRUP2#gH^QP%-n$Czmmhs zMT2k7lcq+Y>)}sb*$N6gtt5V;8e~!9+0Dq3*_>egy3U`oK?Y2D+k~K>|A^*~C&77~{cDJ;7M- z6MCSY0TT9f$pVWrxe2&+jy6@fa*|56iJ~y-CLgI#V5=*4;3&bhKA6=LP5mp;EynWg zb{BBQ3N5{=Jz)B9l>Di;`PQm7KbUV5F;b0WW6QN7Km1{i@kJVYS%Llc!4OJkA4T)*WX8vK;2>NXFCPh?&H3tj&mvq z+aEuLJ5$#EvwrmxS$|TC3~)^A7&etOt2ytpB@9^GcUTC8u)(mM(f!@}f9l&RhW@G7 zzb}`;)-<}LoOiIZEA;`+vmebYRLBs`r@&GoTBaDR&|6hUry0JAX#wgUtZT`5U>ga# zbr|tRLa!|7{L)3dg{te{r}Ubtg~QOnjdeZ1x^tzNSUSBZ3eQtCS^}e0>M2g9(`lya zHd7Uj`e29!qfaQVZa36Y7astK`!2TIzUd{UEYKr znJ6oc2>w1M(L9g`-?c3aHy#WDydAP83I%)kkWKM+BDMQHLRccdDSmAZSja*%m%!mx zP4Gf8fTI1lH7k_8A)Z?REQ~RR;*bu}@Kt^=bTck49A1kn0r}%^cabsrIC&gh+ay(g zr^0JE4$}@Fd)2Ewf%fV!4wqQ=N+Ve9;NPtw1rYGdjd|>ZiC( zo_v2)#1)MkiOC=W21B{l+jpi4Fsu|bY%j*ZQJN`IhTQg6h;@s7K!-EIrm@oSXalpk z-QkHgkDz0->cgg8?I@AJ9&e-Ym7tqcBN-e0e{@FsPeJM^t<5s?e^lXKFpI~K^`b{m z{`!4jChR$ezR*_Q=2A2ZyzJMSGk38@J!W3k;$%(C#09LYPV3cj!RVg(!cs80u>{T6 z=ofsLL!n}f3mE?&=7C$EPB1g*HFbe8(73M9q>j2^fJ8$@9^5apfUV3|Q_*!x^W9)u z{kY$E=*)i-3?&vY80nptG98{&3oOAzSi(GFo#oN;Z2^hDiol&iw9d{|qXQX3E227C z(6FV-M6MbWC}Fry)pyu7@~2_~(OP!fhQYGAYC^Vsy*!ygPkO1ApD~s-K?&BF3#;Y% zAL!_10K!Xzr&*kGvN(i2hwZ6^FSY`OK{^}>xtDHnH#3Py1Z47o?F=Qcn2J(PMhOW? zpV7C@HbfU*Q(>#m7ztD1s)xc(*N^!zjGL$y0L{F*v?fCa`CnkKxEnzu3hnj!b6s=+ zN?lkxg-$1mDi7U0jU!%Y$7?{hH+sNac~t!rf<_leduOYvS|&Ln=$Uojs|wWa59(RJ zjHee>GlyUTlEprCH@b<|*c3PPK;QarvNdAQD7F@pQ^Xn_WT>^}kJw_qOISU6#W&)IWIt zec9aMRSR6H%m7##?{&9h)+xRYbzB^1#r4(4q~fqI#?39(jozDk|JzvdGTOvjA?n_LC{8{EDl_b*6T}}?I2?8 z;?Q;IYVV$R^?jx?#kL4R!$niJP4Q`+D@No!zD0PnKp(q{zt+$yd(L_~p2#0wielL{ zTFo*2hYqS-FnY+HNdg{qYldfnte8HNAb|4dT2?IO^d($DF>f7 zpK)AfV7Cp&&WFI=YUXMsC_iTJC#IM!K;j?{0~Ho&WGM0&;RbJE{0B-wj86Zm59E-( zm}2~X90sN=K}p~SytUVD5ME4R7&ZTf$3UO1SqHAHy(M0lpgZj+o=#Hb-!JmU6E-Ru z8tVJ#pxc60M0)Kw+Z>v(R%1WiQ}-MTO#2aG`KqrK^s5CD*m3t6=;^|L0xF%AQXN6) zEqG7Va)bKZEZd@o)|}L*-96McW@-7>GVjffFCK5ao}r@Zt+ZDRS2+d9?yr5Nc3#>W z;8m~^jnW@hrpF}dPUuEU6(UVIVIxz^*FC>7lIvN?CV6ETg!i~G5gnKaaltHnrPs6q zgN|;VXkfV7P#OZ5`4R#uM^Ufwt*+g3l)fT%pZ=a4@~|5{Z9$y5B!i8@p@|4Pbrg#& zc@L#$dt|z|;wOAWzDt*_YPaW30KDEqF7VNO-V|oTj zNPUcH^yi+TDLI(;70MxXmZ*)5n~-0VOizw%cIuB4l*@!GP@{~F0vI|n)1_f>nVfRD zTmlI8ZB-UY7xfe~+6)>^D%DiZxap(X06rCXVHJqKeL$3-KnwQv2}aXl121YtuDlFb zus{F}^5}$Yh^9Z$VfwgnYxxfIax00WEY4<7i;4mIz#>Q3c;F&HdffO^C_ck1KBcoIN;iP%U=r;`<(Sa}kUSv!A9ZU>#a0DJR5yp2xo{9L5zUUeY5cwzS8yR;?{0;B6f zTT5jr1_2n}Rf6^O@60P{*r~{((c!Jzm2c)%J7n4Q#g7c-n?WqHX!mk|(Sm`@1B?r> zqbYvf)NHp$!K4_H&|O~iHL+;G_yR!FyFrOQb|P?Q6LJse6Y2c*;b#o?qN?(cg;fIv zhdf#atLS|`G6f0qfls3wK=0Ku^fi1i4JZlIAT7xZD5J&(SP70+Iv}2}CjPA+Uici1 z3G|hE;z$qN%7fy~TWM!?WHE=3ym)}x!x&ihZ3DwS_EfMkZK#|g%*uwrZIe3@!6-{& zX6S)+>>Wfj&P9+Y9@Y$+TSZ46vDOo%Xy|a2HdFDo=OqhltHEnWL{&JA%9W4v z;PQ9>E3EQ(ka0}5WDhz&oK&LLQ@3d@G`3Vs$_fYr=Ee9b?tQ}%6KkY4|4L5rU) zg5CesV>USCt@`A2J9{_(g1rQZl61$fO0HE!*=!2o|jTj90j#`=`w()r|jjq|~SAUSi<$`GUFCj5u9q9`v8KA}tqgU0esL6oy zBzo5$p4jZ--`Nl9Z6~T9eG9Vnp38YKalhsKW$+bxxm>{6EA9mCF88U)<6H*rKC1_p z-De1jWGJxgE3>IkroO@uZ>zRR*6#eexEETC{(h1`Yp}xk)_x}bDpj^3iTtw0uy0Bx zIo%uXM>UKSw7(NQ8!!Wq10&eY(A#UwvgMI&9)fqcd$&&+KZD5rq+bDSoYIV)Thgw zhoiuI;!T#)ss3$W(F@r7$IF;Pfrlet9;)iF%f+O{vQZ0W%DmM)g48Ey9A zYF0b}oM780^ad?VJvGXqGrG3NH+PEJ>;UB{n3)B4s_D3iYxPCehs&KO76j8rz#r*i z`XY?hzk?Ot_x^tI;1Bi8I^_&w_X^aaBm<`X{2Li3vMXyTM*$@9A{RTK;k;1<2&3^s z3Hr4%Y!q}psT?9o!e%nrB!L;%P;3{(;iFu#>^-`f`>+;l=K1L8pc%ocr`PYZvFftY|!^ zKlzIme*v0(aQn{~M}CB&aR+4VZ13^`_RWL&Snkmg+p8}heATTy&+_c>bqoDX6W!Uk zg(b}XyR$IwER{d#`0B60>FSqsf}LTpGjiWWYNo+w@UcNb#I1$4kWU}F3nFi?yorNc zFnk&nvN4!RQ@S|D(kn7eHp^vO3J>j}+11tl%M|ZCkDB^P-);K}G-mv=EU6O}sLzhy z7ZUZSJzsrv=-A(YCVdqW!#`XOA|U?oiS7_0Cq%0r{;B-EEre!UUlWQLz6fOo-^$)D zz6U$96u^f@jo=CTQG0syXV?F$f3T@G)Y#4KB36e#lOxIR+d18+(a~JorxMzanDmKY zfg$oG@b!3v#5eoqXG#ydp7GMZhE)m6`Z}xJEt$9l>5PSQUT&TiXlkFE_|3yyO-vKWi3TsXf*3osynS3F9kRTl5 zyI|TvX!&)mplLYzOMP0z+_hqw&QxG&Z;`1%l{5YbZx5tutIK3QfbI>c^udOElwU+M z9Ts!2${iMellk+>2Cp*Bf*sfWz4n|5xzK```d3|#c<*npm**GA=dc*^R&jPQY|{Gj z(w&dDW<3{$abNpxC|1pSF+a|`nihTek*hkygX8%yczG%<*V?u3+zj~iT0JxEpvSD%d5GbKarmJnf?_|2>b5P)tan{gm5b?l3vG7&$tpN zaR4!<&jjc#Pm=V^$xO9seMHR!wLE()kTWV#m#MdyC7*>E90V8@m~4=6NkRNVVa0!c z?~RJ1tFx@vNp!|<>o$pduYCk&}wN!{!j*$==a`Q&PEp%_3%C7ij zu%K$T#ff|kSJpqzXJ$FUqM%^mD|RT34ggb>RT9FFd+5Tvi-bx`swfAvM@R{jq``v` zi!lJHiPa|8suJm>q47|P+51#xFJhXG~maGkNejipxHY)Gb}#C^KBp9{iKna2ycdKa^8sxM?T->!ZLQMU))i% zxAJJoO`y$31*4FU z$`8I9=l+{=rZ-V2<$#@;igSn16H;ypsf@UQm%?Ct%^QL#rwn>?lWz!lH}zLe8AiEH zGZ6kag;E2-y3x8+ph*To*vbsWFsDX1JQkeOhKw?`zc)pIuQJBE3{3S*-u8!SUOHel z>X=NuzfX{N*>iGfU3+XR)Ta{N12H`7wS@Kah%8}8I2fnY1^&`qr+-4wI<#lIXEoVi z5dFcB=Ya0PPKDrt48%A4dp|z*Il`pfA?IPADg8t#Rt^EZM(;puMH!1;5PkbytT8cl zN0i2%R3~9P-!ebvw39p&%u8Hzb( zM5i$nGfXRJO{P#2rhJ9OXUqItf1BK6vAW3hzVc^Wb{X{@NY8F z=?7hsw1Yu38WEi9t0)No)ofa-zq8Mbjne#1y($WQyufeB+qwSV@gC#vIY}eK_w0PT zFOy>Li4h(EW<5XidAsW0G#f>Je&9q+1|7QbF_+@qye}bw+&TG~K}_;*D_d&2=|c2; z6R&^k`A_JH@k{Zh#NL4N`E)>!&E`++@~~_OST^p)cT%E}z$~#4yclY&_lhutjCDH% z?KG;TYjI;7Qlp(vT{xb2Chq`n;3TR3%+z-(D^KsI~PW4L8=(bwe zqq`L65-ftz;>!>uYXY}~K``o*!vEVDCnUca0M$%Aq%T?xE;;jNB$(+BMs5(K_q`9A z-u7_C+TGn~!GDMBfNb*UwIsp9E1iJsyMi7QW zX0+a=d<{!yHnx|8SlGn|D@@QyZX&<)s8A2}Lcw2wpYG7G=r;+pgU9lqPe&7P#^@d+ z*3uBme_pd4X^)YD;M)3nAcd)kL+Fr0RF!k) z8T-rudyhCwQk6?1giEK1%ixd;rOF*g-~>)`cG7W~sPZ_6@VGYdcpmcj*aOWEIjvRo z>{NL}R4?2Kxp24X!o9-_k$$|kO}x)Hc;gQFGFAB>h44RV;{Vtvz##WPZQ@JiB>(e6 zfhJYKmmz|$GKYziyh*A$DNTZJo8V)I@JUsnnGm_xO?*@ioq-Uc^LFKKlkk^AVZA1y z{zIX3apA*55uh4^J`};2MfZb4_}8TNSrdZ4SybpqR8&oD>=WXTs%WyGsHB>>MyR+> zv$%m8nExgKG9YHuEMa{lVXr1RohinXC6P!cPMeX0ECcMl=@>sZ>Wv}=GM8)@tg8XDfo$mUj z=y9^ZuGpr879Wlw5CDk*DF6?^?;T{fLX~zM_&<5;RuW0uN5TmP!Q_>(L8Em?)aJ!5#y@bmNtvdK08()*S3fG0tq3Y%@)ZH^# zCJ-9V7d3umA;bW>mo94D4%M#9(r!_cZ{pPXFG-4Hz0C~O`%meIM zEOf7wVX_?WJ$BT(3DaEsKFp22TlI|3Em-gGcO#%W`=qx(@H0e57>GKmoCH&OYi6$! z5T-lW8SSlEYYCBhf09P|N?wP`Z5qDAo2`G>l*p#@XScp-D}_XU-{#Uf_YrpdCntR6Qh7qlXRb0qA%l|GP3a4yd;NC5un?6 zTVNdFIl!gG-{QGW5f~7a-4?Z?z87Q>d$f#T>J^pU@qsgZN4$2jg4jqcBjCJga1S8J zcZ1Q6RVl>@m_SiHTbtIt$VR)OplXq_B@iZuTxFx&Voz`g(OzFT3S6XYW{V+Od!H}p z`kJuf|Fdba0Ve@ZzcUcmZCAwX!jQT@)MrjhcI#{ek!d2sK7Z6rC{^o<+vbD6ebM)w z`mIh&V6sKW?cR6TIBqr|)xHS6-<0Bl{FsX{uZO24ed?fDNk=7%hmaV%_NSK4_z zo7J_)r}e8fv|Hs33VQ|K&j>88x@Gn9Y@^^_Ku_rk1cJij)#FfJswLD9e?MX=&aIhK zRsT~RR7@%80M`HRnQ0tg!73;YI0*F0DTXW5ao*Il5nDV$zEm=HF{Hf z0}=PqV$V|ZWt(@h6b)u9rtre#ijx%E<0kIMKCH$`M4Q>1ef9N+A_qNh{`oNMzIE$j zF8&P+9O+T!fMji1VOKFQjP?i#Cp~Ih@x7zwAQc8OU zVc{)qp)Tq*f(Vc6m{(I!xDdwNdpRK+VG%Ib0`V1P!nE1~E58=iD4C6lxgM3!tU_TH28 zE6NPgIiG|0{a9F^S+wg20jF2JhIaI}1Lh?n@>dlj)VA-RAk;5kCJkyGRNY}V7FBqm zc5z+I=`rH7KY?}qj#*p8l63^TaZa>Y9L*>0t$8t%vEy*h>wi5Wxc9gprRE%Bche*8 z{sozxSz=W-%!IW~mqFOLT0cK%^}1-2dS&dAguT`f8Gz2NIu$*<%-nm;vvqgoUZ&+zW4;$?fjI;|@3~mJ zmT#LCE$~8)mzb2Ca~6|WCiE2onV0GM81dNBmI)91Z7p?lijc}hOc}>a;!TMFU!6!;)NYr{2|~ zW&G0meaS#P-T-*I%5u3fpcFFk!-45UquEy3|I4!n9moe}$*|IN&&~83Wnc?t&Ywtj zC(FW@n+W}v4zhCyQ(ym2Pjr}lv(@qJF#JjyN+#j=EH~MO=93UV>iF{^Q-E>Kh2KHY z-V)JyayMgD+;6k2{(L6mvg}h0id#8QuaVwegK{zN%7#+%1?kRq&QH0XpWCGWy<)Q9|@15%y^KH#0WW+jd)M`k|yj^(Y!D}bm##h8>B=0_@r&|mBY*v#5~bK z$hDTyR~mu(Ht(OwgNRLwyP5n+1f!RK|1z1Ql9^S$n z$=#0G$DZMh-G4f}V|3=+M+nrjzdbdd*~3Lx#0&)K=PtDJJ_{GnUeI#*op;$y z%WYn3#|gJ|=L)lN7y09mk9rua6jY89I2Lev&7Y8)i-?kX%H<3^a+h(qMovyH(nz8h zwbs1xu<7uZ(aYn=V9doK|n?MkyH zL>D=Pb)Bc^Zt`+3btL*>%}&%U?1Qi>@sy58hbTEQ?_9F7-?ws0a(;$sRJ)q?;?F9e z%j}(=uA;H2x!kDJ(8$DU^Zs6g?Pu@*GeFPVKlz*oSsmx-p8A~5sinqD&-`c1PPyz9*2@l^SpHc8->|(RXwAqeF?+q2- z6R&<+Efu$#nI`wH>z0CvH^l!X?4q^7pULw#3&u16j=v~=v=@debr1G@7FyYRLAg#R zDAtl(isJFQK$ikUo$UtQ@>!&{VCjX4!~6A_r=KseiTFw%lw3Q={n`^;gm9U78x2DI z{+nG%Cif7aTyh>mjV07Xn7GALY*T4}GT+7Pi$hIigXswLL%4Z!`P*z6#~P2f%@rfL zDt^OHlMdq&;p~CD>U1X8dPQ_%|FOumtkFx#h33bSL5!Tt>;?L9I~#A=Dwq`2dxj@_ zv&B6)E~(HxDq(`qtF9BaMCI$rM0Hu{YeS$DR6DKxO8 zGwA-)`t9S51+t*#c z;`OahKBS&@#bovfaYCwno^z8%l5`%3I3%e0scDyw8C^QKwi*YOs#?XfXzr{MV3m)B zW4c~mSc^Yo)w*mJ6i*&Z;8;RhDHVD0ah#_<(S>N?Q}6X;l>wQJ6!i~*8>!m5>Y_n= zhk-t6-vWjvVg`&V6r(zs~+zz>7W_P+Uaoc>SG)43C zPFaSj+-^BUpoXh7SI%O$@@d59-Dl(kxteE>r-;?n`DrzuYwB7*f39sD5b&zLSm<`6 zrg^(&ufFT&=e-7s0H)Tel{5K9#Lp0f-h~#@e5zuKM%-%>pK2$;~ROuW3&GC!Sdd>Hvovj0flvYVd^#H z#PXn*MQi_n3S$mXv4lF-1^4k?t2-QkN2U}+UwGzp7{e)H@5Ddlba9X`peK)@9;W@9 zsO}$i^ZS^#cmb77|71TbpV3tX%x&3nHq|GeN~_D7QZWyvhbQvk`ysOCjpKS!)07MeJj%n zqFhs!i7A}Zisp?&Gv6@6zqE)3!O$5Y&%<$D&YkyTMt`u`3F@q^@v4jh~xcMh| z5IuE}z8Kec2igQO>PTR}<>V*magmHwpdF+KHDUxCEK|Roav`S=M0MDGC@NXAx!VS| z(K1$Ry%8#@wDUZTB0SZ0s7?EOCitG*uK~Srj>mPPo4`G!S!C>l27m7W9SugtG0AX( z1^PgsU9&j0DR4Gy0x$p3jKTf|>I7k*Wb&37DwLJ%x7jPInlZlQG&G<&&dfSpRf-bM zAkFZ^CrJ0K{kj>Lg}C|O12&yLJzmvJ_VEA2MNW})0uE~8ZvKp(gdsK$?o6T0T_DMa z0^3f=5K`#LWNc#N|A5w=-`oas-Y&ExU2XSBvVEqtrw{7u43qYLGkLKe#EL;&Oo_h4|2)$%wq7mj5=XJy)V1s2S8OX%n{=sxM7EX8<)4Nv zO#70`y7dukL=PX1)YB>~ml)QpT)gBU84hPV0tnUnaolpbEzWj0kq}rWxCBrjijL|H znsW4(8Gwupa~bM?l$Cc8Bn*}0Kir?-5n-sN1TK}hwDDsEU_TFtopDq6DDPgDry*Bw zJxy0#UQ;vGC2Fhf9Mg@^v34xcM8e z$5(s)@$senLk}_W(Gex}Hv%-vp$DWFPd~wvAG%PeCfkWd!)xn!^(Vv9n#$a*y6g2m zFA=KG58<7>?e`DpM7Cg9;>ns1*}$iTPgu~mTz^SU1Uz6t|Aok7zyaHdXTLK<%{)MQ z5QYMj?w-Q5S+hRt>z|MALwAI~X23$SE{c7UFhw5?kM9ZmnJb7!t{~sG2}Mzug0u-d zqkEkC`IvOAO+WK2m`=F5i>OOfB8(qT8hc*G%3!`}93BXbmpRQ~cUig5+)TPJyjgZR zismnIp;zNSnJr*3`Y>Z~;GFlinoA$I`Gm*2@Bx|oAr0UrfS+%D0B=Ry65KKdi=l`t zRdB^lhMh*=`1+62?^-Tm7pg`w;L!43z14iTq&bZqDc42@(d$ZF#*}+t8(`p0egelB zl7IWWSf)(6+!mNA_I_j6F8#NH+*IrR^OMMXUtWwrnlC-!%DeIBpdJ+3=%SrBsh-Ci(e*pEmi@-L&CUf+r5?ROD@Z1>|{9@ZTbZKhROG9dRf>cZmLWY(b-FGPtN8b8DS}h8p@>b!5?O<>Z_%(g;;%Cv4=7!G!ZtoO?Vs<} zkm3&-TP@+nC9xhSn5?U?FDLg8ufe8OG}qc-NgrHk6M^@gVa(?hkU_lna`!|tqUUCQ8E zxX7AhcT+MX`s3s1>Ja+9>02w8V7-@PzTy6Zq38?BU~Z>uEwj)gKiFC;Er$LO2sVk~ zu#aV$y!=E9QO+C80yKYr=TZR5X*?2!3DBF*#V-zGm?r)Aa>Hm8S4mPB`NWxta&3F? zc1$kJV*zU#Bz_mQ}10GS8}H#Slx5GXmNvYCB&z+i-u z46rr|A-0K<7ll|8Y9}}YR(4pj6D;wmRBjwVr;c>30ufM0DBqR!z^D}aqMh#Ar|o(N zYz2npP=|mCNKQFlnE;B004E{{x)wy)5BdNmyk(&3bdFhSPsaTqRA&?qCwxL-Dp|>! z62Bf@d$Z0K*tczPn(rfW@Y92mXfh7Wd{*%R1d6rIKl?5Gdv0gB!AQm0eELDv$Xrzk=-EE%UQq~bB4w<8ypY7P=ohj z>hO-p0h%-%do&z-?`RVQ0gAZ_f;)iCPpY!&jKQ2hYddY?wJf6C$VhdW-rxBX!2xol z8HiwN6)&n)rlNHXa$19Q>pk1|9R zP{!wUr>=njfl-O&JJF!`EtZ}dZeF>-tTzR%w{B2JHmyae_c}OS$)iMq(ndkgNk4@H zlk*ZB+b|M}5zjScr0xg|eFO=E_Urwr2K|K?CW2D`5a*NG;Gihn%MRSZ4(>9WCHym$ zOB7wOdJ-rBV9CANxh(nxZ%DMg$|pdzBmF|dcYCWiNWGAh+E4pe(ULhnv0O4!$CTVL zq|%w}W+esM7MTL^fO<^==_sIM4h-B(yMI#|yA*5YYFcN!5Hl~<(4;o(vkWc)lh|;t zd;&f!FnnlWr$!~yOV?zM-CfxzBJP)@mO-d#Sd94acd9nr>LP1R5Vowe7f z0><0QvF-i?wZO|=EFKge8B+ALru@-q0nDI^>vyKzpBJKOMw+cQ;m==Hb-X&0!op@v zv!IcBq!sbiRX?Rn>UXOQf&q(!e2g^phz*I6J^?ll5QO5XlWQYCP;=0rWZU&?Xe}GG z337r7h(78Q*Jz}OoYrtr*K*3#^7nfboGGQ*o< zu#Ne0a)mm5mpU?Bfo&D2@{(%27BsU|ms}0(hs0TSV#8WhZcF)*pL)Y23(WRkb(0p8 z^@9i$C^yDhbV)Pz_Z@{%QEl;2K~60sHg9H({k3BAwRwGhC6xc}tg`!T|F5r@G_3{1 zQmsCYGccgk9S2k90ks!FNzA0FtH9)4>QuLebeRs(vW8*_weULun2cx+O-@c%W(_YX zl39?c*8`FVFVpUaky7W<7}P@7I*HP9^K(7F&){JmIEZW?VP{A=g@W<&$+Pe*zyAI5 zH>AyEUM8+tgnwops0n7`5iR82fo%|JnrK3+hs33*o7xu@HbBKUicSVed>2i4&k2y~ zdyuf*HcQ%mJD15o`teO9^NjNAWfznd|1Cih9lylDO_{14!B*!s#3e_9EB6Is$|v<(0D-;`k=`r_)y~{Xbz#WkSidPSABX%itw3 z4f!Xk+Y;S!S5%K&+my3d2!BxhIYF{tNU2?cf*-@E=o2ZO2B}Q~=s;!`CTX6Bkrd68 z%3GSy21rW_mEVi_+z^widdg!F3%F6g==Yy z8B(weNO26ol^f~7jhvi~Bs%yRwpn5WJ}DA<2!%l>tni()Q)n&otZTvScMc_M9JzoIvQJ{CZk@09Q7@K3kjJe2V*(MxA%=zV#WojWu7!q z+08&uoe%?SX|gmzxT=HF!Q2x}u(xU3X+qn)sreHOm9X+>U1^A1a=J5vN){(k8!>5E zA4zJI)uubZ3QUERk_aRLsc$V4EP>ICWEhx`Y8<%G9Qw<;R3^tpbpk$jzN;E0sD5~h z`UI?jdkM^fUVGqM1x~>S^{~f%bk=4~9NrKSbD9+J68e;`@(lF2l%M*9&f5}DLWWm& zLZ;-@;!dfv8y=?2LT*)4_k4nkhqq3B()#!hNa$~aT>QsDXO-Ma_mH-IDUi}u9p82H zSOlcY05vd>yT%Z83eYSAI+axAw^s?Kc!()!pdPDag&aurS%-G1J-JoD#|;}dkQ7QY zKFdl;?JmBe=}Wf8cD;r$TxIuOy;HPG@&o)P0r)wb!x3>O#NZo+KoCzFJ1zkbKL#w$ zSK&PyvQz9_$JE@gO&(7UzM?YXG)P%Tm)tcM%Jdtv7i-!o`o28Zo-*N3JvmE{iBiv| z)mQvh{prSS>P?%Tt-s*d{IjR6BTqDsw}7&s0V2{-I@09HZNDcwm+4ExjZ0cSMEm}* zZ}rG-j~&V%AS1xd5lv#mF^BHiP10Qr(uIe7-A$L@%Y3pY4&G+v+|JeAe*Sf@=z6ax zWsjwFuY78+Bx1k1Xx~bBpIKr5mFIpf+d-rJ!PUe*)7pL;?4Y^lp!@4VsLKH(>Y)Gi zLC=%J;fTY}M28HVhvT}3qt}NsY)6vihxGl2pN|he6df(~96^+h=xmO@r5vruA8$T6 z-dR7Q1t0GTA8&s>KE6I4Lm%HNJwBT{K8g5#S@iuC*LNC)@Bci%N6-)?yk`D23EUOI z6G0>EsSHk}sliY^>Sv;N>1MJ&i+D>euZ8{l%Mk3`~XltT;BYE&k|W9 zSg7?$G>fT6W`EFolaO{=9$3*Nnm)Y8{tY(!i<^@{tO$rz!>B(yPx-h0r8$YrHrwpU zL)ix;;Tjn<0|}(1(quY6{dr|nT0XLs{w_-RP2#OPh}*I*{-dKPH*Y7mXjk>>8D1{T z*GKJacb#T$*@k>miY12moM{$hDDsQO#%edrO5N~ph{(>Jez0K=KsgRfJfmR?DHDSyhN8r4zQ#!41e+P~O$87(LPD2IwAm(&q3QvZZj|or|wf z+tffab17)@ZIu(i(zsL*<|hUfc~brf-QIPKgfYI?N6Y4!rE!tRjILL|hN=m~@PDYA zXY^{b&^kpl_WOPZ3Kg16+tQT>2ju$(`(?hfw7m*rMIwn=e` zXPbCHsPes!T?%%`q?>UKLPy3s;L@;(I3A~p#rAyVAu&_+&| zkI)BECFU6w?+Ys2csKQzN+!M#X)K{gtx94)^FCg8ALaZxu*ho5n}jp4!F=rx=B<_hY<<_O8+t2B4kD)g3qrz(t(n~`}g zB0|+kF7;d!_3vl|XGduIt4U~yj61f9LigjVOSoKXNHl`6+`EZ*^Hl}0_aTkZaU4PW zdu1iU`-?stbo;p~DB*(c5w;+%Th&^`H#hO$TO`cz5y)QPT&Cr!^pEcHpJ(n-AJf)j zrsXIIIMbyoaqqeL6){7dXbUAi9vs1!j2RSjjv|%(orasX0mUra(q%v(Yubo%;7&S# z0Q~MgBLC1=uJ0iIlSh+W`qOj{mrGyDjQ!X~2g+*QNQMY8x>0F$hu;`XiTHA#%JEJ+ zbXFSr0}25y+f8IB_oGaB)LkD`N1NYS+<;*!`5vaLSv*kBw)0VNCJDP}*k_L-)GaUJ zJvk*oM$}4S^CO?vBUmCp$7(i2DVJ(_Qgs76;QMv^RRegE?LJ;)&FhA!67kN{RQsrS znq8Z)Ylq+zG+Vo>V_2+YbzbD}G~$~%(-Ih&z>sIRRXW3`UhOKhyZtTx5yspx-Gyh= zvA~~a^eJ%)jFG(;qRHfvZY^KUYqu{mx*kcKa_Z5(@jTSC^Pu(0v-^z8j#-R8Axf2W zS71VvBQ#V0p8m1R-RInEX*)&tNojr*S=bu*YM>Cg4$tpwEry+$wRi7mp*!21v{A+- zf5jfY%2Ycy(Jg*K&wZd#S_b_w^UvUm|Gl+oIaX_p59o^ajYaiK{bp|Uy1OQ+GhQ#x zUtny>*sRw{ELwicCio|F$o#0EdlGG^!uR)-%9S!5zx^sX`Y)8b1!HD+U`F}LWXqwZ zTs`9Ey1l%g9#6dC@jdL9jVleaUfMedD*XU4Z}D>K=L|FLi%Aat z+w}_8D3Fa6$I-THaPW`P?9rB>M>OI&YWpY@>+H2rIWYf`AwwY^4%`%0*ZU{`Kn9YU zCilFSqkjPDQHuf8_}_3O?iUk8le~E>I&S!R`4-y*zb^lI0`~_+b?4DQ;EaE$_$CY2 zqc%$xjkAv=Af5aU@kwJ?7l06eKf8|B2(SG!;^?=XLm)<3qgSFO3F1N3hGqo0k|L0p z0lMyo%z0@rd$JY&JxwyMZU!<4B*ur9yS-e<+i{(7$Qesj?u=tKQ(;y-)0>4DszsdZ zaH!3c)8N5srTT{8$G=BBKY$ut@t_G3Vp73K8rv)~rfB}HnR0^HqM6fXV5H_j=@2oE zNz+|O>OW)!!7!4pMu6kxKQlCftuHfj)Q7`aXVhZ(&s=zzqr+15G-|fATY+&t0nP21 zM_|LVP4Popq%eh})~)h>mKHGlnV_Jo<5M|z`qY*vui4z}$7Wg)Jq$!EgvLBemFbVX zaaJ@Z;RERFAc0$yo#&-#xO*B_OR@%qf#t&jQ0+abjOZ|N&J?ay#6rAKwyZ5D8%o(L z+Ns?B{pNkjlQ)Q2Eg*y59?vkct86fh0py=!ke(}Gh0PojG+zTd;uPH1T{hgnHADcy z*eQs20mE#YB!>O{pX=5wxE#|s?lj$DPt61H+T|Rd7{?He`xZopm+axzhmn30cI^1U zmh1N~39v!-sFik3aa^hEWSFCPmHDKb<5~Q+NHV*SJ?X0!Esvi*%Q8E2!tpOjqQ8lE zqWQoYgaV$5ILpqRN|?rs?CW(hpWHP=?t<>LcqJzE7yl1#9K!~n>Y?A(`!Q`Fm}hU1 zk`8>0hKO@k&mmE%86Qwl0##&CK24oQK40pY%6Bfj3Qw{IP+sCUr`=dJ+s-|5!BwzW zKZdYM;t5gR{zoEw8foCd;w*C9UYdY2{v{nE$9d8iiKnn^Yf&1-ucgsNaCOgF&7 z(U)b?*+rN^qwW5=Tpw;lUC;i*=j7-nlB5~!mqy^BWAVBrmVNJm5Kh*cl;rbz5^t4( zPlPrP5TCnnjb~H~l+_oAP8~q*-KUV|;n9~|`T_*RZWeI_7ZKnj0DMPT4;Q4oMtLv8 zocs;<_D^*@@m0P%D!K#~bSd53{_$fB-}p)F^jE}?5?kypi@fkdtjzVAF_)*^7gp1# z$HWBB(3eQ&B|f#@I>qlP`E;C@!lRZ~4OFWn-vksRKzoEt;wX`r6(Xq_g}MRt(uLEX z>O#=(r0Z9!t5$9D;{~b8>#(xk=&bb2-c~I;7_YA#r zbFUW45BeVKASH~)+;{kLqBS@3(u^=ArAG%Gb!v> zV{CIDoG7-MxJ2bIV4k29S(*nhUZmmLSX<}|ZyD@*xe`i5?o(I$XPLps9C^02@(6Xz zbWWROw**=ncjN|auwdVQP>(VY!Y~qQ)`{)142f6tsML*ac8$iIP<1k69~G#_OM;ou zD7`w3{BDhc35^c}Y0O$!rrg-*W$J<1-j2RUPs$2nX5K~P-l@uT7UlD7TOh2%`jSuH z)e#Q!)2b5Q8LlC$q3D)|ZMMYBWR2L3G~Y_OW!2&WX>m1pB&ZXMe6Nw&BhoY! zg9S4gvJ|rFt_$gI$m+h0y1Qrr70ii!9^FxDtTKXBiNO&S8)1h!Vs4^S&H129s4<0c z6@*fAMFzI%unc562aDLURF-tTNY&~lD#4by5o7(ur~Q`KSV zC(yVhEhUuR6P9;wN>y2m@1o68zVy+NWQd^pWYGXyo}z5CU1lr?c{u6Y1f!RcfG9c$ zE$^-@CWM{HY@d{E&%TA_1ToIALfOS8_my-o$oyqiu`E0*mM2~Q+Z}4|E0VifI&=4j z!e8pd6H202XS4ps?HEU83t?Fbu|<5un=6LGM~3(QeZZBxz+$MFHFahl_S+^(AKM29wR>=v-?z1Pw~8A z;>`v?dnKgMrlsYi-G4na;$TPX1qN3cRmWIl&IG|AN8>M9Rp_}D(Ex*-7YD#mN(1mx zY_U_2wUQY{r8YJLe9sjZd1=-`T1FrT&QcN_+J&>p4$zHW7(n-dUs&ki`|7G(C&gF| z#4B{zq;ksMgTqSE0PAH5W6z0KQ+H`Y1_? zZ+AkmU{cxYgAW|5sc7o|dGb5Ch5!+xw>6e>FeaLVa5d3DB-t#!&@92BcLBYC$!QX$ z8?#E7dhBO39+VzZO=O{eYqge1&>-C`CuRm*$y-`rCP_2AXH>(gN3yAs0I;d|5uSSM zsXc}Q^_UIPF4;beOb{oza;ur;r(f>IeX>}OUy1V57)GX^&{GI3v$~ic z6bZR z$qR>;MP5=24UlXQ<%q1zD;>@!vygrLX}#J~5dqH8$onAhmU;QzmuOIjoyenT=*tMR zz66h_zrvqhTEF0gQe1>L&7h}JCcnKanTpW|TLdj~=f;4ogqJ$fuUW7>9W+6b(xM&j z@`#Mn7OLb(=ZbY&oEI~GYJYm+uh*ib`hMX#+J}^eW!odoecDJxJP#Hg$hnSh@QbUsj%N~>&!77}ILc@BZc`nA@dQh=WxDg~0DIo5n4eoD;Q3QbmK!Ps@4HsdN)E?19Mpb`bkrop38z@@|Wy|816feeow(W+1kNBbq*!ARc0_}I``+o&v){9z0=9Uqz&`EBYXX$0qRYb^@! z>g))PDh#0p&=44XQTK_%5^g#RT@Rhvvg_$gt4;9`#O|+dVK^wi8`A1MhI$>;=LJRa zIByjMMctjri>;61#V-KSK_K=Z0=dK}U)UI$5zS}^^)A|>2qp-Mc;SE3X6e5vVxk#~;Pb^d9&^?=B!J;)(u`$OWWZQG~L$C`?_z*9^K&Yd<^(Pn+tJGfv(mAClE@>#^y8^Q|Eakugb1@S16Eod*g8pMwL_Da~TN#3nF zKttTac~AR5&mA=8P#i)7e;MG`)#KJZ<@T0Gs-lwoMM`4t*Mp2i1-Vs1xlxRCiKB5N zMos^5e}wxeKE?fg(INew+jCF1u_^b-ukKUF?$g)qt@Vd5hTUg`JwD2NeA4y!+~YP& z>|W`a*!RR^vB+cTwa0SLQNH_8T!cp})??+`V-@DP#^$*$eD_NP`8Q$DttXz_o}N1q zo~F{CZR(!8uRRZXJP)Tlk37luVm-co^*n(+J7s(Jqv!be_~^Uvv!73%U3fnGHFtRS zgnU2Z*`L?Xu6myR-QK-4N&G$a41fI$MCApZK58-9J7@EP=y?%6^&-Ca>Yr}nwWk+p zu@~7JFVHmV_NW)-H!sIU6i*aET+O3Yc-k!_NVL_9R?nO6srTE6`^>@Kj1opMzNZXT zjpf2874lv!_|<5=lW1m1Z+a>pPIezIJ!dflA-A3ncU9W2s8@4nG$)_R%DM`yw8O9y&rWd)$Wsd z^79SoqQw=9(p!j@8VT@!8W^y1o@IFk4Qi6A2a)zsOP2dQmY^msLBYR8YtQTlPz9mb zFF7K6TZXBF<$Oyv&2o*>!c%>9c!T1LgAzN)6q;=@Vz%d z8IOW9dk>;OAkNU|{56z0Gr*jqeV}Z6RJ(PA>Re zp8IgPxBy&QNJLIl_>tIsdExsA2_b~IgtEM>fsmPuBtq`yQp0^E6$ymS15Ncu2xU2h zj;yM&q_MV)rM`%st*H4kQA;0DN5u!u>XOdd@(xDQL3(llhN8$oO*uv-IcXI>6-8+c z4LJjoJDQeK1}?Yt1DK3$ICLC2^i9?2)Rm+kYe-odO1hcQdYaLAS<={ROE{WI_?w7( zA|-;H9;hg4sA`z#>8on#TN-Psn<$!F8fY3AT4}4 z9y)ej)<`!)mp~J*2p5EflZm#w^3 zZ0$W<-TghhLVSEfMP1NhzA5*Evn+#Rovl$GHdth2vbRH0h+9rzNOYuE(W69TO{|@6 zma{>Dn^u{fQJJU7OCO82z$b%Y$dQQq(d7?wyCf>dC0>1ysGpPUSd|_;k{9Qri|;-(xcoP!2STDPqFXL&8&h24H-qoFUSBkE@& z8}d=2RSCkcal-A{LWNPzm1ygiarP}qwvDOY-D&pinZEr+LhmaCKGyLqH}dXw-yO|$ z8Y~Q&C<|S9;r6jAV!h6D>y6hzllNtpKfW&z6P*wfpOuPxo|&1QjqWHYDvN69EiS33 zcv17}b;Fzbrk2+BqPYI(_TjR`;Tqi3tIUs0xl5geYj5B7^^|VM_fI7ce@dHJ%AEO@ zyRcofdR)AI(%UysviV~X(>7NdwHEjGL)ZA=i^JjSll`Qjlhn~O+}Oy-==Ai=^vukc zzK`?s^WRp#?e6ZLoP58yIEUgvL{L`s`v20yL4Xor?2R7g=8G{(jQ{`Y;lo{`yc<1i z!(*n=R5_V1>ASB?I*<%OgVDqwM053Qxq60xb?v7;z&dt2GaSpMytrx9t8T<6OFTMrlb&AIFp25tYR9{z7U98K@KTZ-kW{lD>W zrim+mDY78=fAH{rb;Wbn{hI2^|G~rf5U0waqzx>|w_u{|x z@J-#sNk5dg?!Wc0n$YPGExDEFyZ_R|ho>VPaY8>vxwGAWyyvT``!OcecIfk#p;zc^ zLVW%|^zcsI+0>05KAT36!2QNVsXWeS)p=i?f6$gVI{&Dz2LJgp%N-ZO4BO zGBFLol^W3v!Hmn-!0>VR_bFBJc9s>%!y$%ee@{nw-~9b?$LTt_wNx#mzrB~lM*3{Q z>CL~3mB8=+eto@;2x%|9^+UFQ5cB5x&tcp5>#Gwz9d+?XSi!4X&?z67g5jXB`4Z6=`^~04 zVh!E*S3gLOy7MGPB&n3bDW`eYBZcxQVzpJ+Oq$XJ7mJ`M1MqR`LtMH-Uaj}p+lQ*^ zDVa~>^^?kItJL4QFA8J6av^U;n!OVaIZZ@T*bycI$!q~y0cPi=jPo~oxbrl5lw469 zx(0``dfDjSgtPt{9g+Vd>fT7s)+WxY{^0r)ht;m&V%TfqraeK=*0Z%8sy~X|N=wU` zsNj)!uMz!4gaQe|kbZ0*6nl7>Ua0*-!1Vo?Nvt3#5BF{Ij(5shKC@Zv6EB1VJ2apW z-8fpMyZ7QWCTy9{a&~EW#IoN{I7&BVjD=N-S7}VTqDAxOCMqAcy`KbZoAOsFsw79= z_dH8KE7;Ypk~Vdk^6xw=JV|m|S>m4#Svo7aEMS&9dyk)v_;Xe)vCNAg(VRgu``Ho5 zRVy-#&BR^{mco*&m3cL18^1J`F-}&iN{|U-ea_1{DEFl01U{taomYI~=GQbG`|y0* z@P%-4jkZ&sdd`RQO3BH+2loV;=<1M;N(+ht550-#!rY*J%?yy%KI2NBmZyLuL3;`^ zwl)t;MinzG?o~ZVapDJl8b!+QuQ}I^BMA9TB338gr0UO4Tf}Gh3X=OOn%cXg(H+GW~yUhS8I#U6iT2^p>P+y z@vj#&dI5~A1xHa5?|(OdRZg;A^{xsu2ts~6tt%PnbF@h{O(G{yq08~XliyQlCcKTs z)<;uQ$4DzG5Uzhf*u(qY5F_W3R{ww*nK@p&B+b3$)Aimj$nKid(X+&beI?pk7-;HH z>Lc)tlWPVVh^EOK(e>F(OExKEwioYC#ZE&WPi*p7zJ9*=hk&?E<$dRIV(&S+k4)YD zHJzFH6Mzv-)_w@5JGrnDtoP{742=nSVUD*FKs3q41A?v!u8*sj=a&o>ghKu$-18l$ZE8QY3b!Wr zd@(TJv>+&_4My4AlcC$O+!s=xv~1b57f$2^9N94~N8rR~_avUcj)&Vz zkWl54^4r+ali1!HsTxQ~jq@1c{1B7u;l9C^)6(^&RAI~2-j4P9QjPO1(TS%6h#kK> zB6;|aD)LgsGW%a#1B34Gu?=_hZ2MjA420sU4%<_+fb4hV6I*n<3;T;7L}eXO2O^Q= z^-%F9x!9g4Q`#WQ(eNkZN7QaB#Y|Q$^>Lp$5v#Ae5+^qj{yf>)Pgzyu*n0WoPh{~U zQ=~8X%69^>P7W5RH)Y4@SF$dAF#`bIkB9(AUB`6@%UnhlFIX;Ijz|`nCPyAB#m(%F z^uVX_*9S?_<>FeYJkqxqEN|I)&sM?1vZ897s7{a$^*eA#Y>3$}|5Y*67coe0TbN!p zoLMq-#EGhsUU+OC9`-JDnZWFhncC(s+` za2{zdFgxiH2fRUdFCtcc5XSEi8mm6Z*p4)mjFGTYa>!JQC44Hu9hDgnb-_WNA#O?$ z5aRsMRC>sCC=2c^Da`MLTq#3IZo}#0LKZ)u4{hUC4bl2eR6l3D`51*EbD{H2sN)Y- z(|65vR^jWdo=4ko9NvL=rOf82FJ{9wdSf6$quqX)fD$qf4>F}RW=tq^zOOE>ws;}q zzN&Si5)Zx=a%Ai6*$xk?wnH-tQ#(tpsv;|ql8Q0DO{=~QIc_Wqa0tE6Fr$xemgNyT z?ps;ha%1cY4R)oGApeA{QG|T?BJRr%^x-;kZ-#P}G385%66|@v8dp4PYjm1FYt_E8;nya1NtzOdI^?Jk?cw>RTQ(~|#CHMS+zyv+ zMYlS~ezOhr5bu2>OSYp?|iy9n-%kQ}H)FcJ+q2E{ejH{6kRVM=?A&fg| zV~-P;29gi(W#Kym;a}D4zZyc1N?>~;naWa`wr#>^jKV*m!oRBFrCCA$fGopBDm)*~ zBshy(NtL7Zra2a_KNmwon7CY>zC@Gepl+(R3(MY=4b8yLRqtt#3Typ_>*T^uO|#5$bMvIc ze3b3T^&K$c4rF^VNOcEWXqvs0aNDJ;fCf_5B>SR|Y{fRsmnrVc2i!$^HqU5!*CJ|> zE4lc664f3$dQ^B_)pNTMyFTD~+zOW^%|!*ot2?J^w#Q$zRSGy%JYDX#Ody-_&sGv1=0zU%oUb)5uPR${`L#Ll?{`220MC1EOM28RV+QOieILQygE^m z?+YYpqq>?e^^vYR_@PlMu9@MdR5~O@WG1rFAxz)qaSS4#+lEE(rLB|^)Xb30;U!HQ zPsm>3$ePq zSyy$ec0&2vc`{$3+QH}EBDrL*LQDm!YHAQU+vz!2erSvr6zk>m%n6DSiEz}1I*fSk zML}crp_8QG!&cZfDDW@<7D-?Dm4 zGLRwIKid2wqU!q3n{@)M@YGmFJHMpR|Z?5RteVRpY9Q`kz?T;|AhdBHz#M z7aFcVMab3Pm1i`UkDDN*_kDvNkQ;>v*LGUcce#_9z3ls)`%0f`e9i@qpAQ9Q8iTSL zSA7cB#H{1^%+-0GDX`cZ$3m5_k|%3~?epM-+0XDCluJI8`uXNpGw_)ibCcyaU(zG2 zN$Zg;tv%<2CKp;k&GiJBd>fw1KekprCUvd|XvZ&tj$N(}!WhY%tBw-#=hTB8 zrIwwQT1I)H!ZoX~M2+H((+OlDL z&C*A)(gzILmX!B>%fxMpC*Ma#-91=~3AWlSq|@#%8y{4*8mc3VY8s4r$|RRsRj>MY zNZ(z`Wc0Dtr3H3SNik{Ap!=N_h182`WsWf^4Nwt$<(*^LaG(+{gBB8QDf!uG*qL?2 zr~9FWlrZ06m6YsANcV`r$J});7lw%uwCt$)VBy-2VK42`1bp|X!dWSlscbtYA$Djq z)9SsPT~(R5jFVrL1ns~Nv4Q8TV`WMA2n3}e2ku2SCvKmO4_HkMvx*LdO^kI<#7|62{ha{67@v`y{Pb7!z18GG z!Q_F@xw8eGxYPGi>^g z?AY(_>1*xx|5k+MiHsFhj5GF8MOJk>TgKpWu&K(;TcFfog^*rN)9Z+a9gJp(Oa72~ z|DY*P(8z;ME3P>&_KLtPNTu#{9i#vdp#iA=i7c746c0W&x5L+-q3|P1xl~s3K!Fle z0y`q9WJywZul(@q4VfZuLi7 zInjqhF^x)4J&|FWi7|1T2b2UI;D#^_kbNeJEpl?rcs z{%Xr(SGWKWg543&);m#R?){U84x$sr7 zk3fkDe+78Tx{frl&GWMp|BxBwzHp3*>CR)*W&CYnN_|N43Y-%7Qu##~d#6nUnB(W3 zto}EZKD;3J3LbcvB{VSy_`2k_x}49rz(`%oR9%nj(bbi%b*d%x0j|xh?rpK5U2|?d zj^X4S?n6A4qm}O6FI<^l!lx@;uRB1NA|9XT+`evmS>lrCpBoQb*Cjcmtp332>%$(0 z!<4JRXe4aPA6D@tK-3y4scRkm7WBvqs=N&Qf>=7?dA4_wvqV6IMZz8@dn!r=0~}tt zkG)oWo>BG@r>S`{&_Omtyl#{`K@Q{>5QOievXar*Nie@UA=;rN{vC_ZR<|%I3OsxT zw|dfYxeDK;tNQ+G;YYGf@0}<_H|Q7s{vs)1B4d>|$4(skyeU^U`fi}lmvo=&MIQ>N zub7%|tgEl2gsF6(uPlQfV%~J%A6zBSS1sF5=ogue=}V5+K1OZ+v^oBkPGLheANJRg z3OR~_b2(p@Cuh^vzkR*Q?wd!F|E8L?B_KYFW_vTm9 zBS86~4F)G1mmQQCXr9sr&wf#vlpRC>rF8D0`h|G%53yW;ee+Y-YmxrV-Wb)j2n>(> zsGuMCOLHfF-rD1uD%`UW!a(_ptjb_Cx{z_VN@ti{f7du*H}B&R?|w|hNSQr0@8x_* zH|)cpoN2RKeg|<*)x(k&CgFa(MA*CR+FQ%{B&!5bA0_aInwqY$a@hNXdZ12O*Jphg4;%2!boD4 z2I7B#gm;)@=p$#N+`l!^%2{hYz5FM#)losw4yq+ViIL^E>7Fm4QMBXBTKoCzIs0n_ zEBCI}c=@mbIf}KN>+4)UkAP2K){#eupQa4vJ=5^C2U@y-xxy6O@R8@*4@~c|mrgI7 zsXpLvAo?F}2Uxwt;R6eoX)MydXHwh~#yo;OSP25Ee(6b`#M}%1qIkO42j6VjX8c2? z{u~_p^!J}g|6YteGZjD%xyI7#to9RWlr<_7^=^mz|b%U=QnH&GjifGFCK4ww83Y=bh z8~GV_d?oRUGe7bQxVYjS=CT=~B)xA1Y<}x)BOm^^d~q_eH9;)C353>EK_l}qo<_gVLxzOMZC-JN}LkK`7-74dL( zpDkK{rc_a6ieERfy}@z1Si8_x+2!6j0n~^}@xc}_@Z7k;aT0x#LpX&k@o_>BXf!%y zEX8(?@>SR>LTi7*ENn7N?H8x3ptI$*t*<)Mp#=U*H_3hX>wkaGhQf*0Vim2fX3IP3+)M}B90MgTP>Q+sE+H({y{==90J2-q zu?W_&*!$Cn!PCYgn1GMQB_sJWEz$SBXF8G_nZCNx2hC@?vS*)s_2jS4&-9j|Wrrn) zW6^I)@Dn{)N1g5A3}4veBMnq-EE; z-akK^Qdj8ommNxtaXxqUhAJLE9EdkI7s(W;Se|gs|j8a+jk@hw($d}0-&yX=(5UCF5}f)H%Iv`xA{7i5yP=)DnmJm zg_09~6DHwm8jG}j!l5-tzxtu{Efq{>Etc`&S>yQM8sd*>_vgcWr(}Np^_@{-2=_~F z65RFs#K3j#5KR^nJe4f1xLaQ5p_}@)fU}cH0M3j~$chz*Ta=V@qMO@ZaJv54sR~b( z?pdZv_gkQJ$(S3&wvutLH9`ca3)?au@4%bu1M?3VmKWK|yMELr-+RY)weu{R{*k)Q z?>kD)VyFb?GmfCsBMzL_0v^I8b?IKtK7$;*C88z`RnErdbuFy@La>y<89h4ka8i?GyV)N?)8P!Ztg&ouZG4RxQh8`ixIw=x%AJ%c zNZoq+bZt|u7qg(p5p|lVtb0Et_Rvk{&2JJ;$13iTWKx@q4VI@AWeUnXhG~iR_IGao zR##to@82W{&05X4t@>chYxDH8;PXa;^b_Tf*$kUwwlZ|c3?X*V5@ehL1?zaY25`*U zC^3WR%)>Ml-)aH;S@W{oif~1F>K9}sG!OC~ct5;5FrEx60}BZw%=eJbn_&14T!#)N z<|BF5*y|V^dpkL&8i+-aK%v~3Y>2=Ss?#(k$r5M%oZorv1v>&xLB!^$#i6S}e7q3sF{Ooy$Wg%xc0IIH@zWv-MoIhEq2l)aQYudeW z_gU~{=o4HDZ9(Nt?S*OQ`@O?WGUBp0Aw^%KLX>jv)q`4kgkd84A8!68#sM`m(qc0- zByJ^GCGuQ`oNs^YB{_&I@@H2qQT1aEQ;eSAe(9+MD&Z5s_`Vy_6J7adG>jHdGriEeo0>5g;SnQ!jKr?M}HGrF&hR`#u(vAume zA>W#o%U%8aL3R^WckSPp&m}HTm%n(rzYayjunDxQ?|VGDsd;yvpnvOI>05Xd<|Mn* zVGE4*`I!kcrQ5&k+jQw8BTlAfCgHrI9g8s_kAm<>%F5M-@1-L>uiCj6fplEhLkGT`HB zbhx{+W7LCEQ9gycXH=$lESEl32DH2i_mIAopMe?ugdbv zfn(rk^X;deZI)jdHp;~((xdPF#8?81KfC|^dlp4vwTdUKn(TUE=Z@x;)z$wK_voTO zb>)JvhpZ~-9X!H2>1=6rRwG8nHP;(=XNTk?@<^@~MJXcAu_@>jJZ^pML*dD~eZMMr z(j&sRV5fUtY(988{MxsK#Clf=&o~_);a9{>jS1r928&UVf&Vmp({I2e#!IVp@(ux*pC_`7hSv&r^%6jQA$yi z(K-KmX>D&WDLGw^Rz>`L6&Y?LC_p;-3wqe)tG=hldbPnD`Fk?eNrC^V4D9Cgx948i zY4OwRv#Q8{EH&3GHEma`kyGbK_{bYQ4DQa^$5Q?)=e`at1Y049-4P_sj0)z3&Y`_a ziM=G<2#N^=r4a0AdCM1zUeEZR>!vNQ^|Lb3{q3L`%HHo1;Wb z+(b_7#ER2IPYgv-9L014MN&LPR7}NRGeuQwMOS=9@?u3;oJCr!MafG;Tg*jW+{KKN zMPB?xU<}5h!$n~%Mq@n2%<)BJTt;SW#tL*sXpBZ_1QcbQMr*uAY^;iE%tmhP#%|n3 zZwyCqbVhKLjuntJkr@K~*n}$(s)krJ;kb`2n8z(ZwK<_Qj~PAO2m;gN4K{!VfP@BO z97lrGK+$^-eoKN@vq#`4N9dTLkAZ-@(l1eZiT{=;j`q;6y}AttXaX}31VJ!^bQ%r_ zkd~3e7(xiQ+!zfH6b|kBhdp!%eu{=^V1t1yNSqwM*K5HMLLEZr$Kr6v=Rk>iaL3^o zf{!Z>AabfJz>kfju!|&)LK}iBkfPiW1aSGW89@h2%N9ZCO51<}8evE~fgjzljDPTf z;!rg(AdHwih$3(;CcDX?C<1ab4x7wLy%f9N<4MIS2#QDo(`iXG^qebr%HUuH3_A{} zI53ZB$K%nA}U=+&blBKL5YWfG~IqOd3J+YAWR*30`^=$*hga>PihD zO!!C#_o2Aegoy9z3qyf`A{dT+z|G+^0Yeb<35W}h$t+~JAr@|P&xLfP1#5^ z6@brE0uc5v%3g{g+*kqqYzP&AN9rLpX^Dc2=o&Q22vExn4bXtI>6RmqPQBpHN2Ac& z;LabgPuwWI2g-m})6j>w&WFf{zNpY508tk_wTSo(@LbW;}`QIiySDcm;Y;v|}Qx`+^523YMgbp{j(H`=SRFYpMvj0wBFG8%mW|s09Io6?#C& zgHVB)QZP@N4O7^vEPWLKLx@y>mH)0vD|#>miOkYec#HdZsSAtKh-l8)U<-?Y07I~r z8CeH)2vl{zmg&rjCh*g=7|ApcRCPdyhd2UtFa!uV1Ze>aN%aV<{4qu?EQ??Rx!i{* z6P(TngDI;rLrJL1sH2C-GBTqavtT$^9TRqNDDBz?wX7cn+OBPgHW6(I@gxmRtA>cX zhwem(FHuM>;|Kjo2;^$j!9fTg$W_+JhPU{PSrt~wvDJdYEoV)QhhPk6vr%!aIsE%T zpsbEeVow#K37ConB(152Ac-NMsitb86<~!|IHu5;i8V#41skhbfCU4ASAn>KSkMoU zI9P?Xs{V*8S!me*w1`bmSpT1x1%<81qk4r{;3^}+Qi~O^ii93_kcBU`2UxgMqmqrU zXor)W3q(+n8F^Wm9Z9x9gvv4pX(@+>fP%#W7fu~4&OC?4LWCblgW1`N8Zm>d;0i%# z*@*a(zF@7(pqK&r2Yf(`#3-&O!G>mypYN!$Y0!q(#D-`viy+`y)nX{)TCLo|hlT(Q z*lgCsz?5D^h|_S}Jtfh&Ev{t^m~4=j+oBvs`GVt$uH!ncmP~@+IFh&Kp;ivN?{&jkS{i);z1pevksi^JrOnXm^g)er)u5i@vDh-e>)K#Ow` ztOaOLh=4J;h}orp0An$qt0*IIF|vyg&wl8x1^5E|sako_r)+^Q#PHg;O*0n7lrzKJ z#yE&yUDhP%r-R5&9-X7{tY2@nqk}pKzUT)J44A&4wI2Ws`qdXXd$wCkE&HV${psJo zC}4?DpaI@o5wKCbdV=GFi5b8MR|hr}zW4_aU5yqc6fmY> zXk+7sc;gP9(Ggzcmg_(Xln4{@OLc82pP8j53MHJGVdim=Am(I^f7>Ph2gsA2P04Qjl-~|v*uMHSg#awOy_5T3cerKpci_fr~KvS1@LCGo^FZ*!XQ+clk$k{2vr@V zWL7e0Uy2CV4P~CGo=K&ssklnpDp3~J0_zq(E7VK7fp5%G!Snds%zU5rz4sXhcX?ln-Z-{1jmj7q! zhI253C^!PL%wJ_YZq$Yd)ozG5tA>;6N7UYMG|A(JSS}Ec$uPK#p%!FuCg+1l@!47N zgh+0IfS2M{<`3`Y5U+7c2e>Tkpe=lh>R^Ku_6>oyh!(cU1zUh2mx%EO6_dT8R<0!o z(Cbv0YlHxz80L*A&*=GHq97k)A!cmffBQrxggvO0mjrh%HBmatfn#NampE zVmKS*IDd#auUZp_@ilJdHI|$gueGt}?YG2-xy|rtK8VdYU_=jUZfPS4ZOvutml*$c zN3V2xzc~GSJx+I%PnU>J`Xo$-p-jdcR8l4Nb|nTIUHh=;hqxtO2^ zHRUj3>e6FEu?0Y4jBtQLILRZ}%+5pzw&?P+ICdFXAIw&t7&8m9SO<}W(b?dV>rmYN zwdS6la3~W4QwxFz%JX>N^UQ@0sNHR{o`@=Yf`e#)B2eEV$%iso;4(>fi0CM>qBQJ{%{Z&|TM;im5Lp*ink>F4ZZX;)tILDu*B{ zd36ZeRVt=(D)r73x0ytHG{#WNItCf-AWqvAWXO!Z)kN zhKQA=&T9D)Llqy%UZ0YhP%$PD~(yVFo zCeEBXck=wmCfbjN5TX$+Y7`7lFcN!Wgk>+)6?gXR(US#%qSPxGhfMA2)!q<_TBg>r zxQX7>db5T=u=lDWgjZhaT^0HYp4VAhNTStRanski1Gm_lMgMV@y}bePwyfgTA2Jzikbnafi6C z2!!+v^My~It@$>7$@|@#*08}e?frAlQUhu84>l9U_YZ4AVKZGn=0SjsfCGBB0D0!2 zryfOMAeWqf6iH_tQze>sB8n-hxFU-!y7(fDG0He2jWybMV?|22=u|3;v4vs-EBv?- z1VapIQIRW{7h{q(L7>4AM`*B-15n1+lLqOe;{gw~NDw5kBumoW)1W{H-UCwu zKa9DOm_A_SCYfOt@#aMtB=JL?Ai2q>Mce#y4UUBxdMKiaD!M46jXL@$q>)Pcl8!C% zI4P!?iga6Q6KOzOpC=;s1w{|-qba1wp@}N1t-AUutg*^EE3LKKs#B#bUV1C9hkjZc zMTWFfNQ?$u*^qP`_9|n1YcBgNw9!gCEw$BJdu^<_uDC0<-RksdJDtjQn>nGLcu#tA z5+vO}NO@}_1c1IfFTM5JdoRBE>WiwjDssCoz?%+tPH&zeV(y7QwAar*3o{fj#1Tt8 zF~t>Id@;r(^_yZU?rf4V$WS2CO*!2lA_$l>LjM5GHuvN+PBzdW3^L6%+k7+5IqSSL zQycUAGtfZ`Jv7lp8+|m=j{2N5(@i`5G}KW`JvG((E?qU&S!=yD*Ij%4HP{*#7&h5u zn|(IgX{)_nj?>#e)~y3%9AK0EET+kQLd zV&bWwn|sbIQ|h=2KRofp8_)FjQL=s;# zzba0_V}CyS>8rnftq`z5NEkp(wC6k0M3zUQhD( zzXdX|few5iNwmiX_sK6KNkCvyqzAzba>vfF^pgTkM($qzDAWM3g7oaEoR!I)ix$ydG=Aq2E2^=McDy4Vuk{l` zu%VBABnltzXOW*AaVB)kBO(*2$VFzVc}98Ug$4;jBQmm*mb@e;B^Aa^Zjz8;oT2hi zn8{I+vXrKz(HDOZ1n5vOk~ul#DgR?B%UROWCl&k-QP=Tesi4WJSRFUSKJ%&1{oQk){`@CEiPz77611QOHQhiDs?dcpG;#@TC`2PF zQNBHNq87aQ29+lcgKPu9Zl2mZOEGbG;s#2tdbfqqRDNMc9(wNe;rZ%nB zOmC{wo$?e?IYrS5R-maNY#|k!xPl5SawM2QU<*!lsx?~$1v4DMB1ecS@Ssryiv)p+ zJ^dy7D#Uw|70$%f~S124SCmPtRUcD+1 zbhHBs6%j-`60st5J!~T6>1$XcE7^)9@0M`MrCD8t)_NqBCPVnxO#nj=s1&uX69G(I zWfG(zTmdbnC5dTX^BTdH1Oh0#h_Gbq8F5+UQ|cg7H`*bH8Q%6LjIBrzAfhgd6rr(` zeQr(RXjzKH4}+p~)fHYV6IRdzCy04VMkLeOnz+^^8bAbk5m64%q!+z02}Cm46z@!j#6C6|b!Ed?^xnK=5TQPTZ_a;)&0*lJ4 z62x|+CJ;!6IW7W$FaL$)HpB|aheM2$XR1c4PafFnwx zNs(00V~ePODn1@>N&2Fa6(G4HDp;yTG@O#)4mTqj$nQuHYlzkWi%2OWtYJf#B7r*`im_!$^psN@TDCj|Hqi7HF}DJNzP$ z*3zTVbioQeGSd(WXXXlg?g~9%A=H5k;T5$ww4)on>4B&q7NCAbR827p3O~ltWobw% zLT#A0(!&%GF!f_n!OAVn;?Pvl^+lw7k`K3|s$A_xY}0Y#ftW!Z=@9T@ID?4A7y{Xz zS%*5Zt&S=SME_XR)`%H|LmNS405s6)jkbA9ZELp!+uG)~o9|(egG2+l==z60&a~zQ zfPp$oO2Rfi6rKV?10uAQGs5K=!Uebymq@{}o^|CGdblGNhDNk`q%s7wxP#TNT>&dz z@#iI_qA(Ph%%cT@7<$YC7E;0ZK&}vrSp0eBHiym-@KSME=)B1r*@Vr}G7Fo#HRi8~ zg;Zue5yH&k(?dUW(H8&#j>`hq_JBpO!J?Ac5XT~d$hOIX+m1sB#WdW8KyVS^0D+u$ zWCm-mu?0e3b%Qau=`fjaZqwh&6vFMrrbyexe&4unq~HT;nL(U2kR)&iA@}G%xC`03wThw5-xgwb}@zy9tt6@0&!fOlqXJc%aB(fm8dU3D)5-a zri)~exh|>5_Gq$Pz$*~e7H2Y)nFv=ZY>`?#r80=Y`bd=z1WKOrMVmJJ zQyKL{gl!TId%eCXgKyUdg4nJ*;5G-NNEF(kVz`hPBZuHGn9%N-WjDl2U9L#{&7Yqb z#Qg*TcQ_Zi+(TXbz=sqVL0q0ifCq_W#24&?0*)RA))S63ToA3^E4AKEIK}oY0AY-v z?ad7DRRm&0-PCCvMyw!3B;Q3)Uqf)k??so{yzf^&whAz?DXn zobYj)ky*sQ2*ePAL?v1T4KAHM)I-J{-$fvXq%}kljs&q0-arJGx`E58Al5nDhBed) zeT7*?2#d36i7lQ(LmXj4T;Xq3L~sQHM#SPsaEBl*z!N}V!KqaAKt`IeS}jyA|>YFq#CcJ_y%tEh;qbQoAU4cq-c*Z%H14KfkxJgKCbwiz$ zTYSw|xL^dhU>RcVoq}|RDK-Q~Lfc0yh<2o;c0j~ZpoiiO1adeahBzZdK%+F?BtEU) z7o}33vEGg}-$Y1-q-Dh++C!ZLpFsFtlbHfq)Pprot3qD3eU#3+gc`B6k6fQBu;<=uhNdiA131fYo3U-@;|M3@*7(gsG@ zrAQ>#K|mg166R8vp|T9bzVRVV&QF`+BxKIh9{JH9*_bY2NG?$(A!O#kHUE>PxCIez zr9cqnMv!9+QpHu6f;|XgKi0!06o(_8rt*PhR-%MH_8>nFMpq65KnjFhz{3?3M{kCv zc9DcG?&Yv>1O(j1ItUkTwL=wF#1>}6ZA9l{n1(Di1Y(KdEJ7zKLIm_+1bU1EMZ{z? zmd6}EW@N4>J2}!L6$Nuh*L!YH#BIxJ4x&Pmrbd`1R)8a7U|2&S1}jViQX*d@R>UNp z#BFL~ZVE&u^5*fiU=Rvrlqn=hl%g-T12Bq}`=K8!e&HB~VMhGoMDQYTX=pHls7P=} z7-U2;QUo(LM`J#ida|dDjuR(wk|$k7j&9NgP0%O#tnuRWa@wvk*yaI*ACPm0aVY~t?%mU6y1MBPZr-BH_I+(-A2nQ|>#IP0z zvC$o|sRJSy!pZF7aKL3ckewDfBzoPQFbV_|6oS#xS2`fVArykpng-DtExdIE8#LZM zj6*(fM~Dc-6L1GVWFEt;nGZ|@He|!SB?LB11NoTYfK=WEQbYo(tKS9_yYgY9`r%JP z#miO2l2odJUIrnG1zDKIp{WI1fF>A0>|;pCUE~F>cK^hJ0tVwM--F7k%QnViM8;&e zEaQf0n3%>$Rt6%(7HxEcEdK072ushFDD0v}L*$ljshb%j+aNfAInd<-&=(e-snq5! z-EqVZJl=k6gX|=Mz@3S7G!}T&2TOtx=v4=q#OU9C??`QH1MlCQ$G;l^e2pLJR22T_PZ-fP7R0eeB29NMQb+AT!FbSuy3U84KXGF)4>I%oO z3@=d&&#(>Oa2nMx4(~7z(=fdDFc1gvCF!sb7yq#lA2AXqu@ch@5ihY5KQZ+*F%(ZR z72A#!S1}f6vFcp07I(21a}F1Ou^5jr8*DSNXypL31qSeG?g z^YK}yHCwmwTDLV^lkr=}HC=b{T-P;TQ}J6n00*pHMQi{Q1a@HW1YnPVMO?rI#K=`4 zi5WC@W9zR>OhG4nLMKcCnLq#$T>pe*cLHZmL5*mD8C0v&aJJ7aKm$y{kYUSWV~P;S z^a8Z@Oh5o<&vt1$PGg&7Wvq6K2tj2dNoHqs9gA2HB*98w^owl32qd?1D|ZD{1RXF! z99RSsFamW`cS$Tab{lp^zyTxBK}B2ubvJiP=ztE)07e7>VC5BLBbH)SgcH05ZpXwF zB*Qb*_cJ&HoGpekJcAHe1by2#FRX|I1VI!CLLfjvact+*_`rRWi7`CGC*a5tn1LV& zf*EiLO|Unne8Mvr14?kXhex)3-*;`7st|MmWp{yV!%BMZ)ry0}UA6cD`__qmt%~%* zGwcFf?00{EL<5j_YOjO}2>(HlYcU{4ATw`ri#&IAH#s9PfpbGQl3V}>yn%I-gp)hD zMsT-xQv`T3f_PiR2E0K>*g`SnLXl5|*y&d5+N@AOiLeNuO!&Zl8^b4{cqdfE6g)#S z)X9)fK{Gr<7o-RT7(!>b#Qxgr9_{&qM?Gz!dC4q|eYU?DvQ}!>GGN19(Dy&$%be#B5;UaKuETrzjRec0=sf zomR%4Rz$D!M4)>%MeKQ>W5g5;Iz?1MF$6=JmqaHV!#ljgi_5Tdkq-?Kg;JE2KBLHU zFG3xhJG$2a2f)P=nEwk0T=_^)w;iNAx^H=RTLcGeKt{v?BXES7qxlSVhJD?ae`&=1 zAumkec!*;}16V<=V=9TGNEDdH-4%i$ye=0?ok%7MBFK5B;JA+Kd5_ZwVzomn3PQE1 z13E0pY>4(q{J?)riV&bSO3Zwu&e_eXH~NGQVJXG9Ma!!WG9K=_|ur-X30 zd`m#Uep`A;bpOGspNJPCLSMy85pznNr{{oUV zz{pR2Gc0{g2!S)4eNBM+ONc&~i3FIDsdw%Kq~ktFa5%JA#4Qv9E~Er9yhEOgF(^+L z1Z<`V(*zvvec!{oh;2ZfP`BV~#0As^;fF*8c)vx=05KGU4rs($rUbaew}PzFNm#)% zFhfe@yhiu{*#pD^fddH^G;}n!AgB^U zbrJ!J%5JQ5ut6ZLvf{&Mo@oX#fRRoT)CO8TNkqf(Yu$zLq@k|3m(7`Yr2nk}) zL03&xCxab({L!Ez5b3cq2h9u$0$vF9$(XL*tO9~v(sTwef?6BV&a^xkHbfDBaTdjB z34&3DDbjq#P(MHU7ThTuLR3+q2<@e%D!yf=&4H$17J^=em665?lT0&-l=Uh@tUNM`cFG|r z2r|_P!k~{w^%bpv*Nm4SZzuhwfn=U>SfCR%J!p!BGaZpefqE#0n55CN4Y%y1o|@{a zt-c!TthFw#xoE0#4!VJy!)|MVt}FYX?YiUWjXCN_FAnm|Lud~0>Y(F0M&2mMJ&qs% zkdZpx4*WiXE{KDUI`}ha1UeE2&+*7B7_FFMYJhK{Uxg|Jk(3(a=#Zum3WCUU5J7~o zbgHtdi(g!?%NW;x=_Tndc=?6UYu}0sp*Jb*WzJ@SgXo;xFj|Nyb2?uro&SPDPp2D1 ztYJQ@l$^LQ9dj1SvI)jaU;cA~pkS<=&KZ+xASg~JGM&@iHy$Af4BK;IpKvyemlR_k z)=`4GAk-Pl;1}-(;=5!R?HRfoh!9xRj9m5?GK?_~aLz z$X}v%fwSH)MnM;G-$J72K9WH|9qDjFI@WOx?5%Dhob#OKVAzgALrs0Y?%8Cmh!6!O%JG*zJ^6g12;`Zt>S?V=M~{KY3qG!ZSTsfzwM-wM>=hI?Z}u=m;yaSJc(pbX@{pabD<@w@03t--|1ok0Sw^~ zAwR&L^wI%69}?sUhKQvQ3j#~_%@PstJ4hr8IY|>5uznB(itR9|KsULLP|0xQDAE#} z9?%AA%0$~Z$yrWwo)ewv>3pC?P3j;St@Pt^?tPPyCnDfuM$)!tvZ7;FkdmS->GqfKoaHK@y4}q@%f2R15)01DzU(ghr{9c~MdzdPSs`;Mj|tyaXW_v|vF7YYb=oEVgSRn!tdDC@$t~ z3N*qXZV$pD6AFYy|Kf;YDm9Q@=yo7m#H&DhR#St_)FEG`u2|ExfHnHWtf@__K?a-0 zJTV|v?N4I=4Px!(*K9t$TFf6jds1u-NH5lXnq;% zK@6i-g!t^Z2DwEsaskfU=v18<*6@Zo++h#%MmcN{+j9yMjc5eH#3?33*r=9Ib8e>& zBarcoIe?IU$}OM=Ne_DnqBw~PBtZM|=K>s%p1o-aatEO(BXV=mi{zphm}m(^%+UlZ zUs-eil?X^4dyteggdmrBuTreA$C}h7jR(Oa(E!U(4(ad8tXc1Myk3(7M{#ipZq`@mZvw+g*XoaV-sI z@S5a;sAUkuXAWM#b5$dpjj_rQbS6m3(1(ygVE-u5bp~*fkc#Ja;P8iA7RY^9W)&3> z%7nGenVMS7l0`35L}{ENP5mkmzc_=hZ+=Fm4}#`{z{NEN!Jsp^ZIHMoP22tZu5Af2 zSa#9&FMa7CK^pz&XGB`lmX>sjs$-)pLqyoa?o3rN6a)(t8X<^w$YqMuaLtPOVx3vb zmoK7l$vm6hgcUDwQ_Jjwd^gPm0k@?LqJzrOMhNdf1}Hz=a+kjx<}pua*D^3-7DFJ# z_QVJ~34!6?xVW713GyOr%!nadbZ!M%a-bJrA3H1*Jd2R})W;)`C1=IQO0MWZoa_)` z6oV27YWS59Lh*}8sMZ9L>^Ybox`12dx&QCJh-_EH?}ALaAaMEZZy?T*l)N1(>R@_7 zIO7?D-1;0G;fxP+bL+P+AgTp%Y&#&!QgRmrQ5N*eGMrWypgot}*}b!f^+2#I-f&BQ)N&Vy5NLmqo;ZW$)ldC`ufqC)cwQjm=62}~VtZ&`{=k3bd_mAJ zasna;VqLKjoh77Mf&3le4r1~u?;zNxmkzLfw1hE!cxGw4PV?GoC36U^8h;ASl3L!?I2nC{Ue#~&T&LFxDA!0)ZFh`WS z!3)2TWV9r6K*!GrqLj=54bzY@b`LG^jw3M6Ax6$1xDQ;C!4B<^MeOJ|{?2a};`juD zv>wn5bf_FIlw6f)Bo_o{4TKh#7g^GZ||@%&Q9?GyI>R^C>dB}0}m_SNbear zf*T)DO>!cx3<4DM?*0nG5-~9o$&dXyQ4cQ=6^#QT#%uv3L>(Xz4bLZ6ip0=nZ9?KF z&m02n3?e1iuplz)A}CQZ=8+yXQ6QRe+48ZkE~2~wqjG3~EP@3XltCGEq1;|jC0CLq zTQcTC44z1=2BRS>o*){)KnHJ-2f2fvj1I>RVxWR7JeUy37~wq}VxWj}AmE^ICdvv6 z0t*kKa<;IiJSr$8k|Rb+D3}KU5ir-_qpp?!S zwnA|M;82jeU*U5H=`@`ptFEhP+(ASMtYB+LIU!Ywxozuqz~1;V|W;0OjG@~mRq zKe;4Z>269X|5v(?5e zD;l#PM9m@Gk0qvZByZy#c!A_xQb8A#K^qinoP!Y9Ktd(d#3B?Y1;WI#LOL$A#dLC< z_9-ZC?4P3Wp#KP}C7kdepfJY>A`Y5T>7J4xqS7FSp%}i2BlXXYTuOQpO=UAc& z%#0&Ijw9C0AjB%MkmD{dLPuYv9kj{;Qo`t)GF+8&|XvVV~4`NJtvrHG@Oz%!rjlKom@p3LI2i$CX^m)i<0Y#nLs!L<|R) z(I&qjC(#K+TS7z~LPi(h>R19r4PpbHGV7d@$?TOx3*zf4Ara>*D9nx_*;DP_b2s9S zC5+P{qO<+RvN{-p7binm2jT}L4iMV`9e|>vNK+sj&nh55N)NAC4Z<|hf=Dl7Qx{-X zpNmo}sXFiRWu2=#TQ%fz_EkM?IX|HbrXWF!V>Ju249_zRaRkgvWn(?YV@E4Wq5ujQ zarq(>P5-K9vG3aksSAb{egO18E%r_IF!O-oIzdn^Wp>^iVj5Y4xFpt0DRbWN3b-N}BQgukvp4V zC-jc5Dh+^LQBvjBR_WF+^7jG5_eWWRDGst65cU`I5?G?QBQ*G9OG~np4=vh}Apb^@ zudsJWcQX|&@Pw)LZcW4<)s(uJ>yBczAjGN}a^t&9sB*1MdpR}EPLG8r0)NGFf46ho zS^|Q11AZTHAuNU?GJvO431$qUey?I75yAp`ElAezAda?}9M&s<*nt;7*~V`>d3bAA z4QnrAX@-F|eBi=PSB~eHjvbT+XHo{GqvzsPpKO<2aaUk<*9aLwc(r5+45}!P(jl1g zp#*{{i+3RM6(N9EZ!W^*iotUiAhQPV&%oFqwDNB;7ATG&slqrcUrJ8bbZuh~+eEGt zSZ*Kwp&vv;LZSkfLP8+Cm?>WKLWC^?n8JdO2ZJ5r2adH@2SSxz2nzJFmj5HTl9D0Q zgp;hO)jx*|-+X|tY|*8D+Rz*D<)_yzLej&yncKI!>p$Wp*YFk1(fkp^Yts_v_0})%_A*whl+u;y`q=HpK*E05FeRRM?TBcpNQEIU+)>drQ zY-bMw%51^HqNa|=nykw@=I(ePP;5EC09~iJYG@a2=2f8JU=HYD3IFL}4&b1W@f8jb zM{xp&4&nd~fTBeSN^k&2krzNH!=oe81F!*PJASMJ`ucGITd*gmAnJw@?7*+Hq5-@~ zQ2kMS3PG5T=@1G*R)j>DfH``Uh%oI8daR)w7-MOZB1oAbem;SMegSrRVHZAOn@52c z3~5b%ffq`sBl0jAjA4+R0k?%hr$xg7fEh}Tq zdmVxqHjTs!&4DpwO_kE&5Dp;`7?n3CWx11KT_W{J>9)Gogt=iSx&Nq>bQrMSs24;e zCOTmkZii5op%-{z6o6){7eG6KqN6PpI1wTr{(&D7!vRvq9RJokLm1I>y!&(t!er@} zw1){1PFq&8yAhw1AZoec)Zq{!n30-EM4nTD3!(~y8<30}i~`(J%Y`6*e7Gk`$fG4@ zXO)qXVP7a^+EPomd!eHX>9^&g0Z>C=JcLl9WnRF=%Co79Xu3OrxRGv$$L-t8S=Bl( z+N0lmO?m-%`oti>0GbveX0JK(x((XCC;H7%7MKx z#N%sXV1!0+O6_TpU>HW5GK~n9 zg&D$2ziT+o9kb*E$xq0o8G7O5%~@{+ViXo%Pp1K%tyeVsc63hV-4S6!2pxp=>mUXJ zl7-{)UFWS8Besa; z9b&>NEUfFD*PkEyqhB~O!uflH*iCl>HlW(k!T~m*`X4a+bK~ozjGUY*GCs@)h~Ow3 z0vcrb`?W+QL?a~LA0vW5B$O!w?%!|h|NCFUEC6DGz<~q{8Z4+n2!w+J8wgRsu%W_; z6e}8Rkjz=9g##ftd)CEZl7Ih_ShT1i$o~-y4o+%V+47{!nFS5CGo+zlw|0nV8WiHg zr_cpHoHd)$fZ&v8&w>t>>0{zkh7O%FgdlY)!3I8vK#b_{p;m%evl`s?kKI_I5RM$l zuvQ=hl^mzGts8gl5xh^ser1?2E?FT$k}}j$tk{ga@7@U!3^}so$&@QwzKl7u=FOZt zdyWgn_u95rfeF?VJ7iNIP?U7a(dU2>3x` zAPxF>=FG72>C^lD14BK#_R$T773%>R*gIZUx0^qYKE3+&?6Ze%51(`mV#HL(zrXL_ zkNf=l3tpz1K~_AI%t6`wLx_J<9sh!yK^ml!PI17g0Np{mJTr=d8v68uZySDiUIW4u zLrG*pDASlS5`xHLi!QzhBYf}0NFzlw2oua=HO>YN8$15E9)P>lCB!GrI5WjTVnDNE zjmLG9lRz1mkxn~inD?ABAq_OeF9bFTBz!+W^F^3uR@T5R!hk0k1YPjr3z%olNoSpQ zf;i)ydhW?*pYV0UlrzgP^AUlM`6a?>CI_Ff`PC8Ja*Gr(wH1m-&zsQMbr=ETa zYN(=)N~%G5mWpbss){NEFUBNeOfR1t`l$wkAW}{@h#2C;dR_GLYOJ69wQ8}(9*bQj3vj@5;>+3(`w5J2!U`|UaKjEij4Z*c84Pj77GI2U#u{(T zac2^nMsdd?k4$pOCZCKlydReqa>_2h40Fsf&rCCrE0fl8%{uSQbI(5i4D?zzkCt=L zMjwrI(n>G=@X((X&2-dKPfc~zR!i%&XHfHp1R6-t1OXD93I+x=)3EV{gc*o-&==6W z4Gnhp{lLaF(S#8MLrJU%0o-rHb#>r^4^BAH5G1iTSq3l8_|}|d-I?R@c{7h1G*P}r zW<)bJ z(fD}p?6XOp-5FmW1c5yB^llLZ^T@OOWoYdK&63qfXx-?{7x4vJr?)rKKiG&-cNhot z_S-=X{E!3~BpHu;{r2CFzr4Ti4*d^d{13qYvEgo}fgER$HytC$0}Bj6!aT&`lOz}+ zGYudK@hI{GFi3|XsT&`AQrA9;KmZKTW61pShr$%9aD~}|02>Gq2Hu@yfO#t(br7f= zYRF?nYnTT$rV~5Bt)+wUaSdcn$igHlafwV6)fb|Xgcz0(cF`cj*eqkf&ERl04g^O; zC}+6^K;Q>gtpCUu$vBnrL57GG$v_dx$QiUu&F` zY-1nRQ5{KM(-Bw7Eh21WUNu_zk9*XxfcIdfD@jtGYN(EN6+z-bl5h`ykfa~ch)5Ag z;ypl0bDGqwCS(SglL3m7EW3jvWfZBoZ30IX)X?EPyiv|_o?##k6o(GIu?ouhupmZI z#VWq>K!!vB91rA1JjpSSRLTS!+t|iENK(*(LW3;T$i_I7sXmI-vLG42$3OZpj#d7{ zAG4gv7XRD<(vXUD3qAouLanopgl+>bU?6CILKqQa7Nj@1G^jF(X%IG$WRBMCsZW0j z)PWdMG}^345~9&j(tr~)jD(H!cF2$(&f^=sQ$;=x(!(DfWEJ!5h!UQnMvLSpqO?p4 zL$L9Wanwba`|#!_=mFQb%5@V{k)uU)3R4r-(I7ui<}8C?orM}C1HGhQP!EgP#G>$b z7c6Q-AV3I07SOP;X)0^5aLO+}5HFYw2SdQf5P(*1EMcw4SSvEofpn-J<$-{8F1Q-I zRs^pWk?BAV1j~U$<8_Mdt#5yezd;Jov3eUGY?gW%%dW<%sG}cXC_~x9G%ci+a?gUbFB{4O_X;xW+fsvuv2_+~*Yp4d_?v$NKJmbvOvB9T6 z3(`)5Ao$ztT(CuwFb{H2QG*oWwLyGc5MV#E#L6MIe!qMW6)ylSICZwa{|#_@$yn8r zWsQF;17Olz7Zp+E@j!eGWQTX;40wS6KN&t=lGqu^iWciXu>I>M7X+>Qn4J#<3mbdq z6yFBX_YbTy4ZM8ea|Ho|hP55=oa=n&s2cdLjms^ZKaJb4F|<6qK~Aj-WdG2r4fH_N zpbBzcHyo=_1uClNKyn~m72a^3kq^?!5FfMS2Z;tYvat>8++!Qqs0Q1>Pz{$}lNO zk$^^uG=PNEIouod1i$oy{W{#Qzy0q|F7HbQ{J!lFKkyHL0VsgeqW^!9!GFCaKglxECxR!4f+?ti46%W6 z(Sa)ngE1(B_Sb@I@q#mmgE^>!{#Juyaf3Sugh42T_0@w~@qMR3afC|< zg;6MlD%6Be@q|-|g;}VDfm4M;afMq5hG8g%KhuRm@r7fEhH0pVCR2tSVuEW3hjA!} zC)0*BafWkdh=C}G56(&{BveafqJLHKP?hVgr9Y z!Vqh7E@iVv2N48sxQL$!iY;ImcGC;vYb2bD-o(LPt6Kf{;RFXI_7sU|WV=lGGiNM5*)o6_yvOm8F zS;LbAL10Kw0E|F$zl4g#xE=}=d*EhnCm}(5@`?yHHAp2C1VHCIMoE$4XdaHFNuVSTl_VFJlu41qNuK1C+XVjsq-08{BoxS`Oc&Km z_yuARkao)ya~BZ}oO4n4V2eIbmUAZ|)6h!%01YDni_fQVz19y6zy@l05A=gf%~yeI z0RgwvIl5F3ti+doX;?up4!D$3CDfP12XYG#1bF8U_aJ@$V0ZGPI>pf;YGIfN#ghv# znZJY&^Osvd$(jj?O{S@h{391Jgh>CWl-rSX&Vx?rv`zxiPVW>?MMh8dgijE35c||m z|CC@fK~rm&OyV^VI@L>=`Igr}QTeb;y+jgrmjsSiP$;#D1Ce+dg%)=y7Y+4LAJ=Q< zlXslc571LS`!EgK;CR@uk2LX7BBh_0MiUivQ5lsV97X>S`9X3Tbx|b*4PUtr(|1uD zbRac_cjZM8-8pyD*ALifcR@fh!%mWaUuU;4diqOww&f@oD4QS4>lB^c48>TIYi}* z1%Z%|RuL#`5W7W8Vrx7)1+v(>tVv1`C%FLZ@DD93w$rK^7)G|f6lwWkizg|zp=K&) z>#m<8Oqoi!JKLc*OAx{oX+=9ro@t{IFg#fOl&x0>sTqUjYopR2fHTDP-kuE9H~{eTT$KnRJ-k``fQ zSq8mZMiWm~yMY(7lzO*{TRvc7Y}ZRX2V$(pYPajkv*gPcluHmKHw{TJ4f)Zsn+v~* z$YyT_XH~=ov$Q*i+j+!zs!{71s_Oq|VbpX6RuHjz5QTPVK5@9Sg>Px=r)&GIZ3~@n zTM);qWMitVH5a@KAO>HFQ2#ntzdwwK!FX!GLp&0BpAd^ww%NbvQLqNlJg6rSs;96rk!wDYYz&OM z%Wn4vE7Bjc>A#IXu}I&vj_9W981GD z9J%Lf!g7&zJ@N#Z3&e#Ch0-Q%)K(XxYp&qPzrb<2TH$S2+qDBRZVFb(MwM>s*1Xy( zVp)uGUFx$H9ITb9s{^5?1(E-IbL+AwT*lcOrX4a4$}w+d#%Oq(s3)AVX*{kZ0iTUJ zvwd6;=zFOVY{QHa$`vl zGpD4Wysi5{bEAl;U!0`}0#hw4pmgSZW=zkp49jAW1Vs=8ggh1`XL5FT%fVYd*iaW4 z00wpOiflunvzVw^ig)OmqIDe6I4lsvED))44`5IPBiSSnpke-q%pom?GG@g0%de%H zluLXbMu&9eL=dt116jKOP$zY+T6I@fZdw<0wD)xe5q8Dqc#tP~@7lfMYj=$58|<(T z%Cwpk$`1ts1@Q#d@ziOzpyTTUhey|bI(XA?FtOvu*oUO9bPuDv04;2^BJJ2x zIB+8rJpO8M0lP@fycwfsO7dWOQ3=HhAjO{jdZrY6v)6j1WP7-$dnpRnbH_GCeUoA& zm!0!?#G3(c8F;0+0HfIt3k78a;d`zGe6K82#`{tnWy^Z}QWdP0 z`@pG5;FrHMzU9+=qCwch{KpcBQX8gB{eZZ<%*v0g-eIVbtOm{IA%5hS8RwUi?!$gm zJEJywIC?gc77_oFnc=o2qz%rx8t#|5@B=1?BPR;38G2g{c;wOVDxUvfo$GDkg2M<}i{%9M+|9KPZ5ULcMZw)kn8s^UA| zsVvTpE?zTgY8Bc|f96uO(!h^VT0-s3<4xYc6Q zU%t6M4m&_zGks%F`7jRIz$ESR1JhtoipOqXF6Z_t=6prwbB^bE4uf^>Nq4U2e-7v# z$me|O=YekMhc1AFu3CkT=#B2^*{A5f!|0Dr>6H#}k)EQHZt0uO>7s_|k=*H_F6zGZ z>6$+3r;h*Xh*j#T&g!ksgHX;?rta#qPU}mw>a~vRxjtXFt|5^KHk7y?r??ivZW(>! zH!)r@{~Z^~ju~v=H?Xej(f%%@C?R8nIQ5;6xx~+=LcH^>uPidVx-AqLzew?uAM;KSMWB|%hwl_o1Xq3;U{LY;&hqAw zjZ5CIh!aE6fb1Sq@}S4=aY2rh96=DK9wW5jK<^p4*QCp|4byN9dOORPu@4rO8H0NB z=JEdpQ9t#b!L|$m4MANEZVqJ=KXU198BO2vV}Bm^C`C1w#6p$!k9<5izZL>H&Ge#s zZcWexkpYZ8uTGB{XchIQynY@R z8NhOZ?P1H2S^<*=Pm@pKkw4J9Pr>Y^Sn~woa(ils+}8QUCUPoy`UFw>V%qnS(EuMQ z6ZYm`h(vjtF`)$`1_{$`cy&eickHZCrJ5a#HQlN z+1~c&!IY5%N>Isq&oh;q)Jc4Ll~Y`v%{+s5rH{;Yc>B& z_ZD*iv8~^~fBmLGSdef51UB~w66{wEp+bra2qvkR5L>~C87cY@2yt7-g!}q6V6*Sx zJ&X#)Y*YF0;l7MX?)ifltsWaClkQl?EQ+Qj*f-!zXV7Ze$1 zbe|ZCV2+Zc_+#7AhhY?Yl?isikALhIR5SW-n~#cMeiGdFW2r-(8O0F%;uHd0i1&(A z%=Ryd&4>KBDog^CEJ3{=fA-5plC4|9cy?y@%9$ffv;>C?0zs)e3h6QY*RZa*YTHmM9o*)O)61mbJ(6|3LRYi@O zym{Wli$9|f$vko6y{+;#ZyvRZMpUi(#$IUzaO}CkCug2DR!i)kd$w`tpK2;%3m=~T z*+->*>cU1c(<(}Wpnay%W}tqsiKZhkDpcu0g?PGWAAb%s>Kck57-%1Me%fZKi>gx4 zsU$qyCZv51Q%I$a_6e;Y=%DFQ!XA6XrXpwvI`Ad~DMC?27721Op$wLUa>;E1TkREh z#w4@MAy|77LIel82dsg1EGQ=J76_uk1l3wd!fHC(W*X?~M35l0*y^XWpYW;3p?(gG zX&*cn;LD?p5N!&AdVT#_2Ef#uq=DFuHRr}#(g?>$_%37t%|3$dDuVs%qBM1oET_KCZBIr7%c{1Pf3n{wd-ewSolJK}_6i+yr8`kEObuLvX1p?$jLq*2r4UgP#9@PI*NI2%fjTO8GfMCf0#R&F~ z;4OuL;hPixGV;WKwGU+f@ZSFZL5PY4uz^5C%m6DAzvxlWcL=kfNA6XTCrs@@U{OgH z7l1QhsU&M9!Q%Z;b3`pl17)*Ynibg>yp2RqDbY~6l&3^xDgy_tIhhbc(}CsID5oud0ZWF->JJu_vYv2N zgc<_!$a=)FlyQNJ8b)Z1R}^?OdI1oO3w$I+*rC6L5YJ%IOjtoO;t-fs4jbc0(LlK9 zk>e>OiA-#Y6cw_)NiIMo-8_pnE0V^F3=cvP!l(b7vboHJa1)BavS%%)NkNS5acUJ| z=M@*^5k69lT8JE&P@rKalO$4$i*#pCnliESHE<%GifD9{2pM^5u^;)25JCFl%!)wt zld6PiOl3M#n%2~&H(i|Lvgpcs1|bPWK!|gKfSp?Y>Xyg)Rxi`#u8N3b9z|6bQ^=<+3!p0W};gEYEaEjPG<2L^RPY8@9PWQ;l7Q0x~f-*&`JCU9p z>r&DRTF)avfC#7rD_Ch^)1MWg<7;GL55_juu|G4Y12fVoL$2{O4Q0?kwh;!q6y%wh z-D*oMnhs0$0Y@N_z-D1jUD;h}20 z#!p6~bBSEdrdPij6})Jdid|JJJQLFoF?7TsD41ktW2FN_l5femmp7f^xY>MskvsyksUf89B~@Wt3ql$I4Opg(}|8QH@1I z8Ztu9Ajhs6}v!!%o9|bBid%D&$4zf^Ga_fGw)+6|U zP_Nisk#TsEQ?nK+!b#>Zr9A(sdH;KOa2L>TV7J`mFNb-|Wv)1$_Ru+2zH)Y#B}7yx zC8|w*>QdKL&oel$KRs9Ls63)f?Z7E(!T`fFug1;YJ>fHg3H$@O> zAn5cg&`aHpUM^!$2A5NQ0g2sUGA ztye7Ch>}$(1=71Z6$~NeEuaBKpcf+Zfi@!%5aiVqIq2b8kp`$_9NsCyrapaZw8UL0 zFd^{FWj}k`*WUKGpBxauuzM)8!OXmYp|G@Etn~R)r7l1XstAt|!?6lg zpkj3iSr0jmuL^IF$EyEoBuFOxY@lo;$hA=SaWzO(kZoiG8x(|qs2Vf+B&h#Z?SDUh zv#t=D<)cC;9SZ=H7;MM}w>psbn-ht7h((Esh0>aV;D;VLv4y#!wp%a=h>3Bi5cy#P z4}q(Em>~TVpwWY|eXx@zA`UjdiG9chc8C!-QM#q@foUK>RB=B)5j(Poh>n=S8pMkm ze4vzzsH-tSf%p*BA_V(u6>O-6-4O$$U_hLpmG~gu^(L!{e&Cgs`sZV1vrrj^GQH;Ug9!=nwgjhgA@Y zF{21DORt3>5BdLKL`Kvl?CZWp1P3&Dl#UBKiV%aCfDk!CziOEbh`_`W!6&1DobCBU z1-d)7q8avsfWHvHPyC&(D2fHVhpgEWD4YvPQ?$KeFFKLGb{d*l6bbD}MURMvxbTO- z0}jT32#E-vN;|kuY&u05MS?h)Xq=3eSUrmHo0$MA)$+Q@h%K==vBIFB2AGDpV2O&* z!jJ=^hFL(c7>c+s5Xjlaj0l2X^oWC7wmJ02e+0;Y6i5z&fDAx9U*SVrayDU!03=v} z-+K)R_yHvNfvai&ITMUy^9^>Q7D?ibe(6Wr_yLVviXvD@)#w+X`ky4I$k~ucmK2tL zImy__5Ptvg7eY|H+Gv20gvbs{g3sU%l61);5K5280G8~@rAWy~d6Ik>$ftzLsFcd7 zys3mVs+ojJm1rWbkuR!LoQ=pNdjd+S+z1l%%Ckhvv{cKrR2HlB6+b*noH$5N)H}8$ z9ETXVAEQc>NJ_i(%fAH7z!c1kaLez2ORp3dpmZEm8_dCR8ct(~fpEa7Jj}+l%*({g z%oNDN%rdNe%AkRWiYf@R)XZd|!Z?YG*elJ|WX;xe&DX>!&P0yNq)G@tl6%O9amWT} z=u6ndobua;1HnPxB+lYA&f`Q*#F5S8pv~lT&gX>A=#eSBd;%v9G|%%y&-7H!s1#4)AkX!L&-j$j`J~VKEUxw(j`y_B{p8R7^w0kU z(6+>~+4Rf+HP8b^&;(V`1$7Gi6b}7l&HPI7A(G-0-5&aDkRnZrP(HND{8AT-)^$i!L(Hzy$9p%v;6;Pd193()4>q89) zK!V=v4KRQP*Mkfs4V)i<1}i&CAEnYNwbB%o$nMb6A7G9iT8x(b4jb(a93__JLyh>b zwqTjC>asBma=VN;v4OkNIi=G&HP9!JvgydTgn$-UB7`m_Dj;o^Ga%A>GQ3t!?{(|NTOXOoL*Ipjd)gL1=nyD*R-rd!faNdSXO3>p=dph_2@2-SU!n# zQlaP$Cxw8+s}z-l6ue^%p3qic$pC%rw94St)KH0U{Q)K&*M()+hOIs4xGL+S7Gn$4 zW>Xe5poVZD4|(8Nj^&0z{Gm0_Sa9Kn2w;$o<=AI}0Fjl%G(`=l$cev7kQM)N8-4|@ zmGFp{&_opTmBCQQWMweZDm=cjr-vw>p%BKSpt2&+8;5n;r-j;Iv#zU3S7y~i;!xGy zVAbD1KJqY+^GFZuV-NR$kE*JV`^b-B@(BL$4*&rs)ku>l!3kh|K=vz&F|^qcu@H~2 z6(z|P*4TnF5nOlJ0@la?jO&MSkc?!k2m_Riu~??T$cAyii9Owt9_f-LLBR(Rzo_-x z&jnqanvNuRg6w$5s!a$yRYu_Z*70Q5;z%lLoriK!h;vcfjQF{XXqV)J0C)kKO-cxt zv01X32%;gps8b3=Q;kjNndYU3O<;|Jld+6bh&I~AS^-5I*;5L0iVXiqk=6~}@D<A2o_cgCgLJC;thfT>%tfF z1>x1*jjYv;tp$!;+9mPwrMJDdX~SJXJf_yLCzML5079f4jySyPO64^UL^>&y(yWm4 z7v=%7>%E;JKH@sI<2w$V6@nb|1&c2@SL1-<+>m15h+UtnR)zm?DyTZ-jF>7${65ui zH{KeomPm|SyH*1hu3U2sQ*f+Kwg*#K4Y!hHP#GAOQZOKvWAJ-lJZ9xqcIEMmhCM@F zeVZjfUgZppU*VWv?*gx(vEqy{)1@#k^jZyj0@@rrw~VUcGuGtR*a8iM=2UZ+@t;C`lKa3<)2HfYwsmg=~i44CCq<>nU6<=}v}D!yHXs5WV<=%&y% zZd2A@b)Ox^kRCg@Wo8O~{tl)c=zS%%jzeX7_UD6!>6rhP>7!bqQ+<)?fH387;wOIS z8;xk-;5kE1zJy3*q3fZddy%8lq8OCBpeU87A>Qan5RzVs)(e&)nG+uvJ+EP0KF!|# zNoBRF%d?1(o|fseM(c51q3H?(D66F)z{5WEJ!eJdV=2Dl6Ay|A=C$}`=YzhCy8MjS+t z{jxBNjzw%lM^ukUWW-6V#6AngxF{5VNdis0hsFPdCsUk^Ud%_C0O@@$M-9oO&gci2 z0hOcqL_f-iV|<9N=D2FU?fSNFaTPW&trS!}XNzT)hI~juo=E*xiir@fx@Bf`;+hkntPm@gDba`^<5XMDZUd@*+3#@(l9X*zqH0@+Nok;!JYc zSn?;Q@+!A-!Hn|QnDQ&<@-FvssLXQM*zzwY^D;N{+6(hDSMxPzbInZiHiz>#mvgjy z^EtQkJIC`ltn)nQ^FH_UmfQ0`7xY0VbmjjF^g>7UL|61wI`l<%^hbwu4QljAr}Rp9 z^eo*{F8!Y&hmA>B4I%IWV72s7Cv_{w(>!fo2nd7e_!Uo24PbZ&WDtelF7;Zs_4@8q zPz_avx0H*&&A;G*x*=xlzT7u zWa)x;I0kFa_>)I@r%mEN=5~m8=w<(bfKVWIVBiHJNco$``C=949wK-VHce2V_IIFy zoG1FCr&Gt-vzvDLoKqGbAa-8p0)aL9si%4x-Fe~Zd38mWP?~S>)`@k1``poTypEJ1E zdb!v4!Dsx&htK?`^_MqIVjp_PxBSb`R9Clmu73v=!2Hh#{VLV`(|~nqxA@RU{nVe) z(RT`6;Dt~aOVyYC*#}Y9r~TWY-IxCAxBmTn{_FqO{_W>f>gWFN2mcH8{_rRN@^{YcH~;ike>xxk^>_dG zw@mbh|M{o?HC&c8qfV`QHS5-{UyJ|!i!~%wHlShS&aHbl@7}(D0}n2Ixahx}K?b3Fn>h34&Ywe% zE`2)n>ekH?igx_t+|ND-Uk@*SJo)nG&!bPTo~_d)Pdd)d_&2m=`s?rG&#!+!|Nj2} zzXm~7PO%Y~LbYwT6LjLWd1ugz(b!jCi#Ot!qmDcB*rSgr)i#l5LXr5Rkw+q#q>@WAIo%Id$@rI4 zMAq1(l~-b!rIuTAX;zR0&Bca?BUag^nP;MzrkZQAX;61y(lsWTZPHn%op<7yCx8wW zL{&5f3e=RCMHT<4r=f=;ny8|So<3la@whT(!w7Z!@*lTXWsD*I$Djw%B8nUAEb0qn&oxOtYc3+i$}ybjd-` zUANtImyC7Xd-L75-+u!hxZr~mUbx|hPt5ia2d7nXMtQHyxa5;l9$vzgljZnAkZ*&z z=bwY#+vTBqrMW_!lb*WjtBW=|>q(iO5bCefUc2pYxlY&>TMVJm7Qg@A`$8+MuoVPH z$O(ZN%P%jHV-ReR&B3E_pe`Ak@!hqX3!5`up!15xZ;$1T(H=a zibn3(Q@=f?3|~L{FC77e|NsAQOxLzj~+uClF9a0-M;5bW8++i<^iBj$nv(m;)>$Sb{<%h`}#1VoVaG z;6yes0t;$TB@M_$F)(qE84RNsJt#>D7XSoaDB~TXP~rAE=fXb%vS8E5AvOwGNJ0?g z2QkbBG{69jZN$)3HR<77eh89T7;zz25Z+Ci@I*v_GL(oY;6a)&MTH!q9fknQ9nu&< zM%bYavYcfd#&iKLF60dvRAVsOm=HM1kt8Mb0W#ik3{gyhk5~&NGn<*OYTRRo22uZC zL9lU;YW#$fZn5M?Fo{2-2%;U`aLGB^0fnzXV3!FQV@q`D%9Grp7`Ipm4T@2W5sIXQ zU3dpFJ}8hCIy0aGO_wz#c@Qw`b3ItZ*&yjGmp$|ofH&+6IA?$A>10>~2G@!tR zKp+SiRS5Jhppgx*j|u90B^g)Z&Wu2BAv!1qF(!(TN)$sFHq}T8MWIK60Cb>29cs5A zi7JhVA)!9eW>8*1k0A^JllGuTEViQpde9?5si4Oz2J%BB6mhCmO-Mx#as{lS6;}{= z1^w#h4q05GBui|^DG?F`b>J1R}O+;N;0=&vBDum>!>YLDRtceursQ&|nN0#>|2s&X0v zJlr~qwib^ho=k@W7Ggz2nB$2VN#!aJ5`^@g1C;4_qVqPgfeYT@4HmrM93VRomBNw^ zb-3U=^-BjuFk%sOSTG&paM=lF1P%he;ARohSs5XA5p|%07q3^4nbve8I28tK3-a37 zF0-~OUNN#_Ct9&_f$@uO%a z6Efs6L4ba<;G_!TT9R;%b0gtIL`KSaP8pqJ9cCB^1j;!GkPMg(1G&Hjw^M-&dUydB zz$`&7d=NTkM1mDQh@A-%hYTJE4hc>WF68+U6xb7=AL;2kU^|eYvN+O`o)rXe7(;CA zl_1rCWDYw7lpOyAepw~R7N(lyG4jdGbLvG1VllWPpfh0D?yS>A}A34-7XThPIEPOw4x{9rgduz}ILGb8p~?UfRQ&5Wo3 zK^%bR1=v#uAW7|NK~h3qyrT;!=H8_1ZEsQer6XT}VGccXLmB^K;|rf&C{o}ji-JI) ze!`=5s*TL*=OSF;2a)wb7+#QA@R%iYbs_>eS}7*>wjh1YqCpOLj`9*Dm0bSF1-C7b z0sB`V5{$DzIMC*TSeqb}1*4j|?QNWc`@gU>$bjKsLVL~tB=MZ5yIU&|F61$VkCyGd zt8R5rL0}yBhz3F$!iE^`cBuqE%5M!qTq|2#AgXq5R||6Xi8p!Hs4fWoHo=ndb|de4 z??%YSyIxfu1QAa(2jL4p-$J075k_YSoXPB1ML-_%UUa!Yay}3Vwvv{0i1~wmKJ9l7 zM9_?geB=pCka`wlrwXw}F>(zyT&8)(+uL zEEp-j0L#l9!p!b=E`u(R{j#4CJr_s~>=_cAx?a;QfKTxg7Z?Pj>0SaVpqhL^3}pl) zNt5t}oKTdV+t~x!QQrc*g2OF91yGt`X2jAe%xEo3RnZ5g^cwEyNP= z9Jx6jBZyW;z~2I#TNlxvLgd_^?Vm!-fIXpr(ixfn`T!Ah0WiD+Fcbs=E?^W&A(kLi z?=1u*O$iSTUr`ub#My)Js6hST+Cazx2XG{#a+c^pg@$N^PR+8O`wd-*BlDO z$Q{H1L6J)65*%0$4R+o}-GN3lfIZa!NU)JDyq?o7Km*Jk5!l`o zYT_nZ$skeUL1aJ-6@l2 z>74v&M6>xIA}+w6Edu3L05b{%CbZs1^k3>tqKR$e)TP)r@?=j^$k%NHHcZ1caGGs& z#-){vH31)QwWB@E0zJ3`EW`qF85coZLH*E!EX0C4aFrR_!&FA)R8AMErNS%3LU%>w zE2M&zEr1H7LMyyN89vu5v_dKn6e%V2T!2w8mBpk#hf+^S>!~y^3K|o_Ef-IpX2qE1@#8Uub<3OC4PSTrCI_Go# zM-V{M3}M44Cek3`kai4QDf+|@T|rxArH5=mTiHV`K$TZQz;|M$EF_3j+0T2n-2x23 zd(!6@7K93jrCY@UCw+t*k`%`^Q4|bB8UQE)r9*;1fnXufIT!*A3d9oV<{jLDB6tx@ zUVvv}P#xH2xM66}5n@T^U(Eek{#h2z?VKW*CPACJ@?<})TuDwsX;{Qq{b*gz}ug~)}R_{r+TW9 zAnHyiDukpNAXb1bIb&n=fH2&`PU(O!aOx?i-f99jOv5T znPV*iWx1ws)X@RfXswh#2;<)R(n$6tY&Af6ByxQx%;%mO@>%Q`9zxwOH0<7Wy?7$K%%~*}q z=uN>Y?7}i^!#eE4LTvxUO6=PR?8I6u#2#$bB<#gg>+)tWn%7P2_CP3hmGmZB6{_OayJwD(%uT zElC`$OeAg7O6}BA?La(jOhj$fYVFnv?bX6W)>a4>ph56eDH6ae8%#q~{MtYyLGnPu z+rI5Ea_!vGEm$-JL^wo!A;g7{ElzmtOMvZ!K!7~VL*L4XILw0)(8M(SL*q8?Jsbof z{KG!%t>ZSXLDg;MYA#ST#eihtL=Z?;VD3%?E?n?VT0p=WgqJ}e!90iqNGQQPgafyN zL=rSEHi!Y*e(wK3K*QuBL<3w17+mh=5^wPiMVQA$Wqbrxgo)@P1@yLs7Ode|K!7-aLqd4N zJgC7@Y{Ng)kV=#<`U>y>zl3aTgn(RyayV~Mz%NlW6iH!}LTupls>B0BFzp@$_NqeH z5$9>fn=CjrCo`5MPYFmDh%iBY!7`;ISAYymyk zohgJ>RvN^3+K)T1rP|3tcVQ)3#phMQ+CXeod@eu_|8Ni=-1E^x0}yfjOqpD%f;S-U zJjlZskMaK+3`FbBt}2AXJczL>BuMp=aX2Kz52yk;u(23>0~T<{J?uk2Sgzwroj_EB z(AsYl6H0}vcaz0mWd%TB5be&aTL?$mVQE)O(*cv?e@Ia`*>Mnr% zy2JnKUgc96L>W@>KqwzAFTg=3v_LGhF2|2Q4FPer!bxDkJlror0J{vX9stQyTNIgfxYzTA?Z}JZR zgss^_ERPob9Pt8RoD{p^{3hQlb6`f-k5wB4{kQ`uJLO5J!aQv7L=Y}F6vSG$HNti9 zK^Vb2kOKx6#7!@RJyWhB|3j5zgZ~ypH01PABX-?hNQV5th5$4{T(Uqs^_)cYQrOxP z+ahM;;w((GSIhDUHry+UwPw@ZJ`O~wowZ4T!#wEmLA0(spb9n2gBi1~>mo!1u(AIe zrvzUsgkNXGPW$l=JwfB@bz&R0(9TGVAnqschN&!^c!NP8Zk1r~H6H{qH$HqlO5?6AkIOmNe#w)p%2O!$OZ=@%6!cD9`Se-1LP+^RgrPkEa~WEB zh9ks=Yk7H##A>&8ZNF|o$Tn>kMC(pEOc67Pi-elj^I;zZaR0;Z&UvX6d%N^T9Q#yE zgCu!+L9jVO>~#Oqv#DeI&<3rauy7(NFjOabgEzU8PZcXNgcdOLg;yoq(IZ1_Acl|o zq651?bT~=;02?d8OOJShm$*TQcnjw{K^Oty2K<{7w?afaK}>t7yLta2`SCPtM>rmo zf9rU*TfB`r3ZzI%dn|;4>%^Y7M4#(~uP4O2zm+W1g7p!^3J@1p#idnW2S z0mA`XIvn#wG_rpDmLq0tGK`?GV6!*pBJtvY% zRUCQ8e>z~L5`=XoZ2ypv$g@BBz$K^TkiObZ02 z8$_iKL`mQA==b{qoB=emu{>}?!6Tg8vrn`e_8&WLKaiR1TQ2_&OZGkZ@gi?Sm5jqb z++N-bf2XQC2+Kvq!>r&N4^%C_K?o5EBSexSMMEIL-D?E(8-LeuHWJ!}JQKnS6l4VPmFJZ=%Ig@5h zn>TUh)VY(VPB2M!ChR$sXi=j_ktS8Tlxb6^PoYMYI+bcwt5>mRwfHlrLakrHh7~)O zY+18s(WX_qmTgXn zfd>~pocQ9}HgzY*U7UGy=g*->mp+~PR-ij?H_Tq0dw1{O!G{+=-tF<4+ZUoIzn*=2 z_wV7ymoL#gP4x!v&)2`7e}Dh~0nDtvnerp3zyJ|UP{9QmY|z1@29)VQfhK&=!V59X zP{R!~j4-AOE96kb5lJl3#1qMaAfXi#(!d}VS%g3)4`I5^2OrX#2E`qD?9s;`fu!k) zXoxH_nlKD9(nzmhqVc8MfO!WQQ6?xT#2~TEQp^7>x#SUyXxIotOfjz;2m&I<98<=a zoOJ27E_6ZW9bl}~vCBL0%u~-j|NAlshcW;&r#4&Kj)-^OA;LgA`E1nDM3CoEjBni(y$F6Q! zM@L=v-FfeQBM4Na-OLPr5Wc0uPeM;lDsuPT`RAdJo+;!_%5H*C5XDh(>ACOT`|leL zJ4!_F-X8q((NAA}jHoZ^HeGlLMf?Be*RS9H`_FHmBoHme-~aysxI6uggnt1v-~kc1 zxB-f!fC+Tq10hJX1%{-75wze1F_^Cjf0Y;7{Xm`@FN{ejtEhhLKQlSge!F6 z3t>2}7RHcHnp7t8RH;pMD*BlERH;t&c~Pb6Rk2z+t7es} zUDexGy&6`rVhyZgHS7ObUshJMu9dACv}jx58rQU`RjzfltF7pISH14_QF-O-UjggG zw+5E5g>))iMP$4%}-R4{}q)WW&Yt%nL!0s(cjW0@t2oaBX#3OLXdDDB4^)>_oZ>YdW8jy=(VB#P%7)CLA01^m@B4zva z@rLx6rZBwf2SOebrT$ybu^4zFvuLnGu29;PIH4WsfQbgOYXR<5!<~r=Q zAt+wR1wPD>B`|`_9BDu>X3P*9>^&o8#sX8Sd*B`mz;wg=ssfh5@Z7*CUG6ePLKxNIL8lZfG~zQW69q3R8MKD4U1zEd8(vK1B zfDZOA{Zeco;2{4*EX~Y>4jfR#>c9aVFz^=O0=nzV6p#`2jv(S~-Xg-@gkkac?eR#k zKWJ%MAVQ)j&nAw`9$tagR$#dfYym#c9wct`O3ww?BnFXdAy|(gYS42aV7X>N%2fX# z!!qFg&`r4rzf-4ZJ>{l?X+XUhW zva1OOq6uIw=%OIIrtl%QE)E7_1G>u&&4dY3r2^28ARJ%;38LNnkJ20>?&@vZN9n#_0lui(!@X-oJ4i944 znyny?@f@D99p>;LvWrQgupQXYOsw$gO$R0d@f1%Zx`1pz@gU(tngV8Egr}fZuqKX67A}doN{bg` z5eI3}^d{0Cq>LbRvGriFAY#D{yy7E7<<>e3#N zuoRtpJk$Rd$G6#-`{p|LZLYaBmsqZwTkg5$mdstD+*7`>%`lhbo`l>gBq4+-5V{1WG3*@-0%wr^QyOmA8 z3W+6b?-JQ(hF}6kG7!)Ofocxsc2!n4HUmGl=G#czYsA4Ilo3~sZsEYo<3KzbGRSR1_`fiiK{BfWh>-F?Vg$Wf{G`Jxf@A**GDk~%3v z^KcW1r1h#tv>&jzY2CzV@h);>f`BQt7iq(y3!Gy9d&tQV(X$cd8B}W4opa0^Q=a6BawLz-jI@XE$17G!lsf_D) zgjZ5kdC@S>5ajVFa&I3lkU97LjukI~UWXOZ%fTrJ0wokMZ$S9gB@K^cLA?jr6kBRB~G@DnMEsXh~++Gq|OC3ay(5LUnqF3GJQ{T5kuaGj5gbzu2XN((}E z)F5sV&>np}D&!kFg*LzI)DyT0)4ro_7V$U?aWlC6oaW3|xx-VKL10+s(Ui1fbh8^s zcfCaJ&A)?`#eE|G-pqcDEXN4FxGLeBhU5y?W<($BWFbqLP5o<$uAl_KO`J0nPtS4O|F&2YHcl2kuHl}n^dF2ysYDYO;?}m3_(NL_KXRCdWAg8 zfP+JUeYO|$W%tIDEb2IJGJt--ej~GqLL+ZN89{_iP_=TQ70Dkq%S-a9b^1v_*0| zE^&K}{kl=eZ3VooeS7H^p2ygnS-M^F9vhqk|LJVp^oG0;3<%GV7b5?FDt{L|{`04= z%?dXHgSke*&)J7&SWi9#IV)py7JNvB51U66rU_d*_+xgTmV@tGY@z5Y_p z_QStHz}Uryo7tkwI*_V~RkuRXxZYzP0_>K&P(mnD5%9OX52o=An)~P**i{Nrw4NoO z#=r-H0n_ddY$_8{he&*ISEtjrLRF#2NSxDy9WRmJvxfsaliO_A38A@uJ?7L{J`#u* z$Ki4hc>UM+4YsVI%v~uMTS%h;yG~dCFbZRPL%(XjBK(QFXlZ5e%MaG#ey=C^(QVD~ z6Zw}#D;h(d%w07Y1*EzLikj`UKc_Q89kf{oh zuHiMxi-<@7B87@>sJktspz@ylEjV?Tf583VegPsDZ@s-UpYs!K1F+OOFTK&3=|Zvgrn$xNUm@^ua(+MQJEZTv_|Oh zOVY8ZybSkj8z%a=G&SczxLVnhrm{<(WqE4l&m9L}G?l-;FG<)buRAUkV7^p;{K~TF z)m3=K=bXEpO%+4@g#&7@r)>OIAkNV-L6$xOiBBGN3#V)M; z2>^TW3`(BJXk#aV1iX{b$>(#c7gN97ZL2y$Yk%7V1)a~NmLSGK03+aE6&}O_ovFH4 zTO6;TZDm>*k6+Cat3Jt{a#~;4vRCKD4OQqZ#!4DLSmVJ4&M`PEZm_WP^ZO=w1G{ph*e4qXL)Vg)hI=Z*1(#=$>&^XB?E^RoTV7<4@QE^i zo^&m7FtuG)6#dS>1sOnd7JPvomP6B>ElntZIvqgpoz~M36J*Mqs7}Rb#E6yaGQ=3q zAzXkG#&H-gLDZJVzBrAmlKEFjVfWw9;ZNpPPQTnaT8I~tRNR^D)v7g>duxburX zM~r_X31;hYPyR#l-$!`y&vd$tA(ojbkf(a|FIYrpeRam|lXCdljo>??|DAnPXrgo1 z8t*_Y^SUi-N>3>lB@R!WCnt{A>LX`c(36YHO5}MNOdo?=UPRekyWo%St*OkQQ5izM zLeWB@nZ?x>(8HIrNVgpUG{mrw>v#rbU%+LI|9FYKv^27$1e$0gp_H#TfStCY>Y(NG zrj?PvntXIU?Z$l6w;3ckPgH$nqV9`0dO<|zT`lWR0iC)2?<+g`sJ$CMM2ddU&d}=! zo+E^){f(iodcxU}*@VMMf+^KZ-s^XshWc z+3zfOMsRfc&3M|GEA&+oV*{QP~^V&q~iL=SZ;mUL+2a5%koH+a@z5ZOLYz8}0QB zp9^+Uj!L;o+NiAUHSa+COc7NaCf9W3a+~iRD0;77gSD@T_{zGk^Pq}6ztXv)ulEcV zdPH-{xs4)Hi?5`hjq3IIEYHQTye=PNd)ku6bHh{--HjXD!)k7Im6xdL(H znuRs`_fK{efPvH!h3lHnQVhbYbSYLaY-1@787s9+70dEL$58a#AM3&NIKQ%k@idr$ z^3_}^IKpTWJIjvQqAo}rmK-E#{%WAR8U-30Vc@k<06>=9QLI0zg~fZu~~ zS|<#;3Wg+6ufS{tFn4_$=>2gObsfib0GmWC^K1JNonN>M&#U(MnUAz+0ZVQVSr6?! zc+0K6dCspIedU9o+ENNq?ia(JzZcHg&`8{!-Y8Brciepb7+JuFIr*u*s^M8XAo!T(2Hd$>b63<%zgrzFQMB zBBcB+BsfWT;=AvJc}rq?v)P32V9Vd#nTs)Y*b85xIPa@my-8oDcvV1Q%_>Pw;WQxa z5s^XuXpzEu`)G+OS$VW9(3IW5iS=T6x}seLH$zNLQ$<%a6mP&%_6DQH@zP+^6ds?P zNJwgcfLNmDi`EkH$2THxU)?CaXwiiCqQCGBq&w(-Rfcofs!#3{iKfKPgSp%XBY|BD zQ{WtzO-uEB`Z$xF4F^xB*?CBo7BIFfV~Z<)V81`zSr_PtEsr+)$*#_$SVs+qNqsRK zGoik36~IoJ;}@$c$XI|peWQ^B{fMvu@{2kaUr-g0)(GCB=-ZHV@mM4e4Q`?i4kXfe z0%TabHYD26hIAr5T#Ov6kmo7jNHNO<-jhUyu{5yNuA8g@&$>~CvJNEpmgqDF*1x)$P%ZkD{##RN_+D*PBsNu2$k~C53|-cy$^V~ zVB{fiN{IfZ^7*s*{e$!ZmgiDe92$5UH!_9@y7VgKUVixP;Kc1&36jU7S^W~AR})Cj z&GnI;-fC!dde3*{us9h`$*NDHKABAwi|BLHVH$4p4VPjUaf?mOv!rga9Ox$Kmst8% zS*QquQ+-wp`mTC=2wi5(sU{xo5%8(JZ7 zQvd!E(MZ)5WFD9{f?U6D%Q4*8FQv1Zr!YiYjwxMkKc`$egq?mqq!eU>ocYeJ!E@XEYdOv<5@BFW9x=y$M=}J4g(-##EkH- zuWtP5o%nG4`;GYVdD2sBv1ADqCPM}wEI!kJ{tL}YNPqr~sP~Ah^`fRDWc{M6r25%l ze>QW0AD)-+!UpHT?2~5UoTv~zQJV4mr#(b((a|j4(3BNZ?S!3`MloEjMqX`zTFSWWI8ga7NMA~3!)4G2eIV-bO&tpH_$rnF=?w>hBpanm3S})@d&{5^UL7( z9IjFWRAV3)#3I2CC~PugmXBFkND9V&T6*&6q&$TtZ>FyOGq(7Yz?ao?&0I~(Z2@eT+{xU7Q1Rm%retOs$K z$ceHU_9cDZN?1)+eEiq&*Q6gtRM9k=>!(SXP|}lnK?kwtd4|^-)DE6zI|du*v|@ACd4E3kSFswM@iI zzsegjMbW~yZ}IC2a)K1w=bLw*T>H{MtSCXu=Y6iUvttfSm$Te?z(?Xj@Q5946TL5|TMFRLr*(c~ebc{{FV{-ntdbq#lo~Gh#^Uo~9 zkYvsqWUbuEqv45wBijUK&n1x=t{1fz^vrzkzeR#TwfLk-)z=GU+n@fb8FXlckuy%e zYlS|WMlJ6$Du}ZQ63Bt*X@Wd+x9ij6Qv2##{Q=~NIo`p&Qu@OLz@3zy zmAC_*_V9~J+F!4n2cX`Qp_i~RKRb9zJK4Az6&nd-)mc>L#~ZR;UW{Nk;_uW&;5DfQPGwhD=D|D zznQ5TXk!MA&^rnyk^`@#>e+y9UspNw|2jK z2^-yEpes)lk+1U0io16i?8trK2vK2g@PrB4IR*VDM(@*c8?y1*OYu<=f*Yi)dO&u4 zn3D&}0nW9b8qg-eCsKdslO()X$1h>Rmfkhsb6l*gyYi5vib?~ovLQ^*hhm6DIpUc0 z4wz=+M4kcRuW+H!@Su!>$TVzxhJAcigNN)(BZXzO%mH`^>G}IgR9tjaf)bJTE(W|5 z1uq1h3`taq5_8184+~7_8$yn%9q(o$%zd0Jpm6K#%k&a_{dBj}mXNMQLx0g9Zir_!ft>hQqZvJs!4$S!Kq+jmJd-M9O(WG)acpcQ;>l6G9vi5`l@?Ay#( zk)uifO=Y_oXQnVSx8-t0S3IoRz9<}hsG4vi4ErM7#H+@O+Gg?r%-OE%orlse;7tT$6O9={jucq*CHTUA z-h1!%h?Mon$;gK#oUe3(ZxF!xa1tyPJTjO*AY<=Lo%*I_S@)pMh!-!R72U{8?LIQ~#WX8@E z=CmQ|jm!6~;{1~lIUFR2aV-EU4Hw^MA0vjcDYAy`LtF?jYc5fteG=`l#A9Xvy+)?8 z1WE30BYDK$?QXT8X9xJ+hHQrlsBb@3V38|zGcKqnZk`%_i>mZVG5H}Q+}fJK_AQXT zwz#(ukn!ze+CG5eG38t-pLYS3RwK#b6H}ndu4!~14lGQP@_}0x^76yAQwjy93$02n z9P<_3F)ETcX5XR|wTr`5nxLjtK!E_@B!@vjDoM3CZ;PC2vsAyCqOCOrClOAB&P_?}`iN94?4tQ2+uTu17BNy{b`r zRh!@;dj;wTpm!x){%I#ApY|$o4P68D@S;^{&W7XopDhxT|p*!r+E5VZW zV3^#T;`y@<;FqihoxFy9$)?W5A_H!R&JyHjK-V=&S|FvQ6~Mz`CDHlB)bLym!9GvG zJbU*Dyq^f!uiQVz{J#GtA6WmY>doo#n<#gEI;Scc1M_vJFI8;Y)^PP|L^Ufa>bTOZ&$}cM7a)3!|1`VdwkE*b(oyPCPF%EC=x%6ADeZukJ+s)kZ^i{QYgA70+k zdK;dAx%S8ymg*Sb_q}VP(*_S$xgcn$@avNTyyFrDYY$+1jAt9gIA(B3D!7_^YBc9G zf6kr#EF9#iO-z8ndSh3bW9VAKA;1-xa!esew+h6)+FM#Gs)X|x&OpEj;1XFhtO{g6 z06S%aI~`%ELH^h`#Rbat(P`r9e@*QOxA=}{?kGV2svVJb7vE|WOfU^3< zv5^OJ6R+#`Va(#c*%b;wyNfM@tUyzOTo|s=lrWg5H^2UHe(T}fp3uU5DQ2`Rjc)>WA}qXu{jj1j zzoK=vf@7Oh6JFK3v1$;xYM8&8iCs0GUo}5lwGdvjO2(RMtzC;;v(I01{ICYLT)Td@ zMi5?i(^?nXUGs=s_sL(s^XPc@bgIAX580>0!Mf_Oysv?EMl$v6v9;nh3L>`~^0%AvSN7r%*v+5howoU_Zq4NVz2CcQGZQ~tT1gOgiRR?z{J-ieG(^#1ZJ(_vF%@_1USP-h+ku*3BBzziy6}*}n0boBr*a_S|*g zh4ajz|7>IEk1XiYm2)n;EUO}5n zosT44=1=bZVu^w!bgdhuAj27NOa2o3eCWgHLB6`MK#KynWFN(9+$OEU?(2zgx*MSM< z6IZZlkqVgZ7H$Km#uHMXm-=Pj(PeTuHV>2=(W zx8MIhbPCWMPGhx5j8TS?N=55N17<@1IESx5s?~J*Ym;Zm1%7u14C*rfxDe@hu(r@v z!hjm)*!is*g}X9vh9sI5?w0VF(&~Ek_ba2R1ogus_mt2ztVf!O%HP$?R}AiXW;uoN z>1VoR-Sf)v<+hqnHQ&njhsVAT>**u>YQCsA`Mn*v7P0ek$m^ef!%F>>f8%!jzuiZhT@iOa{0pXhW^lq?r!yLw?u)7;1ok;Uf8_rB%* z%KJm3{W|)rxmT9)tRhbEJ6=Bm_C)`PCn%;@4g#{+>(?C|Vw2K)&ajs*qO&2H^v_j~ z>xTvXMV%pSzzd6*K}O3|j+#Pkp*?lR|9U|p!?>w7eYzbB2BsLDXg4n1aHjL*@_=f% zM{_Z!jE5U%xBF`fr3b4>NwGjykzocMv37k$_<#mDl%DQt7Xt5Gsx7za$N>XoP`?Ji30tKZ!DEy16 zUu=V8zyC{y`&W1;t~L(5XI7KO_;(p!Ni?z+& z26dNzENS$iU~8cbLn?hm+m|4pR@nFG9{R0TsE^KDHc=#%E_<)fM-jv(S`JXYNJwGE z{d`C_MHDJ(q^cq*9Gw7HT@}M5d1G+OiHwKlj>FR{njWdp@9|rLo5}V)WZ}brZt6AM zdvZy;aMfOkCYZ^B#KGnMT)BtIexJ$6%@4Xq3s{qNjBkuTX9!R+&>wvYXgv6>AT@i< zkQD^cMJ|)YG@)DpciFPaR|MBv7j@;Upa!x@Y^EiJiwPA2i67~VMv^;0fT^5 z$93wZ6mQSl!P@Q;$|%`{0Pzgkb;+qxx$AbwII~h0NKun1huHh2-$its?atADZfUC{ z&>#JlDZlyLkY@H*)UfXX`OCxBTRn65@U1VT>j4kh;^{=!2L*hZRGbG_0eAzzSNISK z9w^o0cgG}!T}O`r-$8}Vlaj*K>^el{r(2FYgspdiV^2d$U*530{EJPmkmdAtV$AR5 zXs$z~f`p;$MsKQU?jt1LU;(G`%0=`Y-RGa&HF$F;5Aq2wT9CLd&~wXtNuIz)FVU05 zt^q4J4nx{_=@t7~COP3e=<#|aePnCmT`IXF_=S=?LO(2D_V3Pgaegs zmp)?zZ3sS{sDfUiZmZDRQdtVdL7U4rx#(+jLw#g>caC!LNE7R$dfg9@HfMTNji*mP zsvg?dDzI$9pgs%CagcaR$J0lpU$_rXSiJP+anmi*Y7wHIXh=uKc2Jx75WN<$^8ZGcD z4JSv}rAkIfo3aBh2IObXJqZdVQc@k`)K=?}3D8PhMLCpAQF_Yh-O(B|XG;ZJGH{Yw z&*s~h4~?BxMc*X8B8V47mo_9kP=OZx&e?@Dqi4_j{x*HpRR17cGAp=rlm1c)+dmGm z4;THrBVKkd(0bWc8A^9}JsA4BK)S(;95*Or2zia^sx5NBRFdlRB?bNBFG>np6qslR zmZp-YY>@Y6=H___E!=DOlSdO?%P{lK6bDI%JNH1)iBDz_dRX}%jl6lm(SRE>e2srV z*wn&!BMK-r&V|53huVlcSorb%*RDtEVkR_qk z@Q5A%i##_kCpcbMc>A%!B3ssj&Il*t|Jk@mtCIR*~KqkU}$IQ821?Rx0rfbf6r9SmR2>FB4A zG6OHr9&7U@&qpA5=qh&FWyn4S4gl^a%o^ZP8Hk@&h_1#}%Zij}fY{!9Dp6K!?bsp5a4RH5bCzwLR#2~Y{dOHxYJi(?IcW9{Hu4P@d+?^_=si*ndjEfRus zT>$DX6ZMB~Fh;M{Z_hYUZLO!ZLH!6oX_=wAuLVq?E z>~LlUV@33E;Cy3-pH2WMjG}`D>n*;yjRWf*e zq``a{pXZ7;*>XPO5v34ACJkt|fnr8XWUAOC-xXZ}a-hbQ78xkFkFH%p3^a|3^koQX z&1Uf_`>8;Q9FiTK?tU;@3#kGOFm;MzL;w*`tbMspc{HiGqcmLtY7Y{UrIr?Bt}$b8 zO1G0rNj2*7h69a=HQ)#sZsi%U{uIk(SXmJQvkLG z0IK=(onf1oS1S>Iu$j>LCa-h-_Al&7O|(6^iRPijk#aS3Q<|eFJ*lYS3@1L577x0 zTeSs+Zh&s=#Wa+dbeQ%P!@eZ6nsokW+S4J>RYJ81h`W+#+Sg~=_{8+@jV+n4#>6uR}@d|&XY$zO8{ z^y-1>)!(zM!;Hxp{~j)4`yOHj25G=gNd+$Kh#GkJYtcM{X`j;XK0Z}1n7TadT3;ApUm4{PLr=58X4zn#Q%j^RRO&vJ)lx>bBVM4B@rjZ~tUd5A z1!_VZMCMsZI}>%u)LO^O0&;^-3?UASQi^)wx}4CvM240GDRPjk++w@@G)TUdD)n$s zI?tN%s}i-KertNzAOUi@&p>N!gzmfA=|cMs+5`KHKFm{*>p|;9HlkOy;@!KH2%67mC+R1DXJQQ)l2Xp3Jroy zkk@Xn^{ZPq%{>+7T6xL-)g~wW8fCJPg3!HdFC3ilA#M_A+ygc%0KeV7_Me%#h8eGK zaR*;#z1MHXkg>~8ouCtevQK;=ga;NTu<`#MOs*(5lBwKR%aRGG3F1yX$-kCt3$^x9 zfFeroQlMM~Bq8ds5Yax9wZGw2ePeN^bZxw2r&4fU{KK8m7hPNb!XyEEAJC=^YjMWr+d{3YqUu{Gw9e9<<(cH?Ip)b|E~a3UK3~Hn=$^E za*U;~8Dp3}g?yc&V6KqJ6ET@1m3cD*HjnQw@fzM6Q@%X>6zh~@Pa-XsXtLNSdd^Tv zW9~!WB~Cgv`Oh|8%2vLa0UL7KY#ROWdg{qu*F;%dr@DQd#l=q#ow|jbhr~V?W;;Cp zbUkN7Sh58gHV0++3LMUxi_@RGWa(VGSKaxR>gR7?^xSz7Vl@-WHS3w6K$$sz*HRBG z8d-0AGJpW@UJ|Ve=ROAN?lIoT+aMy2^&K3dpj;bVZxUqmsBVLWKMt_LQmx;Ad!oU z{)Rz}%~iT(@e8*rXRJL(JtMo8E6=qduF81s+pc`; z1H3Qd5ob(a+ZZv#*qemti`0eJM?fFUaGnE5!oG)3qU5mSt2n(|V(HS8hNaBx0%aHl zM!vb+mjjlKVX%I%*?sDI6pm8%rT2vm$`1kt?cf#!Z-)m2@w~!=qIR z@^3?e{xQ9SZHeN0)0tU<@mK)1xn*r-Vc z9~hlaDZQyMBL+qni-Ey*X(@{N!e;a<7kA?Tr%;u}MXD6YXE1@abR`;tO-M8>AQDwm zR-zH4(G{p#q#PwlLLKVKAmEj@=SeW2{)vC~x9r&h>#AwB1t`ejkKy?aHQSm^z~KyP zptX2Mi;eeI zd$WiB;@P*1e{oGpjDDDv3MouXfg0tN59L$OGoqoG3RS&8+szAnJq%#ODQy=a@#v76 zY|i*FOp?u*%3ki}do6>9V|b)YnE!VRqx{mdy^5fX$DAb{AsB{NN2H6pg9SarsL5|J zt@Kf6P{r7dkWE^gVi<~Ku@SxTEml7M0deaUp&@=<@wrshL#^`kajKgzbxN@+uY%}J zFZx=SvDyo|ygW~mDiTfDwB@sklOp4*uXD?L2c5+u5%{=09CeWBAXl81n=gvFg+6s# z=r|9cWEEv0!~U^$OJtRJQ7N~nEK=k%h5nZk&=1==!#gjkniX_WnELh%?^Dzh zTS{C?F8ZbgJqo7oT%(>>g9LY~dT(*ek+imP3c7V$x6ul{v(0bo!EnepAOB8Dk>afL zIuu5eaO_q6e2aV{-&8^;;fj`s#)3jyyLA_zgMU0WZbptS-?4C_`cK}vM(^$?1r?d3 zFOy&Kw?O#sc|%)cN%AW@jzH8&}XHKQidaQ*UkrL=t1g3jB-C;yAsjVhs#YM{beSpyxAwXoeO44P#PvtjNTE zR1bYLf$rk`{?mT?sQe(zI)fF@pdfE>YZsMia4p`Xg{jI=%_oDkfG&1sZ7B=0aE%&m zYA9A;9&$fg`_8U@K{P9%T)$^Wd!UAu8tqE+xd)%XS?Q~`9;`?WQj@$cOgnE9 zeyQ~YrwBuBbPLtqbZTn1KnNg8Z8YiMFXwvwpyiN|X?#j7An`vs6oqKE;CX|G8hT4I zHe7PjWIrlA`0zt|Nhoy-=Ke8u=`urnpaf$NS&=eGyu#9RMet9Fx}4rdSa55e73IPc z&_^<{LJu1kGTC9^7pDy488Bwh#n1)vQl4o+{U&4mv-hK5;iNa7zz2b($6F8V?~n&Q z6!w-Qs{$x@4k8xg0*{u(*ndU<;IZBeY_w&6B-95M9o zS_$k4jB41l{SYTO;ZeH#EeeP7ncOFN@551Bk%Oxbpns!U8HR5hnHkXTQAD7Z{xIZ8 zhReDTVFTyCoZ}*pM^P5(7h&P#D}VhhcA^oWyM_^UF8|6-{SD)yb-c?}Cs(epOBazt z_ymD!J<>0x|Fy6iLjXf%F)qtuD9{F^08hOeX$Lv10 zU01K$dN>*8KM?|hiaOM;^yX9$cYY3S&$H$Sq@lnFOof0L zIApU|7e11~e@;i}@kok4ZI?S^@{ve3NncnVdvsA$fHKL0+xYWn1*Bj^uah0S7pL?1 zJD0R_W7;~%kJeRKad=0hR}%V(g%Vq}fP4HefaAoKW4cv@<)yy<(bYbj0<@Z^`Oigu z>(~DXOf1n=Jve{p4^P<9r){g~^PBj!dH}Sg`Tn1-8k3)_#rj}g1%68lxF}Y38&g!A zLMLhvx{1kgS7j?!=cWgFQG$T!tx5AN6#=eD*G^va4BRJfh$G9?;u`Y1z3VD#7;wVX z5mn<#;)N=qdK%ceneL*~c@T{ab88`jxRP1^&{ZrQO%*nNBjw$lMY=d8GMm}~dQMD1 zY5F?mt}}mU!q+|Zy=&FiO_gS6?v7{?flOE=3Bn(aBr{4kAfs8;j*t|%F%}iW?HG=V z<-65TNH)@=qel!;rQ8gdNNx0}p{mplZ$Tz-SCsttZ#oCXY5n4dAhuz)M{79C$EY2I zm7VHNNipdGtaPLw&U9hQTonR|hnkqETu!;Xb7EL<1sgLu;4SW~pQ1!u#DgX2GU;W+$9#;((ODy6!_C5t}R_Ne=NRR!`ykGqgC zGz!oSWfHS20hMt};tfvUO60_>m%=>f8EKR!<=>p&IeYA~f}ePpT3+jhHg5H{h41lo z8@?)h*u~}AERVAf4#=?M^?JjxDr3F4l(BV})YePA4|>>|i~FeHCTm?Nrz2$2;VOy1 zzmpb|GaKaqBbvU+&G@=DxH{R1cS1!A*nZ|6Uu*?3Yhcy!8D*L=pCV&Qi;6Gg zHv$Ai4LD+mSkKVI~OkK8=BJkJnZt7`Sjt1V=NvVc69pgTcDK_ zrBY{>7)_Wiu_k_yS5LP*#V$*l_RA+xKCp%881eph+Vv2|KKo!$^?QJ4LJNZvzSf+F zZ#AV`AP3D9Z<10K3SSp?ua*PYFDd&A{CN9kJTx3nfvEa=2wL906D*(?HofwiN%@NB zZOz|fPEneNQ@$TH|AfUD_IPXS z>4x^g!VzCNU*7f$=>8s+i{aAecR0ZD?fC$$%@I>*YjUmbbDb03=j4)NA#((jD@X;F z157c2wi(TFDXM%7Ot@hD&rv7e>%|K_I)RmqM@Bu~lCPF-Ml0_dX&)B0bLW8lVFA|o z56ZB-BRNluEL8mrUv|Zl)+gzcK5Z8OqNh}(#CTYLVMl=)tQh49#K3Xiuy@1>SsnPb zX7oGgGS&(5g6+o1vOiBj#R6O}tPY)DM_uD1VI;5xGCdrNxHz>*5~f4|S{p!C%PRPm za7`>}v#S*55o)3lde3Zwr5mc4lZZ4iTzStE&k6lC^oVG4^#}BT|L5XR2==qSf*-1Y zzAuh`PF-Bux~$i>rY5uUzvnSJB^T1D)F{EESh@2{lw9}d@egYRSC$PlX0cB&bjp(M z)T#tG=u*N-7SOgEqE=+x9g3_E;{bf-b4im+0AiRp#r zZmf=d-K#NiUm8=OxAsBVKxDzgI0#?SVn$H0IES8GUb_?iKf`y(TRT$!X1yKHT$RPi z3Gs~lWKG5Lp@+R>+-l(`jx5|0{hlrRRQ1iOTEvrXhuB2dlE)P~D;4;do1F&UJcITQBP~_ z4!A(Q#w_!kZPa*vIh^ZA|tF{(%%Uxjids_t)F@`{wz-y zn;xV%plDC8oelB4XdbMi`@F;kA4bRA$dd57i8dcqv`mB9Aa6Ep$fmuTU8^a=&Bo^n zwTh>#1=PqpyZ5Eu?g`s)3sl==d;iI5;$*(=VthmFHAab@f#Ha-!Qsd$ppK9_E|_BYpS_g zsB*t_$6LhpZ}gqD^^m<45wt1OdA~Yiaauw#5q`RuTQgPrunf8Q-_sFjyAyJH=Sfpt zVgPNcaduQuOxz3Qpdsw+47T_QZ=t5GJA zGZ<|t9q~Ou{bafFxrFC0P-)Ww;9^ee6NP|KcFk`j0$LlCc2&VJX36$#(^zHXrHVNw z65AEe|H7VxD%%TwX~{3|0R9YZPp;Dbb3l!R3@s!AS3i2Nc}y`~SOhW*KNP)G+WiKS z{>*f_9_0kfD{uy=i*Oesk*l9U3cc7skV-DsQmpAdlkeAYJ+7jd3u+EFWzq>23eR@( zIXaE#Owp{$w3(~Ex8M0O)Y@sYrU#U`i95$2rwq-ZGwuf(+9Z zMih#ICf9zs)BpFn{hse~7BfpDa(OiM>ZMhp!sUF+{%==#S6}6M8M7xSumB+sHmbGM zhSMv5Jy)7DxM~5vg4}a`2S%B4&(wE?=ZO-2+D=?nBP0K-2Qc6Yi7GNw`f!S33{nXv zDc>_Q$6=OH@<7N73wkJco7Y$LvVf(wP1BdDodGY{tb`x`^T~`yK~Fbi!$|L1qBulF zaGpq)qd4s?#?jtyr(&`E&!-l-JsEYR zMXLUMaHacjaTAwi9hY_+Im*_9&Udbac}}5TR3B7!P4xukhS7_+EB^9LDNpgIp>mM( zWZk|YnYjrh13JmF93g5Q_fx0!58Y?2MnN3k6_@FcwrgjlA4SgK#8<7F+5uKKMer$B z3c1`wVwx0VD$`BpkxK=1T1c<~fnqdwM5I!Q^SE4g0it2&V9rCzWNU!)n|pZ=kFKg0 z=&IU(s@?CIYP18E(V@?wmbC>quFtM!=eF5)6tX=nM3;q)+=s&f`JCKYVS2f`9{S^# zE9M3?EQYhe+J2u@lpVBl;}`Qdmrzq?8y(uKbSi$jOh%N(RIu*%4qmniXZR5B{HN=9 zirqO(&c3#^6dG&` z0uZ{&hPvi#jPHFx54H))#?>IEe}8QgG@8I6yU<_pLJhOO?+slrhQI#qCM2612?tAs z!I3-t!8>T7Ny~%5T%1pi4#HhgVx>P6F7%xK$6l@ku%KC%j2Qgw5ko9!r7n)A79?epdi1WTA#`9E{V9i4 z*0hd_M)YOmQWcFGx-iC$5bjj@Wu))N$0O|E zg9r2WcdFos*OHb%;5LCuh`C<0h}*oZ96(w5iS2jY<=6Qlhjccp>FI<|!m&%aS$)cCf1g814!Z)%XV2OA8uO<87)Jmc`|D*4t=25sv z=acGR4>4l)fWasPe1hYsLOhtZg&CIo-SCc7gGQbKRG(bs*eD_6aPX?0kGL*0%za-< z4-(J{`ELKuzcqAO58{VAvh9gg{6B_t?|%TYKuy0niSOA}h>obAU?_lmXkBbTd?jd! z*2Rf7$c*B|@*HPf^b38|(?>w3kNzl-2C0x@k3;_2dveHjHXzM(q(G!yI%MdO0x4!l zkw6?@dqinKHh?e`16eUe0}Mkk^uUb#13zG?nVu<{rm31DNRg7*k#0zmGM$ssM34;A znx-jZgqrLy+?_6+mKFmg0Nj=aYF!LbRsZ%Wq9&@ME~-DaY1e7znstvMB?~NSq>Rq$(X0AVN2kgAaz?vNESg)xjOa z;v1l7wuY;?jw`vAtC`MfMAoXgt}DB?tGm7{yvD1%(geEN$g{#}w9c!(?km6ctH1s$ zz+zavI%~dO$h`(E!X~W3E-b?~ti$S6c1G;OPAtV%ti@g|#xm@{y2!z1NXKR@$cC)Q zjx5QR>~n4`w5qGgt}M&8tjoSE%>P~(%Hpfa#;ncWEY9Yv&hBi$%&dldticv6&kilo z7Ol}9ZOi(s#|mwQ04>r!E!0M>)J`qDDlLXMZPPL>)ov}rmr8g zZjU<1taYx!NW?zqE;Nkg^b`RkGR2BW$nz#e)5tDdN=N`}i2oi81bi!Yq0}P8LGaqg z2w)n9jA}7pf_)$X;^Kri%!3*T$Oo^1g$*zrMsI}l3o+p1^|mm={y>Vb!4m{Q5b#SW~9u#pIC`1PoF&^XrAjGeMxbA~!g$`p+10V#}Q4cl% zmkpJfgADLn5K%Tv12#m^guDguwEKwDQ4V1{>FzBO%{_ zP?FA7$bta~@^-L7Ai+F{0|XATj1-;mF0wSgtA~`blZ=n}T(OIM@7rp!fO<28=npzn zDXS)k5Viwl*@XtMr$BsiD39_J&oA6EM6+gqEz?#KR2{+8JmeDdLc~BL$bI%Sfhg!j<3xX!w0quK5!ke! zK=ePXI&{Nl2tr!Z z#2~0cA_&B^n!}Pr6VIr_lNLk}te}zD=|H%%eTcFX7l=tb0W_3hKUAetG|Jt~1x(Ck z9~!U~yH_Z%0B#gWY=45P4u}DQ5>4YJ%pZ6!l57H13?6PrAr~PW8SeNL{%D8K2f4o)XA=g zx~~s)N!t+|taoF)0sFz?HX0I1yfJLXBEGMVd<#T2m4No3sA8zY7`zOn5Hiyh3- zXL6<;#p3yeT20%<8c+i@gu^_5gT-4sDzHQ!tAad$!zxfiA2YL`sKP36gNVNm1piRO zJdlGoj6B9SZ-9u(u{Vw1ghYQBdub0kL1e(<;dmKBA_Od+t?M>v6@;=g`;Ujp7n(%$ zlDn-ZrKUi@tXIR0Z^JbF5&~khQc5}4x2lE#N)nt17_j{KJVZ82@|Hhjmp90hqyx%8 zmd{LTixdeB3Pg(GgaG+WAk5?f=(%0+c|8BawryS;0#u8989~?+knKcI`~*rodsARF zJnRML!^45_GebB;J7t!t=acTWk4bpVqu>JsG=NvsN!g>s|Vwa`FRxH#;+x|e{zEgh+Tet;W#C}K%2)sO6aQ|XP`3b}? z^3QtBcdKl`$0b!F?O7zfw70Add2kZ*5rhL+@B-ih^8^Su%mXqPgfcI4APWQ*h`15Z zgfat!xCH|V4n#9A9E5^MA{2D^aKR6M|G*Fo((fNMf^7c%>z8C81Z*8M6wKyP3_%EA z6cQY{?*~C>9!rMASdCy3jQ@&2)bxN zDj1N6!~P)57_4K+W1X~XXQrS7b?u@Q+G_N2nb8A&>qqrOb}e ztSTSK?;rUE)iQ1sj?-cGeqE2Mf7n1cV1mB05sc=sDuUSKX&{dL>FT6$;`_%R!kYW1 zzo!0~=Arta!jGcfASCFgf2^D7p8#|6C@ne|iKC!6PAupGMi{9evqczT;vp9|fXYM{ zb!5bj5gcNI5k(xTgON8LdV`TVtTGYBf{f&c&d5plhadV1(5Knv>d z!;VDsP0^7Qy|2m|uDcY|Of}t<(@s786x2{f9knaI40Di>X!^`czaI?SRIyPdlhry= z2N~_5blQQUAagELN!Qp4iUL=ty7{#r4J>;&U`q!a=In1`82W#CIEh3F12uURg0@99$h=ij?Ms9>C$3jTDsT}-heEbW#+nJ@z(v=9F7n-i8mMxHudtX09RI7lnP(M;jL@>^r`3Q;6@K_HSBBq!gNFAK; z!VNzh@x&EhoN=`HA_O^C2~jB;$O&?l&P!tzbym)64fR+-9D=~IAPPdHok0jXq#Z*b zGNg5XEj!1Y+G{_@GS`~54L7bc&(k#sCL-)Ra|i17UXS)!o_UP&&1t87peZ_2bRm-X zO^gScN$rO)YH6H*?p%sOm7u|9n|t$C+Aa-B`$_N4n7byaSA#{<*3SuK1 zt%x8MK+=o~;z2rqEJ+aA8AKr9qD6!dgfdcDLFS;NIjrm(=2(qAnX zARMN`lZ^otia;kA5$A;g48G~dJO`4CVqk)hX;tf5+1ggOzSVGfaTq~Tr4Uych7EaT zL#psfR=PYARFMpbqyuyEx7QbOc3?MMwoP*(`Ays|6M@*TmDBOiqf z&|bUjELhuG*UloE+PNM-2U5pt+Rb~~Y^wMMLOwaA$2Iz-U_oaa z+JS_jg2f%({uV%;gjpqv0`w+61*F<98g~K6CGH!!O4SinE$vpy*giDMi?&(J>Oknm-Q{|B0YyMhN02hwg5;4BaFy|lXh(;Jjm&n5S1;{`qtp8j9`zgU1dB~W$l{rSIt5RB|9qCv=AUp{bVlmlR?FhtW zX~Vl{kp&~=BZ#$#D;zO6mwL$SCx*i!HWx!inhsHyLq;Oi1$=8O7}+Lo7vNhEPs%rO zTmZ+m0>7zF*q4)vn>%qk&F~bYY<2o@bp>tc%Ylt6C5Gq5l1r8mB#8-2Xz4(JbO*5b zw;=3w$fsXakR=3Z0V-aYZ_Fnrbenkq}X1u=}g6f z5gu*oGLuFk+}w=}I_O_qy5LZg;;MF%aWVOw{gBc0pkS+@(|W^cV|Rp8Z=Hs{_$F&-bJkA`--9T$wK; z%-fY)pK#U$QISRqA|vtcP^3aSA+Ny#B)J!47=iOj)*5_YC_1ExPn<`RlQ@r|jt&~r zg9yjD679Ub^J{$eSIPG*)uj|Yd)sc~Qx~A=kYpX0h<*rwi;*;VpC0w8SN-bS{RG3b zU6R3$Cb1cI1B9qF)eL2$=9%s>Tot%M4d(;=({SilTiy7*Qy z4(2(Hc_N3jiMVIEPeDIyAARz{RR;|QLKOic!>^ufXPXV!pQL+u4*8zDS-zuy3j!yJ z`sd#X751u`s-|uVDzKm-3L*-fD0vugV!{kL zzQAD|kN;fA&o}nLVf3v}*drevV9n8TMapxQ!V*0G2`o_X}{sAAdA+^4bw0`O9Hlic;0e$Xa zt{@<__91JMIA+uwfh~LK{3K<=_S*_+cBi0X;rq&8Tgc=#S>gr+<(UEBax> zuL5?{OsZQGJ{u5BcwN^p6_Tr)YLU%pAglObQOXLxX~(4(i~e7y%-H zB%|hl4q}ENTE=C@i|&HZMPv{vUa}76ASi#thFa1NWJCuSKt}9<4&s0gbZFFssPwwR zOPEF#R)HJHWFQXAArfpklmHd3Ql`X#8dO0Q&OjyPK_0we6;#0+5-c2|D7DCu4eaM0 z#vvc*FqaaD{3!4k*#E>i^MC?kKVXbQ5IHh@SL z;STOV5p-xubY{GQBq?`rM|=jNbYv0gz$e!$Xtv@4R%(PEB1a?2COc?FlLQDCz^rbe zDf;r9N2YmCy2nzy!APLAy-{cdCOf?Ar zQE`gkQO}|QOjSHXq6m_pHBWWI*ibzu#@wJH2yhj;PPHve6;p>b33~M`AmCOftO39v zihyPjjPM9u1c_EqJTHI)T97PMWC^cz0}xGHxm6`LfCDao2q9ty04LqJ0s@TSSm^=+ zR=^01Ks=KGHX}k;)k5F=idG%$SKT5z_`zHV;pvP9aCl%VZs|}P*8gE27GfioEEaWB z8ud~v)^MO;G-`D%I`ttwRW58xVn^1kRHQ{0zyWZkQ+h^Jq+%EZjAS`wB&c%)m6b?~ z!AKD%R%4cDd)8-v)~zUZHh1#T-44(FBW2r7O03%Ki zXt(xoh@?gbV!qf;Q#=TRT6Pd&mTM7XUd-tsZUJYDQG&=ZZReJ5>(*{VMQCr2Xzjvi zL*?EyzzlTd_z+_Z`oM4vR}UV-1P<45_ds4(;{NVdazVv|6ak1JfC-QiQWqcwUBqWv zRv2ypZYMV_mSP{|=Cp3YAu1tsk2GFM7j|P;c4xON^43vFrT=e1kN zmUf3XEF55^a?*!1rH6FnWQmup2vd3BvrnCudaKuZtJiifR(R)} zK*z~JuNQsOVxj8b4(fmo-hf;og9++@DRC`**$NDRaUbqs8>V4O^WR~Uv7gN82{ zh>zHbpBRdxSc<2ZYm*p(f0&B1Sc|uqi@Vs1Pt%I|w*QIUVu`=ljL#U2(^!qy7&5}R zgvYp8;h2r*n2zh%j_=rv-I#mjcrD5pkN+5u16hy<8Hw}NfcaQ0{FsmznUNdWkso<> z^>~I6IV}`Jy|HLW0ENDt=+(151E!d~wp3D{s7paEKG=n1H&2s9ZQluq?V zfC;EIaUdY^1{e&WAz>g;#2eu8m0jZIQfD}f>V5;nlpMY zmg5PkSylNH4BjOP!r)MTU@y1?0>EId%9Agqfel7W4A@}AQd*-kS|w_FqsM}#YkDzg z`dxfFByc*U?`xn7+B%9rsQ1Fckh-Q(cP~EY3x@jViU5_NVWk%!oX5GC(>M0~A~F3V z$ogWKONEEMD0wis~P1_B#59tyv5o+=))_ z;kHN6c-{s?sFUP~s|YCc7|kV51TBk(o5flpPlj7=tzx^`8eA$cdBEjChMVhBd$o@- zUOE)J$3_3x8c=ku(FD>V-c&QgZ*_|y7|406VfP18g$8tOhI`tkmxYuQ8OsF8-t|GC&MO z?`yy-E>t8fWW;@IQisa6TVWFI!eX;K+bTet6h?c7OFJ#tX0BznBl>q5u;D1O8ObvR zp&5hBG7lN6A+-{EGQ!OxvSAtuGXERR0vlx9A-*8V;UWnrTsXvS!pB88?m-*UXD93< zx*meLJ+vU6yPxc`8m3_#xnw~60i`K?E-75Qmz=`CF*?7Zx)XgH#wAbs#J5rR3&H@k zeuE9dz@Z-oj;5i>pL`=I96h{o!imGA#b7BWgxnrO=R{LN*l0i)($7QhAp}tv_`ARF zR^FoF3AQ2wD$!FIoQb1(R1{k+GF;tM|Ml zM#65yC0!uKA>O_FE*>JH%E31DxtZ?O2?DvMPT!!yZE+#jiI-Iz4A?tG*nRo6#{$CF z!r0TI;p3g6Rl-<3-YqI1e!;@+25i}NU@ANw0>q)f7OcTaRl!&Fb*=BJ%i`MI^`pe<$|y&#BWC*^1Zo}P2972F*_?V+L(N+A-wA`(iW5z;;8ejw??LOAj@1IiwW zk{}4WUM#F7o1vock91$j9?_V!C8nG?S`|wWUyTUk-uvu096~s-%Lho6^J(bxBi$X% zDBef6Imle6ivZUxU;ix*zN-4~I}W4HHRR!eBJ{P+ee&Tq?iDFGLKx`@B0xSZlpne< zB0SiJAE<}r`P16CV*2;Q<$ojccS&w=4lEiVVF5Ph(>7K7O2@SJHGNq9i`|{Sa45Rs z=<(zpYP%ndE6p|2AJ_r?p<=#BXlMXp$%27&7;zxTXaj^fix@Fl1ZUtt2o5U>lsIvY zor)Y8F~K+xPD6)vE`S`^U|6vpCqXJ%1y0_)dGcz?BL_jEw|Quke3LmZ9FmjaY|2B^ zav+*-GiQoZl{4wdY4`g5yNdPSK9KjaR+BpL$-jPJ+3dr*4-8nT8|WzNSkWZL4I3RU zdULYjMTu`7V*eabkRu(r1KYlZ%ZPA6ICLv6`gk%$sZuG{4wOvUvSz72{`rG|&8k*0 z7=QHh_v2*eeyKrM&5D%`NC?$L|GO8YWi)AcPVM2ND|Kw?}Kon_Pf zgUxCwO8?YZi6`avPXjb2#if^P9oY{A5b!qRNeuRP5^-e)x8_<|&W90`_Z-QdL{_=j zUXa4|Pz*6*w#4K=X?}@lqKYocXrqok3TdR0PD*K|oJB*3Wl2P%prwd{A*82?{y?Xw zh>~jRqC{E-1~wwzD3zZr9eLX}@7)HHX=B}Et5t`t<$zxU^~Fd;1HBbhK}+265VMTn zg%KQd)Zx%x;?aREN!VgL0!9#Qv`8IvjMObiIs`gsQfp8{O*r#_!!En1h$oXO@_@4n zH8P1an<}etGgGPJQ8N!Y-sI~pHNr)+O~Y65+HjE=LF1}b5=$i(SxGVI53k%ANF!j= zI{&mSwiRH+ghPsq%t#%^=><|>cVI+qxZ~OdoXFHNQZgMUBUHyC;qJ_cwF5O$N+iKW zQc5G9uJ#_U1S+|JhSyAm>jD`xtYNKOM>$XiJoYortNwI45QSPbeAZT#W*H4wTRZG^ z!(cBkWyjm_com-mokih3uZ~q}5>|OwRX_Rsqa*}Y?ZeJCqUDL@Kls?F)ma)#)V0+A zXt?=Rzg{S&#cOj%xkMa$d=RfLl zyhK5`%H5R^EKd8Y{iF%I?6ljysEuyp$hdU>#QmeJ7_GX%k=W$NPgG29P9Z* zx>RX!gBcxEa3v3dN`zoR6%9Fqz#EQ_O2N^d zWyDt+_;e}=R-xLI?%^#k#84{Cib~MJH4#QALLvnbTDcaWkfgv&Dh}CzRN~Mw;K1P_ z>A^)YZV?=C%mWKaL4s41AQ3Fg#0V{MBfnaLhM*V+2@yz?RqmD)*yXMz8B5BO5o*z4F4h`>Lm-2ZMlwPwfpOVDDnPB7f&WAjrEo!T zTu=&9Fu+n->PM)i^rnHhDLrRd4o0jJs*_M?9KiX{K7a$Hf1vFL!JL%Zs$>~pN(BPY z0FJIwM<8s7sR$OsNLTI=l^;wEBVq^@1g2C!^^Bz-znMrd#qy6ZNQ71z%fRmJcR&Y< zP9hh&+ac+s$ba|^cDG61cW!i+4C?70%judn2O`dYD0Bh&*<1~;a;3o0iA>2`0736z z(5^`EOFnE#jxfR{Atke!RpVj#V%O5;tWP3cVbfaHmy;=_E?4>7(pA!>sQj&kON9F$ zOk48I9IEN422AHbn6#B>{6iZH<&%bXs+n69BNtN1z&-ZCQXPtQtp8*!t69(bB^H7q z8f;}N+J@8CxQ4ZZGd!ye?W$C>rIgnx$LkF9I08L`J2AT{-JTqBAOH!+_mJnZr8xm7#BuY}Y3?v)atVA&B0AgJ+DI2k*M1q@?zz}8uDH|n5STLCf1m^*h zVF4{$=e-Q}5+h$I&Pk-%lGXUYTUPO;E42Kn6PF*eI70si9X8JdYYDT9|HE()*icb>llSV`( z(frgl(HH&JTl2k5eWh&Eq|E6gOyb9ntTLYmE`Y@oAr-0Co0M}E1FdXsvzy-xXR)re zg!B0UA)*mX2snsTNeBa5=eohVn)R-O&Z`c)Mj|h_M8-)GtUligPvF2a8cWnn%J8Du zH;mDXeUW5A>JS{uo&>WkNtqo^LM`VuK(sU1j2yusm7S~tBt|%GOLn4$q^Ke&t8J8R z*MeKH=$5DdNY4=&=}0YlrSBfv}jXP z#OMVavc)0ixS`h)^B|L`ofC01k3U!Mhyyv{15V0#gFHW*w}eZxYx?Z2JXG^I{pm=( z%DWddWef4!-z_PimXXYyCQV6VVos<;o`e;wN@ND2MM0e34)?greeRlBDY156E- zt(7*Fpvy{Vz~7vPpsStX?~!GU#7@>h^fhv_N3z9}7roG_1 zPL*mtyak{6EHJD9m&kwmk$mN+&T#RmCI^cU8sK$a4FVPoAO_Q5EBJ601GfMtb$pxi zAN1CM3I|cqfDPmDRaVh(A_re9*GwZe5JBK*DyC0|!X;60A^CSWG`Ca96lN4C5xfCD zbL*MqQ!C_)7m6$Kyp=5y0SY@BalTcK`akp2SJmHAYqKA$Ov%&667~sNTW2u z!8A^DZaOFtHo|}{bu|mHc=d;J!v8pREm$AsAq^cQUyjC(x+EHkQ#%4@a);t3gN0S# zAs$_WfA=sB8u(!37(h<-kKywV4|jr(hK5EWb;C$=gXDq)_iqu`Qa)mG8|Ys+cw`DW z5MhXgzUYvMxM;9qaynv6#({)8q=Y~hbSkuQH68mM46Ofw>cRwI}mUdd=f$ak)9`k0<4ymDXO9?%AzFXoImo1Wf2W#IVoZ(R%Cgj zG}=LE8KDSw5{{N|FaN3;8E_W!xfzSai3p)tp$Cf81{R`5ihcPjsh6theXI$7b}A9v zcwLi0Ba;CG?AJ`e={;ibUNLl!2Ztz_BbSnbk_k6gBZ?7(z>oV8PZqLqj0$l&vOtHz z8z6~dmdTNYb(8B>0zn4q#^W{OqTeba#Ej)rH_bsQ)#hPt8j*(E-Ctza>K6iH%OCLED!h8miXX=r>D zG7TX*5Ea)KT3eA zDuJ4@cu6n~VRdP8+G%o%5Kbx;P>K;2i$xA`5SF15EMXbDwwSZAdmw>(x;GDqSbOuJ zi{1ha{zs}0cM{-=5o(GORxyv8k#}GKuNlh-F|=5qHW#odeRO)U&w>%2g{Ot#5HVB` z+IX}=D-oDc8Ji)s(?lw4I+7l#k@EIA%nETyS16ClJxP}V|EefQr>q-OqAkUonfid% zS~vp6fx#q&qS~u1VTB-po|}VqrQ)GBm~ixVs}j)wHVbU`*;83ka$`nVA?B;ynn3^1 zQ7^ZU&Hsd+8HTtWxK=k;tQfI4>^8W^$8s-~I#1FS7R4jSBo!a`fGIYtK9;SF;-JEm zo)&g>7HV`9x>VvyKjdmrtAVaTw^Qtz6o4`e^oqR6tGs0O1SJ#|;{lc>29sYIts2y? zH)OUnl)Z#ko;~_Q2b(LbY8-r}cml&9YL`qTnX%L&7sW*_pEt35DHR(Lm=Xa-ivYiq z1X=@u30tKZt1u6_M~ks25wmy_c9axY&_@^nzyb`FSE02V39}#}vuP@lGB*|_2LWP` zL);Oq8`0UP18bGjDP0<=G}SV=p6krZ8g+F4L55#bmdvT0P{OCz;(OFJnZ zv;U(Z(VDkO5jer*15|TD>B3D6l)Ig|8En7?Fi9b-aS}s}H6%tWZTq6G%DCV(5!|69 z@ZmZ?usHuyK{;OAA)>nvPe8au5G7~f zn-lsgTh^0}GP}E3Di>mjC3%KWEX9rNtrrDfLnq6Nq@ABrOlyk~xljzYAQfQncw)P} z$*j!FJWXFo2w*U0QH&96#Rg%3Lez}4mU6w?8?YL*y&^QQC{+!vqB+};4cOp1=l_Ha z+0Z%LfX>0h28Uyi`M|0smk;io4Vn{HL?z0jCM*L{5!gtv81V*i5N!@&2XqhzaImo` zV;9j@2Mzrrb)g7#PzQ%`67Je+Ymr*-;xF9bS_1)@Akmniq6DbmFKQ$X)SwEga0c`u z4+oPGGri2hDJj3N@ex)#*o54!9nG}n2j>6Fy{17$y zEI>qT9y^OUzF{kO0|DIeI|TB$_kax-2p?2+97U}tNqrCOpnRq3t6IT4VE>~l9)b-C zb*VwN#m4spR>2PqQ;-U$Hu+F7f@8+lxfY$14Y*@`{FgcL0bo{vp7^lZiVYHsoq=ZR z$m&@?KfpJ%10Vj7CbzmaJsmt<_b|)@96m7Awf#BgJPma6*JHsBc757<%-aZrPX4g7 z>R7Oq>{}#8P_)w_jJ#8r<8oq2wkXpjAv^>fFdm=v?h%p1<(9Zq{-aA$6n z9!c<(ZAA!4kj>hR%pLU2Ak^X@6waoqlWnY%B$q3%VIJEMOw(Y5Y5zA@3k10Xu@Ni0 z02{$=O}Z8%ffymo7adW33-AU?E=3e8%xJV05I`_9ArIkz5n<}3h$#_F(G+7o53@HB zx7ZZoum&+CRo|1-x~-}@DPbp~WCCN%S;0;@gq}J~U@cq`>CqT=;iMRgGD?023gN;m z+!4Uhw6BTQ67c}#rWvp#3ECwU-83pxB47EKbdg(zg=HIlEN?xo6&ds(u+b0F5JOzj z>6Re|<>BK}5e=b^HeWCz5z>HKtf?-?A=i<23I`fk;UOD*-5gk%D>4@0F*`S&kJ}(H ze>Cgn5yAX4B4YtfyS;Ly0vhYxOd2u`ww`t|6zswd98E?d!T;0%@%S*!6syC^C8_GY zCIy4Kl8#1V8y+&bUVA1u_ygO}sH65;IUiq-B^!(DU)N0!Cm2mFXa8rDsWiW=YWi zDx?_@Q1naW02?s$h;jiN@QGXB^^5`ov1I8|@c^Vy3WJ*PK#C|0Py{!JpW1r!+L{C~ zM0?DX1d}@}1pg&9wr5+P_vwY=kfLXmre|*1C_x~IIREOO5asyC;UHJPC_a$*s_G+) zZ-g&F+C|0s@-G_xcXkWdPcFecw^DeHDtF>d^#V*6#KA=6&{+aLTXVL=8I*W54u z<4^v&#QPiM`{)n+{f%TUA=x4+DOui zgD)gCiYNve1fdWhe7X1U9$10UV$#KXG~-6FA4BE^9C+l)mxWp06^ysREnz(%LioWp z@np)CEnmhQaVg%ZoS|k09a{8g(xroD_?P-$zt5&!1Kvy5?`zt%ZQsV7Tla3=o9TA` z-J17s;>C?0hp_G5y=sz=KSz0Q-xIpk_CKiQZ@xsBMN1tB(diL$z zzlR@R{(Sla#eXG_-+X=k{r&$3FhBtZB(OjO4-D!)uku@PKLj6yFhU6@q_9E@FT^mz zgB0wF!44hNFhmhYB(X#jPed_A6(!>ED*q2%1aUU1%Cb#4=cKbvJMYBPvNxlOGfzMN1T;`V2PJgRrurl_QAHPJv{6TaG&CthAEmTX zOE1MV)2JXzB8eCw2%=Nxl8O|mNt;5U0j@M4uV>#bLa_ZGw`ZgqrOE|6aP(6V7Fg?{{=YU%XH-{Aqbw05h;6%!ndh$X%IMK zi6^GGVwn(rNY^lU{Pn}hDA5FBi$^B8WRoZU;Z}%f?YOFiiE210kVQVZW}9!unbjbm zT_6cC*Z{*kT7Ssk2{FKUVpLx}`#9vBpN2YWsqrNE+Fc74sMei#B_!blTlUfGt0vJz zhpEp-J8iY8w3-d5oQ;M|ci&~p+FO+l4{R*Owu%N#Ea7);!3QV2a2c;9WYm;#6=?2X zS&r)Ep<+g=0UgG*gpwHy=e%>zKQHiFtQVMDveFBZcl5lOp3HK6od!L2*=MKyJ6*pp z=vn7#Rhr<)^@fx0s!$l0lK&iNFt>K)muJ5D(RSXLpwm@~MmTwKZ%T5ZC_ickO(t;)+gC7K;^Q`qOY~gJIKd2zIHaHXQ1%-P? z>0k(DI71q8&MlA8fC&|rK}oH!au2Iv5QR8IA}WQ4rt+at8sI%mB(I21gklsI*g~MZ zP$O`b3Otgkv1#n7}sDneUW(+G%YhfI>d?sZZNLARX=SrfDpv11FlK0jUaSLKSM6S#gaZDce;< z5wpVr5=WaOfu}rY!h>QAV{-_BKs!V_(vhaaGEIm=M4-@)bm$N?l_*9q3MvvBV9}ln z#c57E^sH!2tN&L&2t!bX8dO?EZ)r>_4g~CB3XH~cCOzorM-j5pbRfd2S4D&%D&tQ> zL<9m*&_HcqDvX(4#BZ9Qgc)_ZR<<@}Zt$WAtuE-kitt&fH5P}WD0#ko`{?7WCOO|pU&I0OPK7=mTt$yBd~)*u;e zoM}mN6HGwF9PKc}Of(Qy&j!J=jr-I;EpQUZc-6Kh@qrIU(g0!~If zBG-cJQOhKlE6jo(_OJ&%X7LK?ZK4*~#jZOxQIJ%~0v_O{M|$bO-GV^i74879J7jT% zfn;QkbvD< z#6lL=wZ|3+@`_l*;=E;Ub1cS7kRhDc9`2Y0eC^R$fxz?3^pJ%tz)N3_+@ul^q3VDC zDPhueL$D4YNDyAD<8D~E9Zrb!YtLcTf2Kpg5Gb)B)X|L*i?k2~5rkFI(GGK9br1!C zg8v~9vFZgI1PcFbbvOQb4(EWn9fe>uA`;9}j(ps>4fsXW5u$^>R()Ss z$Njh4_O@r~O;-~=_jK_x1hZR2se3jE+7S{9d$70d_LxOMRDfN!SHu>@xW!|5o(}GJ zKj)s;am8m0YnEEpA-Gb1=dq z{HIeRoysFW{3D3KdOwFKEWHy53)8&KV?STRG=eaL{;LQf2(o2JhA|w&Wl*~I0UO%yXbp}6)?E$s)bn)G!`TX z7c_|L0yu<#Cst^$8oUS`JhX>!IEjD&!BYpkfdCJiE08L&?lVR1b2*c9Lh$oHf@ryj zD7=CYK#3~|N0YGoGl+^KxrrDBAv>~P{KaH2hz2-7XXwMeGMkGSm;b-1Ks$8CwYr_$ zi3StGL#z11iqNc!P`7&XtbOaZ1!w?EY(cz22>4Pnhd?bFWJHQctn7P;*ZMw#sW=Z~ zv;b^}btpiYlfQ>hyjC0tcr1v>Ylq1*7$#&eRx^kU@G#n%LWB6HEu4th8wH7gIv|TS zhd_b8qQi+m0U8h&P1u2F6iJ*pg;TL!Gh2~{%gfp9Ecwn zz&AL!D?aD*u;RNrq|3pMZet8asnf zw-O`>wOdDlU_R$Fh*Zcf(c;O*@yUsRs$qDDM0*H|YllQ|3%)zZ0CNbFYlp`pMF9Li zr(6JF+dqhCNdBuog1EVL2t9uSsDt!Ji8w%Jdx)_#h6aED*K>%+v^_U`%im0<{pp{$ zLCNarifg2-y!;8ZqlXw=fE55ZnFP2YKrgvcX!t(X&t zSsqf@kOk*lfGgn9T95@j)31Q*%j2_7iNHa3 zM2Ocauv64ef%wl}!#Ts_xo*(4suYONONVZ-hH|)4f#}BqQ#Bp4yao8YbC9)e_%uN% zghN1t5+gN37zDhzazo z-VD)7O{NjD6)-R%5VXs>!iz1?GcOyv68eVvYWstg{M6M6D)Oro3 z8>$TCoQP~32?%gEgBgPAg9sIHH_IYeuQZA46Uw6KCT-2PBZ!RlDlyucEw6%Dgms7? zAU&b*0V42$wtNWMTR4*t7A>;ZlSNsB&{v7z*Y>c9V#vhFSjzfnfMLkClkgtE0oj!0 z*=JnYh-g`ty@{Nd48^0u_jp;NHK=8z*PeCS-~3spSkVD#fLsuUWE6~MrH{pE44G&E zkE8_OeA=E;tsRa{XLtC-#v&~q!#oNC1+xpSl zgb3QdCEUU_oWMnh!8P2)W!$Mj+&$#m#+BU3B_z1rp2)Q&%%$ATBDm=(YUw&?NrE7-niO6qMRud`Wm!k22&KX|gV^8D zAmD!3hD_GvZP?;!2^xslJ`sDwI2xZ&o)#MNal<1=Fz~0RCWl|VCA8R4bj+#Sw0Yj!{Blf2XIITZVeKu!QN|=xC!;dbj33g|bpy|f|>7%#+mx6!|sDOy5 zfD3pC){+QcRt1pKV5o?Ih$V>#FoG4BXoC2No-hf1u9l28iVWCkk{GMGOM)-{=lk(G zaO0V+JnP`IVX*s(^0Kq+QZN6*++R=yFMcbC9gT$`#jkpB2OFg8@S09Q8wl#82Y`D8 zdichO*l35S1_Yi9WWHz>;aSP9kGhdMr?f7pfv2!qK^jeUTMZRiIG zh>Ly@g9i8reIAG+xP~fDjeDSB(!qv%plt+33^CY-h4|rb9ta;m?aIyuylLkJD1vdQ z;(eInfq3Z+@rQo+m5;awr2&I{sN#Oe2PbA9;4a|N`G`&dZcHAPB=~JBZVe<>4ehLk z?Y;*G9*As6;v|TR)ZmBbo`^SKgf|!n{$>Q{ScF9whyh=K4XA@fU<5{3ge4$|5uk$w zmvA~DYJxCuCQxt&hXenF;4l9&7*+5F51t2kAaN33gMm2XHdcjjn1>Np1*O^L5)TK# zRRwZr@e%h1ESLx|kdEC}4Y6)))p%@&!0G@Z?bWz!y?k#W_tqcC2ve?$)!2`hjaea1 zjf5U+l95Y;sTHVzfG~)L=%OgL1{SD*hgdj7dJx!}oCS5`Yxn}p z`m%?5m<3pvg?iA*z2wFPFa_+=D|e^|H_mK?00V4DZ{bFWB42uU zh<(W9j9`s|$cX&D6s}_il$cAZG zj$il8FUaKkCS`360!P1Z6M}$zSdCXFb^TrdZTN?8SM~eW2#Od1MxcX%sDlL`0fDFh zMzDhdXM_z{@I_FB1>XRI`1eJq13Jj?MHm$Yj{}0I13Osoem4k1lL~5}25uN}kSBQ% z76@PVhHwxEZde5tzvqI$0#%>}76;~oNCI+@hj5^VRqzH9M}i&K@pK$A$pE>4&h-ObIs;N#1 zgwBiUg$Vyg+-5^x73#EyR-j3^euZ`;h`XYPpBD%r-C=>Cg_&G{B7ITDl+lUE^n^%h zNI!@o{{hM_m>_s^f>?ZlK;?d*;V+18o9+i}FdZ_nZqgz3h7jRvD5tg9%8amfVn=#| z5aE?Rh=t&G)dp?XS9LG{6=koMg>Ygg{|BuX^=SzG)<9*`9*8hV4f%d;Y*>{apnVfv z4WLa86Jqwy7~+2LOnR4#$NPb}aD2~V1Vt!tjrZ>b*!MUvc!;lX2WWVL*Z>C~h<#@S zCa~}Yw|{|H0)Q_Fh0A4tSRioV0xa{u5lrZ9-n>;11VZ>Wk6OZk3)NIy03qBwGz1|e z$teFa;kJL%Mh;~2Zy!p5|Ne!n_`}~nFav}1`v88koG z08@SqR8lqx{xcszDmmC*gN?mJ-*hk~1fYHkX!9OH(7e>ZR*Ntq&<2dW!AKnfrO3oU zBrZZPBmP$ffm^M&n_M|3~3ZCr-foCc#u!%jR zb!JK`_6(8gsEohi_H`hEX_9!lNu z!)tjJotK_SS0+Rgf(zt?-AMBFQ?9uLCIlf;ySevImC3rB(0TVTxZOYyyi`O&?)5`q zyy-?akQmW*Nbi2gX0_u63oyY52X-tXkisw4*cBX%&~YP*2`#}$#01$=%q?1hGY=Lb zAu*3Uw^B3D8X2W5jz|$Oq{_Qnaf?!xE$v!Sf4&xr7KjED1R%OMh1*~dJl!I4pie^` zwbWBnUA5I$W1aO#dJ%%v577|v5gUX;u;^a5)&=RFlCF)mo|aN(&lU+?(WyY6qAF6| zu2n=2s0+X*8>d&)J$GiYZbe%^_b}f0J!Mw3GfF*w^wK_;W6so;3n>5Yc;k?F*RRk2 zEDNvO0+r-faoD*>^a2ftG0isj;KNk4qhBkpv?2l6Pv)1uCsYb%7B_^aYbAtdqHj^0$j7m1Mpob4DLYx0wwM25d+T2ZEVy-im z>o8x`*#!l{loBrBLhnl5mrNp%)(r#<_UT7H7*`u>wIo~PY7iRDwUgo1aCC{Z%S*mT zoHix|M1(A4^Gb5GfiNX(5^5ewVFX<;r zIx3QAadLS0^yIdBwSd*#@gD{&LQb#&C29c@C4v+QQx4gZ>WKuXBU#FQ#4y5?RwN7) zYKejrxv!-rCTIiEUPam^lu{<-lm*SIie@>71qd?^Ct_tSQPMCJ8RcTW6bOm(XQEtU zrD-GU$&!k6q+6lEfEjU8K_P&Kk_`zg*UZRAD-zOEk`yjKF=tDDlAoT)wVsllEM+Te z*~?;J0o%U^#iJL+N!cZpK<6WbQZB|cp8hfaK9baJD5T%?L{eax7HBYmWaeh3NwDxPbG35ji;>$xbs;lIaE2 zrGs2#MSgM*=H1Gwos_C~Wt!D|Jr$|UW$yw$I>bA!4lRHwECy$dieRv-|r0_8*+Ozr>kgBVSaBD^F6JZUq$$}7h?u;*7%|z(2m_0RL~kI71A3`3J1Cfz1L;9AhS3uz89^irM4$pQvg@q;dSBBx za&}70#xW(ia=A8awmupj)&102tgFf`4A3f)E+>9il8raxI_blA)3U9^Hf)0hO4=vM6#p584{RU%HPZD>1C&r+gRnz3XpSZc#MFrt zr%lyM_(Ssv1PA1j*r}b^nHs8PM8|l{9MA!YppV(92qV}59Uz#j5rqHD6-qz=Ij9UZ zr~);3m`2=HLgdu}LBtxU!WJHhH>`pxtO1l1kT_`JDuBb0bfJX21ndc(T}U7GHHh_L z-@T-u_krKAJ;?Z#-}$}Q1A4^^exL@v1VOZkQ4rPO5k%8eSVjN{)|Fl+YT_nxVkh#+ zq996N(1+RZg`><#lHLCa?LCGn*2xuAhG*1+rtlsTE!6Mr+em1^D_TaE5yZfO#y||* zW+Yro6o;^w(WV(A@nqaR*vB3M$McDV7--H)_*`@`i|WiD(Nx8K@Pkq9!^jO;Gy20K z1ws2=U6Wu#Gs;voDj-3qW36P~$L&UOkV(2s*c5|I!!|Zjl|X=Fnb8g< zV+J+AG&JKql!py!RaL!&ws4h$X+$pBh{h0MMliwIF~S{ez$`H#2fP7CUSvgVUNOu7 zPhdd;F@!vLgg}58hq=r^7z9Juq)p0$QJldvwInzET~?tJN(@#VC1dlPQZiQK4>03> z*kA6nOUr!)H1Piee(Zy|bjLQei~lXa3`9i@6pv1LVpxjhSdwK~qD9&81O)s*Iw6_6 zF`2y41uNQ#3Jk#tu;o}lz!2Q!)%-vbtR-G1!Cs0*U$UiI`X&4%K@r?c2Kc35!Uah5 zRT3lt=^s z68xnVhGwKRCZBy%nx{xCXPrD}T*Bpfx+e@xXINIJb;1cHL?=_U z=UdR4FrfcHWBr32zGr|6=ztO^=%r`8&0c;M=z>a3e0t)1T4yc@!`me%G*n}q=zuWf z!gp4LvoYw0f@p|}XgeL~oUG?uoal(ED4sZICqn3o!f1@j=#0{+x0UEBDkxl}XpQoy zTU5h72#+V$fg*4~j~eNbB59H;Y1Q25yXELx?C6q8>6B7wm0IbQV(F1K>02gfmU`)z zf@zqF>6ntKSZ=9vKB-$oX_>NVo4V7MdwpZe*aW@(+W zXO{wMp&II;B5I;4Du@ayistE}LTaQ+>ZDR?rIu%-%Eg^p>ZWpPr+VtAf@)=9YFub) zsG9%ksiJDCs_Lr7UfZzhtHNrm%Id7rDp-uFjy`Iw>gulYYOngLo8Bsv=IXB!Yq1*Z zu_9}T1}mN>YqL7*vqEdMzUQ*GMX5^bwPI_wYU{Rsg<&3Mlk{b7K8jnS>7SrL18^v} zs_VM4Yr7ii=>-N2I@j2gVr-rTwX%h^vc)B6LMH4$y1Hw?3hclVY?U4gp*%ql1c9P7 zie!etUJNH<;OkoG>ssW%4p@RFTmrxrY{z=+$AT<@{+M7)%V_11$uh>oszt@J1qx__ zCiG{>%IwV2Y|R?yUBsL~AWFnSfIhYA5Is%CPKC`9ZP6O-(RLf65Yfn1gpvI$K|TKs zC1}FXB5l=L?bTwf41JBf?$usY70IS7x!UQlx`otIZPub~+N$l^_6cC1NfLko8-M}Y z5E*x%ES-w&pazQBvTfh`?cV~fTi`6C^hLV-Q^pl;*vej@OoAp*Xy8I_a;<{>}G=L6dtR+xF zN~Z4a@^0^bEDd#54`tQD`sUaqR@&sPqe4yXzUShJ+&3w&;(uK;3$@a3v4rsz8m~Z{s@BO~&$g=$|*G5h> z953=NE}%$l4&ZMA8}I>J>bMC7yp|TcvTyq)Z>GZUTJS9bTkr*AaG%0!>J19H5ky|Z z?dpwd0RKq^XYdK5a0-VhDDuT^CPXMAtevjiWI)8$$qb)G z4XZ^12<;9daS|(Ws0y)J5HVUbfc$EL_%3l3Tk#d^X%m0u1fK=JzAOP_aTts77{93& zlf@I8#STou4wNn#yYU;tF_oHeXL4~I+wmRaF`UlvVAgRS`|%$Ga+U6JSfFtr8}cC| za*Pf#SQK(1JMtq#vU@J_S2S`YTk<7iGFeWtS5$H)d-5lP@>~Q203rDV02lxO04%2h zGXMq$wFHM06&@8AAQu=Q933Vd9w;FqEh#HGEigVYEQ7%GL zGebo;KutADNIyVCJwQ!7M^rdeOgmdpFi&DJS#L30az12JF<^H?Jvv1wMM64CNj*_k zBT8uab=8qY?ya?gnw|JN{C}lm1t3%Yg3|bR;zMaw|9SoXkNp7V8?zlgrhc@ zyEmrGH?7h)u+})a;5x(YI?DAs(f(n9j%JCMYmuIQfQxOFqH&z6bfB(!s<(fzzG2LO zX4i#m>5hmKT9pr9lMr8-4Pd4TWVQxsgI+R+XEKU(GMH&DkYzEGd@-SJEv9iTgIIZl zYgdhNR+xBMg>GPsb7GcyW}tpt!vk*30&$I9fRJB;fN-9fV~L4(sF8iLpl6P%Yn8BX znzV79ymX?+daBQUu+V?8n}IQ>iY~5@F1ME~gNJE{h_7rJ5|@ zjmFfG%-WRD-jKuJd$n%iO#LA4! z(U8~NmdVPf&(N*X(yrLqv)tjC;pd#j$H>pm(9h7&*VotI;NR%!=C>oFt6t5zwd>cgW6PdRdvbx>xO3~? z&AYen-@tU?dD__pMx%21Hqf4Joy}I@5*t2Wj&b_<$@8H9W{~u4jy!rF! z)2m<4zP`}p(g-_O6l|Nj66DBytj-S7f|2qviDf($n3;DZoGDB*+@ zR%qdc7-p#9h8%Y2;fElGDB_4DmT2OMD5j|5iY&J1;)^iGDC3MYLb${YHRh<}jy(40 zNG7S|l1w(~8GHED(a}DmTKy$sHUpws;su^>Z`EE|0?UOwAO0tt+?i@ z>#n@^>g%t-1}p5a#DaQhvB)N??6S-@>+G}8Ml0>K)K+Wlwb*8>?Y7)@>#eEBek<;{ z+ZYo#w#zn;m&LCz4+#<@4o!@>+in+2Q2Ww1Up)9!3Za;@WKo? z?C`@7M=bHg6mxoT#TaL-@x~l??D5AShb*$d7i(Jt5-~`M#L6qD4Cx0Sz*@r;HN-me z6gdAttPVOvfb0W2H_AW-BNuJ-(MTt)^wLak%76<{N9_Uyi9Rj$)h^Upa<-YcLy4s4 zxFfbZk-RK61Fu$N&J?k#ZO+?r5PJt6Ilx+h26*S4H`Nntw3jQbqTRbpo0;1SL2%{y?VhanT zGSEma=)8jY_~e&w{`u&WOnMXSvwu3GF0?Oy6Ipm}I_h3m$_ea{7U6QMJurtjXhngy zK|pSFgB9`a0EPxS5DY}?+us@$0pU3+2Y84es1hIx>p3cW+Y?m+UV)BWoI(ldOQ8x^ z$if!7uvttH#tSr6zZueMYuHMi{`j}6H<*JCw3>oB|GrVI;3*IfT+r0=IMsy=iV76A z00pE>U<+F?4pcBe2Rb14!Y+F8i(m|+7&lcv+*K-caNyglaM&vbd;oEq(%}Kz2uDZl zuWX@WKn&E#DYdcf0281Zq$nUrNV$NIjhcfw;x@=a3XK9UKqR9W5Xnp#agG&`WYsDV z0R=#6Xc5pP@sc>H2uSY$OWf4lH2A0pRN$12N`WnEQAbAw!WOfrC8vZCzA^gpm%t3B zFfms@O+qS$KCl%VZ-ohV#2^Oya|b&#!AB3UgB^&Z1UoQ+sMOiub<(7!9eJpzB3$#F z#+)N2!X~zJY@!HGvmFKA0FJkbIdGiojJgPPe#@AcZ|{}KgHos zMNz;F-+0^Gz=2SKRAU?y0H{F0Q8P--O#?cZTk*ue$^%rO3nCq9@)os)l>V&?d>o~u zT3Wn2Y{3E(L=*##mq0}^zzbsFsqqGvs0tA8cwks*q7tAz?nNpAv#>=VK*dY(4fCp4 z&8k+n+Auf>Bb`Fq99UVkOj~uWndi{NCfMPQbExqHXHyg<+>wcHx?`#75+%S%Dc!LfX{h?3kAV9}PbZw0)pg9i6 zD9Vn*v2L4#q7=zkIv~S#;!tDl%n^qn|6&%lm73cZ{sx9I7!Q^Q*uqG^5Y*z8w262a z!xz9{2Rzt8Q8IhufXEgl%a3tpujAOdq^Ab0UV)I`aW zmXo^WEU4N`uG;s$_|30=%eA>1_&`c#eAEqu!Gv3twN_no2PWY7fv~CW0C06jHtA|t z1@o=J`D0XH9~EIuG9YZ6_@4*hxhWt1kZ%l#C=e0lh9P$J06%z}BRN}#2_UMr;AoT( ziC9{5RHKk>5Fj6S=ShLo;B7oW6c6l)P$0bR#gP(e7Z6o}xlLK8I#A;SbekvzbT?71 zgf0>xh0~rMKnFDqoS7MATt{(%|GHiFE}}vaMM`m?idXDZRrky1KKuF4fNtaHNM~b5 zF~F+aU0HltFBDB_XyQAfRl z(1*TkL^&@}!qvIa*Sx52Gpfv60BZuOSb|DHQHq^{0WQ#iLV0`r>tGK%pbt%8N7e7& zH$*$H&blbJlGxygsL`C$EJ6=?+&Ee|7 z8*ouBnCLeqKlyr^gVs}s17^KZ&uZw@c0Ev(5IukF_6h`pO3%S|!61h8D#`*P9YdC- zJ?2L_T_8DEvz!%m`$c)dcwQ(eqNr#KT|(*;wh+apV6X}j=7JGp6}$AOPyOnzkl&38 z-B)pSU|Pv>@9sc?|3LJ90J$gp!H5c*_&JUDMUh`1b`O;gVXkp=aJkJAcOV9=hip1U zQ-8AsixORp@&Lu-Ga3kjiPCLs=0trnZ4k65Cs0M0a!bmmDZHdb&}V%<_=7+ggq4Fv zjS@oz#(iqHD{NPH?(lXIClHu`a0jr2i4uQ`@^E?ggy|Q4qSAk#XAU;RS-FNNF_vQj zaZrmAc=U%TxW*`))liP20BZ9MKR|Q6Lu`{Jc!|eCs|KepZh$w)#C@$D^k=RPeb%_U10#(ETR##`5!T>X%1glU&Eg*!bn2M^n ziWP%>iYHdN(tWcMa0}-$9w0WOhA5jLg|t{T1b26MI+iQN~`4cyo<%ZDOW$0#S+F#&nQ^X3wQ4 zO;ssbnQrxUkY4$fU>TOv0yT;Z#jN( z35;eVVUq-6xyS%Ekc*UJV%5Mm6!3D1B1El5hT<>|P{vt@`Ef1AYXCSzjS^(y0A&y` z1!`1JFgF356@f-Jfr?UrLy3XNCR})+M(wz5ccUnRhzEsu0PnbS#iLXhbcj(&m5CBm zjL0ZD5N*2^oQOgQ$ww(QSbU$dXJYxB&>5Z5nJWVZ2U)-b^wVFA;))F!EM3D1>~Id5 z|DXwM~sW~@^S-32X)Xplc`hnBo1^y2N5L>l2rq}0}dAoS>F&~nI{KyP@!}n z2XRnQ3{X$x@C}$%Pi80(qgf3k%2;ZHhb^{-Fli2bSdNJ@i75CtU*HA4^=8|ab70^F zU2s&!X`4cYJdKD4Ng7nYw{2U{1zs>+)zt-DU;&Hrnpp}4Ub=K!`UN5-e8g9Ek^)6J z=qb)Qop2hbayqAM2P`z)tSq3D0zw3=pX4|G5c> z6is6jsdRS$F%YSi%5aL}0rJ^Sn$U2PQahga1`E}Ui82A1B|vhZNj30U1LX!ZH*yjc zt8YW9b3_OH)L9ip0jwGhu|@~v$baS#j_@;%(KnTU2!a~WTs1W~V*s1eR#PM>W>1O- z=5+vX2CWAGf-c2V(Hf6DWnNsctux3d)q{1A!ioDxUsgq@?AosG`mS^IG{wp*ei|!s zq(@-II>m~wu%fS_QUi_WQ#F8=LQ@0tDk-`{0mh^|2m2}ykV%lD0Iu{(p%MYL2`Uj_ z0nw&Y6<`6K^e81z3${>hkm8S_!b`c(u<*LFEZed!3oZ_sE8q9B&B6k<|3C|#XiKs#ycv=+q}{{z0_O1sPep`61~>Dz1-Wq-peT1{~IdW`@Q5_zUE83 z;R`C`>q{fjpg|E(JO^9Ec(Ad(X*}I3DfMV8 zAOHd#uqX=<#iY_Ti6x8}*(%ns4p#ufF6=8bY{QF!!#bQTc!R;Ug2X`^#Z#;(RSW{a z(!N+w!i;hPDWIkuyvLoQIitgnrCL9ovjqNj!g|^*C=)Hz|KmZCVgv8nC|&%;l+wjm zAjUP!D8Z1!$MgiA!o#yt0lvjkcR)03OesjL#0T)O8sJ+^94SvsD|rA3eSiRqf&hI0 z33)IoSZp?194b^0!IPv8>u|`BybhH-!Rc%?lm+vHc4U_Y26Cr}OIGzvD=3^T4A6ec z!aUpbn3`C^kUOm~zkw|DDV}#n6!Q(7!SU`1pd<+$$K= z(Hbo&Bi$$_?ajIp&e@;^RS?eHV9twz&g(qYlM+KVv~RE|5Y?$n_dF~4j4emN&&hIi zlhVR3ttc_A4b-C0nlb_Z0MVV|$*@vpVgOu2BM?I!D#Y{Awx@}-A_9=$2Mh2h3*ZNk zAOfM1(ppR^#-I+y6vJz6)0pDcaQ)3v+SfnLD@`QSMocMyE!c!@*ofV;Sqv&Punyc{ zMwJl8jAFC2aJEz(+Xqlakg^12mzLX?c807hZuC5R^e9mnj1^bfll0r3@?NlAHQM0V zjRM(obV#6LH5e?41gm&6z&C82DOvE=5#7V4{{$%y8-1>X%0VRtuc|26`~VlrDSQ1% zg&5N31y0{-N!fs)$LQ) zEfCp_DcfDy3(iTB0u z4P1VkP*~}CPLpa)n-+K5^k`0g08rkjd&dq5K;>c+Vw}QMA@nFXUN8 z0O^p94~+5z)36VmKI+U&DQG4J4DhU5@T!UUtVkqDM#WP}rH;ATO2wl9;c7fz5N*3@ zJY&_~jgkW#C~mhWbS4D`94KcG@T_0JM<}>#xn4ZG&M15U33@OodjJW104f2Vg#)fB zS6~c+Ugv{O4LLr{STOGDKn)GBD1vV1h2AKKp6J@J=$O*zj~?lhz9=tH>6f1AlD+Ai z?&*sH>Y_gCkY4JQVgbb^RD4tc4R2G5q65hOq&hdvk`nDwda-kJW-0Y^uh;NAg*HDW z^2gI&NQ~<#HSLR1?bj|T*}m_C{6g4~dT1;!xm>wpb;pZAk+?vwo3`)Y zzJdaSP3tI;B*|wXRfep92hW%-UtHqxvW1`ymtwwvaS4WC%rAEE-1$=UOP7K!Evy{K zK+I4uU+%cnKyYdosAFb6AlUL{%$YR>GBDcH=$EPjBe;|~MrzKG3m`!P!L%TVxeM&> zEyBs2yG=3n+GU__U4w#^)@flX%GM{QE)e1yT-owv%$YTB=G@uyXV9TVk0xE(^l8+o zRj+2<+VyLJ!i3%M|H0&ji?-D;az4Xps0zly z3J*(o084>{nsO|jz8Hu|Jd6|w$$~_H#1G8;fJ6k)GI7T`rouZ4Ga$pSfW!xeX2a?3UMTy)b_cU^WpV?Z`|Wy@j$m0pO~hjNEo*SK~C zQqGGG-ktK7;0;ln4^0M1gKVXav- znIh6m|EusAv!EsSa#AH5?$%OV7~` z#D*zr24wQUY)EF=Wte5AxuBalJwWGwcpiuepGU-bB~L+{YUu-n!d#|XYaA*h8(Ce+ zRjJYL5!HdTEJ!BN54fBl&3_GBCAF)*S|GRKzD#bqL5so8jZeOe20ud*wB?l&@c4v& zn|JQ=03|5A_6sVHWA3~I zPdxd}LoYk`-E)VMf*^r9n^B%EN?;ki@ogQJCX1)?m>9II|BYnc8-Q>~R0W*t>1h@h;ok_b-lK^D{u1`D#m ze{^tiAQX`Z*BFw@eFj*&!b8+thX)%9#D#bOROswNx|NhIBs{qq5s&n_fy{9rK1|B& zlytNk=CB}8yo?k@bA`(9DYdW#3$AxcRHjmut7K&>UFk{&crSxv z=}i_GAU@fc4>{;dm-^bJ9E>pqJM1_|F^!py>?q8BReV_fBz6E`?&Up5C7(*!`MG9-BgQW72d-!3bi_&78nv z{P7Qf6jczPCJIq2ae*3;NOPS#&zVglBpu49K=!E;t8xY>WBBM=y(ANt zYzYi0B!~uh(vx8Es&o|1kwkaMUZyazY92iRUGJDj6wXAyGkH?h+Pl)Z)a5dGfdozM zg169!EQZGmi8j_T&w?z-F2y}=axb%7i8%MU0*UT)r3y5v5+u9Ybx9X2po6EF&7}L) zFIZRg$FbT4yewvmS}}KkwgPlbB|dSAN5@g4!S}B26-af;bq$D+6?7Dq$FIbk>^)5wl(Dxs8zEQ*s}KV?RmE-GF*mCU?M` zKxy|Pj^Ys0>je~EC#vWJ$af$ZC8vF-g5QE@g}(1CHIWY>rx0K!1Tr;no?`2n1cGrL z5+sNV{M0`N@5Kd&?j)+o$>_a2I?^B3XNU(fV$QTxzh8(^Tu*A5u>P2=E5XW2Rq{Hv zx>X?Bo(Z>q%utiodZoD5HLp2ygid4!6HLZTPzz#-!Xefc|A63f!3}2 zWCJK42xFGJ95iT!iY_|4*4YAib4Wb!7Z22L&a3!?3{|EMY6D4>g-opOKSx zC3e0oo;5>@QdUMWg(gTj!x>6%`n%7Dv2as@5sdy#!=6lGocS16-2+@VBs(9>4T^F5 z11z2(p57>!h&1b);K2@=9z$pSn^Iegw~ERrf#{loun~@WHM{sHMf<-YTPZz&1U|qF zK9Im(yPs$B4AJ{3o%$_;2rjm}IJWD)vG~658^7E@2=j{^H`=>_V86X^KlnR$JNKNw3qmH?!cXuNe(w;HqzAhf*yDu@W2z{{vWCCm)^z=V(s4NxjH;?aiA(lY~s zJuTcqF6=@tlpZwOEPBx=i7U2TDzh0Rm)%R3|K3xHVKTn4I07ask8_A2zu<)NU;vGY ztu_n^<{Jpy+6+Rl1yQIBfE%X>^T3`8xI`STf-nLK8HhtviF*2nV^9efh=^ifk|kII zO7W1f=n!hNE^8AA$Z4FtNUAgn3He(!?{bN&d4Q)tIvtoinOG?e2(QGefV6NxuM0pL zjJhV7x>h5`2>7b1X*zXR2H7$4cd7c^v-HN-fQ zvx_}EhfUZ7PpA*udY}6EJWSYxiouTT*aS^DhtK1~rCdIfYd(~_jBLuny%3ajz=le& z1Zu#OWDB%#9I8oZ%l^;?W2l5mK*_OC2X(LpOQ-~EaIkC;Dp72T*(Q8 znhMd$&6Prcmddrt*tJJMfNTs21Op9f@DppO1Y;<)mm3IU<0%}dOG~)RyxhyC@JqlH zOu{tG$ykXjP)x>jOm>9Ke~`>>sZ6Q50n99k&Fsw2M2OIwhS4Ml#`y=+tiJQouYN3u z6%j8nFeKRN2`>Nxr%5Cld$FdNMLPfkFc1nnAiRR0$fmf^naEI946ot@gK@*og3wM# z;LgGDPVg)jBk;>>Fa~Z|OGQhp#af9aXeyk1QYej5DQ!IpAWC>CA8)c!%o4%Z$h~q& z%5&*MH|&J^_=|LaLN|Pm|G#Jl03rw^P*ZpCgcyhcuv9*a8B0KPKFx59{Yb@^5fF6< zoPk(RfoRVN5j_D()I?oL1~4u~)dnnxp_};!VTcTThzRDIhKjp^5J?Cxld4J0M^WvE zdJ)C_gc8McpH>tIPdfkx0JT+NfVN^GF0hiB00VfV!RHJwG3YO0{6!t|iW0?=S){R* z(g9l)5}p{M=p+m;u+<%b#$T02fjE{RwF?BGq|Y$Bn%YLrpn?7XR0itHw!1z=L{vpx z)TVIMM1@pIMTklzu1n3wiP+Rm#fMMLlu#8_<|aoV{J# z&0XES*`OU4|1jNM&cGI0;4|PY-r(qfmJ+a)Ag~S)4Z-y_Z#7=e5DHk!#r<0)>fJ{j zTn*%<3%g+6>*3SA@Q9(6Uh_R)^iAJX>Roa9UG?1yY?%e(eP8rC}y+Vkg#M4h9zweqt)F;?j6t47B1?39mb_Rs6G_W8`8l)?zX) zV>3Qu|1OJSN)dA3To;=>;KK|o3E@VSK zWJG2SH6{)=PGm=ZWJr!=NuFd%uH?yD@_SxklvO@3usu4P-kWn9i>U51`m-eq6@Wnd0wVIF2;0BAs$zh0MKE@os- zW@TPxW^QI-K4xc*W@(;gYOZE$E@NoEW^LYPZtiAp{^pv@W^f*7axQ0cK4)~U9&t`* zc5Y{PerI@&=ge4Vd9G)BzGr;S=V+#9eeP#}{%3#=Xq@y}<0xnspa5^mp2sB@epU?_ zXaN!yX#a_xXo{|Aiw=&6ix=6*xq_I0pOhCuCXI$pjaNX2Txf)lzG#(RX_jtjfF7SL zXabp*>56+7%;MT6kc}}spHdzdC1`|PK!;a|XqPT(qdsb+j_2`dG^UU}jVQyTbRHN$ z2Xugeq`qpb&T6gJ=H3`u@7ZZr^`4XljgelBl2(GPPHVMZYqrki-cU4~jy<3Rm$Fuk zvuWL%lo-UWW zZfwooY|ifN+_hPL0AwjTQ*%RZs%TZEybWZ~y-9 z%INOMz^rkp@6%uebXWxdUvLI*aQ=2`yXXz3K5gj9YzMz^4A1b!4nv(rnp$FL)E*ZL z*KiUqaTCvKo#aWM+>O{9%Ad@v0uOO<8SxXZaT~w!iLTPn7Ao(Nm%--g3O{TdA95lu za(v!dxSjy8&KDU67X}Dw^fq!SpK>aPZ3CBF1V@KCu5vE#axZ7=D;JHDrfSyya{n_w zb2LBdFb|DWSOrFCfi#bEIiGWZUUNFXb3D)UqPBBA?{h!@^M2-YKp%8MFLZMjbVE;c zMPKxNZgNI{bV!f%YDRQPuXIblbWx^sOy6`)@AO30bWaa;Q6Kdu26a+DbyQDv^)+=> zZ*^CHb(>{%Sf6!Tuk|gIbz9GMUElRB!*yQ&bzl$nR`PXWFLqGdau3Sw&}6{3}VN3fggA;m+$x%23_h6M<0!VCwPZ{c>f%K@4=Yt z%YyeVU3iGkc#WrXd-)dU=1E=h_cK~<+{5^dKY5hza(&m*-Y)IH_6>DUd6}R2I44Rh zJpdQ*9td;!hahkur+J_c`Y#_J@G(R9c2&Uc`F+25p>KMpH*yGfIC)3)5DzQ=Dtx?s~LO`vtcbj+XieQTQ>NZ`9CwwXb`-UultN&uY(^ z-kt!8Kl{56e8D&Fh=XwkfP1NLw8O{xtT*|=e|*T->cxkHp#f5PzkS>X^Z(Azectc=*S3A% z4}RglXy6}y<3E0XE`H=+e&&Z~$hg=zkcoCer3*n?*D%94}b9= zf7SPX@;`s{4`uUDfA(+xNnU^VkAL|uWcZ(d`@erHu7CXBfByeq{RfBx0tXT-Xz(Dy zgbEijZ0PVI#E23nQmkn4BF2mwH*)Og@gvBPB1e)eY4Rk>lqy%UZ0YhP%$PD~(yVFo zCeEBXDKfdS^C!@tLWdG9YV;`5q)L}EZR+$X)TmOYQmtyWV$Z7siy(>75D8eYUKf7& z;FLiPh!Cbs(dzas+_-Y*(yeRvF5bL)_wx0~z{QOlE)=>L9RD+`+f42#H9Y6;vAalQ zA2VReK%BX>4yTy&7S%)w69yBcNRa@f2N!gdRTgOEX! z-7*ntRm_;7hZsdXMV{Qw1JfVo#8q}k$6Oq!D{Rp!aWIfAS*tf9!i5f9_1o&#vv2SI zJ^c9c=Tmh7M_3jgFJAaGXrK3R{S~(uM4U9YP!VG-#lQ~~KopKSKRm?(citfc-Ynx` z)CfAetinio^ockki6xqNB8n-hNEZXU`LNIpyTvF>fNvRB;DN4DV9q!pDrJH#wuq(> zD7J*MQ7-5pvLcgBI{74&QA#aI2kY$ZQG5_#^h7sL(z?WefWT0dkF%W}~ zCQ;y^Mq3KRnP(D3P{9KWJy1cL74f;yEVdBBPy)5svO-24oYyCnjXL@$q>)NGDWx^t zXP81SILPH;0^WoPJ2AvypgZhn5~2s}u;U{o>|ipGaW*hl>Zu8#iBJ)$>dGjYm^k*> zIhzzgQ8nYZaZs_x4)j7bm`#_RK~{`2?Kt5iL;*6+dP9L6*g;eQ7kS>n@@&u#a?k-`&jL69&419aqKVE20>6r(7`DN<2B z`ooW5{^KdI{f}Z>tchYaQM<>Cg@OqL9Rp7`Mt3NPAg7xk0t=!E%WTcw)$Xh2!&~z@I$eI0Sw(Mh#kr&5V+ZaAoE%mR`Gz;f8Gru zK}x|y7;qkRtOA1*Ju6z%s{hutsxn4PFvxu}N+ST~WS7Krhc8`<2{azSt^|Q;LEeZ= z&mAPC9jTgxC?F0I5~PDjGsgyTib9M%e>!hOq*9+Bo(s5bYXdN7?)!W_lD6 z9oSbOKRjD|*`;HANwpwB4wsJ)06s3LSRfj(=RgK(3$Qxmp8>r{-=?hURkOO)u2u<_ z;lP9|W`R+W+o+ahq8LuF;~bgL1jjr^kRm*W9h=a^Ib4-yVEY=_D`5F_H zfZYK+Kna*N_y1&=xCAAZo2ycJViUhQLPewlA#m0X9Mho#9jYdd88!BzcO~4knk&actTWZW`NC$y$K(Y3Nl6? z<^f`0^rf@0ARcfwur$%eh}h8_;b7DRj5ZxP_^5Zw`})_fIS>d0FW@zh4tgEJg|dwc z3`ivtXUWBY98|g>oDE_+jY=+1599=}UEh8a)#Q~EzVL=WJb~#;6fe(YOl$I6a)$c& zltlg{X#WvAM$j@;hA^N47KlKnaaw_RaU=p3XtY5($zO#aF?|^kD>`6+_}SCG_O`$M zLKv@WHlI8Jc2h_KXrZ@_yn?I@#Xa(qul(h!TK6>PeeVMW2!#0F7SrDd40dszU2LBD z-v2)M!%s!$!(>b=Pk<<9L27~|02H&>TSpk6gjKYn`{KVp{`0SYg^~Xy=HEX62A}{A zAOQwW|G5MuoC7lzAOkj_13n-Gn#ci0AO%*S1zsQqPRRsjAP07!2Yw(3zQzWIAPJVB z37#Md9>oZzAPcsj3%(!>e#8o%L}A3B4c;IQ=3w~Eph?uA4*nnz2B8qX8V{C)4-O#` zCjX%lE}>c#AxRt|6GovFP9YWAj}wjr6jq@YZXp+Tp`=`)NMxZGjv*PAp&8Bx7>0xx zo*^5yp&PzoUZf#NtRWoMp&i~K9)b;E2nOWrp`1Y2P0%5GBmf8eR~{ZBA|@g$VHt1K z5<$#JBR&pG$l*r_Voh{~PME+T7=j@blp=m2D2C$w{6~K5#}-{tPuzfR2m|I#;>@{( zCC&r`xY2904uL#2*;KANZm) zP9rr+ij_!2jAQ{WC8H$b#9mDoLwtb!U4$TXVl|#4I;NwFT#7^>jyB>NH|hi>Z2v;d z6q~Lfoj{yJI&hB4bPVhqL9dw!67-ryl%prABSI#mLfS@yNkm0$V<2`TO-S3c@th`H zq$VsNO0iL}C0o;xNzGu}Kp2Q56r?#WBub{FO74X_Dh}f~PDAL%E0P2ydW15@M00^- zK{!S_a6-L{2IMPx1;; z1|>Nff-WwlSdJxG76q+k(S79F1nh=HrbJb8#8tjTRwl%lDa3Vs6uMDF0;qr?2trx@ zC13_-O~leHMGWMmC0*G>T)M0!5T#Uxp=U-X?D5=0vy^T#;t&=mu~RS4}Kt zORT0rye30Lf*LUZ$4s4TnSctEqYCIIbylZ!7Q}A_mv0h;{?yt`yyZp^CrcRTPPQhN zutPflU72A72N*&j7~*xtr+kX#f(=AN4n%iOrAUBhoU~<4%n?2wr+F@fVjMz&X2em> zr-Cl%SXP;Ll8H{fS0zZo4%=- zUIdvY#T;RmMewB{6ylriDW8&PoLa=39tE+5=tU#|ZJuPGCaR+5=ATwXpb7tLWY@bDyfz#mv-tzd@4}Hz$S1)j#8+p#;UCTC8|n< zs?I8|=Blo0M6E`|t?nwY2CJ|pM6W``uMR7+CabO%>q8u?vOX)cYAUljgtLaHe?}{| zW@}PTYeQ6Pe`+hZhU>Ok=t_92j9#m_rmMR4BDXSxxsEBiuK%mN&g&tz>q5M%oW?7? z?km5tp}i7@zFug+_A9{_Y!&`%Lf|W)4y?g8tiui=!XkviIx5531zHSdFcd=;ECH;} zg$o43J62&1=)l`OtjWs7Uj&9krmSFe>_$W^@l-5IOzcK5h!wa&8vwxwi9}AxgbVD$ zKLl;izEy27!9VoFZ}>pQ27{79Q3YrK)JAR8qMmHv3u?(r4s5{|=m6>61!#;YX_&^z z>MA4dh9g$iDmLN^0HR{bEDgHtN-%&NI1AWSLutCf&RRryx$H(v!$0gpFg!sp90T9N z=o4_BmdN1I;*{SCZP50^*?vS8kn2XwKrm=U1zhbxEdNzj)g4eUz!p#~QN0&OSnc$% z-MENB;U?%ZK9H*e(=X==En^z!79S-%TjJi&}^y-FG^5= zyj8;+xB(rw8z2cp8<@k3y@BEj~O$F+c;* zimyTa!-JW`GnB7Y#E?RKR#W9~Q}NwT&|S$I#26G=>EeOrDnL1H%{qmP0DD9Lr-c6k zOob!_hTJahz9}%`k0b`ii^8b;_8{_N;Rl;U@OXod2-;;FGFG0j`KLl(7%)lS}#~&U<4EOMF95Ux& zvcxVfPTUC`A4CL1v8IX35LZ$|blyWSK-bEPRoU9;eKJ90%@JqM6feY|C^OXVjE1 z%R#d&4>?eavG^42@IW|2mQG0vwOETm)c?RZaNQg@OFa7s1GoW%EDt$%(?U$c4?C{V zK0`sYz%l0i|V?`J@Z#=8Hkx zOTK9CKtw=cgMnD@vOts*BYAbjk^gl;WX%ES0NaTHQXzKdTAaNUw!T;z0W*N!Z9%6o z0AY8o=L$r>{0l<_%zsJrKVUUAo9KN)gl-URHjnW(=Y;GO5<*Y_ypWu zH(*A=CC$>rSV7269e{&4?3=rpgB5^H@Q8yPOo4K{fuK?HG)x0W|3iAG_vPj=MyIz8 z@53|`gx@{^(DuVWzjqzu13zp-PWOXSVj#K1W`Ih03vfSz(*bAel%%@%Ym zUTaO)IlU)#(mH%oqwM#2ZY9IB3%Wya_@OT0toHl~oNtcZ)Y40EE!nL)7s< zBm~e#!mm-M~bFpmFhuM2h1>UN3i_CRp7B@YDn?gOSYLD1IskE5^Hxd2B) z{3A9zMZ|!vyu7Yxfwa2C~8Jwl)lXA()^A;bjW!#?QnuXkosy68bL&V5Yo>RJTMN-`O9 zHAzJK@_2)|7ym@Jup6?V@hMN1WZe`&bW1lefaebcV(q3K@A}a$sSRs<<7$~rp9W6L z@BwJJe=mMy1K zsaCam75{5ity{Tv_4*ZTSg~WtmNk18ZCbT!*|v527H(XyOoR!`;zFPcIKpl?%u=^* z6TET}GU-d$sf)pglPYF>^~X1JlfTtCDfx#^2II_4smjBgxQU?6QD{iVoST6_%vD23 zVca;=S#SLNcM{saXAYm~MmX&sKApAq4fOYqfk1r!4xd~O$6>L5<)-#yell2ahs%!* zwEm=_uz&pqZu>WF>b`&A8>-Ke*Y=Wzy`gRYC+wsP+sP417cMXw?GV!MpTz{Kjl9Pi z0s{|`27>4&fhywSC_Hj#$O46usz{*@6{6{YlxrjypRbG3QE=tCc@OUhQu+ahk<@*4I$Jt)vC7JCRz@^@B|bH zxcW{a&O22PSdLH^gn4EgeD<-9&;F*X?z)MN8E>Ctm9-AN0~oN4&;zm2Q+8Qu0X(mvXTL=V!8IW|Xdp3~M9AJd?AVvzkTA@0qW_BS z0E6IyzZi&%oEjSPNg5k^i9ZH+gt4I`%af#Zh=C9J-S?%11WGtUCLJV6 zN2lzK@j-87228tSN}o|@{a ztwxhBCfcpbQipUErfawiJJi5J%bxQG&f;*0wQrJoBU7suZDXRj8*;&%aq_Hz9CF;K zVG7i~3A?IPPjb(%e~KFjxb9|s)w+Rj6^H@gki};kV51w>DeIzT+_rv1A6@ij2`t;( z1P_pIah*^fZgT6HM9@kl3qpa6Gk$+oiN?J5R$j6WXvO|pvMrT;H-$U)#0 zne>o)m=EZ2LnX66xFMqOkp4t^r^I6*22Fag!H-J5LyU}V?s90IKJK3S`aP{y;FJ?F!i1+H(p`PJk3_lYJ{5*1!q6GpgQAxqoIM_iCeh`Eq z6yXR-*g-(ary+YG976u`xwnk1O^9NX4C{m%IXFZP=D49w7UdbLY{ndpY6)kAD3B?T z3L!_FOy1-msjV1pRrhg-c&>GT#tjE@wwl}la?_6|Qg1Qc{ z#(zuzjoE6*wz_qI*@5efg5|N3#g#T75P%?#x;d}!b z!vv>-J)Kl!NjgE9Ll_1WgCyl8<-^1ID0YA$d7(%GnGwh0=P{YJOChP$15go7vRnHmCLi zVKiZDU~@_f83V%^o-Iu@q?6qmf*H+l2A!h`jXXtj8gsniHPrye6o62J6~*j>t6ZVSHJ!hu-aq**9NpFrwmpY@obAZ&GsgB%BcpGYS(0n*bqw9lPZ`x zRYNrEkWYnbAk`4ZY`_xGhODt4mV)R%-UB+44l;`^?F)ej^#a>eR3O=DolYV;kr~KQ zC(B{!0nDSi101U#Ge}BrwgKCB-4P+RYY1=%+K>cTXBbYA=|J37w%@*SO?QB5!~Tho zA^lURI$;@488p`Lfs%YI8s$UwXOo5qY$CwC5gtYq)c>^ptC$<{*GLrNUJ|KM?31{whl4ZKa`sk;p(I}`yf;cf`O1F{KFqw6Uds4 zI|1wTBMW(Q0Tc3ifEHM%&UsM}L7_Vk=|*=vD@5&#o%MvpY?pF^oN1!b6tV_Y0My_^ z$Rxoa>I%G70Rxt>fgO@CF@P^9qE3nU@*Cd+nE#Ky4uVKmkNRMN*eicBlIlQM#)Sl{ zGLi?d7Z_N~pj#dwVG)rf13+!zFC-hWDmB*x zR>>E+X(5L-sX3t%vC>-36`3GzyTwS{41!&(&^zIqv0N73M6CZ#6b>TKqr7~iNwK&Cam}ETz!| z;?W8t?YKqF!muBn;nI9#rq1RDmoU;EqXHP@4#r>%?4V=}i~+pBkqqLkoJI3G#PhUg zD!9Or#DJ&XE2-pbsbWL}Zcim*VhqM>*E*z1hQiqtLV+Tn5-qXzDuDDN;sHvD+`zz* z24<}ofI}=%)W|Bsq|YHR(L*jV6C=XhAjqwzih3qdAWlGr00RI`I02PD*D4+)Xi7FJp8ZnSDC_o&F@%!eP$L2dg2=>SB7Kr65uzZH zZy-|bdz#W16JQo>0fTfR0cgP%SfDZffgh++EXR^8%hD`M2q+!SvFuUbl5!$)Xl>3? zE^jT}Ov%^glHaV-7XJX@B=nLmlfqn@5HAOlFbmT#4^u4Ck^tE-C}s04Xj9*QfDWp`8&HnNl+zfY z2MoqQ^tM1Gu@gMQQ#{9$Jj)X+n3FJ|^EsWs0!g3LO0N`4vs6n?L6Aq$p( zPq`@=g5glh)CH=*2(W?%7S)3im2eoq2PAb)GgVX95gzr?bv%{E>a;oU6izOSO&nkY zQZ-dEz#&joRW~35xWYPcGT&Sv4F5svP|P;ktX*y(3yL8az6dWXKm&@kSS#Q=>m&hE zAO#AIEB~-y9gN{BpjBG?YF8(My4vCdQlKU`)mydn-vFZrxvSs+P*l?sP|KoC(*nuL zf(L-0E24l6=5=1vz#*W3UguQ}Wc4P=VzAQnO@Lz`f;AYnkZEQB@N^;z&Q&X}wIPb( zIM@&k(PClY0%6^R0ld?{>gNu+AX%wG12U{FKGPNmfhug^QBT4e*5L}SVr8+wuN-!| zCRQz=q88HcTXWV)^};TE;00cwK%1ak2Zd}%^-V%(tW^q<$D>q0HOHi)N z|LnqCi`H}D1c(3@Q*2HvX26HrC4JQLf#JRb+^}x5p*x?QE2OtbBQ*F%y%Er zm@MFC4r;*S#-SQ4#SP$iBHmye>Odf*^BXuLZ(?H{l(HdSz~Vw9E(hX%sUmf;Rx7N- z2Z90W`k@I$${)@~Kl%YLZgA}+7Hr$)7>W=d5_kxe@LZk&Q@>&wenpdM*3eoo2g3#q z{-Mr_;gK0?8fIYb6a(rgjR{!UHm1QqZs3$tnWl;%lQmgZSSaoG!F!qDk^f2AI(St* zgm6~yA!7MKF!h5vI(Z3Sus@1fVvo7%l9^U>;|6X32>HRI&Muf!nLQui6sae}1hGTF zASLh6UK%K9X1FHSO&|(_-R?G%bU+jv$YCnro>iikOeq$@02dEnE4$JuaKI9<0ddzs z9WGiOxFJtgwhD0I8Y(&)Y``J10i)HS3Us0hu3;TkdU`8?GR-++`{8z{r5Gyb32VCD zgrN%YAz>Lno5uqmcohso$C;_PrIzru1cIE+c?r?kYb-~T!O0=ck8&NtI;if8v${cb zWn3Mid+n%<74CD-Nlq4}4n}Y~Il~(eVpKLTFaCHo+<*?~ARNr$8~^5du03!d<`|Br zb28=tAr5&e5}98G*6Vutpps#8{(}X1E(m#!=W=xd@?ku-A(-=QKF)>b)WgfFf)maG zv_m_zIUy^O?y%1TvH|Y~{*345PN)wcJC333P+461fgdo3S$su3*w3N*0Uy?x?gnBB zc#i8Jo9DREwCB#a6E-*e;kUU?Fms3LmLrqf%w0Gb2{k*D@uBYcuItz?9}23qyDqgG zqPd^jHkvSYL}&1p@Cb+dw2gZjK=_Adf(zt%-L_!bLa+IXg1hq867%*8szje{Z-34U zmgeh4n9r8(K)}K3L<|CBEU|lLLiC*Nt$Nrgu)r9MAsf~K8~-}I!zY2e5VsQ40UIpA z7!a3wTcQ#yff`mCofyCv)`1(WLB&73TCE~?p8GheXj**5xmj7U5n=++45*5i^+(EtRJ#K&r3~t8v zBss#jbI;gl*#wBh!RC~Rw1~_cx@J*6P9WUrBshh%+5iO)K(L*Hu=SU<24c;$E_J#F zr4T}+COGQyz96fgM6!)I~iVxT1guLOr5^#ehQyvqN+^4N*oarT!rw z7$5nz`iWZdWgy=ChP!M zrb?LS!dwj@6hLGTAQYadDzIT4ptm8UcX}CDAdFz8X<#Cxx5XWz3f3VTEX4*I;41Wv z(_aA5sxEYF(CB2hi#&<}47H%PJ-5b#8&@l#R@-_H;PBQ3-1B1Gg=M!2FDW*x7NQtd z01eH9UO~H;|M1T*5=&3SH!jE*Ow|}H(6=lor8EAWGvIX~h$xBd`XUbiQsVa{cz_(h zLA5B$klEmL5jlSs`Bh+L?I-;J?u@r7y^K;gApa@HI%aGF5|2$zU0T|ZyLxNogI(?q zW1?E+SQ559z|7aD!fo44J!mynK59I&_gIX2TKr)ua-+H61>3j(aXN7NKx!GuPJ8%PXr(ca~&m#C_zApG3>xrUQMgVxca zh1jA+n!8r|114gKC!)q-wkrn8Ra(dDD2+h0E>*C5)}w{&B)=ahKjvp%=JmeyL8rQU z1FJ_fDo#M?;~zr>?k@6TF9_wUlYY+0daT<7ZUExjfq?|YnfpQTz&CSK2r@8OBjG?G z<^)P4SdF1X3g*nYAQ*)Wnu{b4WMHGFr2oo<{r(A)$mCzYgu?#eO9<`XGm^AoU@?~~kNul=@###ZLtm0~ z0d;G_u{Q@!yPELnzZnB-u3fqBUs#EOvkZj$Z%NgE(1enG8&@J-g3*E|MEo(Y%%&^B z;MtOJ3mz~Db>I|=H0hGMc_*~cTJ8bl zpOuqLV9QpCrbgCbQ)z9TC5bfFsdG*+`<0TF)@8H7ndd(y5`9EIkmWtW!UTctQyTxi z#3%psAGk{uL3;6ZQDp%pR9RgFVgE+ZP{Yji&o)ZcVhaoDU5H_Z8g9s8haP?iVu&J+ zNMea5o`_w8RU>eDwUBN5;4%x z3klI-&Km^HVU8Rm$x&rVE_4LWH(q)PPDjdxG!j!MrKDj?JPIfu1OEJz83R43_oGB+ z^|Mc&dbWg?fGzbG40uNlq*qC8T~w2T2iUh#OLA?Km{|W5lMn;JJTnbG`|z38W^6rn zQB3{mnP*FXIVcfg1oHP!0xK~9RhH zc~P4e++JitbgnX0UL_?lpw2q7R;{Z0K{y0lun`#^3v8aT4iw*C4gM1hK~@z@ z(pVBE`yQ&7K}DcM29iYVlD86+XhMM%wbCrM1TtvNHs6eM&N}bRbI(5i40O;W$;e)% z!U!W*7Qz_0W6ey+inEYDOYJiQBvE2b2L9x|_eQW1Rv@L9Sd@IqkcO(=+as%0cM-J+a zR#N%dXMgWN8hD0n`~#g39cS3A<1k4!tfP&K7-Jn+@E-tI;sRqZ3>!4K&a>6yaT@3Bpo|CXE%s155xagZbCQBtomv zAqG5`tY9J&!b#SN5P8Z2nJhC@fq1n>47W*07x1t>rgX1c-@6ENsy7hNfTjX?7~lG` zwWQWWAUzTIXQ(xnjzic@r=&8WDuH&kRv1_>iUUSJM!9H0$gD@hksl94u~Q6zF>W14D} zkeJ9aFi#j|9381pM*1f`luRm&DtD2oge;yz(in5$wE^@h5{tm2U?VURVTEbdt=9U=Jz-V-k1N#lcG-Ke*H6`M$i})1} z$UHy}@L-1n{1SY@VIOhQham<$3z`RjjxA2Wlh87ix({S2E9w z)w5-=?c08A`=1gHXqLPksF9XnxF;~7WJ-xn3M`7;A5LF;o`!Z?+T zg&z{BiCRVV#;JacO$3!|LRy&+4__n!AXbV%9iqDfXqdx65(X3Yb&=U9g_(Hh866e1VCJ}-e>>>bLhe?+dum&zE7=Z$u zRWXNK*%HJ(kx~g_WCf`WZk5C|38l#ZI;_0vZg6+KNH(SO+(avS(Tr}iqaS@CAO9Rt zE_@V*cbhgSlI~2rH{-O;tkw}85M&DD5Jx-{5+*7&#Ej;6TS;gtj))Kh0#g8weU*aW z4ELV$*g3zFJPL|3@2nSfgb*AtE zj^dD<{1L|%RLPyb$)A3_kpWK_lAM5gfEWCUxPCl_au~3L%(S2-^>jgC0_0+Xz*yii zLAOlS-R|Sn4p+xocI(!|uGVa!0u*m7lbad82axL`&k81Di|G(?MJqITpjWd*q{ znc(9Y&)CMBqJgt%=cOh5n8q{?+7DR)McV_x>IFgPZC2fW8iTv1M8rM(ObN;bZ!#P- zw&8Hu?*nz4s&ij{_4Xl`n{<6yanYm0$_f@BsvY zPUK`x1AzmRz=Zpw4aQIjl|Tg!p$_U`4VF*|)=*B_;6i?+ZCPL{_^=K7;B*8rb>CKX z{`M>7un%u?APg`R{ZJ0j@OyRFXZ;a>`BySea159dfYa~{$FL?4*iS}c76=7F_NEdt zLo+3@1O~=;o5+cs=!u`mcMQM;OXOpPhG|ElX*#2Lhj(U!qW@AgKmiNEHJ+yuX)_Md zwj@x}5t>J4bYKu2@pvu;5RSG2(=H+cmsZf zP>WM&E~0!1F#+5MLDS$B5;1*^!fn_GZ^7^<{V@Zu0$>avdk|DMOz?Y9;fw=ekCNCA z&wwjWpg7OK0Cz!L0}%{vXpPfAT-msdlvq}*G;Rd3j|i2I2QZNkOOWM*B!@l5aRAqYJvz8?#DoWT6#?|~f)bIF*`tExvXY~r zat8oIps*ASFhJ|z9odi&skI=dH4xXJlv7ES{$eZ&ME{lAfCb-VVy|==`8SR~5{EYqB}#IXHQ)kwMFFt*O{k|5s>dNNfQt)vlrC@sXO>;> z_%Eh;18s*xGw_%pk^rXJjm9zqH(-jV=}uW!j#^TXEAaxjDR-wSBBq&{!+8U}*&z&Y zo9>hVOyEMuaR)FLbFJ|&6xWRrU;!4FA-_~}*I5BLxt(%X0TvJeE=Lk2Kq1F}I9`lLRk zA`?(IK&qt^)54Bxu1 z152<4Yp@;Ct=}cEDiW>->#z?Cu@Nh=6HBobJFp20nNhT`7R#|6>#-jTvLP$7BkNEY zOC$~3A}C9;E6cJi>#{EkvoYJUCOf24v#~OZvpK7?JIk{@>$5)#v_UJhLrb(pYqUqZ zi8R|ID!U>~i?mM*wNWdzQ%kiytN*k`db20uv{lQsUF)@93$|f9t5@5nS!*I&E4FE? zwrk6_ZR@s-Ai??~Jw|m=N8f&wB3%G$RxPwc$g{vWPo3e9DB6VxH zjqA9N3%QZIvxp0>iaR2VE4i7gxtq(moy)G2+q9NjoT57@!pSadhPti^T|+rTE>H#i z!x{9+A~%o)#Sje8$u2(dO*4SH!H{BnrvW-Zoi$`B4p*>D5DfpRwZ03AFF?AU3%zd3 z0IZoXLSntv3#%pqx(xfgAA-363V7iwzAi+d*j82uC8Rv08(zvH36KIQ5T_Rsg`6?J zC=!>FSdqD9t&FsdH>3go`~Sb;sUnGWAsqk$AV3la+yUTPppV7?O&|=mn{YitmM$Vx zWVQrHvjo|zBH0xT#lQrriz0|2!adRg;)}w7_ai# z1TZ{fGf=z1ki(tzzVREqKU--Z1&A~eQb*IhO|iWx^1YY)#vU@4boo{n!6?sRnxc}v zJG8#9La!o{05Bv&OJM`Bdl62_6xktkASx5Z@WaLMpE9;2rs)?hQURdRAwk(pTfo5* zvB@eyz?{(megFvweE$(3011Auzzo~K%PCSflmN%jj@DSC$urApT6HRN!3psMZ?cWA zRWmnGjTG4-yvr01^bfh*BdmhQ2$c`BLznnK%>4v49+nmPSYWa=1NUf+vZ5DYbu7`0 zP;#Lc(LARmkjFcR1wQZs!MRZx)dUq?(V;vdaXi9x9GV=>A$QSx&L`5-pirXtn3`Bo5umRn z@mQ>jAqgN0F~m*TV3lMBW}M*yIItpJwGBOJ>d!XJN}GqMM;#qbP6VZH~D)kjjnE%M9n*B^`MN5%^y zz$FvVPz?8nd>ir%LM;(Xpw%dH10x+6h9lC;$X3yiDSu)|$CAx>K|IdU&E~j<$50I1 z$6zl875;F;BaMb5jm}Up(tnL1uNZ7x8wppwJ5~v(Y6CKCluKKzKT%(OT=# z8ZyTtV#y$a(u?*>E`1?xYLrY7PKulmM8`7+m6jV4)GmTPMU7eLB5@ni-c8LJ3xLWZ zpcEp|$_pUJS55!dzkNe3pnps9pH`9ABU08+BrFr~Cer|9RuS1m5*Yh1B&;%xoUti9 z6o(a7ZVVu9akAaoEEB!5*aVS@Hen>p30F4ZMhKK+aFpDfp%*c36^b$xt2%*tmJk9C zah0OH8Wbci-pvtmRcggaBa~ew;ijRW+&}w67d~CTTX=p;@<}0`7N;VJ*(B~zQ2awPQOwk9BkO%$!NG`DD2L|9h?ZU(P0(s69F%i}!5g7Nm zpWTS(uj2p034R%^*%YU)C7E&7V-evT?v(@40*~qHs2;;8of9iY;0g^FcAZ%>;N`i_ zAsfC{RrhW@V%QfU;t;MJB|Z@PU=#J(AMsIaz2ibN{vq7{DgrhT{J{_31mvL-XG>A; zb|&ODG3pUkG8o1g2Wkrmia^TSOy)y9;@~HHZm|_fI%WOHC!f?!K?dd8ZRCh)A_zV?q zGy}3m;QIY&l_{+Q<(Bc5LQOPd z#or;wZeaK~&`{v#$RX z>7F|P@z2Epf(2*%!x!w|w1Nlv{hL9s$-jR$8eYVBfQ7AE2{IBq`0vR_k|j-^M43|M zN|r5MzJwW5=1iJ3ZQjJ0lb{P>a8BM3#zdz~CKiXvbTRNKQl(2{PW$)lB$H>;_Wj#; zlA=+J3K34j=MUjU7Z3a41N(5KN(FfC6x@Ob50`>=@Gv0w1y7DKZu{cda*@jyFmiKX zWbj3?Tri3iYiP(ojN8U{MIVHXlR0bqT9x*>V#_O8H)BH?y9VYYVaRnO4_hE4~YY@ zAPlXWW<-i2D(ET|S&Xos+-@){t$y^8@U(~aDQB9879#7Pe6m>aD(NUR&P1rTJbs0vQ|B4hF_6Z;wS06Oi&lOjE1!tzCou9~o+t7bfafvqrtDmnj!p1I*4e$qP# zOcnD<=_;YF%Ct&>GK%#d&SVO9*pje22E%Piq7IsjVnh|CW=)DQH;}Mm;Gq`^dI(4i zMNKJzT5Mr~BrM}}DqVHgWw%{---S2ccwZ1Eivw<8A`2$0y*DU)eVAcVd5e;lT7C;A z>tKYr^wXqJwW{b@vG#o7p;8IL5TD4H5cs6N()&+7f*8QVj)L?85VHd+=$N4ON|LJr zlDhEEJ}%r6I22nzQ3;!MjQGfg+qA)~%HE3};tC@bx3TXSZ2$bUAQv*vNyVrXZU}Rd7zoC` zvZxG_qGvdpp}B^z!zVo#BE0y3C%9q&!(T;@uAgVpV<2h0AYRWOo z{KsnFzb+_jAT>44Q5Uci^(r|p|HtwUXWz;E>7zp_#+HX{N}+xn1s@^t$p;myk4SAu zu#BRrh+U*r1W|~ypkldN6$CrZI!UeYf+03Niy{Xr7ELnv6Hgh5S#|n|>7IeQhD@s@ z)xyX@vLcLsM1xymI{;KFs1i`vLKGyK06z9Xx`p-7hd=)WVi1Km#Fzku2}}@15|g+m zf*?_eO61|Y2sXr|5b*$2w4w}`uthFL@c<7q$*M3yorbXxTq??1OT2&w%-rET1R>iO zP8PG2yo@At%t!>}!XJVtz%qDih%Ic9f|M{|9qMS=0kCjL8${+dAIQiegOicnV8JF; zI|h4U zK$jp`Ty`jjuGm?QAWMi&$5dy*ezYJm4>4x+hPN&TP{%k-#KNc#(tfBUKNn9t0wCbPJt?ErcKgG%i95jdxeiw;%SYf2_{XV$&zrgrT-9E#>W44%Z&UHBX$Ag0W1RsFA&Bub2-V)JEwOoXSTSDeEL5HG;M5~Dky&^?on<4Olcc>IG zW;c&P5U8vZbmP1if={SmjL?-JUK16a9PCn;csO=7Js#*j8WjY>4m%?;sY3*6lFG%d zSNg>uMeelYJN=Y{#p7{5d@Mqf>@*`xIB$A0Vq^;nc%>L)v5bL)((QR_h8HP;AUTj# zE_d0>Uj{P}kqC!L@g%<_0SaFWrq=%;vURO)Mc9|{F=skMu*2Rg33W%7rG50d&(t-Y z@yc70Q_7J%8pr`2@U}*o^~Vc}eH&x(&}fX@tYmh;G^QET5EBT}SS2xSB|d_hb&$?! z*2oB{6^4V6TCqPvHZ@DZv9|*T{ggJ$f<GPyF47h} zSeqaPI?zfIw4mv3ydnQs`gaWfVWBVL8GT;t5aRD7@?uP>AH#50H7(xVi!j0c`k1q< zy4fqq6@)rX$Bv6(fb`o3eAtGDYY3R@y82Tn0@9vv;xHM*rlEQs^#c>!+q2;@x))jt zsF<)}a<~lBy(a6Js~ai|{5gnI3Bn6F&)J7b@hDb_GNB{8eL=7XN~xOCv6dOCi;%h^ zg1Y-kAA}*yoR8e zX(Nd&vxO}?2}A!vq>qp!jL?Qsi==g!q!U^V-Uvhf+OO48xr}hFiqRo_v=zbQqPy2#b@kn?#8TxC(4ci8ZRc{?MaG z%RESrC=BWA!&ihOXp=?1EC}kez5~c5NMH$F8i8&j9b+7(Cy=H@qCe*`N;X8w zr9i=E{D^P42sn_&_qxgcYccwgu~H$oUO733Q$Y3VmH%>}e<%kTw5Nx#H`08#F!V>4 zdK`fPO@zWHn}eZ(Xu0?S$M{l75R0gW`NtBw%z!Jue~3eaD>;cwNP}BPi9n|fb27*j z$(R57w3qn7R9hzdNu(vby-rlZketgVqMU$yOtzG310b#2|&=8sIfNPx+{Z%0!@J@Y#OZ0rmOkGcUoXC;n8itflvb(bS z%!rMk1^=YhYPHsw^nrRoo-7zc;)FqN^|5v_&>pJOg(=s!QcsLD&7*|V*C~cc*`n{W zmj4UKQ9Y%?u(o^6%KrF6k^s?$m<&TCM7Q|02gt30AOssi2}^Lb)LXrRXg!QrnvXDo zsc8s?MKz4@oPRjekFdRu(9yWGwSpMO2xEXJI2bqy*8`wF!@3CN%B=^Oj4S{BSGY;i zR9Pb_ZP{6xMJQd;g4jNlxWx~GQ{#*d$MICzSU-Dor+B=GA<3K;=pB49mS>#KZo)@4 z%mNrx5f5rwDm;MRw9L@NPF)?Z+!+}-xfroH9~WSfe=t$CYYFpDA~wB+2s_@rhtmN9U0R>T#A4O-C;%oD!JEc8PCy&`iYLFI8}bZo`SoG zRn@pLS)OA^j~lp(3S!eD5jd>yfgYWK961%lkjVCYx?d%hi+mri<+#Vwu8_=vt&NPX zJs4u$iJN;eko*ynU6amn+J+DXTlfT$FuNVP*6Ow1>lGqo?1>{vBH;fmi0*BIeCb{? z-Mc!3mvb!`^eq?$^}%DP3N4uiXn2P637%(wh7LiC`OTaxFbf0J2ixo>eV7LO)siTp zsn#vUwKfntc1HId(UO_3Fuvwb*X8T&|#$XPMy0>YRSRvZK0io8jw*@8$kx9Ba)D8!8D z;x7gR`>;}4%u-u~1YAss!P&)+V3P1#i3Z_^2Z4qN8ODMLG$Q|v&V7g!?O^~oA(RN| z)U$X7g%b-Gs#mZ@3DYUSa=>Dnx-+a;WYI~IXD}bK?NhTY2p@O|eu&5doH5hU2j*ZA zxSh)|#9wIW6AeR>ELo9pdI)&T2V7ng&9P#JbIZ*Y9UnOhvG9jX!KXA);(Z8J|1*wA zv5yvjVqsp0DQ=2Jj*fB|WQuS&WR5wC@CQULzjdWfP+}=MagZXx+$%d5mwN*D(;>0I zl^*1hrqgHQ)G@^K+^PHLAhV}~L{tW=UnOSc`Lz#C#s^Neo~=XHCOQUaU_9A`hGW>1 z7%Sf79b2p@lwr;YL|nVhOj_(k>6BJ!bzuM|_^Krmm>d7#RwaUi8zA5EB_j2W7oAqa zbZrP0(m@0xprFpw@tKn7n1;+LhMu!BFCw>HEr`ju*#npiuBE~dtcoVtNL(XnAjq+n@nlz0N%UK6wuhS+AJC5RAN z8Hs)1Q|3Ws;yiAA;E5Sy0MkM0lci<-%EV)EzX|`j6S4?tq_&o-8EzfxSTZ^8=olfx zjW_|DZhIyjs3->Gwz5Q;?!vYYn$p3{Nr3iiJklX&jhoE|eNLZy9r8nJ0IkS$V0oh!GvcpWm*jq~^$p?p+;p4vtQ_ z;cTL?=%8t6?Halvl7L4{Ug;g@@g8pp2Dm#0pwpX9mvJ>$1!WhW_RrCAfkc{s8SsH7 zKSGYNq6n~n;FFCCIKGc4fpHgvS3wv&?LX1egK0YR=VR@{&lNfDzL)pXRPO z>6gf;G}pUKSD4Wu@*}iqNWX!rm5CS7I|MDrogj6@Nb@$2i53WT8T`QH$wUU2fmn|T zPp=6VpmKIe9wc9#8*p_V&-Ae(A~r|ls5)VfWm+G1_GgE7w=;5tQF3>w_GqtGX;nmQ z=k}G*0|QYUlHdbK-~*GGFL%MNA!6TdABt2LA`fKucwgxRFwt@mRX>*ZeAoAVKZTd2zQKF_=exQ5Oj)1UD<-U3V=s=({A=2g7=JfyDV6@ zkoPlV<@N-a1zP|FlPHtd_V|`}`IrCqcQeFzrx5s;k2@Ba1yDd|o8R#~@Pj?JML*y^ zlXwCf9dia)0^A{@U?6#(X9;%?qK@CMnBVD{ zXArX&`?Od4m6j$QL;JPwA*cr;sfYWzxBI)t`@EkDHMjP+*NK|f`@k3cD;&T%Bi+I0 zG95zTAUcM9*lWax{K%L5$yaHzKVQGk3BafP&FB2i_x#TX{m>Wv(U*38JkcxBlzL{_Ot`edtee>DT`62mkOF|M4gP@~>X*Ul-#y|Mh48_ILmH zhyVCj7xWK!@0b7k$N&7-|NZBG=BIyvI3RE!!GZ=4B6Q&bA;X3aA3}^MaU#Wv7B6DV zsBt65jvhaP3@LIX$&w~dqD-lBCCipBU&4$jb0*E2HgDq0sdFdKo;sP_*s0Jb(V|9= zB2B7vDbuD-pF)i)bt=`WRB1p$oTy4J&pm*|KKOqD`xIE!(zk-@-N9Rp-#S zcJJcNt9LKozJC7#4lHU&gL40cEm`r-L52#cxJ-IC@7}(D0}n2IIC0W0;0Vj&<3(eG449w> zdYHD$$T%nOM4>{Ep+UNfgAXr$Jo)nG&!bOYkO68R4t*q_aMSut?34`|;-G#%|Nj2} z0~nxy1IpAI6Am$e9Cb6%XOn$Aac2U76H-{Ag%@I&p@x_#=um4-RC0vV)`LlRjeaW5oyzzs}f!Nh{6xiEnb zPcY%bW02ig--0EcXrz~4f*GcmW0F~wfzY{jAVH`h=^7kcu9V|UJLdFLWE`(UmgD^jBM<+_t11scYvT^!gtZ4o36U+vfFM!NP<1s#=uFFasU5&_ffQ)^o^3mu`sI}Q=qn)5bNl)Ot#@yvEG9dUbx|hU(|L>Z^NX*A1YXixa5;lUU}V$v&6XNn{(c| z=bsaV`AV9DUb^Y0qi(k7Dv_SL>#xHed%>%x)Vl1qWjp_{{I6ofC3EN{2*1o0U|Jg3cMfxLgK%(6afh_5Do)su)qsq zFoXXHI!t2ZrH~JT@PUad;I|G47fiT=5+pG}3Vd`B9{eDNGL#`!7$6RFSa2$=N&($G zl7Px+Fo;4Fn9Nc`s)V^FiAj2x*vKM5ji6A4B3XegXc4Q$m?Mi?)S@_&!UG^cf;9NMwH^Pxwg;EZ4ZsdX{;4zPQJWaeDMZ$fVFe(giM!(0-c z9ce)eG?IW?*kT18DVs72YEV6Oh$7HQWh-Y>lp=6~9qw=kJ2-&}c^$$N6P@Te4p9(F zY$6>SWd}*wanbc);v5@2$0mv}kSN9=q8vR!MgU=pP9i9a?nKBG#vu-S@~Rr+;AKIk z@QoXeu^N*khyvUI4lRBohXWBRCci)0YG zj3Nm0V-t6RLW*)irkNm!4JPUdO>9D#!Cq0CjCUa;{kU&vN z_$mgr9S9Ou%mCh=;~>24=0O;sQcg@zARh4TZ70f!D|vtu?(oDXZMpwQhUgN$4Dlry z51;@#>@rjoFfTF`LjfMh3moKFXQ`g5UV-!=i{DTTl+S9AbOQ4s$!)_yYT#2a3WNeT zczp8`PyUqh7$VEE!O4hFOug((UPD@((Yo^*!JltgZ= zC!r(0&NNlR0Flm8B1M>}(q_z%Lr`?E47u!z4`5<;D7GP-gotyum_;QY_l8zD0F>#F zEpP17A!{y(E~_z+H;i$ob5)3&iq=_VFv$2(`}tjNeoC`kwMnh zAf`r$Cfsq-Rl9=|1@XW{RZWpk*a8#}VZfcm;qi~tncH-Qa$DCs#%G2Z9Lpuh9D*&7 zJnoUSUv>Kl6eW??y-o zY)S8m#Enw--a6O$^Qllp_8=hJw3d1T%XCB}29&@=W;L4df-L+XDs3&qH!H7+wpt>h zu*D~Y``=3&BT zP|DTm-UL!0Z%j+I1m8jM9!(J6M;Kp7m{^Qm(~afW0VKfo!CfpNgi4WCLxj`aMc+gS zlg2qjI)xlsLD^Lq*U*^*IUHS^(VRmdoBR!g4Hm?+)zij3UQwNwK}^6^xs&A?#0`0# zM7WzHM8u-$6@xVd2N>B!aDWMHhaspy1)AX*h6ew<^j-$8q3{h~z%9B~ZP~HI$9r+c6&EeeN z6$H=uoc!6}K)68BxgkL$T_Qk4yFu8Y`9iGKk}bpjf zvKd5}nM1RspU?%}Bp$$i_1r^9q0ikMLC6_7d>cLW8R!vVL?qpTIRq-+LINaYCh8%)K2YSQ@h6Mkru>;*5zz6Wy9r9QVh*sVmKr@~L*w|Ra zSsVk{fW^I_AR=QHHef@5pW*%7mH5(q$%|L{8n5&~qbR@)-Q>`H+X0AUc9n`Q(PTkD z**zk}C&FV7R$&dK6PpPH{`sFd0H8!1+ApNrKzIPVHJH2gqd@%GDl)|0_1#8X*g>LY zTCRo6zyZzVo6`8(-uNO;BmnfKLuN@7k(G*&=@#3$gC?kyM}B}rnG_~$f<+!c5fG*) zYyxf3RF4TG!g*vw>>UjvL^}Bt`w68$93_6u8L{12HPn|T3PiVwLp30SH+-f*453ez z7hO@?0dyNUv{yA~mm9>v9MFMReV6|nyn(VonRm^BP>sV5wj)7M;lZWeFX+N8+yXEB zLN7F!)ZGGp>DAI5MAhBWK&oYTdgoajO=>Vf*Nj~+x)MNKB`AubMKFLXupVFCf)Wgb)agRDtO79b zLZcbtKt&7+S@E#XW=vsMs?(=_qmp#vS5HRM3dlSPi&9 zw&a&PwbLbOsgyE=3xFd^w1EE%w7@JrM7-I;?O}v%2o8|S>70TGk#dBQW<~-47g9hX zVI%-8P?$&fOQonOof_()YKEO|1fJ$;IRU~^Alv2ng`V2Nqxuj8_9&ui>ZWFfqG|-A z=BX&mf&&tTg$_mnfWjD1Mu2LNaOxC!PF{7+$xYb zB~tcku^Q{j{OUyn>#;Ixvl?r%TEwzC>$Fm$ZO9wKkKka%;GX>$s9@ zxti;_K7_YUM7ClpxT5R3!t3{_t3rkV)1~78HXpG{K23jLgz(FxafgDlLn0 z5S(yO%yJ+cW=_t2D%GNdN?D&$xB$&?ZP(7gLBPR3>_bBQL)n(C)EdOrcCFWL#@ene zR=7afCM{pE5UhruI;=zeFn~6!0}Y%+F_>-H;se-U9s>)$V$W$t)M$(ZBm47;0Eq997He_?m;BLVKBkjX2j=$ZrO_NQLu;8Fu@b3 zL_f5y*%oR|%s~GzK*S4_t)Kx06plU{^5Q^{ z?%0|x>Z&eQlmMWv>f#pU94$w4$P030!413snjr2&uCMP{EwH|?Mhp^-83fikMcDSk zH0baCP6O{c2Z%Yu_Fe@3^6&oouTea~Km5@?ltb4)X*o(QiT6 zZ&QRV_I?BlS40p)#WN_dLrlOwG;m7TE~Y8PK2-2%w4&YeiZ);aLs-K)T!BtZ!#}(( zM-Z`9R5AYy)1rtW#1d?ay!c*2aoXj^Z$@wvL;Nt3x}hB_>GKXS3VXyDug46`tr3Uc z42&WJ5OP9%N0cl^Vm#A6BymGz0TV;4MCemNJaPY^j3Eo3AuCqgPH{(Y^2Qx`Y$-=H01bSA9uLG97egOEGFkyLOH9BhZv-d3 z;tc?=8B3a`Aq0mJ#Ekr#8<*W&)&xkw7DbiRGGc9dZWN9c#9(SdV#-uIoI~DuGe>Qt zZVd!SvICD{0y~r-LK7cgnPV*B?!$E_t5D!EP zOf*14gVIRx0nETQfb>4l?m%2JLok6q^h1_>F+OAq6X*j-_k%u!@jw`~+3o|kd@*7i zbpD3Q4XpI-{sV2KZs3aKF(5TQd@Vshg97)n+493qOT-r7!4?dJTH`^Z+`%0TL|h+0 z1%SaF-~k@oK@Jdv27EzY1NIlNGC|O_4&b$3a{)rw6i%U4C0GOBu7f&Awq#?$Kp?O4 zRzfzcLu6M%wsi1hXTz9Q0yk`SWLtv~NCXq$gB0KHGT(DZKZG9(L_h!YMGLe^Fo6G8 zhxCcMfbAZzK#*=fYzd`$A3~6BRx`7t<>F#AWT`ZPFfbHl>F^s{)@h~IYOxkUs1ypF zgC;N^J20spa)ODOvq}}?OSwZka6%?B#W&hfASY6xP%u&KPWim05fWa3W_8o)@UUvbUe}Nd}b($N* zo`S3~7y~s#Hlstj-wFf>TSGQz12tHJW^-{t7(pc%gJz5HLEHd0s6#dwgC$slWZOV$ z?=OqTWAemio1AH;u;xPX_$1bBEqY{OOigRms9KY;iQ*lw2>#H`(T*_L^77Zfxv zNt0{|4JQU4@$yHYY(m6wyAs9p`7nL!21mL>_6>v{k`yMS7(u`iJFL1uC?@9$L?__k z0W{`aMx$OzM1eyxLD%{|gW^B$$_w~5LEw8qByc}a?h@GeLWlV?_=^8*4E1qI_(A|~ zGVn?;G)iwX^g-Az2?1^sBZMOx`Eglvkn^;be+2_%Ny68dBfl=j8#{y-L&MWX0`G%j zG(p*d_(ng2Znyx*^YcX)Y}s}Vjw?oRljD~^aI?99Mbr8<;ej2@wV|{10i1ak$T^=6 zwgTiiK~w-=55$?{fesLMUW>gz}j|38LL!;btjuQlqD+^F3BGR66b@)^SeQG zd_fa*^dfi3Q*=X|H0Y{0#xp?zShR{WfbB9kLnMGBLp72gdHOT;MP~~@-1yh;KtY2C z4Z8UEj{(913jf_ei0|JsgV7ecI2deU0*4s|Kh2D|R)@zkOF1N^}UV zB0^zaucrN|uwRRV4Ep`c@^;_9WCxCUtqO9Mtw3r42NwT4m~dgkhY=@MyqIxg$B!XL zmOPnqWy_Z_XV$!#vq2`pgk^#10*)}T1{r(?9U5xqf=o`k2I-=;?Af(#$K2#DQp|Ji zC?Q1R?%cr-?%WlL=>hrP0}PORIB>|_p##SwQF0e!dUe5Y7KRs(yI|L^R>OXb%LJj1 zg;l|eA72on^9dOfE?g2b>)Zpy$~s_)f64)hiGTP}FCwb|ED)ruwnE6Cf7ml9t_Wj_ ztDg-y?B^JVy6Wc{y$}+JA)x9*2ta(W`ez%27+7eA5(i2vMTE?A=n1q6!idF#AR-Sa zohmp$2Rtkgp$H z8dzs2=L&<6D;|ML&!P3&dk->>emsbx4-b0b!hv463Y0B#OH|QC8Ew?jM`nk5+g@idMF8?w_H!ZRTnh~KL!;R@cul&`p zMT-!^^B{p5Mo~`{U3ADqm@t|KMsw9#=>Y$o80Z3z2oA7gq?TB+iUA$E07DEVrKB=u zgG$0IT1MJN4034= z^-!as(jBBHZOhvYahO9L?vRH)^x+RJH8^q|q%>6lO`#3~sufmfC?NYz2wYKadENG=gM68MDy1@^hkd z@lJ#X_}u|!5SM4P=0NtUmy7hszhmk1rf>4NaDY}9EwY6 zSxQlkf}1KN?ITWUB?GG9rJ)!mYqYc8N80$Dg~ZV^BZ8q-Mzj!B0)?1BH0L?dnND@C zlb!91)C+{s1Q-$SIrKD$4}|ea%`~x5PwZza6E($;{N{^Rq?P2Fvz&y!#a5nkhX>dJ ztOI0%9mkPqVCFbNupsgPagnE0GK#*98RR~!%wy?xm##kk5kMq70C)`Pyd@Syk-A$S zP#y`AoW^8C_+S`rJ|@Z;9w002(&j%DW)O_oXru;N;{kSrx>SzLq=B)69o`qSJAmOx zz!b^;Vgd&EAw(y=lwbdq4sxX>9fT0Ju;Ep_1g12tV@(J#6Pg^NrlCy@f+56EOrGkH zY(#>}4^FLk8IMA)Pu1XAkh1nd)t{uJI?M zPU|R5{Hk#UEyxuSn#IOh=OEO<+;FH9tM23$jn@RMZxJ%sqFyDW4yjAPJ_{}KAta>- z=p873M3!%6C8l?DY)lY~-GL01u=@1mRepMap6&%MeFRAY;xY`YWThW_36XPVu#gFi zuc_rS;Wqx!$pcK)YeM>rkaTjA1O_ll3G^i%zzPzPY~dgZ5FnMrK-T;jgax*sMI?_x z1CSssY6xN4@i_ksm=Jrc7^AJ`Zxbt6jt&*zrHWsP_X(cUe!Gg^0n8!W# z@sEKVWWeAvaBfs$67vZpQWdVWoq2Jhp1dgSoTG9CmDNEDGPxPfDjnP@NDRDa5MOb^ z9Uu6zJIL&1i~{!~fekK4U2vhjEMbT*W%FwWa+({^_@w+X*mGIBU4vk+x&@)gHy!e@ zq#`5%b=gL3W^mnt>{MLd1=7IWSeNbj6#@K!ki1C}PFQbG+a`vx>xi26-QX8Ep$&q+on* z!U0G!Si%1bIwafZyY@k7aFlO*ZIm`;b(`;8kio`TD|4>1_bwTj5$z*3EqFBpC=!hp z;lm>!If1nMov(fHTF3=A_`wmLaD^+10ic2d6I4^=zJ&(jtMP$t_=#G8ns(#1`M|Cs ziiu6owjfr19G0)M(3o6ei=4p3=va%IU8O_jTMRg0id&*%JYyPl>Blsn@eB+xpcv19 zMho#V4WY*-3mU@5HuP~JBBoos3&968D3ad_*7qRI1@u3D#O|LzW7WlbmRER=k9R)@ zTif9IIQ^(0eaI^=My2#2wb!r&96Ef@a~FP-g^#$nG@Jv+$3EgR#G-m-8q*m3e8*z- zv{(P71x3gDLVzyx*5G>}<$wmZz^6XAzmYru`iDPmUJwiT@7T{i_JI@pkt?~x3tte4 z%9f21Jc!{7Vx90ofL2VPFn}9lGDangf!F6G6Cuk~nj5iD3FIHe8kVR87FvTeZ5-bc z*f@&v`~HuM`}y3y+j-9ilKG)q9_dOiaT1*lb*VQ6^M~O);}5@(gXCo&Rgt859pX^l z>LVzE;1=!x5ikK2Z~+o|G;$;37A4ATLjx712z~=O+95a$!sHAJ zb5c&WfZ_-~kT`VfAjoVJToBC&Bj=J!KEk76-pB?QLTw&G@NRG#VuJ=3W|H=S2Os}} z>so}5)&=YgVhJXRA1Y}d3N2lN=k&bm1+vcSn&KI%5bSvH?wm&l|DoRiq`j)AEpTL# zxaHiKV3G!6kXob|oG?75p>h}?oL)z8#4v0UpctwUAMgd&TCJ-3E_vR+f`K2zV;?Z&VerL7*6sjGK-x|Kr~cv9 z8gLq^u^O%M8qrBqu7UwvfV-He$vA@pIqp(CAO=3b8x?~AVgMcM#szMm8x#M70d9aD z6T=@+NUI zClwF_6-6AKtmAYtD0wU^Hmw0OGA$CIFBnKDiRz{nr6*<~_0R^9Q{E@-7d9D{})ZzmhHS z@-O3tEUVEhkx~?9f!c&J7>qDCQeYNDK`I@>#Q<|MDYG&yGbis!a~x4+ zGk>!GdY!WIhoT`z_Bk?g*cmYI;pcdt@ApuGdt}vIDaxawevf{Gd#s}Jjt^> ze~dfBQ93K*HO;d<-Sa)+Gd|^WJ`)2yp_4xGGe7lnKl!si{nIk+Q#07}KMAxz4fH?} zG(n9sKwVQk74$(NG(shGLMgNw8I&^}v_ds>LpiiVJ@i9y=t3`JKtZ%bP4q-jG(}bP zF+|idNOVPEG)84~MrpJ{TXa1$v_^GwM|reIeN;PdlrmoQM~VNmNR9MJk#wE#F&~@4 z9aZuIpHo0{bTT*~0U$F;u{2AybW6FknLuSVLXV`r6f`7`$%b=M2Eh;tK?Sa~OWpKM z;WSQ9lr%!a2VUR>@MW_?gCLs#G-$Fjf^;&5lrm621q8tm2BA&mbWs_#Q5|(Z^>q9| zVs8$DQq44RDun|K!4Tl`Q9bojK{Zsvb8sxpAWGv;8K8(R6^bn7P)$HoVKr7|byjz? zG@?jP6U{VM^`9&S5Dei}X*F1dby$g2D>)@hn+Y^LMi?ZOGXhmI2Gufr6ta>|G`dw+UE^6JBU&pX0aD;l1pyE^F=Ji!WnngE17lp>2(%agPxc$yQdGbY{-A5wwr$;3R`rx)krhOQfoFTxVMp|7DZ^J$;BEc(Zvhuhi3}zh zPGr3_G@$fsDP>v%w{ac!aecIKA1>mY1LC}uOke-fF{0KnrdBc-7ji*2bVb)hQv(9? z2~JEm3!2qlGf;0Q<8wzhc4c>VAygZSVgmj&Q8u?RIu|k$z*T8Cc!hU(A9Z&bqjw!6 z0n*kGvX*$A_j#dLM~!zeke4yibW{5_dbM|Zxi?0qHzHm4F;w6WRDfc;_k7VeeJS*N z>oI)Q_kH0verc3_5uaIF8|X$vmS| zd>~|nA$RX~Qk0+(aseG)0gKyskO}#K$yUk4wvHLLVJig&&;cD_ppYebk{`HFV}oYn zmUSV;jFo_rJ^7RKHr7Got26;gOfpdm01~mY1X+Cxl)-`lOIKuTlto8d3f~{ zRY41%7MU`PSTJlkmx;NUL04fbNLfoHo@m)oRskIl!I-6an*SD5aKm7iwQRr9Qj`E4 za3PYZIh@7WXpglil-Xl{c`|}IFc|-U5&rlURzU{Fd7kOHVxPd2!`3;LAjw7+l{JF_ z7U7Z6K?v%(pba`*Cjhk4C6?>hpAlo70iy-}comc&XAkwcXtU&mxzN6HV_E~1O%i75v6~K zh@(S5TDnsaNkv5W=l#4VJADpzus!$pzOUADC}oaq+mo#p<`uUkM?4<*zLfi`@%sy^4rF9rjk0xn9Z6Iz2?cO{c|C zYzrrQpB-Yr2O(o0SL4dw?}r$SWVZ@i?4yYvOe7+Pm_b$lo%Dt}4`m~Ur^|bApNEER zhRYBmD9xHj*L^RXM;Z|$#fxnBu1A`$KXn&b4yld~vkwn;j!rrcenyNf#P@&c9NR$j zts%w_oO|{<$4}x3KM z3#TcOzf)REQ_>HnrJbgg|4wr)O`{&n&^pZ+{GA~#&iIg$&rk_xt0y#~~prO{mY#vwe?2t{-+ByK7#qUxo$Af4Up zh<{uCK&ZMWMPRA)t8VsXBu=grEj9Jf`QOeLHCfvPw*S_Fyk5&3gDBGAjy z6(n@hx94?5>A3}&`N;IgdG^(cx7WAIR<~Xff>{XE1DB$v>O0J&WVRm66J@ke&ZZB4 z-q)(O@Mdv;%&8ljE8VAb~vr9ev*&H?V%e zuE`I8QZYO{@#2)FAd0>L?{k3msEM1v_|LE|cghZT!4yuJpREJ4*G%psgolt0!dfhVYW91SPG zH}|u3CoIi?gxsUNvPBBmEr9RPx&$WzL$j?^1S(%mxyu~a-7Ijtl}sVQ6(7>>k?PoH zDQE2Q$(B5wbGgw9f8b|cMWc~*J0JN|w^$lM_2II&NGZ$SkF65f%|p5YUQzl!KdVGa z%FI@F2ix3n@om2O&f55g_rHFu_den>>*4`<^kmV;^PF{bVcH}V;! zatJ1=TX_X^?+l>4KlhtYJAhXXxfSwnri7%?c z)HimQIW16hA6Yg}GNM&F&uge7?Y>E_N-9&c1_8I~l0RrSjp;+}RfZEF&%yUIl1YJ1 z>&i&lO1F|Lo%;lyL;e^fRiS>3V>0vbjmMr+8ZfRD%5siT+JqaxNh93b`8fI+&o$*w z)1KZ%sihP7AfS_@{UadNP~s2VcHe#qN-9msOH+xAe7qMtyDkX|AG#l^Gi717I>?O^ zKON$K7IZo+{PJ~}t}(P%TkH16pq2X@zZuq)3;9*cY`GYQUZ@rT_D!3VzQx1Bpn~V! z0{JsIXQ~6lCj;!!u_J8?rKI-YoQiGp#T)~T^-8`x92>(f@pU=T#?FIg`V-i0gneRSER3EVw8U~yErfGX)?Bu z>sH@oW$=Z0S-YzE_?1KsZpB;|1Z-0&k&`{cg&JmU5JtfE+PjfgwQi{Ha zz$lbw$xzo{iY(gCRn5NuI#+qooAk~$h&Pot@KjQFO&We&^vP13|IP;Cvp^ZkmA5_c zhmpo&l)nOCAroaV7COBTFn}ai#9D&xWh?hov-5g3YH>A@3|2Qc z$rPTX`x{rVei<52=r~c>FFkz|enHC-~9t9zAa(4C9^$!KuA)c4syluX+1{e^ z2ASNMd@oR=VYv6=WYS<|c9y(T^x)$S?$bVy)=hELLED?D4ce!p-d>1p8Q@?m^0q*D zWI?Mi^tMKZsMDJcMEO?It0Tge*!L!bq)LWlprJzSURm!NgH&cG6Hbj=UZ;WA-Cn zj{6nPdxl>+7BAk!jMce%$ji)gATzxXGs#274Byr+Gult2g0El>X*o1QNou4&6=Lw$$ByERce zN)aMe8%O02&j_4rn4Hp9;oX24G;Oi-UeoBsot43&S?-S1ezoZDc3dd*Vz1zb(hLD% zZ>36eL!C?=eVpN;1yMXTI{2`z4Nn&O*LTQh?SlB4C?dEu-|Cw-J$W{|EvWi?7*kge;XpHDe;n>yN?By3{73+B0%45h87 zx#h&>FDHS~_F*4%v7n)lfv{?L7aa+_a4bI<@6FQ5-tPMOOnCx$zQ|ocSVabCc2k)qXmPW_v<(P7)S1>hL}X3SvHK3u!+a{4n$C z;M3Q{^Cu;cp&y!36nK0?X*uvnSksZdCznaT`DS{c$=lMCqzxq>WL-oGTVwN5oan)g ziGeWSJPv<{{V?r6rQ=Qos{TY5i~?S9l&2k=K9EAR5321; z$;ZZ~Sa}LttKLH^1Hi+UCsE>sst9V5gO+sqjiP!f z*4kj^l4Z@N-RVK2x(%I*(&xGAqLfCgF4carDQo@`6a5DXD~xIUW&7^A44&lcqqX;9 zV7c-{Xh0C{cc83-F!*PiDnad;ESq-XWJgH5$i@zlC2x=GB9mWoss|^$*Y{gO-}+St zocVB{Z35SY8*OCZF9TEo$JI@?6bh;>bJfy|HB zduGI|CAVQS_utO@!p(Vp3#!1=@Rt94AyU5B%HRdv`%iOy)3?LPc*6O*0ba5&@9qby zIJhY;k`ie9(%X=1lHs0vXiFc6D1S`G*^PcGlB&r#&K=mZ37^Ji!MWb>+6~yeExf+WL&e9wmkvc* z6HaOYrT}a9D$+{&!b+>)>``7|9&ajX#bd#HC$>h!IiCgwN6QU3dkowl8t&f80JDRS z>m}0iaO`JMYKA;~)t>fxKJCqA+PsC&!G=M^40vfH3;+$Mf#SjQtm!_o(hxl5P&gEY z-cq>F?-9w|ZdgzQCss1rzMS=gWP4GaMZ}itaGg?93DH7yM9#r#)5&lds9TaB9O&aR zwjD^`jVZBBfgEE>qaj4?!2Kb(ff9TN8w;I`xr6baI5UH0V;%jHy+dOmp&8Id7Nr`v zyFT2rU38=x-r`Ovz8=(OP8p;W4AqwkjY$u0SNLx30ZF_M>b7d7(}zs3Qk5cmPJn;Q zSd&?3KL8)I3B$JGT1Eaao*MbxtPmDxLd;g8ystk6>M_{{&yo^6$nnY1|J1l zqhUDT0Enf@kIW)o-w(EZkY042s1^&?`vOlifFlcp=%WF#u^}oBv{Vxbwez_*U0VQa zDM_H+9uF0(J={Y%&-?d7-&p&sol*!|j6z?k{WR}MBp_RWJ!dvtI2MkGEaM6dB|;kS z87g`S;}b6&?wL5iEe0jE9cbsZVoHT7NO_El6)-Kefzj}wZ`#j`YvG41g-2D&Hs5@pen7{U@0n*GlcCw35?I?20igs1nefkgKsnL{JdSr zjp`DXi+l86+5BewM`ABlAZD0;T4ujWxh9nPq$Ng%9{5ev7@&HberLAO5 z?RZX|dY~}N4RP{y*EC1O$_)=k_{lbYz@;#hAnac3J`xaF9<=D?o{zBkv2q(w(mBN;`&9 zCZ3QNPer};lxDXOced2)v;?Lq1eczQc!sET8oL;DmtF~3x{q0p)=8gOBO&#ELhrsp|D z(XtDs9){IG;4Morw%xlVrzEf;w8C|p0;eWyZQ|zho~fe3tQ16ks)Po|vxS7zEZwXB z)6vEAzNIeyVY7Vk1+^Vns9529GlMqH<~C2nfVcAiV1zT|Mp`BMU&zu!x$IX2? zV$Y@6^pWyM>*Qx1;gBIf`1NgX3$9gOp1VI$n8VxB2f*Y%;)U?1yR=fAKdH@@UeC|> z#XCgoynD~->v*Ev2ATwUfncla)N9<50wZwcQsMvSLtFF4&;mOBLc5}XoqIL~E(%yb zRPsq29A)@627;x^`Y_kbV#WH&AS{r$g5~cRFp28+59QWc9ql^&vKGzU%L%vy}qZH*8B@1tRw+zU+~mO59Kx?Jpv9&?lwFDBopANt~Hvt7T}Wqu5{6Edf4 zomhmNEKja1Ys5xI*?9lQF)+8Xvif&r{eevP1CHLm3nn}^U}<2o!4hq#QQj$F1)R0< zS65JqvMGd>%z~szin38{t?s^^>;$wf#QV%;oh)G;+C{e&%&}9yz~puFYYJP>lC=K@ zhkWDz+-FAKwGk(vO*9|d;O5-qRo^sdTc5Rj&=LUL{kdTnaDZtEs&>z8aBc5V9_ZyW#HHs{>2RNt|7-64E$vn|o2kCnL+oZaQE)N-4M>bF!eo?wq2pg-H4LCxURkU z)xCr_H}fgFn16d%*Zq`)eSFD&qAMMyWIyBIeirA!6VshXrgV?h5AsV63cC)9j#hHj z>7K0~l&gQObp2ZWul9umU0K4{*Q;OO{QKGf^Qq;etK+;`4SZ`a`PPt7-?{qjiy@Ou zC`fUF{U3z0)%78foB%w2{cUvhaQxrlYkj>Ss{ibENv2@`g&dRg|Kk{3<hvF|dQtR4Fq>zPKn|H5}^t`Bm zVSvS1whj+Dky-k}!R=Sn!(R$+rI~+2$geKM+&C%DPX}WxMQrd0#+MtuxNx(xn6=9c z;^oBZ8KfKR&=BSj0+N19`{$;Rl*y6!5l&(2@WmF6%e;B~an_5gS0AscC49(3zxPal zJwBGY(_B)u2e-xDhYkfZWdlUrp-F_R9*yfhnggL{VLLqlX&x%|^o7JWxZ+2od9`txO- zCo$thm+VK`%fTuHbn$x@Zt5_pn}s_MqfF${_QLd@St%+RCg3=;Z&7KGE8(*^b6{0t zQDs`?IQ!M+wL|OOoyFO2b`3NIP_NC&B<$LykB4Glkq%uVc>-X5aeJu)(zOJvdp9rV#gEHRJCzA%8XmRE?z;u=3b9y+col zQOm>Nnjeed$0#UYPKYLjSj({{m2CPxsmD6uM=ALLtG~9OI@a*xXC=xy=+ouUmmG$4 zGRNgw&PAVIlF846>T%vbKhfjHFoX?p+{#Cj(5pHb^|##=WH9{lJ>QB-ZxS0)-sYJw zBZ>Ftr$$n}3|3MMt($KZCOyH1q*~yO^|#VnIpL-^GoLe4#MycM=RBY7JcgSX|@O?=J~ z*-wSdawBaW@3danI*0!iv8l6tES_SbbW6(C<&pePd+(<{p6mit{g*UM{FDiT(G^zxsL9RX|OE zYFuq)w(Fv!U{V3k*QNBD%|HxGLs|z zhb4fti0RzIU9LHz$R00QJhVE$P3+krmcbBzKl=W6wv%6D+*9fAc1Pzf#Xi1xHNd|6 z+;8>q_E6|5d&qVJhXN-W{_12f`cqHL=@G%}`sByuCU8x3UbBKRs7xoiqu~<3%QiPT zz{fr}yc_rWN`yn0SS2AsmETQg`>O*lvS zJ>n8Y<4VSB!U8?1?)k5hUosi}oMN-Oq4S>c1_V(vPBY2_Q<>;y+jK8c6eh5d;k95( z;mdbfj%hqz>&3fY-VhdXIMw}9MHhmWuKl|DrO7tMSA9CBIS;B#DF6{dEu2o74-k5h zPy5(NB;_0LCTQv}i0iX3ncUA4nq%M&-XLN`_9~Q?(lZ2u!9Jr*q33F1ZxR*OPNQHO z?s+9n69-GhDDR`;ic&wGydU1C!Rw=z5x`W#J}nrG4k(@eIp=+&7NevmiPJnUre~T= zf%pH)v?#M+?NTk4^^Xac+&r=1G~wU#IS;N+cEohGtL1uCrLjsWn=M&HaXxu|uLx88~Tp2;;Z7arci$g>(fc%t}hn zxXEJ@WuMAo$lbR|h3*dsH*1m`mR3S>1h7B`cPFoTdATA{1)!ZBauZTVBtR|!+R7@l zC-tY?Zs>B7b%(@sZEh0vSY#xNl+}ifdnm<3fHtR;dirP&6LtvCEXIQv_oxO+th;Hm zB0<6@SdWZ8Co2I>g1t2Ny}nHWZPvxiIuAy^s7Lx*nXxwqx{JF+^IaWnk4I(`$@vqN zcizZ(@zP0HXZJhNowkVNvMwKMQDv@6kY}sd7{HOOG}b;v3U3JO5`M&*}1mip1+5Uwe5#^M^_5S0)k`w1~DBtyV@k<&mDt8ho z$tY0#WksT&8j|Us1r@2~e_Y2p`qIZJ7qWjKR-4dCLG!Iw2Yp~3Y5(jxC27m2=EK~Q z!#OC&T-L{xay+y*9xr%Lvd|`wO6mcg%+f$zI%0!cqaT#ej>bu{cvHsI02ogQ$)MLP zG@gV^m`o5Pm$i@bCVeASr_vGOtR!*s7xUx7@bsV;UV$CRL0s``)+hYhOhkDq*sO zTbJqE+rN2+jRE0KxXedm+_w@22I+W-Q#QDEbYwpPUsg=%g4Mr@93=dZb2MN3v->Ra zkBxr#yShCP5|p_g%%K5}L9-e6&io#;C-+n~!d}u$MDAQP4kQI)pfAPeS}6E3H;254 z@}dQZdaWQ~m>cg;ZjJQ~#eH*X&LohA> zG`#ca(#$6wn*I}0vYECgb1C1cr3-pP@_QGRD|^`xVIX(Yt**ZldbBjT#von;A**1RL>#nn!5~wB$nADiPQcuE2hq zn-5#H#ny{^mjIx6ro*A=&40DBRV{L6C~J;nW7X`EOoA zAI6*uXxAj><0;cUr~-|DpFCwQMs@l>4)Vva=Bpb8dE(C(HCE&Tmx0zwK;i(7;#zY3wMrQsh#6rWPHmPW_@TZnwYc9JNjL zI3cIAojCLcDDW@y*K=YDHVOYnIyr^4*xRMwqUiL0p$ zQ-xBvbM`ighfZ)}N&%d#w_#LD-s@Bp>p-l1iNZW|O%zJzUNT7`ZX|=Bl_|;tK*FTD zIpiQ1StzGFXQ=*b5P*ax0)JOlGt0l|Lw2xueW38 zC44%7b0U<#lDhJaxwhvu|Ec1ckGUvRdJ`I;Dqh882>gJDWYz@s`@WWjH?FQ13aG&T zMv>UPqcsi5HpY{aSoOVL_;EjmH`pAt_t8f@9Qq>veq{P!ltP)dMkDq7$M-I6Mm6xkqv zCsai?fVbVzcP`6)&Jk{#O`;)9c_v=l#Qj%TXS%`M!ap;+)WWJ47ya}61{FTT3p z6)uP0jU!Vk0J?-Xx!1s$k6#3!p+|LHM}<()7ESRWE#V*z;AxkgEFO^#wOE9V`;*K~ zsw+RO02)gig+XP4>U=s%1!bX%?*&Pz46JBjSwU~tmC?}cx}a0B?tQ^!6?_QmOUyoS zR|HSK&LhZwI~+-dg}$UduUd>77LmG*X(+n~*IaWH3OyFbgmh!GK;?3HV;KmOF%h;K zD}>1h?7kB!(AWE30i7!=RrP%9(XJnIjk|aXmC}aZoZKF38O$|84|}O>mRd1zvgRPk zIcXk)KM=7#EnE+UokJGpQj#Q9`-2j+Har_dpoIRBWG;B|On)?;pzXjg(9)}e$ycS7 zg_6QwbYP&?&Z;(G9VsciMT7t;x*XFm3d(=q%%;k(ik^wUyGK;vp;&=wyrDg=B1vex zECstiwzk|{83$#xhum#=wc}ZLbXi4IHbRWxTaEEKfAlc^L--m~Y&+lKxxR8CKE?3U z_i#R(dF#F9ae^Gasc*cCzZG-*A_{D*CWi+T-fT=u{_)~qG)nrYGUHJA^uSnwDBtp<>QfMI`LE%O@AY(3P2N6Q)$3D zV)B(xfdCYOArnh82HC@uoBAyRsw6)2!|3K~`FxpfdVv^h!?t!> zOFk$Z2MzULkAZWj4B5U+Rg&T4Q3|_vDhK`zdVN@4mT74z)y z7MgvyHf_9wB&_S58RN5;^iubYu7xcl8KyoW&?!k~R|o=6eb>F5=5y>PFC9E!7Vp?V z%A{m|x1Uifu2k(llI-^IODTm4WLtPW@}+wlE~X8)-)7)gUonM+HsCh`Xm`kKN&k4^Caw{13x2;;RL%VYe?(N;wuEJaU-A9>3U8Eq^%C z%}?E%>1BC%&P51Ac z?;7a+X{>#tsuZ4Hbqq_eS}y8Oou9_I6W`k$8Y6rbQIP^pMOLc&i*FcTRLbM)wdzj_ z#z5^ioom8qev^bF3GBI$gLWE!p7oeZ4YA3(Z|n2HK003g z#kBpO_#{vB_W1S+*9Z8U(OgQQEzW$I&!wx&o9+?gT)~P{=9Wa>%7?ZmvY)Bh_*&<( z$MF5%Y`;|H3ZZF|l?;S~%!3wbB25&!2}r}HNwyCop!^A%4VNAnNLDiR!H4b{5&TScE|xOax=(F} z4&oEZMl`Of+@6gY5zgP`ldfdO5Ic&KQ!_(yu>=RhYd5>p?3ec&c=feSFQ<^&A{9D# z4zI<=;)WB0PDU;3)GWuU+hdG%@9Wf{9>ykovP}(R{o@GyY#*pu$0;>NY@iqFZ9RY^ z2)K;MwbgqBVqc2wBO-;zZPnax+-^&MAg8_1Zh5zOXo|owUlPI@*It3OUOo-ven7wt zq%NNx3Op==@@9DQRNG$fJD=>VfsQ|4nQZ;Fp3T#DiEwsFj}a@6b5RjwOytHt7A_N? z-x80>+!#t)o+S^zO%WlmjkKkB1{MkpgL>mf$__2y*(H$_;y170rRUXH_b)UnmAAk+ zjD0<}3FSHY1-ovCogf;9uaBht#RUVljvPpo#+`YJZ`nO?$O>P3sI;K)&t7uC?Q+(w za5mLw9qcLL>y@yc3SWOtx=3P5E%RWPH~)p?-?tzFSf^#7d`ueSU!|dju8M@d{4h$- zG=?ylQ784FruV3CwMuobW%xPTL^`0C3^mW1N#{1L{91&qA^DHg^g-7v(HiTuYrOle zQ?H8+A8gYxIQ6fWSeX2pqs!WCmEQhV`uC|#Z2t0Li&iSyC;zeKM}{eB*cw)NAA=ss zG=(aAd1d-Mx#Q#F1i-449GL%Z)dz7FRl7Vo5G%P$xp5&t*eN_BcLU-bgPIn@>^+v)RFGe6v1TuKUl< zcK(w3%H~n{s6$B-v`u26gYmhbn1p0%Z1n+ZuldlWUuWOJymL${; zypY!u{@LCZ$mfy_a=oyTkkB9oeAlm=YItMYpbM3e2#{4j!rLFHg?s&Xj<+`i7QVTw zH<^xZWcWUJ_sPs%$oGI{YAO>`XeI2qF)IW&#;>mqpyS8ALZHjAtN560EdE{u<;zGC zdkm7;lUQXC-mc}g$y0W29wq~Ut)xa+XGbu6`q2OBM?_Dmf6?^HnzY>VuNAjP?l!5H zo1bUbW<9+A_4s0HzUfots8O;3_#XF1&`yO+v)2JmlvU}bN57m;Z*%LUvb<=xL*DCj zsA}SeiLpLuY`};3HTi5*-`>Ny3#QK(O(f#qB`-y0IR%Kn66LD)l;RYPHzi7!&C=d& za^0VeHFs(ama?6iwP_`H<4AwgwWbbz^d0vW?DaG3_>}MNw%`FTS?Hhh7asZ0y@BRH zHT;h&2p|*cB&Pe#HA08S;IaPj4_AX@GRjpGyy2!fSxusdeSPRL>ZbxEEM%T_zm3_L zn6X$6dj2)>t3Rf4*@Dw^*Uw4`X-d;1NMr5%unoUHiZ!8`mxk2Cn$^(nDT$4OS6TlRT6X}T zcfZZts`IA$l!&F8sSnRS_Q;K#_P~`AdOMujg$^9s*y%sMn=G@ED4JUHyszt9kn zRCtM6+GX-teHec79rJG6qvhdeXBqq7=R9&B{7$+!M4ugf|D$-k-h-o;ynC&5x;^qt_TJs=WGSU8zxVLGe&ry+x5UQjsFMQKiy!Mg zcCvo|I%5?Xh6}hLZ%m6=>llY<{al?}nd_G3Kf0Ny8CsnynkFFg&vZ3I^JR53HS%Tk zZZME%kBv0Y7*3_I99vg5iFfYfO4B0Rkd*h`tqkh3f6weKLk*&e0~FUQ@|~xRqcQ46 zCtJ1}fB7rv)M>iU&E1yXA-`CMIvcTeD(xW%w;T+ zGzNW=^;{xAO1Cs-d7~dh^B_@=Swdvp7px||u2U6*k0Fq^%@Zwqf^_|xVXwbhpJY+< zTzHSF2ywWBUw^oIWg1}ZeI_Qa^m>3`_fk+U(OfKXR?|%7gu%(h__n;UUF`2>n*Tz- zTRFDQ{lf%n+WFWp+0oqI;MFi=Z=lf-7T`Ow{DZ$rfAsgzi_g%ky`3iAg?!i219#Df z&9M#?@X`2;$X)Oij{KP!L#4g@x(U+YZgiWRAZXlSlZKEP7I+>nGa^#gDf8*}`|H!; z#n!{(PjbCMMU)H^14wH6K3x`g?3^a`bzOG?pf+FINBHiJ&_#jLKRT4V^-s8pO8 z`Hbf$ipGPS(XrO01l6N=-?~(PeE9S4eW*-x(AjYr=po{CSnMO>tXcqF7&wM`X`N;I zkG|o2L5M%?cIi-5?#bdK4fWqU&mXE^9S8|skM#Y=)pd39NkijrhsHfh?hBBjZ6954 z<%@q&khG)N(NJQID}cU+Kq}La2#a@jXnQL2t2R9e-pNfS8`BNOdoqbkxCc2-(+DE? zfkyk3Bq)3naA5zx-ViYtP(FHR+#?SKc0_$ zOL$Ousxc#~laJG;df@51Z0`r7eB2o# z05xGv`d1UlBrPR<{54@zD$SxSKt(xy-l%+d`mNU~k)Nh-j=HZf%F5vtRB9rIRmVrNm5O(X6qAt>zoA&w7wjSEn9SxH8c*Wya{1z`6}vT7HJ@bFXV{+E)l{y z&tRF@i*kaOE8MejV+wNAJbKXcDn(7)(_R~)uPA~ zNA|U*CV*)wYpI=Jk94u{F93Xekh2w?Izp_wN5@UswYd9s|6970ck`DX!M6Xp{??1s zVLp)C`}yPtXZVJXIP9^2?CWZC6`uGxEg7$K)nBaK!N?++uNYfTtPJl)8c|*Y|LfdU zljMKSO~uD(mzlJ(9Tv*8wlhP)*6{lP=dYa?S~34%F2&#r>GH}x({sqW zi2|d)W7NZ^BpLD-_OdJu(JoKWw*Z&PoU>zop8GtaKcnSi$=?PEc8V^P!ahhONTCTGu?tLu*Jk9cJEfjU`wOgzK zoA_u~B$ToUNbY~qxXv#B$YgP&pVo9F?)$u5wl1ZN@4>L>UuCH-ZvfCuGv%D+AVg3i z&>hN9;!f|8g8*2orJ|qz%gX|%KO=4YeQMYjUr9yu*A?5q^&HvUP6+Y}hd{?#gf|PY zXdg1E1zhxI(g#pWse?kIu5tZ+w3qcAR%;`D=`8*?A7A^TQ!pmZB1~Hz^zY~8y^|iV zJqcoGzV}*6RzF<8Gd+L}L&4yoFEEoxZKSQ*L05+rr~%duO9SkdCx$Y=OinL>p9|-i zZUFBd=LSqvaVaO!(NBcs%J)VJ1{Mq(UqwIH?*2{b3AHZS9j#5`S~eG6kYzapyp)_D zCaJq6XZUYfE1wPl8pqes>klX1)ZIi9ZRAROgm`Y6XgCH4jTAx9$hdYwr#Wbg9fWzxjA8`chA! z3rHUy;_;M&`GpE6EVG~&o#_4AmPh*g8+RShG%|X`xFmy`73tV-|CdxMk&XhgmDG+< z<1ya+FJK_deN_qxsftBDhgF3j_SbooL!K7>qT1`eyfx1JE5=ODU4&Gq(j-^UK)8eX zIYG$#Sj;2aPUi5+crSYGZD`_4zc&Silz(i2f>_v2o%KX1tRzlJnvx?cdN z*Khi*rzZa31VGk_lK^pjUn_{TO093BKV|cl9&=1dPxl;fJ-6gtYQGw|d;C@C9fF=$vnAVyzASUb|_63fT_|Pe{_Rq&q-Y#>%<&@zYBoZT1$4@ zwOuc{v#)#4`v(R_N$A?j#kw}XTSM4qQhrU&59O@+TJVgz_o|@tZqik-PTvh_*}s4c zCSD+axw$u_^IycHJN()ngr)bL8^G=LKz8nsZ2)sTkOhx=zVC5hQDP*QR(n`hdX60c z^6sammF+xx&cCdsU3}Y`rJLQ{%(>soI31Y_g6C1nmum}%VyPB&G=q9Ig2wHIjotQ* zWCwI&NY|nnjNx-BY2D>IuKc=BM(L3r!N|GWhCFfy<)2;`hffyQw}aobFxD4s2euOl&lE5StX43l%b$s)fccHp$wbHm1q{U=!AXA0T;Fb5u`=$OW_i#B3ltNky3j zrENQ`tLO^6%->=;*M2px8MI${fgsbi+|;-%y)~kX-2H-7$D(+>H4^$wR{8B;ZD{FN z8lCHi_6*qiR=OSuxG_OO7d#U~y^%Zl`fa0EE6+ME`s(Jb|8}QPdM~MjfOJjLN9%Px zO4s=;E96HuHV?>@<4~B{vYz5qt*kBg!&^$~eJ^%y8G<*p7$_i|gcpCyjB?O3-2*0rip;o(vf*##kBeNZe2D z$XgTP7Yt6i-B2D`U6W?JmmWKn{{30VdU+V5;3w+>LsuthO{_MSNlWgD|8Qj=SW8Oy zk*U5H#n08u&XRyWA?J5~=?oYXWp2YD!@xFjYtsXjz>*>k0@&95j;)Uwa=FB$%1Ewo zXuDij>_C5`D-8PT)y zSA8MO6asR$iAutyhnZdh^%g}28;pCx8@IJ8D-GhD%vcgv%di56{$>oc$x)=n480NJ zsG~;Lgv49%Dgl7Bb;{fQwQ%PEf7jd&@_;l>PVd#?>&GP53%NhBcPz2buNU&l`{4f; z1KUMGgs)mH0KT?W8z?(yMmx1DyknGby-&D7Fj(4KxAxJK#w>A|@Khv)sq~(nCS05sEV<9unx>H;zhU>zb z?1Mf~CllcOooT|yBD!NLWI@_OYAP?)PV2VRkM5yx5qS1)Uq<$LmP+0r6_c;`tOLU) z0FnbEOzPNJ60%rMWbW^@x9(+{o&2x;K}_CML#5?jUl%>~CsOy5(;9{jrygaVgDcDQ z{RJKc_#0$jR?3ku@bR9==_CB^5p>;A@TU=7thtO(Y*CKR&a~}BCBSktc;ds%l+o~x6WR{AP zCV=rQ(F)IddW=Ey1PIIPU?~D*f}k@-Mz8spHzt6~z6 zxurp5O-5o*=0~Z_Rc+G^giQ(}D{&S!2avgU*(fD+<4-z^pp&g)J-f>-D{CezZzuap zIebr379Y?oAKk3@Fx=Cl`JVonET&ocg{;cG7fQd#l>Ne0KFT5n&tmJ(q{C(JwlpL5 zn$>@t$xnvMEy)G|NPO_zYN9mNJn9Iq*UFr>$3FkBosVSD|i<`QlAMb3PB!ahctSA@|j zGMEAxX8J5r$>#1QIVNVN+%`ZW3>p~>ztC8M-H5~D^7Z74C_wEfD-aHY@3sAvVtS}0 zg+NJ_N*+l8v7C<_A!bA7*grBl8l#?JV5aC%q}dx|yU&@P|D}@&3j`n9xLw?|vTGe) zC@9=!@=>$(vH~|fD4x^y0GU~QHzz3OgAzIu*(SP^0eGX9L}esl;u`7p)R^Qo)_4ha zXDr3C{UX@9)#ws1y3sqP*=wWpYmzu25jB7Bdr;f8xZLzEr;8-QNst-z*|g$D5x z@}t{J>ZTrjEtP5z8p(-?Ar@T@87C@R_fig{>6nU4%)LG41a<(8ct68-&Aoa5^2-Mp}f+Qs`f+)dg6bN@g(4Gr(Lw zD9jA3NEQsm<9x+yG%A=m3t}flnu!a)S&Z#6#i}s?t)WO|K14CJTrjAFRR`by_Jo#Q z+9w7^Ydw2YxL~fix?l7}7W_+gh6WQ3d%Ni1v5U)y=a;MP!xDUXrO^nc9gF?yNT-3u z@5SIHPJ^jQMyesVOT@afz}j$rd#$-3nn|@>?1lw2T=q^!1yKAQWUZZn!JC0{>zKA~ z1@LMN_MVr#D`BTgU{!&q(aQgu9ifX%iv#x0&;cEkhdIzZ&S!cL+T2FuvJVDr% ze{Kl+hsL{--%Jgd$2VBLX&4B9uf`hyggJ5IrW`Oxfr3GW3agoGvyh=Vb95LOWbkd` zLOJHDEevPw2Skx058U|okK}=U|Dshqz+l=xd=O*yz=Nmg zfd|huG{1vKhsZ5>z@QCf3l#DL9BkP#kuq4n*W%f?cmE!KeEIX~*SCKke}4V@`StL55D7+(AlitIq+*;=A&gFJk0+9T>L)q|h8pgGnEuIdA;%J^ZApXj z`3FSUdNK~OsYr4`vldDl%0Yu-0!|^l9y`FZnb7iVo5ud}2QV)Gfd-H zH-%!N(;)xDs9Z>_f1Yeovk;RKZP9N zg?NhdBtWJ5=gx(mqVKvK7P12mSrz&Mk1inE?hfs^L#wV zeHPkirJa`AYN5?S7!Vnl(1(f`U_ux;qB9UfW;ty3+-QHmNTP3e6v@YwYAgsd9t0Z6 zUUOVjhz@hyPzVSc6{29AarR{|$dNo-Pa&%qj!DgtOe)nMq72fDNj%}e5-m-kO+d5 zdJt&bl-$Tjq|rNqNE~x|Q0NDN4eB??_YxLKFPs;mG~_>1ns`-_GerEEZSdJ=sEr|d zwc{v9(yE_*oPT~O;4)QSp&=WV39acfE{E0N23<%iGH)h{iIbj(KG8r|mfFoTLoDBY zgFKV|r0u(ZS=5xGPD<0ETvB;vOSzMo&gZ<7;7m>+3g6h`qZ}?Ig*p(#!yW8U!3zIg z2M=ajNZg`gg7O>+IiIkFC=6FZ6P^%-DOBMKS=d4sF6#-x$k?`oF)kknqfZBdoU$ax zL&`nt2Qi9+NCNhasEjCfm}$sEM6yJPxWF9aC`t{;K@K<6U<&>EM(B_;JBTbzB&1qM zOh_g%?3K)S7Ex03@Ue~JF_0u4qsdtMQAa!W12_qU2>i;j6}0FPB8CB!oW`|4JlPH+ zg}UP+3*$6QY06aTi%$&PQAtZ)aue;b9z+ZY$kxnhRXK#3BiXkplo$kn1`%M%7I{Ze z5t5VZbJahNBOe_+rwbO)ff(>0hJ`riIl&ZW26y$Vl$@YE?FqyPU)W4%J`?|%(Uj&i zsaehbOaMY$%w}V7sGuDttB2tH;j{Xsq8pjRoFr)oyi_n~bc%{39{)s-H->cPCha zFQOOwlt=^sZNJRs}D)*Bcf>fogzb3PAs;0T&T=5|S)T zBx3VZKuKbfh!IqzNHLPh7UHRe_OYRHq+TNZm^_!EEHso&Nz%RuGw&5Lq*fd06N_dk zQu6P6ku<4-W>DM7B8{^P0V66^`&dvS>U)?K>OTT_znDBtBp+3XAsJeq?QlT{8knj` zVs%wx>Zv>@V2>zl@rkpZ7rp6K?|RwWUc%AvhYS*Bi_SR|=i9Yb1lpMBOvGerW^7>nzs%LWx=P|6U|{_$CZh^15x4K74_JKB-_ z#%L>L9$`{ql{O(4RZ5+1Y@e&Ap$r2pK79!!4N~HahG?^&-7No^T-@L2@jU z8`Pl|RV+zPiF6G@-LRAvEjK8JeVrq>l;FzCXxWY(&_WAauz)>gMzed_+-5hw8P0K* zGh`UVG{wo#RN-Q*fa028zA8w+A*z8J4yJ$~r0!o3p@2kwBoZWw=dKWmbXuZVltq(c z3N_%+p1bH+lIR5*F6j)G0a`|pShjbWHAux;c}QITa93u#4`%I0=j znq3-C;ln}<@PUN{6Wk>XrO66;^8NO7l@85dIM24SL1zD5Yl+H*iyD}q4k}QA2!w7r zc;JEp7NP+Qh(zGTObH>Fi5z6w0)!%&#y+4sXODjz|+kv7zu|8q@GpKbS;DfnKr3>qm1zvG>j0GrH1uMX_}yS7=EDcPi;{(k?E@O+7z$V7BI7E@)&&*ABQ&;wRJHE| zAHy5UTeHn$`5h+joDR?gR)WWk`(sQCar{;yKl%T0F#+ED*hb=!G$q>qW+*_FH*=fX zsv8VjAAcW8#Pl6oxnHI3W;}@xdaj&d-XS{+x#a}G00uE!=Yb-j6?eP<1}})jgSN06 zX7EPBf8USf@t6Pn>0f{Qw?{(a`XkF5^k)FQ{J#7TL1s=trhr{YL>%Pc1ybVB5YXsq zq^?>A>n1Rx_-nuxVz3kf0^UFz#^D>h;Tx{5zho!yL}CKmZY-vuYADRqEG*Sziz*mE z?KEQ=tgXXF;syHdFi1ie;LX=Q##7{CAGoH<;H@9nqK;_f84^!3_MrxwL0m%t>L>IR~43O57=&1V{ZM@cl}8FC}u zh^x7{Mh1OQCYYuQaZm^U=}X8^ByxaO?qCeYzz#4d`kF{2oDA}Scb1#Y0Ol9AJ1Kmd#J8J!V7n$ZRJtQc=#1&MJ6 zZa@_Yq!?9^8Zo08wb2^yV*;Ep9Fg$`lu@FXfQ#bBsulvwNFo9(V7r#F;25g}YQYwS z1ue+SywGFqOc5ayQXv4!R56J94Silx& zfvZwtnPws5B5T|I)PVTfYVC&lVH_E90WgE;_1 zBxj){MdB!vk|c(WQAs%2m zYDGX;U=~0jB@ZA4WD`yiob5s8}cat}J(>L$0HVvdRZE`bz(>RY4Ig?X4mykvcJF}BHpOZLmQ#-#CJi}8w$CEtuk~^idIQ?Tf%ac9Z(>>o4KI3z& z&Qn0vlQYv(KJ!yQ_me;S(?5}gJ^>Ry`NKZ{(?AatK@(I#7j%!V5+Vn5KMIsVCzL`f z)Iu*bIRo@Qy%R$_)I&cML_-udHS|9uv_DK#L{n5nSCmCt^y5fWJt0&-P}D_h)JAU< zM|1RrVDv;~G(TvRDlNb@lZ62^Xe2a12a+_qUc^YtFiG1Z0_ySOtW6k-;V6a_np_|l z>`X_y)JtWPL&8){H_iVd#?(yf%Upc)8r2jkZwVydqXINQPUn|N#AsFPbnG#@8>GDfI z6;!Q-|0aY~-(D zmWpyDrlVI3RXh+iDk>mtzDk7VQlgeG3t|Y7qJ;@ursvp7KPWXR=1?yBA=dC?Ti7%z zt`#koNftacRM(YVmxT$M0AAx2ULhn-x{-6c+ys^mIQWz*eFHtD-_;|3lz>i6q>{mylIFEMQEcFqh$+3Wg+7v)wNxNR%qoaRnY=lj!}nl);81B zg&4pc0CsO~HDp5sSBMo^Dpo;^H6@^mIXw10XvLaDk`{ngjP_;%oC+Lv0Dx zM&fF*0vIkn7(giR6e6k?ITWCBQ{n+CAaaYTPYG6Z(INsq7b4z&_rAX5T&AR_^0AQ%7WhnP_z65s_qwHcci zB7VYdTPtTL03N3dFu2w5rm=gYLK>q2XEB3&$#HzI7j4lZ0RVCZ{>b0>mVWD(K4?hw zzy)sgm1+BzS&)Do4&eYI!4oQp9iUbrT8bSiDIElOA&x*3&cTu@;~W;^9N6Ji7orH* zp@J3S1K8m*ihvUqxE;>na1G*u695S$xRN*_2Hb-IynvT*6+3=uISwEPX80rTlnaDO zV;7Vhq))mdU$>XG z?=gF2A#$J#?idfoKqP_~3>x-1-gu|Ac#v;ciC_9TVtR`k_6sn`Y7K%5RP#A3nRHX4 zsjUyHtJX2QFPN~H0T`AG-uOAbU<<5DIc#N;W%>YcrBJ{6rjzw0 zIeNouOTx~UT`%nR_W%mT33nME#w8}6p!JAn+$@V9REAahfwUV%W#3SIf+7FxT931* zVLeVT><%Nh_ih5Fq#w4ymiB@irqYZkq-bEPG6@zr}+`3G~oSd!E`) zi##Q;Hr}hcs@xn8_VmmT;8xFkJ0h8H`f2$N#d5=`T$&fAED|^ zNdi~yAUd{>)8@D+6yV@fBFGg2%rDUv2tm&UaUmcDQ6y!uOiZ_)L{6w;O2%n=)JoPx z%)Yp!AG&d~m?rl4Ns`ipWoGLDh5^g&&d$K5PFOxTa()n*<}~K$XNanOAtMEnN!PC) z>#tW^cc*Aw4%gAMo{#08*@4rjeIab1lEx+4Q^M>gdfPp?k|tavB$(L&`t9EX+=u$b z$6d)={38{Dbq_!}26o+Tc<E6w5K2DkUj|!; z3!r-6Ab4lhlq$n)?FNr$>P5@G_8d>j=txdRl8)w&e9Iut_IvJbT!4R7n&0GQtBiW% znKxbP9bF_gktwrY{pA~R!d2_Pem{aeLWf;GiXA_keHkn19QL38S(w8C;()+N?luWL zi13`dA_xx@ad!^k2Y2o~G;F94NyCQ`FM9Nd2Tz5M2O@-gK(e6@JYz0aV0kd)K`?kM zT>OIP%SV%VP^K)or3)A_V?yfqcn438pIh*N`FSAe(wjLODhL_jU{f&&#o*y`&?MKU z6};eKzyJ@|l2{vZsd|wo1CkbGe)M|Bj^4c?w;=yq84}FYhB&=kl-kh37B55Xv=zAW z&d(en_wG$98DTA3DWDz*_79&&2LJxuxLEFAF@)3pK_hwN-@b$W{vE_;8leke&$i*) zR~yd7V*koPt$o_#v48#cIe%Vznn2RI5oTe2@LA}eOt4?9y+q*keiv~E`(FLx^5)N- zM?bjl-+6@H$u}f!-1C71wrrWu4`6@-4oF~u1|EoDf(kCkV1o`m2w{X0PDo*e7G8*9 zh8k|j;ek&GlN?FA2{TuR^o3~RM=rRK;!i8K_|qZoaFWtQ?y!SnjycBA5J3igq!2?0 zaU>B%B?7t7Mi3bo(nvem<=ILtHT2S22SEQxlTC!d6&I8rDS%T*cYpy#Qb&1&SV~Pj z^;4Q#c45_HB_;Jm4msd-hff0GAz7IRtfa$BI;dsT(NMMb84F;lFwRSFz4qRVZ@&8O%WuE_{tIxu69_{hcfv41FB9a}`=Y)L>nkIT zBr!nI2m1L)QjiTHvE)HE9_f+BLw5g6V3Q>A1fY~IsTC6*Gu1@Zpk2D05}uWMwP~i6 zdbB1~ZX$#eoCsZoM^*<_&}c|vXn9alY3cMdWtb+4&|5Mi8WPBfEs9W4IYY(37L7(~ z>7jcnC6EG+iQ(kgM*qp@WN~{&i!Cg8#_DLLEu7kF2eo$VN3pefz^($}mK-$9J#i#% z!o8bcO2~brUAiApNA45e9iaI?6Qs1n<_LlJ?Y6wmH#)KiRSs2rO|&bzK==X3L4PF# zjC=07@6LPgzW)w<@WSKE#KAu?K(N*(D(vvI_&%I(#6O7)6~;(vgb+a;3G{JF)C)vp zfhIpmbCfVq$@1ARGkp+FS7ZNO{zoD0Y$j4@tLc=__rDou(Fkea6dmNCZ3v+WWzHmq zI{-=`R6B^(Jkr36)FpoW8_=YHmOq4~MI-{5Ajo*~wwDy@WLfjfENl@7yyfa5>tf+Q zy!AI*;fipEI{@Miz<}DY3nBdY$Kwz(yPr(XBcL(eM|9W_VQkI?wF#VxN~5(2z^ZiN zLLF^XcaS2s?jNtCPwWm5M9-L@KM5F~8PABuG^%lpY;2<&)rdS{IL{+K5Jng0#k_n$ z?_PVnm-JGSiGt`yMxG!EC)|;Vh8%Kx2k2hLk~A_#3g~AIL79G3hCVA{31(Y*Us$+? zkOz#9fkv_4&MwlkHtqipgF-t9(cTu7Q+=chIq}~Cnt~GzkaC0$G}|tfceE0EBr?GK zi70s)CXfN9M3GU6oHj@{`$dx^ps)ofR7kjnXlEM@iH)>s<;05&?uxuRO|($-g3|mj zi{KLCKX!PL8SL#RxUt*;wjsLp%pfK45k?Z*c>rxy5k2s1h&-{#EiS^&J_ymGepp}& zTD)`F;`-Oda3>o%&kSR>`vrri7AZ zYh~J=*_R54RZss~;nS&Jk`$jr@Bj~-Suqblv}tzDDP*lc&NM(kxXCh1hGAe*q&h)e zcCb;fY>K83C0Kz_=CB80Kn`GefE18%RV!>r3u=Qp7sTfo$&#VqR#?Lu9>5=}Ifx7N zq0WnR=O6n_Nj*uToqeFF1y&55KM*F6)iU$|6R1r;vT!69FrkbGs85J)fJ7=b#601$ z=jvoLTPwP5p{gxSYoQ_vTYQ2fOmNP^HVWSGig&!^Ew6dc2nP`Tq@y3j<9FxP$CL6) zr6fT@OWDDRO>m;6l(+~36vB>8U_uj^KnP1I!U;@x!X234sUwjjQ}FRrK!CY}7rp=n z_F0l772y9u7rs!GoOq!Nky@(y1d=7ELJ*V)p`}`cf(JX`Bxganu+qNJ1uig616;VU zWA5;U5l6GeVG;w5b=*EYconX4Vr!|QdZfknRUnNrs@B>%RS#o0Fh?es450&0^~CB31poD1B}7o7|7CuPoRo%LtH#2JclH)0!hGT?)Hx<0Cwc#f@yH z@te|gHZ;({jdpf>fE$QfHu$K`KaP}XeAK!$uQ`Z7mn*J@pn4ywX7zMjy$@K68X?p5 zBCh{&C~8tq!_*!rL4W@95#sdYt>-PbxzCO6bgO&aBzb`_;6Uzxs<&PwwU>Ds#Lq2Qm4RWtp@mlPzfd3n84xFa|p`YRV$46rQYXD4B_H<$1;7 zq#UI+26!RnV#t{eI_0P_d<`dC&_L40T**E22`sdP?4Ot})q`jt#A5P-mk$sKTg-yE zBvG{BT+N(gD38*grJ-#uog4;anmN;8faX9gkQczcvIr4|um5q|iv**GrIC%_5OV(v zU-#oY%ku9tcI|19Jz>}TXm3CPdOD97zVV4~$l@FCcxo%u+8z-+>a*F9YKkHy_;fD2 zZ;$)j>wfpV?>&L)ZLj#!OZdI}Kny$(ZwAC52E|mqMfMc|3!Ghe45)zD|5cYeun%rW zO;PnLK<)=vAOg*gKKMOysp(We0TZjh^gW^g>qBL%DLEk_7Q}!XghT&GgaU$s z!?%DYLVQKYgcm{+R)tmjFM2;5OxSqO$xdjn!z4*SH|d_={=SjM(Un-w2N3D30Suj$o*b9P*4Bl8)ubj_v>Gj_(MM@hFeN zbB@l~jq`|)`KXWk$dCQ#kG)fm>UfX;NRS0-kOzs738|1LqJj(QkPiuw5h;-qNsR%S zA?rwy8L5#Q$&nrDk-cY;7=n=>Ns=XLk|&9hDY-i#c_AaIk}nC9F)5QXNs~tSUW_=9 zHK~(3$&)?llMu<07UGgWNt8utlt+n_xVIup$&@RiJOp?H59nSExi1`$0Bo0(S*ev< z$(3ChAz45$VJVh!gb)(|mSX8_%X5>Xn3EVX2!>DyDu9( zQjL{fS#Sd{P(1UdmQ<-PD4+s@U0y~&)->736QjK%YT)A5%$#F{=poV3Y|0F#`{37y{wp5ZB;WEe-E z(@g}Ue_+`JgD4@zIU&b+A>BEi^GToeX`ds=ULWCZVTqkE;+_%$pBC~5hM+3<$%zC| z8qc72vSy$S>YyJ9mL|mjg-I}3(3TAHpAizE6=DL0APA-Tppa+)zS0l)V4fk0qABW- zyTO?Z0G7Ztq1AbqdUT-~k^m{dn1TQZdZ?m%m;j#Bqe1^Fr2qIK-&H)obr6`zo)D6u z5VD~aa-*ZEoI}cn2uh__ily&3FqxS|!r*__(V835q!03>6T$(E2?!`)0*{%cOlYNT z3a4>;jnX+9vWXCNG@W9qo!j^?DqskIAg5#arh!VRg*uFJgi>}&En(W3dy0-Vikyak z0*0D}gG#BFim9HMpNj^Y0x=?xdLU!!AZ02c@|meaXsM^Fs;kO|>2;HFlm$#cq5V0d zCB>an%BnbspbVO;z3Qt(=x*>vaun)Opo$=(+90GFA*TAPC77zs3a!!Fgaf#w6N0P^ zqO1>+0JkZvBlxV{3a;UbjMus#+1elp;HQSbrsDs4d*8~g?+UNANUjQEt_$*(qdBSZ zs(bFLul?$;hd8eZQm+c40)L8SRYvpwsx zKP!_nOCU81v_)&QNBfOJJ0L`hv`y=@PdkiCD$m z3m{wzwqGwr%USZ)lthdw{>f`cS})n3l(&Ww|(okf9pGX>mnKp zxP@!DhZ{VCn-YB6J4Jv516PC$Py>idxt0H`i%p5SNe7jJIF&TYdkxlK5n=)<;GGS@ z13!SeshhfRBo5{7G^|%NEx)HJh z5yhho!2ssqywCf*;*dK$00f@#1LhzO)#@*4CkwM%ASQ6HrJK9sOTG@Gmwm~XG776v z$(q8zupFYeB0{(TLotzHye9OCcYSQ=?&glsC`UjUb28gvK?c5vr#2n|6An~)9%ry~W%yqKU66mbrlAXA{L zaQ}7=M{pp3pmyGiL(bd9A29{vAP!{QSk*8NE!+@O@C~htz12X#L*oYE@Vwvfx(A`k z3j7V^fV~Ke5I;Z%-!Kl&I}XQe${=F}$UF|=Ffnof%i@3xTBFJn@B`jZ%;o?NxjY~+ za0|Zx48ZUUs(_V<@C(22eAEB&&8&cx5LFAHtRHbq$Ma0j9zmyfEKb5es~$YO`O;uF z!U=(#NC#m96yXV);BORxJpwUcn$XAxtqBpG$OsVwjSLZ-Fv&U9VEz_hn{aRuCLkx2 zLODH!t8etFM!3`Tn)Bt4n2SnF0IV~+`8g0$_!Ai00hp<&HAATz;Fv|ED(qw&LEQrz~BpW;nvvArn09Xc8%BRox__7rYJHZdD^J` zY%dJZ$e|k`58)2V1KA`YBkYjQ9`VmfJlOE;5f1DbFAcrUJK8wZx>j%is7(i2;|(nQ z6T{sQD_ji+@dnsC%FXS(?>hm`i^?Qd%+<|XtsC6}vBJo35HD;Fu-#aqEFeMf3%md_ z3=qyiph0Sl2nqk-3grC}8hGBMsoq7N!x8E#1hWJy!d@L5-=4cKG2l~mTrn51-yfj~ z4E7TZCNT%$0Tl7y0P+de1UAnt4rh+$%-!NQZ4T4izt~G|xeX31eGqd%;R2!3z}(W# zt2NX84W8lL(t8mvTnB@04jGQ;cYY8xU=HIz=lY=wz<>x1;Q`?c0}XNAyub=T{t@10 z3kXXf=<1j4z?HLx{5R7ix4WZJr9OxH;+P4iLjv&tGZ1hI23m1_9 zk^T!1C@%!Um>vr10Z;XYyQS=zUJS1vuC5zeuOJ-b*cvq1kedJ=FAx@g5gD=N_^Ux? zuOHQPO+SIfYCbWj?aL^==;lBUkA4x1ZVvIb;WU2`bKejlZVn?pG1%V9NPQ6#;LBb7 z?HB*iy5|lcKkf+nG2YM22r5wZrC+#xy|)=WoAO;RQl8%_QP8jN zF>a6c4dK!D{ShWC>@-CngkTG^M{+WLJP_UnaGvcy5%a>$?K$7*ea`q$@$-gW=ne70 zG>`M9)%*ey>51SOJ`UI4?F-&pg9Og`a7q5AkN#bYr~m?%D$mbQt}hJ0Un#*cvyKou zrR!M^$u@N(Ow9HGaX=sgckVt2M3_*aLKe1YEmZi!oH&RI70@wPhXDg|=By~3V$K|e ziUNCxoKW%rgK_5QD6D2q&cZkuRU&lb5@OD83Mq&q$75i}8X(P8y9rSjuvJMDxB~xn zD**#vz!0fy_%LZwL556h1shiESh8i!o<*Bh?OL{N-M)nzSMFT8b?x58n^*5%zJ2}v z1squLV8Vq7-w>7sEQ2hG1v9x}IH3y{k{2Fw$L>(V4@D5#DCk*W40Z(%Dx~D@9D|As z&bi~{0U-k$vISytM@b<;gJl!gvXw%m9Gy2YR%3l2C%EJTTheLHpht5B9ibN=Q9ZWFUWV3{dDAJQnUUTONgmBX>A>M`@OF>Xn za&H`Qz67&7gpP}@qbU?3ZlY?c>4>6)a#9l+Z_GsKjibDzgN|^_0jH>i-~>kwI;!z* zB{$-jgN~M}p+k;03OxX$ajKc4nsLT)S(>O7~my8U2eIBmtT4Tkd>&S`^Bn? zN&xP`v>Y6EBOf%~Q;7VvsBzy05Gt&Q~kOgm{Hag<2 znoJ`C=iWe@i)o4<02XHsWM{+3UT_kU=w6FcLP!BQ7_R08nBG&!1#`xEcq;~6X%(3K zZczduRdqpj6<~NlFdtOEKHbpP-gM`tprR^0T5ZGC%=62&qqIf_1Ew9dBUP+A49b(i@$#R@5euX z{rBg;e)k81U;hl#9;67+fCofi0u{JG1~#xl{}W6A9XLS>R?vbM#9#(BxWTYMFfbD2 zUOt^;uNjeMKYGrjAuk+8j1JC zy@U~rV^m`t2*NJci&k&i^9 zA@PF9Ln;!Im&9ZyHMz+YO7bq0oTMc&bOa<&%~vR5*~2cnI2(7-OmAm=#o z(amp$Gob%4=dI>h&tf*zp+WP(vLu>?J~Ba~#-bZvJZTqDeo~)-K?1ufQq2!}^PuE> z21J5UP>3YJ1vg+qIniR$ll~*6@)Jfanec?X^rQc#<0RdLW)O_6ykMLyVB88ELa&=J z01KuRhz-`E4YA;09og_2TW&DUXFMU7O;9OI7vfTw%2Zb+;9U0}x>mLZ3o*iA!V7ND zm}4o#qHyp5OqUhUy==5D9p&gp|3Z*Rl!T-n@@7A#u~^1VgQyE(0269yRzq za>0q2>CB4kgTxidLVCdx#uq${y>V&bFiN@F%)xxgO0IYB&B}9o$q@y62VMnAfk&tRm>(QJLDMCKL4ow`O2sm;_ zJI+BhOQ*}4q}c>QNW%_mVuBr+-b(+9OLB~W4)iAfwKG2aG0uJnBU!pFNfvB8&V7J2 zWdE4P0h*v|V$*LL{a^q-{?U&oB!IvDMaT@2;Zt(rV+mGz20plbP{j!33DX$%LBE@j z7Cf8R(0JH;4={smaC;v-MaYj)pP318Njt_1o1R4mvfwafT4}6DZ3wYQ9LQal{=G@^92yyuVDgcH%-~kVJ z$U#Ch@CBRq{0mi1NX&Im^P6*_B7m54omWx`Yw&X&>VP`bvGAFzGN2OKSjW>Vfvnd? zJsTx)K_$46^`~3I2pz=7du#uSXMxbV+r3qDLPEalY5Te^4A6MD0et`$_%yQuS!qA| zXgkZ5WTpQ|^qv*J_^~vY?+-=@o0Xu{E+=zQmuB#_tOMqND0 z%+(I?0oWiR)aQ6jIuwGNc5osSoM?x;R>F>RAS4n6xz;(_QD%h5x*|+?2F2H15?mkP z@S(-8SFj-8Jjf78ZD<}dcYUyOc;{M!Nns6RxT4{~<=025%WKpT60 z=P&mAjXk(PZs5~>EY_!jR|uclziAsbbJDkxD6f5JjvNC(kK?s{V76p)K=s4EaYD0( z`v+*~hyD|{Z(^DySSd5o72ICpq#=3 zJ7X{gYIr&?6hnU!2-&iRY|sX3umr5jFNH9IN-zejqb*S!~oU#(h6NreiL5;e+56Zm2st_8%u!VpUN*EB*aED9a3`oO- zhi3prX!^I6_`b>jsAQOpU}%oMLpF#Iz?%Rl^{TOdxWJW=HVMqP6{H_#3cycP2?nsS zo1(`|?7m`1M=RQ_eL$in7$^6;wr3a+7qGE@w6kg3igzlR1Vp01V;UF?EsSviX{*MA z!~;8kxhqV$1Hi#97{Vq5It5U|gs6a=LkJwi104uDn*&OL$blYIhyZJ?n=pcPu&;{1 zuXV5lV7!Lea>_P@EUc>nD|tngIJ2anMz||9Y&6IN*v5bOySFH>ZD#{(=S!gf@hmHe}fN1) zyovv=youFR30!+kg^%avKO6gGaXHur1`v8nw~1aDft079VJl<08jKh$8SOOJb)MoO(oqfeZ^PYfVEg#L40u7 zhh0&G08>MZI|d-OeZbg^rL4qy*p9`sm}1X>q`!BvB>rkI*}TB5TEql+f?~kFe6TTo z*i(GOQ;3kZ4a``K9j6~{(VH04lCZvha6g0q$D6pgoW?qcAr*m3$+g8JP%4OxNk zsgb2$g)muxfZhX8S%J7jn?jx9R0v=#5H~=8*f+D2JAw=McC{>hej#tgX2mVQg zC_aqhnz`>zx!T=7+Qicc~9A$*yxm7k`StZJw zQwTx`o2}4QUM1G4T8LmBR)r|m#Q?*mlwpqaU9enEe71{~l4qiwHXp#mq=4IK#%fVS zj8;T2xf@-9m;fQ}s~8reZ8qJy(1e0j;(QHf)-&hWt<3)ezzimJJ8QrFb-W3EK7iab(cX+?3_RI^{?w1dTK>A@f-Gc(fNI0LVV@n#KfdgWnCJtD=oYbI zrB;Xp@Tp<=(8@+$)0X3LYO@ZGWcXBwZOA}R-CsAgD^y$vo;x|9qq$eDU;}n({6x8g zP=K1F>6#P51SMdGa0rvZCo)_Jy}jFY$Xlw+GU~q6V%SPyo@c*qO~3|=3FxR9P}~l# z>djV(w94xAUOXRV8U|>BT}nk^=q1mEF0y_jv#yZTSdFz_lD2+gC{Bk=)5TMRjc*}X z9$8q1_&P9S!fzS7rbc1c4Pm=wzY0;j>CKGg!o6JwbYifv2C!T z8OTIH4oHV4@5z19e`w#p`#TqiQ*fkQ26zG_x;A(-vWrhd-{ZxIQHi0?y-1T?1>_`7KPhiJe+e5f;dv4uJ-1_)H| zNOvfU+9f7fk-AEVVo3~2U)TCR;%KUnP0NfUNfJuiF1BuBx8^W!softb4S3!?caXh- zD3bdmV{<)*L7cW}fQD!2M+PW{XMl!l6D|K=H>WK4KYZARfg997qi4<*C}IF0dt*oNeT%>gVp?DMH>WpOkfUg8Ci5vN)kOaRz! zSpHK8PlUjJumvY>pNPc4;3cUibCRz1ebrhGBzW*=};$*5h&V2hyN`OOr zvIa}21S~)z+0q7?0Ixt$zqbTzz^9>>J94T#KW+9)&2@@XtX}{1geUfCFm{AX_GN$Y zHCuSJF!X>=yKzbg8J!Iv2iKjh2x+@kNq77IOu7MOSr#TJ85i(Nx__omf1IIC`iBAW@WSqgh)p>jN&xcfwuEBxI=A>r)<-L`IawWGJZM!`zH)^ax}F<@ z3K(FNw}34mI`FRuMo-F$FaoE0x~z;UpjHT>Mu?>(yZ&EufH*)U+q#15)KSB6U?IbW z4Ep`+$Dkp_1JnK$tGH0uzm6U~_G8HZ;3LU@Stz=|2eD(nX*V?9==ek<&6>gZecYFE zA(M_T8^-*%L}LkCwocSM05Mq7rcR$ijVg62)v8vnV$G^`E7z`Gzk&@bb}ZSlX3wHc zt9C6}1}-KxWiWwlO(s9-Hg(|w?^C^esd|X<0j^mFF$n)P>*B^+tqg7;F1t8#O}C8W z-k3qT;RME;6F=UY^zn@r6)zrh2-zuv8LP8S=IVmU=dckfD5!Y{kA{U2A~gMEOVm@h zHfnn{-gq?a#5ET$*BC4!a;c9sZxvm$795nUJKR(bHq>w`rS)`Fi zBKe_+=aI-Hj!8lpC5iZV+IRh|{hN#><6izpB_HNlfyqM4?eYqHs#X9{ zO6;w{BAcwT%QD-nv(G~RYu>QV6-({0(PEpew%c;st+(G&I&EUrf?KY+=c1dgy6dvb zrnrBR+pfIx(p#^+_u`u`SMTx_ufG2R9I(Ix6I?K?{Nm-W!3#6ou)_~S9Py!d(J8UT z7h{~U#v5}C7Q%EX+_A_blU%aNCzty%TOp&|vdb^S9J9=is=OAjA2H?ze-0%ZE!w9`*R9rdq12vc>{S=7lu6IG9AbXrKSHHaaFsKB(;XQQ3A z+H3E5L)A>Ya6=Ztz(JV{a9G_n#f!3sf(n8dGKkr16JEICha;{b-ghxj_1-nr*=H7*QdObEk7L!rOLwRm2m1vXuPoA9~pv(sL??KRD9;@mG# z^a2G3gg$wR?*U>+?6)JIyz_lF@{$}fNd93TO?bvL?I%?Gu?-(U16 z8U7{41cneq<_c)R3t}*Xu7cc4UVu0I{Y-V|v!1QqlYkTeP7r`7fd*UX!WY8uPpA{g z+@4nv2J*#$WKkbmPI$TO#W09M93l~gB?8a@`7%u&Uv0FmMEen0kDfDFMH|BU(&>uVZo(Y5|BniU=f(g zTqZOBC`_;rlPqGp93Pu$&1+(Fi_iQ@G{>TXKd7LB*&HW1%W1)FdZnA@Tqir*`9^eh zMV;=PCq3)wLU_ssg7(}eKl_P6d~QXa{v0Sl3;H>LYDJ(1T_{5v+PqGVOP>y%C`Bs@ zHH5W~G^aY< zDZ6mW)1Lx0sL}GNP>X8Rqw0#NNL?yZn;IXW35|)1@eCf<1A`VM)2UkBDp#vAzWO~0 za#n+bM&$!h@w@^Zxo89}yXw}rZWVHHlUpVmLP@*Om5^m*j}jV@3v|39t8g7GVUfBx zkvNVsO+ZWy_u3v9paUH+C@f_wYt+z320+9x9#gGb5PhA2^V6rmp?SIM3h{B;#dz)piZ z>|sBW4vdJEuwCIR-J(%9F^oXRDn9Ju7rRl86Rsoa;%njcBp1dy-f<8ISxBu_vLRHn z@r~7!V;&V;O#?jB+aJC}l3=w#w)LZI;VyX79}s zKgXpC1OBSuGs8K~%UrW{R*Vi0$T`n?h9#Y$lGey#ch7Q}@1prnp9 zt!q6%SKB(*x{eyIckSz6=d9Pj9yYO0ChTG(JJ}gKwz8Y;Y=$xW+0veNqo7*8sYWNv z)ZR9?xAoPl;m8G;94qfS+wF6sJ6Up#+uWY)1T zUpj)?`(7fS?lB33IMb_cbqoO*cm$?N$TfcTuY;XG8DB_*t3%wLhdu3TUr&f`x0yk4(6-}`Q}s{Qzow0!|$fJ=41BR=sSt6Gz*=I#SPE(=V!q}5;^ z7MUwP^BmtYDiJdQN^;rqmruIpOKKJ}MA{pw@C=GV_Y_f5Y2?t@?A z-w!|e^*#RbqyOCJPe1#oz5e#YU)k@EKmCV2f2e%m1D#?(4LoH3f!31;15`jwXn+nF zpbiMgXbj+ZFn|G0#cz~L4FF*MWtX+}1;DMAkbHnUxWfeE2Lt?o6}Ukg0KxB^1p|nK zIrQI#=l~wr!Btd%2FTzH(x3(aM_KHK4$#CG;6V@K0T?(%4w6L#Xutx}gbW@)1oYsE zDIp#_z@DT)3b0U9)W8(Dfg4Og4|t$dxPdv;L9U!o3J6wKcmNEHAq5)Fx4~D-T}^?h z$Og6po}ony90KUbK?<5f9_C>+PzD3IfeCKK514~EY#~=Lz!p3qS8Ra`UPTx9;3GaF z7np?*GEofjAQ18i9_Zj$wBQ%i!~@{L9VForMnw}QB285Pz!p@AaEwV({D3#;p&p6@ z5NN~{tRPoZgE_bXk|aPPELvIw0hv)mgUG@eQUxO5LSz*p8urY((beNs#MV6A;h{(o z#DH2{0z0q;1$@IGR>K>(0UdyYE^0&@m;(fK1qcFSV&niG7@<}uKn|QDRpum)EP(W@}Mhz5FRqV!6)`SA!239b@ zJl>#2G$mAsreKYcd2WYQ!Q+;#Drh1DxhnfZ|p@MFh+vO}J(R z*k&a*g#z40TS1@#B1Z|-f-L}0P0)ckQ07yFBvM9&TWkdb5MEPIKa=m}zhFAerL9 zKWZgt9)O$bU=u0;7wkq4enD}z<0Df4Mg@F4>D!6SY_A3EZjsv<-1UWd*4>Uy^h@+Pl>5n#q8;rvb zFhCr1;~-`yLx@9^PJu>r=F!VxO9zYQM!YVL;y$0+rr~=a@fGXUAFD&dYQ0y-#0!1W%BJcvh{(>&>>q6WD zN(RBd1}rZGK|=%qE08R{R_refj*iqqU^c~mq61d;XRu8f$cYh9XjXx`p?PG2J0$2i zXo7{h!#PC8Ik-a%TExm~$iWostwzr4&wN4W_8=H^Zs#W8D2hRy-a$T6L=JR8 zs^Y;IRD_)3YoGgc6o+u%fO=1S{x%5La( z?mSjNJ{E62&Z7dTsTkD%FCKV7Lo{V57H_a3#zMMa^!DJSeydt-6YX z;f@12RKpdfAUMc@21|t^aI7wnY+8!ME#T`ds4TwH|j^FqMVWed21D;V)F zRB;x6EDY!ZFz`YZOYAT3YXShQDs(I>ge)-l0@El07z2YYWU(taLPgxCEwF%A(5%hg z?98Yf%Z<^K`7AY#N6-o_nS6lKQUXONZ8~rQiy8(^Y@pRr1Y)|w++u>zHbe{*LD_O( ziDq(QCWR-sLn1r>M1y9+ReIAX0|QfQ?lI>f6s z@Ig9ZLs-CXR;sc3#%>5SL+HS1GQg|C^8wW91Rp>J{ALT@!D*IiL;`|?JjLF=L3K<( z9-`yV&@dgCApg+>4-BG4!1N#%b1SPLLr_4pGDMGJD^;xJFCYS$B!CS3;sF@(Eu^F> zsBuFWF)*g=AGPFLt-|mL@RSAO#m)-LPZz;a<=B7w2DL?0wN3txF8lTRS*HimNiAJr7oBa0|YF3kufk# zbwjLzQ&+@>yJtlh@e&_^QfD|5<7-$uM8FpH0eAqu&aFnIfKg}#WaWa)y0z2@-4{j1 z-RZ1>5}fauMbK`-gmIu@F9agv9|vy6UY|olFu7A;EhZ%PVrxXu4mLwvsD@s}4}5D3 zukrzyc4esREH?#A*KkG5bYxzq2Dfrg(=w6bw^PWrb@K*Pxb`!P_W|JMt1hK&H$)ST zE>w&u0z>z1Cu;JZGe7enceiQ}p5m)ww4xp)5X$MV!f7Z5sFRZu`b9FMZf^Q z4o+1QaZ?n9Er=7FSyv<6xaK(B2N6c&JYFF8BzXj_lv6~O_q98Ca#H{{6BRZ?G-xE; z5E4)V+H!*1`uisqI3bcMs%T@FGLC^`vC}| zn_uU!qqaM$wxip5J3q5C>$z~=vprigr+4~y59Ahf0T_sZu4*E18#+z=Hg6~Yy>WB8 z0<`)<%z8tN=|k)80W4w#I4T2BGn_UdtGcPr_p?G4w?>TV9oRwIt9=h*be;a7qVsP> zxc5R>z!rD`(W~lda&%Las@ki4?=r-6R_Cp|0Up9Un1^LelqLiZ4WjSA@i(_(HUJeQJa&;Hwa`KFO-WLR@(1A3*1?J41N* zQ&g}mfKqp^!Yk~;E}X)O&pX>>9sStQfA;v#mWP#BgwhVY(rWo)DmhJDvcFUE+(yEM zw!=Aa!X_wf#J4DwSA^TnX!&crR{X#Vv$8AK1S}uEEt>-_S46NkgbSGe!#EH|4Uhvl zxIqs0A z3(Ndt;s*a%%fuZ_5MsxjA`CibL)JcU#~t7dioqRr28zU;O%6iBopugkjFJlxGLfB= zIC19?`#_TeAvw(P@ub97yKFLZYC!17Bn_IvoN5ko@-fBah|D~N7$ONQ!zQZepo{oA z0IZHaIw+*75GqNhq}U>;F1g^sqs@qJ%1I}lK*HlEgMz|isDdgGOCd4JEa)W$wnEe> zJl?WOAriGh)1a;*`pTq;#(+sY2DT8(tb)!&NFlZqumhw2ED6espos!IDTk(5qs0~$ z%B$fqD+>a`oNsFCL9^}LFo%wYf*tlCam?v~yKko4^#}80qphZ1tV3uOU|1n2f#YB} z2$A8e1!k3qe8WvAMP5V57hr-o$b;L$GmL}5N+>S@8H8wLmtBOQ(BFRn4p`uU2`<>+ zgAqWs5rKMTzu3aSBT3Lt7AkvuF(PTE3fw z^3uZkfROAg2+@TIvJ|+I{yg9!Je=;D^2=tiC6MxjJ_tx5BYH#F?Q(9Ybc0+_47e%8 zkpqYyC_t||M0Da-;&t0S;JN6gJE*$rY6Awk*nr{9pmIqRj=0NA7%VsRltAZ|hN-XK z`s=aJUiEkw~E7v(P~We`QIoFEl539)|r zb;KPHVQ6Ogi^w6|kq-T_$5!GX5d$8>q=xv)GnXkAu|{{SWErFy;)or4(3YmaorG#% zvRbOJMy9Q4$#4jH0Ms0!5IBX6Y&9|4oobl>wmqSQZ3nnRt0K|`k@(3bL)3uYE|-<9 zh%ku_nVkMuwZN0Su!$-Gj$g3Cs)P6?a*O-aNnY~Bnt;LTV&_&^y-QI3+7r8MO!QAtV!31b3^Yl1MEP!j|R=wI(cn1wEcl@EC6 zW+UTJ$qX0~543|F2qd6Ea>NP6#Y|=(3t&SMkfTjF@&F%T*?4N;h7S@%0Y5-i8;|yw zo;5^t#=6Yu4uVdCq;4?&#CT0vBpwtON{CkkoQ z0Ul5nO@$?gbi&Em8Vahx@sNn-Q^*!7kkO?abY0T_^jpB^9u&O3=4egGT_ zfCd~+3x_%4Aeo=BrhyIVYSBbf5YQll2lU)#d0g|0+#MhRFo+~Uq;resB|s6s;00rL z)0^KMqy@lW*CW@(isw0Jt-CvjbfjevR)Fg=qOip$)Z+n9rjoLiwd`dvn_10n7L^Z! zB@?nxAUH^ImH@Nm!7RiHcAO*s6PnP_IY@NBlX!p2>jwe{=2uC%L(ZR=nlRL;72OZ=< z2l5_(NHt-A8{#krI#8w>=zYTnF{X_h&_F;4RM0vHPAs1{m;3tjj^ zrbOa}E_}+LCM<4S~UN?0O4b94E25 zI}R^c;fi(X;;oSM7Gt>sYFDhn6{S8vB97yWTZsBNv?E9%)%DkdpbHqhPz5V)(SnGS zU@#_#>|{9`ZD~)N+SRu9wXsc*8#KsbO!#DJYdInKxq}i#@X(1i;WXJs#6%);_q&B_ zkRyo569?4Li#QPj1~ij9%oNf8%!i3|yqgn9AkP#4J*C#Y;3VEu_@t4#)rSA~zpXsL zS4U$sf+OQ@JhVUWP$|37PA;Ecj$nuW_@D{`l~_0 z&wG$^>LlS52c0?(z)r^WATi+ZM#u%f-tDyD7RR}bE?A*#gUDdix9No<{%%-??Oj@JtuXU-GX4r04-GAOiG<0qTzcdm^Whssa>1GAiKy@=X5>L!)XUa|od( zDBuNZfC3`WFvt%C0p@cAEin#_JQAPIZ3(jnG$4*3-ihR(5MhLf?sP1qFv~3#rg?1P z1V+hL1Og$@=nAz(R%nGiUI86eLG;it4&`tT>97v%5R|5`V5;v952gwm0!Xro5C5ej z%I@j^fT*&(aA8iM7HUBZLun4!2qDF%(5{6hAQ! z31$yTas3_x;%Wdi$}ko4Lo4h6RTw}AUP22gD-pkN7G&WE!G|=qX#!a1jjk{OKw%cv z&^;JH309#MJP{V5F&d?D8maM=OmSdPu^RCMG&BPoJnk{*;2E`%H55S2en?Q9?y__d z7Hfbq$RQlO@iD|fz{as2?eQM*F(36YVXjeNDB&D-WFO_@2k4+0yrI6dNg&+=DZpS1 zmTU_skg~YI4pJ%=Dc}w0;2_cK(iE~IJ@O+#G9*E=A4RexP4XmBG9^`VC0Vj1L6Ic? zT{0$RawciACT;R2aWW_4115E{Cw=lKfiftCawv)N3VE_9kuoWjaw(azDV_2u@#84_ zgPx$WDy{M=u`(;Qax0fmD*1ydxiT!paxBTREY0#P3&tz=11!<9E#2}h;W94eaxB$S zKiG0E@iH&1b21rbG4G=> zDKj%Qb2B-!Gd;5=EYm(P^D{|P19ag3^s*LpU^R6>9R0;KS+mZzh&88zG;Q-XM~MMu z;0A60Xi$fqfRmnFlRZMSK1MSiXMhQmb2*ul2^bEkm~#oDuO^lt3zi@vlCwGgm2(CT zLODMvJGGNL%||(X^8l8>+YllFW*`fSAsDW6Qk zvq+8fGJF7I9t0sUCS$@4VUF{ZkRaZw=NbOtO0hIc|KS+SM@z4C8k$gI`r#k?p>m+X zORw}94&q9~v?0zEP1STiuM{5;Vod#$Af8}MvveQYRF=rJCidYUUSJ0QuJnP}v>@Kp zOXKtatQ1YLluHR>8yxi?#s@*C0ZpgDAoMg#`=J>0M^gWxPYt3N{6SF*VpF~JMEj#Q z(c?q?qXh13L|IfA%F|&ev?lmY7F3mCBA^1?hH(les4CKYd=+t~$X7FESP|kAY(W%u z5Ebs>9+WK=q7@F!Ct6|Q09qhgQz1Pa3$l(hT*dVO07Mv^^FoDTw78={nxI|XbvW0f zIO!uwOKIOC0eiAw8uWD<_~9S;VPB_#mKfkmqhT8G0ZT=d39z(M55fhQ;0cQ1N{itM zn7}s=RhAw$V*g=cE4CmA^WE~b_ zC6;0}CSUipU;lMqY3TqYbsqqBUz?Bt4z?dowiuuxP#5(8#uOh479aE!A9j!dN_9&k z!UYcYA569wp5b7HA!PAkX!TWK5Jg$H!&Uji1Y)&do*-2BV;{=FF!;{zxCiS7MxnyQ zp%UjLIs$DAf?1ulAxa@y2Lf8}VF#lX71(NVq3K)4HF9yYL5j9O!gK-x#9-ugKIoN{ z=Ivg&=S-pDFs{@;T_8~R!A<|+V4D^pT;NJ;^#DLtCtmj-%9BvXbQ=!BP79(5(v&+y z6;MUCIR5lw4Ha%17It+)bR$AiA@wBQwjX@+F2|H%C+153!}cJuV0F1RBDOXd4q^rv zqk0o&A^`U?)K)(dKn)GXN`qHECg30D)-cE@6z&#S2j+!-hznH?%WC3pbt02!K~=-x z9_)c2M&Tafp&{bo9!7y68u)>sNmejXaxIuMC&oY=)Lc;~bJOyD|D|&ah5 zVg_`Tv4l++UI~JEm85jTM|lk*0mgI*$aGh0H+E;&Pi+?=2o)a!HB5PzAOba0)8k+n z_8@Lxb^lXl6{m+IkA_bIh7rPfbs`!5VRUtZd=27K>GU8jH4FN+PZgF@yBLkz;{g~$ z0rRX^r6?`VS8*6nhq$SZCD8cXI3fg>HRx40chw;OULbaj7rmM6FDNbcYbvu z0q$%C+~WZvl2|X}0roE;@HZkJ0FP^;lSA+%JQ*Qw;tN6oaBt{;&#oq5l`u}i3GM+N z2m+R686n=`9-M$6-~pFUq6cfVA#T80FL;>wGPHmuw4Re72xN%`W^?63g#85xis=9% z!4v-NW9H}F+~FL4sURp}69(?z*kPQH$pgljL@0qBm`j>>q?)g}L)ak!kU*RBEj_Gw zW`{S5)wm!OHgyA)nNf#|*VK?{SD@t-AA;c@keDEf*mnuqJghW(5kg@z)p#XFig$Q< zx43z+wkAk6jBCP+3qlzDRbooj1+26f5F$|jLHcF)x#Sjt!`>pO#DFm#U<>AKCCY9K zT!Q8Di2=G!Ex>@N+@b=+4sRO57RSO4=44e?8K=jhZwUene|e(yK~MWZA6l0IjsdIj z;Z6@=dp$K}ue4L!_-j!WOMljUx*ALIA(@T19}*x70(DNq^a-Y+uC+9EBO;S(A&}Q( zA%I#e?f@6LK<$>wqmK;peiQrvYLX)o82K348pjP`y7;eWM-41$K)?^;ZS~;*`uU+hv`6@Ao>`>%X%O1p;Q+dsq}$N$2L&= z;Z_M^dxh8^##T?|n;<4&U*{BH-&4!;flRj{um8axmY8X|mdwdiV}e0np&VfAyC5JL z&&(qvav)QZ?xMJ(E?DBl>C7PiUP6e(;0qLL=3Z_^k!mHDOf2%rFWRi95793MUCpE# zp&n&%Dmj%y8*LL{FdPv(?V%a=(;k?iA!5NE#FH6Ny(Ykr15Tn*0a~|Zy)79av>qf$ zX_bl1l|Fr7k)QNnh}%C9C>^GmAUuGD31Z&P0ojR*9jNrT+(Cs8!er37yT3buiv0kN zePqb(d163AUgkU^9I0e@q{);-ZrD6?SikRkpoJSj_nS~tm!zX1WX1DRm;5{^njmgl zr8E2=z?Z@G*}?bwAjTbNJNhIN0LnEuB1RnH^Zim)+Q0Kz+X{YnL!3NP#ip4xu{2OPu-+BFCuYhE+rxq2lh&lCdGScVn@_LV?Cg z_kqpHRQ-CsAHpNl{nSN`#&YR*6h{}_N zsO1kpE5uC5gvzL7^J)kL(YM@x63@nePD;zLP-|j4+4k#A!NTidE4C}^1C4(+#m>*ACPKHA*6^| zS8;+q;t+6!DZ3xT!LdOpAAdJds2%n=A0w5k77)Y?-7d&_(6x4yR;2k_U3LXH1=gUHb zTO?{cVarwmjRYC=`*#c^K^Oo2-H?dy-!p<)Qf4WL^4}7TBUge%*{?-Gk^g26-1l#v z#A*NVX)N}yoJo)=IzF8`@F1QFPa_}{NKnB;9RweOk$7+{NQ79a4rG8ZB0-8`s2=Ph zaSNV15-DapVAm|jzH0S86=jQ%+QW!760#*KvE#>(BTJr4xw7TUm@{kM%(=7Y&!9t# z9!C=z@UBD5xT9^+85*ggM;ljm@Cc=d2L`{&%Zr)RC15bR&9Xr@2KNv?&kdix2 z8aKI%l-!*=<^!E)Dp>sZ)N}4ANkroA9A#+#pn+tNvVF>aa5O$kPZ0gfoheK~K0hjbrQ$DAF|Z!Pb&~0Seg9h8*&zQBC?yg`RpKZS#*m z9CD~sY{3wf5P(xE8 zq)=XX>;)1g%t-1}p5a#1?DpvB(B{LvAa* zuv!*zYP75{(VFI)vBDu+oOw?bVca?3hMSIY(M?y~brNaEU3pZ2hlE7lax2-0>%GSh zjxT^T(lbx=n~ae7{S%@_9v%iFfB=i+kA4RZ)Y5$iFtN`*BR%LCKmRb`!#}~q^u(YU zACO_3?C~kl!6MREB1w)dfs}wu?CIV=`ow%xQvE&=(?2mD(BMBGQ8kjyl-ZSK1$g-X z1tmciY~ckMV%Q<2Mzew>b*N7rWKls1Onrc+c-SHK*bm`F5JP596^O1=H8|i@Ol>3W zod?A9c0nx#gOkY`9V6hxfK&XB#USfl5EB3wlxSiJbY#M#cqsW47YL0#HbQ=VB@xo8 zo^@4LTXX^S7zkm_Rzg#qeuw3DJoNcMcHNP~>^VGSC7FIbRkcR7*pk9xBm;cP{WM}CK_%t|E$IhyMp6tWFkuGO0?Pk#G>|t5Of5sRj9n~s z0Hi4`OK$M{`$*KZXpX}IUPnuiR8p2^P!+dh|&a!AntB(Y)WD{(2){A?v5boLPgY~ zNP;lZa}g!TL1b5uPhl;Pshg-tP6viBSoI4=d{sd%sXI)Wgci170j}7D%CegEtY}TE zTGz_f#4y1%v2i6;rZ+I&WRF<2EY>Z1i5Omj!~@pxfJCGd%z^Cx)g<64CP9vAzhuU9 znFEPNQLr6WU#x3E2ruh;~quAjO*VOi8{Hv?7E4!p|bL?Mrsv^;jC?>ZOyQTH_YJ#*`ltix&~0pLlWS~TGfOgx1h?s!*7a9r2}xL70qiKUal$!L% zL?luvpwdf_krY%S8Cowv;Oj=54y3(_$rUZ0!hm1|qmlZ33g;}4;O-JScLNqMAUoyA z(oq-J8i5oht6LDt0h=#=?&@?20t#DzVmQryHi)N9?P^>5+SqQM3vx4okl?1KO2&@# zsMjkM3ya0W`Z4|3q2sk2;R70R&N&*%iRU1P0lx(Q=DNK1lpq_ke)DoHnR_;00flHj zawA~|PlnCSmbtSHud=DplaikOY#Pkja$?>zk`N_eLqUlx$!HsKiKKbWCTSsdToBMb zA-B}g3Q{>+LK5aMUA-Ohz4kFWX2oS zxv)yMNh(T^;NjOajq}}8L|fc!yZ-gCkG<^wXK#|X3Zn^3m>z4elbbByUiZ){x2SuC zZegigBKbbYCN|*-94nR}AHXp?FoB6p9OB=`*@Py}F@1dtli!GypOBH6>Bka0oTxnj z#^R$9I3$h<$ACsTQc@0R9K)II@rVBRpYVaeU;gxGe?*f&3|Dal;U_7v4>yt$Y{zN| zSP(B0Kx4KR1@wRO*AxO+PXdQq?~z7gM-=^_fcW4d{ZLnN27&2UfCDoDCX#>)sB;aZ zA!!5>OmQNohipIRXG}Ou?rFIgrGy6~@_#k#hMsv|Lf+1p#S~V-hsidV~g4>mfu$q=ZY;M@dsASXD{I)&-B4G+)pKTp&qO zCfgh+eHn2gG}jLbMnH_#fn!31$~1G<+RaBu@CHX7y@EX5Zr z#|JN+fMeE?4wxWV8c_t`VIA!t9tD8}>F5rg5CbvbeTFqm-ywegHe~3ufktM4GY~`nfHwnKy@3x+_8!ylX^62ehB81C*pGa(knZ7!195T) z34@|FGyU)knstI};b|s8C=wA2`hX)vF%3N6 zHLimYhIjxEkVjJ}Nm2KNN2dX#Lq%SoRawV{U=@rcecM`|y=_=zsEc04U@h$H;7qF%?1b4<+Vz#5NUMaFk&KR1eWKM`?(s zLrE947E*{gR@ayXQ2|0!IbRSbK&eMyzJvWuL?V@@S4z;Q=x50gYsw*;t#EAsaW) z0;#!Hw>cZj$r&$zjh5j8(r6hBPyt#+6%SwmMcE}4P@QT~0p4jDQBezyVq&yG6}DlX zYB8O_84@=DLzp2O_-PWsBWX`D8=29a<*5;+0w&`LAr)|-8W90W1ribPbi`6ChG80u zF$>WdT>j8)%(S zh~kxkD7vFO+M_=Dqf;TGzCxlv%AENSI7k{ed0C{fnE=toqSUsUwjwMs%8Vya3$;+A zqH(2JN)_|r156tKreZp#WQvSJN__QMrm=aXNt&cfs;0^K3A0dPu;-++pq0Qt+sHSwLyh5ak`lyf^sT`)Kl3J;jda0P2si?uI!{Ml! z`l+BAs=}g#oF}TLda9_Js*%d6z~QN?`l_%RtFk()v|6jSYND*l8?Jh*yxOb2`m4Yi ztin31z>=$|v8%+ItjfBq%-XEZ`mCX9tfzsj&|0n5dac-+t=hV+*Cwr|L9N^xuHrhb z;LRumU@wNzWR8#^sbaGlcw2P9*AzF`|Po36>C1dWgj=>PD8yXD22xj{Vs~`jMJHP~7zy@p@Bo;l>Lo|e25JLNMtDC>P!T^h~x9A`Q2b{qg zyulp2al&9(t%SNjBEm{$xWKW$pwR+my9!FMpB?97~yNzQghV z#GVnwRXoOIT*gytd%tImaT3B=kbAj-xhLGjydlPBT*r2N$0YlV&byr-QjJ9mymE{h zbd1M@T*!tjvA3Cx3_t-<`x#)&84O^y7<|Z-T*;OkyN|3H{kylsdC8vq$)N1EnT#1t zySLUG%BY;ms@$`qd>N;(3XI?rt31oJT+1HY%C?-#y1dIfi_5(H%fKAW8tco#T+GIN z%mho!$h^$V+|2K)%+4Im(mc)B3eD7f&DfmHziQ3e+|Azn&8EuD;5^RcT+WCp&gPuX z>b%Z7iq7o(&hQ-1u<6e7T+jA=&(=oI_`J{j+|OvG&;A_H0zJ^m1JDG0&jJkMwnq%rU0v2@UChe+!6?Q6hzrPP{nl`;%iY@= z;A;}9^eZ48*LuCzMtr}{qShpJ)91_Agk9KpoWLQmz(Y;KgKgN3{n%4{*98&6)l$`X zZPbvR*_w^KPrb#_0@P%^*`ht#1U%L@4H81@(xFY-tliq!d&SfPS(9pB_F-}GJIfeYUDo!|OxulT*+ z{{7zo9^e8#-~?Xa27cfOp5O|;;0)g24*uW}9^n!`;S^rs7JlIvp5Yn}&kOyYl{OnT z3oJ9x0*$=kCVt`>hS9x8WfM@1xxvG{;tcgb55!=%D1PHO&S51@jlFGT&vFAVV0-U9 z8BahA@=y=XP~thhzSHN6)1Tf!u~ENA#DGf)rpaCc3<BoLOzzq$Sj#?JLqy z4^GhKXrAWFv(z{Y$E~zV+vd@|BI9SS=5~JP$O7i4D{j|gWVlho!9wSFKInuFEMFbg z(!wk*(9%l&8G>HukRIu_>Bo%}!rxmg%TN!bAnBam>7Oyz-}~9Nx8lU&1oa>fTJGtp zzUq!Kzjj%_KQTSfLcV<-EDS&j^Kk0Rkm{`7>%I=8mTUJ&5^Rzpr1 zkB;v0&grnd7FrBT)pNSEO&ak&@BUusyRCa(4D4+@>VOXaEdBoP3V-Lt9gU*i(feK+ z3BT|ZpXSePV!TN#3~=NyUhy9P@t(l|#DL|p4Du#_@|YpxSib2f-|{XW8OpE>rV#Nj zU-LG9^EjXLI=}Ng-}65I^FSZ;LO=9GU-U+Q^hlrdO270>-}FxZ^iUu5Qa|-nU-edh z^;naGzdr;Bs8@xek3`?{~!uKw4n zZ|q3x?z=zyagEq(G3-Bao%os4#NYg8{p@xL?(G-s&R_je-R;1>U2$&x+#l8I4){qd zUX$Pbp$`yVzRVU3IfG z^)kBd<7kO>cJ*_)7LE#XG>moiz<5|-Lae-TH!wk017jR~D+qgUCByZ~?tX*Z$wc1d}2jMPHV{Rv7-G>q|V~NVddunCR)$1qKAI+*$ z7B#x5T0@_-UVhV_`R7T<@k=iW%DaGetMhI>p6w@dz%uxmqX%q zDPs31;P5D8!_+hRbTR}cyI)T8znl?yximnY?5k9epi~noS05&q>~xD5bUi!Fu{72> zB@~kt;Z+>xSDolK1PXmc7nXekPxeT{Dm>=Ka@J?Vr;eR7AO1-Vs*S6InYJ z*Zd}tGJU(Xf}qrpA>Trle_A4&oEDHqx|NfEGnah(4nCluB)qC7ratLLQ(8c0mRDPD zSWli$cVR?z-K__d#DP1q6Lm6k52fC>N$&QDkCpikSH(`%#xLCuo@+?lco@3%7{xn=X@UGme#X8d~Ei=q36qm9S=S;NP<<6p@yhhJt* z&5+-&6i>Wtd^7!McD7~dUHi&<+4@f9=-Bw1H`8yXr{BJPyGC8x-P=7r{`~#>DTD?9 ziDA$bBnu;uOU7*%Z4H&GyUt=Vm&?fztm zqW8;6v-bK|6&exyD--PvZ|jtZ+5`7j&z>B-rFc)?v3lP5>3vtk!G~ARpMGBJPiDFJ z?rhbHMpAny~%Jg{C`{MVH z9Hm>2pyjUs$BGE`qVpZG4M4K%18yHVr@e^R-Jf0?U z>4*U;VA)%+{b_ACm|?1XP3+ZsRS=zQP(n2TbNu1klG zpg7pAyJs$X%L|Pd+-9u4Uw2az8n9L5=wNz?$4xg-_RRsh!s|(+bG>G3GUq6 zuE32-?^MniEjkqlX^kddwQn)oxr=9z*{vq>#)-4^cdakkS*ZEVm%eZa*sUvc4BWe4 z>gQ5bm3`xE>5kcH(_Uj;ao~PaV}1EK7v#&{((T%2n#{q&j>W)(N9>}yZ&!hBJn^LXWU)0$TeDH2G0(V=KSQ9wF9DG^oTBG_M0Y%R% z>ZqOP8`SaW?;Rjp(bzj6m&z~x=O^C}KKB6_6J-17_=1lIAd&)-1I+4&$3q+@0wP0P z*Mq-|!2EjzM-VZGU&fGWQ;0E{L%S2%;D%&y4qILK_PgbnbnX1e=p60F=U>Oy8s7)Gs%{(B@E>l^L&u_` zmck4|xiQq=pZj)h!5O0GJ)Ms<&c#1Wk{l>FlO!3y54_Zc`}r;K^G^}QUDedx?~1AJ zYrFR&Mh937aJ5lT(K8EXuxw&ICWMBX36CKpc##@q*! zQyhQ%Dg;Xn1YYE!J|Q#&|7~sGjyg`_pr!57zw{i%7pJ3W@)00y*bIR}qWVf<2NpQ0 zFYI<1Nt2HUQEA_L#>XGtl2IXX6_>X~;Gr71D%gjc;tKah7i6jQEGV`^ zA4xm}C$G$<;p^vA4R}2~An?@SzKmS50%_#|{UcT@LCFS%mzMH$^y5)4`r4 z3zkBBy*2uw(Wh6r4k?D-<0drFw-?HHDzk)rQ*GZQeV$?r)4T%4Fx>G&l2hv^5e!|R4d;8l(Gg2la>oa4fc(%318=v|KS4Ypu&YXZI z(*e7#H=9t9#<(D0fNBY}#IWcK$^fMcQtEhbvi!R2=U>j;ujNCa8#$;1MD19}<2@e$ zE$?_s9P0t&JezWaQS=JqaJu0n-rJ_x>e{f^&-AnPYRvlW!Zl_0v#hIj`VA$P)^j2h ztCa*%t5;UT(*JwrO(6&dd$PNhSv%H)iYP>F_Lrr6b;&j5PFSk3w?SBN2O=C|@+nXT zpqAw=@PRyJwR%Gx-lvH3+ZLmJOSL zR<!GL#KS{ync<2QqVb9E}+;0 z)hFM-9te9wpXR%vG4}FL7oyp1i0!8g;5U7Nl5%4e6mbufSv$}8gyph7@mb2KB{If$ zQ~^rl1MX|p(*WP2SXJiY$EGkv53&Z(4!LRmlL_cS*oC)RH2;Klf0p{+atY z>&1a;2kk$dr5Jh)tba9SEWx2Sx9Q&9-&nYAc#Seq2Z;TEcsqv#3O2=d^d>vjiHfJU zKYFH*+h?el@!e2jL{+UhuEK0foB#|aU4wQnjQK8gUM^ia4itImA{~EEiE{AGTmN+_ zm})bXMbqpy`+B|1?pepX(wTJ)1pRX%b&1K3UE%)WF;kTz^901mIW z0e~)0>^_hAsvE+eE-=iAN73QpatJ_u2SyAft}D&M-a*G11@E{H=LDd1#3FNQ;tM_F ziwQtqUq&NCxH!tRCeLa@9r2;i^o`_yT3yO{K5*=S%nmUidIz?jmRQUYxS>wm+kvWm zhso6ku9+krP5(#f#OKriz9h>%bqLN@@-ZKUNgBbE-X>l)4yE1oZFmkK>O`;yQ!L&|=}79Pa5- z08x}FVmc~K4Z+3%G9@!RchG6WGUiHni|i!&saoiz=v?uzBdWRpUhDB9tPD@&c$y)1 zIjrytvE)KZj#4Hv8o{{*%3TjTk_^xByiLcUC#8OS8y}7t4=)622a(}nJka5JU*(;| zIjsCPIXmVIc1sHIUNto5OGH_Xe>yA)B1W(o^CxbT3K~%!Pa?BxqB?Bps)6V#JmO9x zr1mUV{%dkktK@3LITAWB$1^Zn-^qR)#)5KUSJ#5PgE0pr@;;3z1O{^7La24PW^)41 zM6=ZBEpnB7HmDkBLoP{@_?#KnK6-7prSNTXDhQ%YH=ZR$lZ<;NMp!3>R#unw3hFZWi@h#x!xZb73Znof zrkRoq#UD#Dn>sUL>A1_hnT#k<>ls|bk9~t;Pnn?z!A$ z4e5H}TS^wXY+<^(o?bib%-cr_5Y<>lCB=(6>D=h2U%G(Z{T^{1uesVfK6#gPzQXxl zxaYAIzgtZ2+E0JDTW2R(cLQlZpq}9N7Jl14xnZWF@78?|QThDQ zq992D@DIeMGMGiYs?Io%WeZx_Z~b-;;Dx9vv#qD2S~n>-7@W~X#5FuRg9%WoSW}o( zHsQx}w?ZgaN2UDRqYQ8;U-br8QQ8QDR!R8f3r$b1HPTfB!u##I9IkQoH?B_yg;TS? z`9t6DURj0wXSN4hmjb{r?hZvdo*dsMo;5?wp$+y)2#)rj~I$+EKi zkhwy2b{Vn!lu}kh*MVdyAz3ZkC)5o9(>ow+fL0+EHMU6v`|s9b;nr5$)_|HH-6q>$>M4H z0FjS_Ccf=B&q~%$I~*&XxVRQMJ%8f<`-$J%Cm8KcpZF)ruASJ5&i~Cykdd7|VMU?Z zPb1@%y(|#nu218hKb4MndN1#30)JQ1d!@unh;wogsiKShS{He^DC0aU`K^$}f=J`< zE{^X$y4-!&uDkSo_nil_r zAWBf>w9>OOTAR+R2!taAIt)N;#rIAV*lEWsMe7VS3VTP5|K>P9Cm!fbrq?(&lxFS` zF-=O~MZMUE=RyR8s6c)coB`JlJ%HZx4P*D`U!*`C@V(pof`x%%~C#Y6yaJ zyA9k`8gRr9d~${NarAl3fg8|$Jxai(Ck|04O_3~1fNau>6Zu2q;tn z#8V+L$TsMd7Ux66RZ34$7+{|Q)wYD2J{(5;fmy8#l+=K21q5NJ=UG6MIYN--G{l+q z2kz}Q>R&k;^hbaZ#d=^naZt^6*%l7z#Afm6OK(aRo%@0~`EZx`Yu>}DmoBnQ7q6fJ zc4Fus`D_I!i>QRL+yOc@q##^p%p5oN+ZJjk>;9aOBi~4W>YyXkHeQ7WzOeB3n1Xvw z@n;8*77<1RD?36G5<40Zm#d)$mT(o^1i5fBZfdfZb!vu_;j}A0jaATUe(L2Ed@dNi zC@?XEo_L3+zlNGvAx{*xPEf(d+n)ao*Z;o=Q;?^ zWA>Iq1oLXg#ndtdu)X=kI2Xx4p> z7kd^n7Qr*H>~VP#JXJ?90sIC49?Z>~y|g;3AUFrNm}?XU9rUwZxXi?N?x(-Rq8G23 z8wocfN7Geb? z7PIjVIhK>hCe;GHhJ#7`NG&-&>`Zm=5YZl2k~ ztrXdQA8$Gyjoq#B$B+SP<@C7-Qfo8)uDPRYl;f7u12P0f&+!mAPp?x~4kXUs4S}oU z2%qbdO#SWMaReeSP;HrhSS9J*=r&+;yQqdShlXdolgF4-&DbRTemQvVo*n%#>Z7Fl z$9bIOlVJMd7U=vjpb-7>JkBZ3`>5T*cIDqkwC<)+;-*2%rsapZto2PBp{+utEr-x8 zgPg5uH1Gqx_FVrEI0E!n1MXAqMqIc!T4Z1}E=nE*Low&YU2cdj`yU_!N;@Y4) z_NmrzQp;}Dz;2E%LV#+Wn1NWPKsQ%lTGsotW^C!q`M+SrC0{RXEwXF__hYPo2@3pK z<$ttY^*IuHH-#xTjCfehRGy;McUDDBuP;^nQmXhwcr=r#_Z8^zF+*0E>)k%Tx2Tmg%;4Np-U(x4Y}8`SC|S>Y(+YH1v(3hn6K|}3wLLR zX?XTI%6{jO)aeIyvo-d=)$DChzBi~XYfE^aBAesqQx`q9??Q;vAa^(n72p`|u;8KZ zP!ZyH1MC?0z8Eg;a^s`8{fdOYD+&`H$|zpt4=`k0-AZ~V7**%Y_;BCSzrJ?NoiRr_ zDGK?+O3R-4aQOk-hn82ftyQl$DiHz!lnf~+=_N;r}xd=_M5}&gRH!7uICAk9-dz!Ece~FmgY@ZzK9o-`fX2pLodcdfdP}hAFt`DqtmKf8OEz zP^^bApjwws&RF zrXSJ9y#M}5!6qyc=GF35=bEIjCcXeS)(S z_dLyuk#&Ghohz<&D8-978;xTX3o-d&K#i8M*{q`XO45q%V6Ed=g$5I54q^l3ssYi2 z$U1h*{^yhZn}g{ky1E=hQC;{?4LZ(~eC;}}hQLRAm@2J7WLs@Z5RMDO^?ci$qxOH= z*NRzOt`A$sRJgI16N;b9Dw8z6T8c~?f+loM&D+hZHx*F|&(^u}UuCA7-^14~^f+1L zm-jVhp2;zkBcBN|if|fn3(K(SB+Uld;Ww7KcVC<-mOt*zb&q{nWr?Nk5}sM}KnBdj zt`dr!UuIy-6I-SOtkm8|ezns0IJJw<+ZWi&IN}N%uol{UNRrS~^&03$scuXN(jFs4 zP!EN<28RVLDwE7*ntONvm;QmZRP0E@T9U#RD>HSXE?CWV5gH&1i;C(H81IWZ5yhgs zL`3`qFQJmQ@A`Am)wdG@F;Wakg;bm}2F)7MFlavgfM};T|kO{`Yfa+yieAx2|hIpr_I)}y4%NP$tjHeDGcjw$2793k&4q!6raza)>b z+14jpSmx)w4WXB}L=@-mwRFfXi#NVoGryLHls}}XPvE3Qe$*7X@|u3AY3H}8E$aJw z1snGXmRP-!%ZGWHRn6+;ILP^!X^I53^{x#xQXI1u;@Vm^wr{ z3%m;M@X;4lbz)Q(x|$NzZzIxPox*$=Z6L61n})FfEL%&G!CjloP+Qb{Jn(7DL`YiH zdr$q?6X|rR6v3TpuM2anJZ5Z1!YS=M^<0cb>7)?|lN~cmSwHD&S(C_aGU?Z%T{01D zoXQj?%0=&${B6Wmo?jDS@coMk%4_=~jt8ZLIN_LbA|Zu-O|@a4Dkp8ec7F46khcer zstCx99ayK!A5?x({wfIhGboW~8np26 z0+$Z5PH?E8FIcM3D>+159G2i>arsk|&cB5hRaZ(dzla?MPK&5BeP^gR7NtwgATN}9iyt|V`X)mj)#VkolkzHyZ#ICK9O@HfWU8OtvjavF(&1lS1m_GDyzpTaN%$#Yocvdza!M;me^!QEv@l>MY5Y16?9#)v=Fs{^&MsnX z>pJ(xv%8boP`Zox6K09H(GL}G7%!g?FxE6jy(@pmw>F+ar#XrAH0Mg9q`oJMcdQ8F zA7h&Mh9^g|1JX;pOcdQ_GZek9-9H>@&QpD)oSt-p(uSdsnW4b@!wfeb5IHir)2*T5<``0kCo zg01c@I_KD-i#Y>ZA~vg;Mu`6g887BUqGS(kRZLq3dWk-wOPtaRO|t(*RPL;ZhI~CW zU0zVLcfYBLz+>3-2%v;P|ZGJh8-_MKuR_htX*&Zbc?0p5FDC=jWez<+c%UDx?%_Ft+}y!YQhz z4Yc1RofO>~p7SMM$_j&@hg`T0qNH~{t1DH_<^a0@=reI0n&yzcSkl71{&`V|2%bzJ zqezN%x1|_J7{VBgLBT9ZjGUE9VP-7N;<(o7eW}>9h6KitZucwpO}2_lvmK=4SAen- z1NV!*2(g+FR@x4)CB>dq-HK% zoc#(Z%LFsTlNi4~q>+~TjWcW5eIT3(5UxLr++q+OdvpQ@&G+#6^LPmP3oN}6ojTnn z@(?6Yif1AL*36)CQh=m>z*goZ!hZF~0@8v;wpbYNHa|p%pJZS;Y&5I`92eA@6dL7* zD1Z%=Rv-+!z5kppN}IBELAcY;KrSTu^z&=v@Z{6qMwqFZB3$w%+az%uQ@$yLv5Q+= zQ3SJF@bl}H=dFE$gL<|#84=?|ODebnMtOl|DQ-Xi=DF{bVcAcNz;uI%(oWopHP588 zP@-S&k$}#O!KGmH>eN4!HiFZTb_O_s$P$7~H7g}LTe3yjG6q!>%_t17UovQi4}>mf zjqNhh5|$YLlS0qmVofY%P}B@}UCn%w&Hzx3N>_V0 zAy1`~!*NZpB+FB?pO*K?oN^ujk}WcF;$6%M$Zi4*;Lg>Nf$RXnhUC01=T@iED5+-1 z)W>sA2&HYlzsB$#EJ-Tk5$5A5!Q*LJrm3al-n_od=7U>u@RZX!M?gdr$FH)gIZRfbPm?})O-5Njx>!3ht1SdXl88MFUQ~wo`8GnoRCWeQY`PvJU~_Va zV8V@Rw~8{N-aKvP|Mgrra9%h_?4A{hrP-A6D48V8!P1On9216!Qf*?WM7~%;6szJ* zH&pB}BpJt&fy28tu|(lY2>{DUswyG2``OYo+Y=)oep;uQC4@qE^rz@HfFT_NOo(ND zP|g5(07M5uPUFzrPtg3I7)e+lU&54Hv+0Y80aH5J1w~o@car`yNrSZyNF;o#rKI9G z?@pw}F0f_yCz^U9Bp@ZbM$Ha?Kmt>f#OOhC!GoQ3N&3g zvh6GMI3-h5Ljc0IH4XjmLgU6Xr<`3X%I=x79lzlOU$$LBsU1s`9siSNfmOR@3#*GM zBz}%uEl9E=M$$?@cVqsMnPJ`rSXX92uGH+R7Db4}ZJqeces0>{nqI#|>EWmJtI9@m z8BW&!xFX&bjv?S4rGs_>a5BOFf>|J&Wg*#-v5^qDK#I!-280046=<0n zc%#!&Y~gkZXh**`7Zn#%kcr?1HF}>$e{f zVxMH)S~ZG)m7cKrHt|0lSsnFV1J0xiOH8p&2z$e;btFDc{cAU7OX<@|_etrGmIMM9 zGmrp;IUzmvxwoxjeTYlLebSH0(b{+y3w~~AQ^n?2E|01z*r?)r8Ib*Dd^zq~R?6I? z5zQ}4=Z^q%Pc7c3Ilb4|a~UfqQAWBM?n9I;MDIjaK&x- zFN7USG(KCF_i-D0vUKZxMV6J@372?@rjf;vTaNNIHRqL4de`w0O&ctWY7&Gk*>du{ z#`{+#r)_aDMC1aA-bQ0}>BWu3ZvfpTP^%S*#4Y?V6Ftyg{HZN%cns{7HS^gcHJrBCi(1U*g`G}~@mZkJmlKFQI-u2GRa z6`AK@>YBBK$L|*&e^$Hm{+1uV@}T|o03>poX)uPQK%g3FG*--GO@IKzqGOXzpzB?Q zH-@qI6~qz4`Wo~5uRCSWgY6%N1M0~sb?q2GgUJ~cZtsF1uJ61WJR&n=M3-wk{^w#*!t(xPl)#9z)>#gJd zQS-I8?vc0NKX26H`W2{;zPyitu8-l-2eh@1aj1_;qK_%>`6%Tv_X9Fv@3l%h|LE|f zgb^-KR!yP4c0#^aqdl$L3-XYi1pQI%FK;!ReKZ5;BfCs{c5A!*jqQ`G z;7HSyk(S`e-b1c`*mO+LxWwc1(co!l$jpZi-?XKP4gle0pLC(Unb458i6Om$qh313 z#eiWy!_iA*j3zLcrtvd)>0byHdgP(=rl?c2qnmqvYX8eg$a-k#PU6uQFULaHJIVv+m7P>(4`MpH=gGah(C*a&G>-bF;zsW|dTm zy)E%V_04}rH)*cg?E z;h<>+OrLQa>|vZgc3CfmaqETg@R8VU!gz0n(RqaN<%Yp?Z^G_|@%Me%X$ccp3lq8- zBKSEB$sRuPFHBe=T$DXXMDHB%e4?t0w@j^%TiAT<7cTSo#3UNvXsv+i;8yS2lztkn z$R2_619o)N(S)#sjt}ALRKf!_zb)Pfjob*Wqn%AhQl1m+)o7^ZT7<60$0E|6+>egL z`gdw(C%Sr(h6?Mw+d)5F#Yz^x8sL+Yu+<0w}>PtiadAo8n8T2xs=uvK4_=f!A_P=0le z67!PHJkqyoF+pCpqp@$+bolUSo9vv?A-^4jL2h*D=jck;bRJ7cj1WnC?39Z=J>*Ap zl*f#|k&COp z9oN{mk((RW{5a13Y23p%akY2j9(|5`Y!cH#i)+33I};bzrWb!-J-)*uzUF#-=k4E> zG4Wk@<4a27pY_G3KaKBM`+DDg}#)KMZ!yw z==vZ35swbflhYDN+@f53{M(cYu48VV7O9Hc$-N2)Q)C?PBS|ST-h|n3X#lxU&$u-R z{>4mC9D(-!X~Kuk5ZRrRQ)$06>t8;96Edlb!c_2m*S2WIn-&Ma2o6U2eu$=GnmS~Z zr<&fmu`;dS$Z6?sjw09sOu~M_SBw?pN=UcbX z@ku6xF#5o->C_FDkxyw*AZ~N?PzP6c&YIpqR zsf+>B_NaLO%Y3k$ix@1f_FL1ITx4obTgbt8xs|T)o!Li0Kjc63#5o`w2B!(OyyyZi z-wfIhR9dD)jrj$%WnqqBT$Yjp#dNzPdc1{e&4bH!RC=O1`>7caetMK1_yTb3||W5%F9 zXtP6EP9MwU0`0?P(d$+k!`cbQ5I!fZk`JrhmIjuN{9_EBw`rX7`l=hH-Z>gKk%l80 zY&qOH`dlz?B$lh+Gbc&dikc!Q7`;o+Kz{)bN)uYH842W!bSg*7EDvm;xbf?rg3e-_ zCPrjU!%11Kavy%J6S%rqo)O}fSiYG|w^)HlDXV z_n4&dVn=RQ?`XRPPTVhHGAp)aEOH88Ed{?ITgUBSz3yrYmhz-&h6|j&Q$J~)sa6j^ z<=aJH=@&N9$P$@PCQzlcpc-qXqPE7I^PVPx?vZvPPRkwDF?I{PIQkh;b&f4A9xXU<45_+cqKdT(*6r6EJmwZoYc>g1J<~bm6qBIG_EI zQ>_!@cU1{g=~0&Rb{Qxth$(j6c*`%IrO4tC_&wl+F6MXHaH{44tPW35<{190PRBk! zL?{PhUn3x`$k!Td>>Wb{w-m8UFp&?qX*O=2!jTN{JC`x^-C`|rrf@ASxDAb&5wSD& zC5Rk`46DT}zt%kHQGRpf_d{C`bBJn(2a~VsQs;Fq$vRF8c9qBI-P(!Q(IC~og8DaK zUXsvH!Hl6T?h?Go0^9v)GIW!4PZ3?tjGaC&a(YwH<$k8Nbu}p+DS~d~$Yw!)_DED3 z4-XNYb`s?|#>+sk3`g^fh|Ds1Hf_?Kn-$NLcdFw5Y3|l!wiHfJyHC=EoAF0R7B%Tt{-eWOEcVNU74u%vzaQy?V62ziE1a zE0QYev7gQC^dSe8UgBMtJ>-qq>&Flg)hNz4NcPiJAH2VI@=^nbe0o2@DH34y6OVL( zGiELO{?@;0$Rnep;i3Dz9R#WA+b%r#_O<{g|_ z$iE61OajR%VPpYYN ziB;db!1GteX-H(c z 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%0D+8wT!8Jy~q=_m&Ay@#lr=UDmO82S>83r=u)(0 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

dy!05UMhSKsK zV1FiJ5SlAhkpcl_H0wRzql?0Qp5wz72o2cMC@utM(|&o0ZO_JpXr+N7l~F?Ef_02md^m|Ly|(EN; z%;)3t6SWt{5hgzszZWS1v^AU?`~Rctor7%qx@EySW!tuG+qP}nwr$(CZQHi1PTA*F z*Vo_ezW4q*-hHnl_8%)^$Bx*s=9+Vi%$1qr5fK%c+Hm4kiE$B;kgV)wam25w$Y7#k5$> zyB^6k3i~L_6~PX554`c3Lxx;&_sT;I^U92G@fS6#(Xv!B%;H3+{e)1R6lyU)8AK1_ z?@>F5H=sXG=ep;kDRZO_ofS}`Jus*Qp3`_V4v~&b-RQ=t8AN5H5{@!_Il~0 zZd!-aH=h)(7CJ&tL%%{P{6d_g=5tsj%S3Z!QxjrLdjoKmNP-zSjdJ!?qL(UMq38ps zjKSz5gzwhDFA;5md5yYb>QN)U_@8Xpjl4yw5065)+#MSGp;yQ*{%mt>12;$~R{eVV>o|juO{Z^ z^o^m@DOBrE2mm1nLgBfA(Wi=X9R%(1UYZcZJ!3;*bR^smI~6lyn`O4BOwo-STsQcyodVA~leg9`{=l(qDl@DCM>s+w`%S_q*PIjYP ziuHHuj0VVW1%+TH*lx9#-$^q&l)G_ojju-w{# zVs{oOc>_fcS51xY+19tN`;V~R0wVyuxdkS|t zC}~Gtu-UyA{H5~6*ocUWM)RfQ076mL1r zFVWV%zx!_*zk`5&dFbdq4nbWxIwAu=`+$V-`m<*-Z*mE2X|>OCAJVV;wlq0E$hVe@&x7V(!xg1*;%`} zxxBu5;jmZEH*e!Rj=Mz|udBR8BR6LiGoLWb<1=<14it;Fuk$6=7YCR&;F+%r`{S6M zP92W>ECy`pZR$Q<6n8Zw1|uh*M=zK=QP0b38_aX#$gB^y>EahIiUzy^MP1ct%UhZX z>FFLVJ=H`FRSq!<_DtWyjLZ6t^Nf|?<69Aj$U0*lrAJG0{t;t8Y^SKLacoR%3EXw+ zDi5T^PkjmJp7@B|$lkEwHHaQ7BGc$})@qNRqk4JH!(bgPM!{Mb&Kz|UGk?QskODW5-NCJ3`Fbks<}%TsOB+e{Hn1i7BP z(XsKkfl`r0N)u1VqaPYGlDxR3>%y{&vYaQCnX8AAv8h8>a^4<#jAhtfa;TdoFlN=?Ac{@Cdxj{YI z!kxobbr?~GU8JKwH2Ywa(#i=Rzof$nu?4-zlN#QJflTO^QkyarxNI<~MY1}jy~Jz` zBRwV&0+G01D9biQ4PR*1NiSqTXZB~NdI6yVEU|AiWJYA>k9G=*`R^VFjr{jhqZ$&G za0#huq)Mhb&8oR!jrv%;xRe@b&PWBXh7ATurhUY7yobngzP;($8b5g z9U{5JMt%fMp(N6ZVGsYa2p(#ry;Y&;GG(DG((_GrS%r&waWuX94*RX8>&x|Lzv8WCaXaWo(3FK=U@G#S$8kCX_R6q|VO;WbeXk~x zmq?NS+S2WfO|{j{dKy5``SRA!r+%)`DCW{s?8uZJW{-4%x}KJzAtiyY6b#)!fe0kA z)=W5C>X6ZLRFH_-$)Z(B8Hr}FD#FLGum2gRluDsrJHf$do$r!ORQqrI6~=-H0vPiG zC2V88MIp?Xhc&UnIS(c)naRXTu-r!%x0J;3uWjp5K%!b_v$;;T0*{_2txs!*+BgP} z%eY2;N7AFz(g@fFy&(hWk`R9#fRZ&X598A7xjHyoDJ4!3CK{Grr4>0bTBw3ps{tN7KqVY^)~B5St2NQS9wH_Lc=s8$1H5J?52_$nh z+rnm{F~bVIsiCZ^Gy&eV*X9JTJZB^`|6F$9|Fq@ekZKP~h_BWGsow^hUpo~MCTrdk^1B;= zNXiYAZnUPm>}{vX*&Yb&{0FNvW!V)h-<{na1yT-|kAkG7xU7QA-NAc|e4Nf2`OWnV zxbr6@^wO^6xW+Xdu=Z{sdK+Qw3Dii+X&Y(VdCv>CFEIOt?MCM?9@CDUKm7+N>%!q z$WI;(L@2YJ&Qfwr7k@<77r}%_q3O8c#><<+(JFdeT2?e+nsP4h+`n(HuX8^8qLN88 zv^9`|ICnNwS^PYDf7ebCGG~QNosD6-%$5;6Yx$`PGlZVnxs6ntftJW^L?iy3KIBDW&1q;{OspV)`a4w`+K45XmW5g6HLPL(lu zM^>HAPux}=ZJ?|;f=zDh!2|)WLyu7pHcc)9vAr(R_-sI`3GRfExjVpYMgql~xox)Q z)W3=WFT93oMdC)bluYO{cphI8Hjl&)W$TKN(PAk2r&mB9-)@%@xbewYx!c z{}phewJ939{qT;q&KR_!>>XnVYPC^kRaX%+G_v;*kg4g0jdi&G2G5$4#bk+*0mK8` zie_>y1oDA_0hGE(n`I(s0k(P&;*KDaX278vofbbNMZ-&1MCmPD*6d6oN$VjMzpTd@C8e zg81s83_+Y#T;duYQ%tXE$RWVk=@P5Z1VY<1C?mU)7?G9IHYx#rHCx1Mhb!ajXBoJ-rANULXqSAu0Mn9s%@_;uy-AOG|5#jDZ3j5dR7|< zR_{f>x5E@uRa$=rDD-yel$t(bf5=#v9ZWObAu%fou?4KkV-kvjmRiGX7iDe(Q)_^=>m}`2$#Xi#5CpJTi#5EF1T1mmPB}c@A6ou~a`>sHSeM4gF(ksh|DObX#Ao1r$Jp3I3 z-#zhd+d&)DO54E0K@@kKgxRB5%x&3BZ$OrawIi6~b_kN~$5G(kH6b5BD&%g70UWu6 z-ub`EccvhA2YleM%U@;V)N{Ixrkd0bjN}m=kn%!g%wE&P@WcBs>5NJ~t}y$Ar7F1n_=iC*<|&`C=qG#+ z0|)?s_kRK(@&?Z40!~gQHirKa2ua%+8CVNj{J7LD3|*Wp?EV9bZ1_j%PH`5U;9>aTZzwPD=a zXur{4zSk&)HrOFOmSK8ZKMHdg*HQk|a($OZ(0puje1K8EZNjPavWjhh64i-B(p7Zf z2g`IQ_W)I`lGa!LCabrDUSVPmGZbVX*#xhnAH|koEn~hs`=w;zVM^IEU${9oXf4C9 zk#|zrR`2_TI+u08MszOoi%H;viD}|x@Ax-{F_aW3ZIQHw-pT;hgNi%weuhcB7xt*kubK4fep+r)eaJIl%p9|sqv{M(E4lgwXe=HL2nYvO$$HX>QpPxqUn}WG zs*l{rztHOO@k5#cP%_alezmlZW9HCcT_;auQpbtV(Kh6e(9wF`C;OM(L&uqUaFglN zk@mRfKGV716J9j|zU-6W(m9pmEF&sbiZMv*M3~8lC~<@%sH8mKCL5zS4h--)TNbi$ zGT~m~}sa$tL(& zG_GBAe(+OZUY}-iY-rcb4f^fNZt_IXS52F^MC6>C?-IuOUttpxwVQBy0~D@|I1g*pQ^8D9@mu?5(kge3_GjbOm2G+7-z zkx`X#L5jF0+(b=RSgOE*XGFk$mF562Yft^UFH0micC5KNH~tfuDq*ce5Q~fKPyieC z9su^F5Df-F2X&FrZ1?<8uQ5h`uh~m z=&m+g_sL;h^%^JcRk%COiklbyo`Co8z9C%hj$&e+^pKMm>7Jt({+@)$DJbC`QjMHZ zi%3X-hLW4Gca)8|Pf3A1t4Ud8Gcj`ZNDE=lz<+3#C9z0jMR_q934+6jFXzJ$uCq~+ za-#O3p1hSU;tiKizC8=Mh@y(Ne3L{f0B?%ewopC*gCiXqueXVpGg9HaGK>hK#}F8++%^d7M6b=5@V(e#PAgrUnD^4)b1JPZ-PGNWqckW?kadj9w8b7f zp6l)!4JIwHtcBOekEW-B`yJ(E6n$+g06FFIjgZzz&+`UpKdgY-=lxNe1BI|=Cg;T; z?FYQs{*)^&tV>xbx0m~jf7l5>`+q#>!*0u^UJNZmE(3w>j|yNHB$#6zkjE;_0pL0S ze2gb)=zGHVUt5ge;3k7XmZcc5;mh=#z-ZobkM!xX0De$bw@9s|&m~zN9 z!K5tX5=4qA2sK|$bdVMz5etUdXN!`}2PL8R7qLr)Si} z!IONdCg$e~UlJ3u{n50K+;kj7SP&tC(^xDUbl{fdvL#ilA93{7Vm|&0)1p+nx=!XmT2qv6B?FjPHZV*SamC-ro9lXMAbWtsPx?Xq1Kcc_^$@r-YuI4|#Q?})HOyhMfBUVTIsc4Su?*`>kGqVs(0tbI_r0@mbv4tR&NZCQd@%?W!R_Br)qtk^~)!$ zd{bZ$2k_tV&)c$dz%vTer6*=naysJcAnpE2vboBzhwzL3ZZg^xE_1)_2eUw2B&FcL zW(!+zg@=0oy{=sCi##j;)Rn!Ty7I5A;QytP@}FjBaRXc9p9bUK6(&VZ!%ayA`L8Y0 zHgiu1Y%~0(WC8`wPF)OYDg?-xhpK#kN37I*3t$V> zeFT`E`_n>;_dQuVYN1PBmZ_}9TfEcl#^=`Abh1!Ek&ykSp^2 zUtg|J2l-(Fu4-@Z^fZW1~i@QYwP9Q9$d-lN6U6i%K#778wN;pE7`?CIfN* z4j%4F^H^LF6Q70%gi@GEB7#Kar{F)1=Hjc!yt?q2&-sWb^&Mo@Ali3 zYsI8ugwjs$rA3@sca{d2=a5mZ6PM=U7R~l1{udpZzpk<&^i)W$IV*$FUzyJ>#@G4l zunDZP3O}4G8=e2)DEXo;q|ooRSY*pQ@?dPnSA%LBmzMuh zj6iCX{hWsksbMQPykb&WEA^2^)4$ly11z>xG12rAj}?8Ft!(tswaOoNlpt=|kqrTJ z&?vxxBG>4bNn(%_w*|gVh^|*LD_=TzvKLX^EG3#)_JHhIOGSwPo4|0o#`B(-!+g_f zebxHKe=60kQz4i3=g8Q=o!~GyJjpp(m|JFSl$~J?ocx92m&&RUW=F?w)i?X8sjbbg z0+7xvpM&&Mvk2s6TEQh%-l$+wW+-wwx(yPsAW>CS<4@5r)9$_e^l&p0?yxh8t`Ni| zvkg20%R$9KD0hWHDff&(!UL3EXA@7RAORZg2_v!tmF`q!lSi%o$>srm>6H|S)B^2X ztV|vT66Q&WzEYv3LCrtL@fFVn_1u!3AIwvi9c5g^-LY)$kEOwFcdT%;T!@=Lh3b{K zJ5DKC5TfipAQ;Xelrj5>A z=_T7N`9+b0vmdY_zM3SwtpmRY?wNX&N^VG?5}z__+A;qz)l|ZX+QaujvNXdiXZ(V? z{OmPo1P@Yd;$G3ic^NHAm|1j%cIXFahDM~236V%gF?}nu9!H?ApHB?XA?IZs*m$xN z6e^ufgCQ0+_=81#=-f_IGbvy4Xizg)_Q^<)baO)G5(DO zgxn}JpKET9(UqMupTD8jB3cp z4G`IGH%ByG7iZ-QD?Esze`e049rA`qU8-l!$qPyeHl#z_q%CNdv(L)XI;?Ng4p}qk zjkLr}p4PA1I;7{Kc1WJp_Y!Q55JqK#sB5nY)=dehb&d)~g=roafxSw>Sbm)`xVXcf zG#`10jAW<8I#Nd!Q<)M`*0YE;dZ$(eKex&V5$dNnGAi-clRskp_SX#aKy?8;Y^RA; z@xEcdlr!iVGK@89*}AMBb@T}NL#V3*a00ErFr0GKMbDa2oQ-DkTV{N0Y_X9!nY1oWN1B)$PK)1Hfas5LPvtlH8ZL@g6sQ;=~> z=vTK;Y5TAt=ya36;hG?pES_n__RRVv!qlpCcy$N%vN$cm%p@=41Lzl*;2C>KsLXaT zT7L{$DZI@k7u*!SE|y2=Df|?99>gyrLB^ur~Y)vi9TpSJl6Z57d+o)lQAdh`R5kMGB7)eE`*Q;2G zQEcRN!Q?$b+o zUoag8iRTMmKuJ)5s&zS~S*B1~zU7tUT|q&h!EInBeZf#vwR|05>zpU0zRe0VWg5C; z+*3eGa6)oAS)jk-xN&bD5&{yx=Oh{=T<=akX4F4Yue*V0VM zkH4;7TLKmx%@)s6c5z_Q&5qaRX;$2vIP-ud)H84PAd0uJX*ee_AkeYKVtI6CW@W(9 z8KHRBux28|zpfOJu7mRVm*s z%?_&|3rLG%MZsk-XuimeAl!(zkxHX`$uQhJ=7%bztEXtmw!ImA{G>b$_T&F%g zFsQ^s?i59_UX8n_!c>ZltM6ABcMHOtRyrRBB3#Yo+AYyiYjPIXgd#0RF$%&xX*?+- zsPtBuy)cPjVkYkf31o50Tp3zUe-dekc|5FYz`%%l5L^>Pje2fT{!AGEHxWG_Yi|{!_@x>cc6%5SD z$ZvA==C5j@X;L3MCV!XA?SG9M0(T#83W28(9aS(t{d&siNAR`PZa(ke>q+Bbo82ut zvU5xmnR~F1ffCpw7|Fg1Gx@$)QGYDzf$|nfH3sKP3=Huhz#4)dH-ay~7cR-ML4hxY zJC3AyNh<#3hBqDyFFY{D#*eE*cnh{slzoT{|2On)ATR!sO#t-^ABA9?$(s~V<1UDq zyo>|Hc*Nrxk#`IYFkXaDTnoHWAP3E#`a^&-`SJ1RcPRHkeTbBZ&q3G_0==kIKNsi8 zPK+SND@w;5@(Jm9!|;LDkth-G0@RZYW&YJ3k={qg)_?xtrkih&RnY!V zo$Y^|7$WW_MlSzvW>1PbggdqghA-L1jCJc$kjxUIfuHEPj zLAS_=)=>DNjluF!EIspf<>8IN^gzw?ak~<)+k{ykeXo%GE=68f$Z;ZaxUAiN%zGF_5d-JZ0I9JZ*6=&gi*5l3i_WA7VrU|K{v|a zF=S?&Yw?$7*XrNDug-5bH}qO#ji37gcoNsG74BAO>OHL zJ+$W5wVs^^UjrNk2QiwyJ(aXP&FiHZNvXoDgPCs;lE0r3q^E zb1QZFSr@``4tbojlnOSCOUjP5QW*?2!?w1>p3YwB&Mp*GO3M*qgz>{jv{ak$b7(E?tkY*+R+^&>> z2dO%o%W=L!QGyw(WuAnw#oO{!I(8KwC|wq_y)<9lMxDiZwL#OlUU_DnD8&!tX&a7f zewQGgB8{dwkjR8EC%AP&bY^iirN#jA47*}#6?~g6@a?%^7(){yv(mgF=P`2yXr$Ab zuYEY=Rw^DeYTFZ^Ywa=6!`PU?q?O*FI=gFl`bbPev2k8T+=C;_X>sLJQt7BpOATpg zrpfyxa?;Uc`KUT2B@@q5dI0rCDDr{Q8d~En$h%e_rtAvjTEMd-OH%Qc7)o~}(R!O` z(i0MG6N^6LsC174qc^gK-0ayYDy1n5!q9mg_|@<( zH^wGhrdBV;Qzf}LA3=l3S|l{2(ylqgc3&K7pj~tzGSA`-wO86b&05pv_SO)Zw_hfmjx}wah`^|Qo(J(X2h!rc zPxx05-j4zshLMr@l7%0`IwPtjmgCwA{Sxj^m0H$vopZOcn-(l18gE{v?!K>bbY!=G2sL;OsI!wlS zl`om0y?Z#6@8vtXFRh`e5wNSy>T)H41%)Nt*jt9t?c#B>nBknI{Kbhq*5+Q8Lxe_H!J*!N? zH;Gr-bx%ExZEmt^9#)xcGN#!|?Xz6|l^~v7U7wM4&5cAIxbMj53pOBXW2LxqE#=+s zUC(EG;8)Odp&Rd)Qg_wrCnDExg_o7dmilm!?}lv0f5NK>w#Db7WRQa5Z94pw011GV zyHnjESKowJ&H%GT#al{iWgq|S`7S)99~4MXM?gl`=`rD9WWj$*)*NbWq$x&Jdq^ z(Q<+*Sx9NqE8$^Fqc(bfoIHwRM8##C@jW61>q;vG-*gk8G>_$;P+4b&%lQGl^XQpt z@48~+y!wp4mqN@Q?HOZ!Yr_;kT-E1R!Dz4OldNG)t;&2^&}q?~dMa&r60E7E)}#>< zrV*SWbim~#un~*J_!+nsWF_-x*9gTk>Hl>g2f7!ZQCMExX9omA0+-Fd%?Ek`^u5Av zTse2a$3`W_+4p=xIbdWKo>d*OlH=zIocE<>kNpS;Lx`OQ&-Q1P$CASxn1-0~RGYd=l#b>XT!xg+7u%F$Q7jSakj)eTa>Ty2qji4Eb4HFzvHy#qP|SXp zeb#Lbt?Nt*I~QuZr{s3Gk%GGcNPV5a16K0EjBCtb^pLdk4E5uLHP+1tY@v3z5hntx9$Vv0Tj2xkovNOuQz_TE%+7VTio)we=x|p6Zw6woNPx zcG_Z2O%BbGxfe9ld2ol=fLGR4aFV*%y*3D#mSjOJI|7z5B4+&ACSoxT&RK_fuBkxk z1Z{D-MxPSpq+f$DN!oyle^-|TkMi;fqFJ1UGd5NFA{AM^B_NurnPV??jj4yDq`QF! zXQ%rlV=SedtGKM5GccN+LZ_zY*nRh^QhVnOGA2jgF~DjqY%>eUXu}5pt)p9N9V|0Q zXC@$-8kj_9y)dSR&f2Q-S$t*V60-4m5IfeHAp)(*?%V*RU3YRI+fVm;XbrN;Znfre zHV>~Kt<08qOPU*d|3s=CmW8uaSX^bMnclwZa0*-JYD_xdlH-9QSVqCTFRD6%n}VS4 zy>uY+r9H8?BwSa;PMf%#`x7lDq2Ra&?)MJ=q&X-Vdw3kLg=AF;bh`Ngu`{SU0AP{2FA1bXzI)&Qc+N zQe2V^EkBDVUja~}gLyF(bfSN%OWm}6u4HUH3r`v7TIiEzS4!DYc1O$+O(bDf_b(zmfoP2*iYBPA-5lKMee z{!TLNugW*re`hye;8u`de34Z~ks!!LT7(P~?WfwY)j%M(rRlsVfY75wv`_j8-f<~Zh@@_No5u3lgB08$gw3J7t6YYm|-P>#mI z?Ihgih8w9<&jhN0?+L@xpaZf^v}|(+(B!Te$gx^{k_-y^@xZ8pvz4Teo8$&XcRy}gCz)E#b#7b-MxVm-OaCXYoKRhcAIJfQDELSMoUPZ2A zGJT9WYcGs3O6S~oE52|3o?hBGjTo}Z^#p~Y8HA5Pg?)uzq1dK9(?}wqZwRa130=%H zYf~z=E0yYqfTG0fyWBEMhY>h2^w4T@H3nLOIgGoExay2GP9=7H+(sF!>QtGs1-g&W z_gbac+_K^zlCn7G0blgrvHCKoOxX2B-RbMlZrJ;wg{CYdkQ}uH=vCz{^XL9b5MT@I1LRLBCN2G_*J_s4ZGh zWx7MbR#kfA8X5^2SsOa1ssX$FKr+_smpYMtr_8IC^|BTXp$X~a|@aOR`r7XM(DK=Ni-`62A>;$AvH z9_f{d2&YCRYk$@WOzak*c~OoAFfe6f@DJQ(UOb0(1s-V6+8}t zM%Y6TDbM(n0`0~e(Z=fVgsQi^OTtAv{cQHYLACfn!I5^C`4kt?8a_m$6 zbcTozSL$v*0uQgb2#l)xk-#q3kt{M?g;oWD0s&KKtKIf|mIluc_x>!Nn=F(UZhmoC@MLVWfWf8%A{!LJ-a9ibm(5(&roPX(GX)q zd@M1x1j~Z)riLkJ6l^njEwFgGs7mySZY8C9vkvltS$4KH+PxmEb7GD8$Z)quJ$36>!5YC6H4?tWLx3jX zL_~2klDHUK>j@1}T+ZgC#@^9#==euU-lRuP-UC^5Cc+L8jCGOV7-{#UL(6{hSs1p> z-8|04uLdI$1?;BBEEg_BTk#KN4^e`X!u!4==E(^tnRt1KV|!i-9k}i*QR9@it-?e5<6jq(E{}G5amY*n+H0gn_Y9 z-8;^pTZ~?CK_9>Yi%5S(q=#!=vps#u3bpC*N25|FGH$TQ9Pd_4r2%$YW!S{i=_C!G zD_fX}hHLaDE%xg_fp|i?KbzndD++)5bCZZKr8}JL`2AxVDM>tTh|-T>%j~EB_}}&( z|K(H^a5QtVF|l}x|sSOHm@dqAK_|9T*4ARfIiVq!E1 z{?^1IHFL*xX$M4a3Mm5YU!EpeD1oBkARcKhJu}}&7N2i-A0U4zc4~oNFEZ@*1*d{J z{!TQ-;$6U&WxGgOjF^lV^S+fK(41yMfFZe${01$COSKm>OdY0Ko`nRwC?nIcv5sS48^fobUN+7gD3h<@?TK=U zsq2}1JqYJDkDjs^)6H3!Y^(ni&NTu{w6vfAOZuc(I-NvUIA5QH9(Sk7D2hx zNiT)h!1lkZYyV}v{?Q|*B<@K93LuZprFU9Oj(?x*`7jTy!&B9yOv zBC(n=8x!WoL6TsFoU<~Hlq~@JoFJC(_I;+4<3?2gkpWZU!T~EWMF7v*q|26`QcQ^K zyY7tY=WEzh-Beb}LTZdzTqsr?>f%%?W^OSKq2qcG1lkqAukEF_zkk$u>XCWe4? z#Ea%vy>ICg-GEoSljel7W)-xQqU;Q+>#pyscZDYnsvo{+1MT9<8T4`~uVdxf?M~|B zynet59NiL z!rIjSxz;b%7{vy1l_G16WSgRE^<nid77&vHB`Hc!j_1F`ZD`0gi18)_8?o51 zU@6a|ci)iO?`1pg1#z@MGaRt#+VAApkLK*L@84Osn8n1p&wayu_RhR=UwwK_{XRd- z@_u3Wn-N%#fS{lWoezfKS`U=q7T4pO{SIjeFQMNZYxLGubs&kZYA-$P^!^hNiAC_F z(&Wq`HKids+xS2b*p4AAYkL|*f4oYA(x!rpT&_C7K;2ZG?{}K&D<-FkT@)`3VJ0Xb zH#wfssnie>s1svHRy7r9dzwfw#yY({tYB*1nNx)vazVXK$6z6(v#cyYmxjT(-pz)Q zmT^!`Ze~41QiQ(6|xf}+@C5ZNKgKywZ9F6&s&=xLzP2GjAv3Y0oF|N9sQ z)#f|e$7y6jIc&Qc}%ut}8+Yq?|zk-iAB&`7zddtXt^a zODQ(DgQqHOTe)pS1jRV(Z4SSYxFFm9bj`YffOXR_nrFrf=Pmfr^F8?NXDAH)RY_IJ zia@*!T}8>IHGTVN@d71~NRP5^{UuSEQBA;iP@E>vHBrii=Mt#3LM<}6v(uCW8I>pj z)iuPfGO41XkYTVm86?P+ZI7a!bu#F#q8E#ld66=_3qe5(7rwYzkyP1Cj<^O27m+O1 zqSOMa#3!)|Oi}&%<#TTC!j#90$`EUJWnuAw(DgEXbdGZ}D3-~lWKfV3CT06jARCpc zgW3?!cGxC<4bPFx>G2K|pQw6%H=mDNJ9f0i7Z9 zM9Op2T#uZC_CRl%l}%9a`x8xq0TEG6nyJmw%8@N+>W!pE-tgq@Th2AO(m( z5h}V(JEs-EqPp`)cKevppHePn%`Qoa-TTm}v83nfYu{=X)eka!5~;S>wiZ9KJjMq6 z>Fgx8lpK|M8rEmK1%a_jTLUsb8vpPoSY+$7N+_;3vCrkzy8E~s*E6qfhheM@ zrP!Wm9FgoRV70zMFupOPdouaMx%rka;9iusBffkukbq&Oa!Av$T*C5wgjUDJqJ6aB z(?h;NzQ4!^wA4Jl_hYZYcSg~3H}db;N0wk864a3n*J6lB-nb)I+5y2n+93^b!`=_} zy?b!&O*YX7-^{Ztu`4-1**M4EM4h_wU2-D?C}Aqy5ML7Yl@D#`Ppq--or&5LPqq_} zTx|N&G1%{D- z63FD%(!Xv4BFxTlU%s)bFl{J%a)l zqbCh9*g7WHB#?5O@r&ddY*myj&i_IQQSRbI!%jx#TIh8Iq)wt}a5M>>xO${;MLFTF zQ_O(@DdX&)d|+07Gko>hSrJy|%;=1|&mC?0hPHtn%4a35agZa4ED#_egj-4`fBqo0R#9mQ#BIn&i-6N6{L`Zvuc zhVM*t=AS0*G3(^>#-9WE*H7jAAN6DZVp#r5)s#1Ibo$Ty%9LoC$U%Pi5WROaGDy=C zPt+z^E_YxBba`ZMfei{n!7?uADyKFLcYluL^~1#!m1QqvZ}0E6J}Q3>QHVrfykO_w zv$|82jDqR3+Dr8`t0^fspZL6W?}Nb;in4>0ln_bv#S{!mP!7LHENN-l=~@%6ujbu+43{~BuZ zw^SLl6$KJ<_cuxbNb7Q!O0hDnWC6M4;8A_GNy9bkmdF>;M}Dt+#2h+{u6VQ^>0eSK z?k25<;(Ths!zu0AKiM3QGv1%~7fk+3?IroYB0MoYk(mh#@FSK8vIjI`ov_bH&I$oz zrLZYtsUQX0EBOWR#C}5l3RW{%Bo}~%2(30eRFFehtEwIkdu=PDTFFsev{oQPGaF9N zLO7CGqMw|o4 zXEdacLL>~Z9Q8;+O$?#CmfUc5aG9?YnHuPISSR3nZ8JM_D8dyb$SQv2-HWX?N}@nm z^pSjPE?!b&xN4pT6Iqj~IYUn!w~x*r*YJ!DJC8qDd%4PPqge{1d$*@GPtr)Wz z>kkUX_B@U^7XN4)%$HV&YAuDsY&6oUGVU~47&0HNr6)8$M29v4AHrT6Y7amNwe@2$ zMSs9J#(B)Opvkmq-rs#zH^A-}z<5I6p~|}zU3FOP#3gE}fPLjmm(O>k5}KVb$R=n4 zvES$OqRV_LtbbnFs2e-~T>F$+Tee&KFz1vD>C`sQ)TI=mBR(H3_R%|oh4VtiF3Lw_ z7tdE0!H=H2f)&ytAwMlWbDnuG(ULf9m*DTI1h-oaT(SX8kWAje29U8iM_5m`S?wCh z|2)fTcQ|>_y8p(TEt&BeR`_UPS^SO_Aw+z!Pzmz)2I2q4*o0Z?4L!A|{tFwR-u=j9 zsk_AMkBW&!9LF;X`vOexf?OkPMS?qF1or}T8%dvO4jne0W%dkm317^C;}z8p2F%50 zC&$arDGBdTWteETu7-Ej;`Eo6}jy1~TUaAs~m zhhS2-ZEu)clw!Zg9(sfvs-2Us;-4ssADLua7E|t`zlU(bj*`I2HTml-oa)BD4e;6x z#Il6qrF;-Y&tW8D@woFayo)8iO4hl9<<`}vd|k|mufrz)`$@MDyYyXLUZ9H^p@Jxe zn3mtSIH_Iw3x1|2Uhj^WaR8u^ISw=>@4vIf@UM=kjX!9O{)a6V`2W#l{>NGNfA8Xd zH=IuY-n}iVHvby@n;Z4Nh6Epb#M;g4i74tF_sb-Rd>-;(kwu z!RK#BjQOW9?`I~}#+8PwCNmj9+V$-8Ece{>&Gqh|xAzMwe+X%;d4~ahM4=pFn5%J& z@T0^41a(ePmuQCKNZXc45sKg7Sq99%CmTnsy4$U_RC+C;tYjWEXHr!g4%MNwS8o=t zU5BBC4m*jkf0GUk%P;RA01A1p(jYj9Vw|c~O0{}Vr%@Vn#JfdxEAB5UcKs;NtiXs5`3}FZBK{*S)g3 z$55~%jX_?tZ2!@XL*pbtJ0W!BhNlhcAlYmd__dLYu$LT3VyZdB7?{G*%+mk){+zJ4 zs;d!SlV0vINdFQ8yIDmbS|~){ZQ+Xl-0nVjY{WBZH5Ok(qD#50@k&HaWJ=SGQjG>sw?0g%xYX zo)I%5ZHB10EwcdHota@yKcn98pHZ*azYhpLLnCWD!~gxero1VS zp@{gsIoVg3UI+zeB3s%p_gfSf;DeNK@ONMnGm*)fS&4SKAx4v=6GM980?4Bv)-VW8 z#%=F+UKG0m8qZe7ZTAh#?Cr)Tq8}KQ_&S>Q)0X>H>+#1=Ija73_V>pJg^y?j*~!oY z-dh3EgHGCh#cwnQaC#T22>X=76ohcssCz$4SzkX0OcV~A(0xas~l-q|+(dlYU+po{VjMHA~h+?A9sV>Gg8pemGtgwQ5AD<1!^m1fsM?$4U=Pdx_dA z1Vdd^{^<QaRq{WW`$q8N+3kYCzjK`3k>V=-aI z24Nj-l1^-9@jCMfs_jjagNd?f30jHf$A9_`|w#Lm3Kw0)GM{<}zxR z>)9>F0>Hl3fVi{#9s@Nu0wh9jAuXw^`{pc}oS@tT^KC?^x}q(lC%Kz#g8xDh&VExs zNwY#ntAS8{_V% z>+5d(Cat43U!n=EJ35}M^%!aT7r^byL#@M=>I%4i#Ns}GAERjzpA-XOl0L$U&V?$O zU5Et*b(n1e(Qj=l+Kt#miKG*{HUE^I6ZIRiZkqVvq{2)w$2r|dfN{q6-d5PiP=H>y zFfj3n#fJ%9Wti#CMh3gPv`;=Zu!_H}OdwcEN1rtFVw`_} z_Z7iZ!2v$7Z1VH$Qo_SQ#Tns=?5 z`x!jNy9?0?NhcNi)A88qo3M6Dd#sE$?1>im5Hw1V3NN-b%$fzwzRli)mN1NdKEb(pdIM^yv_VSLm-8J|0?3wwKx390yng>H+3*|GL-*W zhqW^PVcIsjKMvvlr>9Td{6EOHk^L&Om4yV2S>uv;W9x#II$Ugm-=BcL6@dv|(oORY zX7m_FEQ`+Ch_@gwICp#EKsW=&-ti&EPRU}DiodxpG8l}z?0>$@*Qfn^lwUA4vHp>T zn8Xuty_)qK^|cm#L>NdIiWn4-tCFP#ErT)SiO;BWj^5g|5=@2g>;78mCz@MVas?|7 zTw9y_YH6PE62ZarIw}?Se;E~U6>#}oDb;e5%H*HjJ*!+#%z=w@6J{Q%VSe+1aY$-A zYiu2F<=VJ^sE|Gv9({JrR4pe`8$PwHv2b13V1af%!1$s2UkY;kRS;<6g!xUC8O*#Q-fj;-J7t=$q+gn)jXnj( z1wxL)j~-PE{e9s9bfni~T8*~RgP&P!!_c?gcR8}vTUg>9en5>d&RK=wqPzDm#gp4$ zj01f?E#o{t{#5aQ|3r&h{ZwH5!#4lnpFjQM4u=2m&Px?_6-;NO@5vh4aaz$4;+Vfo zXzFr0t(35F%ut&_KV4xqqT+;eWs@}=fuc#Njz-9FE@W#<@0CnSrHbWCOXB6BNkoY5 zx5$>A@1ET6XYn+j+&CX^rNsROBZnuWN+;2(HE>lR0 zdt+vO8Q`bJK=B4C;yF_|RX7V=U2w9SiCA@8{v$N4F98y0ULq4>-vfwx=hNc^ke)jP z=JtUX3@51;5GL@pCPIo6e?R{P_1Z&Yh~!3;`{l=LI!TdT+GBjnhRsd0E4$?t(cF!z z4~#=v5NNe=^9uQHzBg*}*h}OJs4&Oz+O9l{@=ma&6>15fDnS3Lu zhNjlUH_tu4aG8~G#M(x%^W-&-9c^k#MVC8F+(@<=A-S%`Ub$W?Fc$Kt5+9$Idch*` z8DPZGrrDga&I@4J#R*`!JUMdw*O>xdJluM;2O(QyC6bm(|7=LXtOMpeK2{Oc%&@VGgIM}n=xPTsHZu*o|%=ydsHI*DGc2AD4b$rWMYr_F+cj(?lYu$Y(d0;`Gym zsVB+o4{0WaVAxWNLo&g-2maMO*qGgJH^Fz&7= z2fEolQG2QIcl}C3QYX&n7uJjBQw?>=S+N}$3TvDBB4GzLg zRLYKx^=)OTX4DgErJ$67t1~NTT)b{xDBJpm-PJp6oYIFy>k5yf4es3Dl0RBGlcl=6 zkeqZGj7n2lOVEiD7>~>izlNL*I0?~Dk3B&I=?k3@VF&JxNNflsY7~FfIS1h??ud;d z(DEysJz}!|k{hFP%wR_V1vv6eo}VD6bZprUiHm6Oc!Z({ZoD1T7?|r-)XyP$bG-Kk zs+K#Tcp+0iFn)Ojr~N=xynz_nO>QaMQGRLk!77)=oI))vu#!h&Wy>uG*Xlp#{1EDy z%3$r6jdxpHLNJIgSmO)!3NMHED&BdX_<))Ch(?8pE>b8Lyn%w;OM+3lR+y?QTQooRsb|E)Y+ibYPpR&p z6s+)b!X(VTwzS7+!HF5!N~m_e9HxfjR~m1(1NVhmD`i`y54ph*TuOHuB+7D#w|bn^rs6qM}j4>u88m-909 z8Qn378h$ehryt=81-d2(punML3ZG(*KwecJa-AGkfNPyvMS%^{9mNgCm4!IL&HC@J z^l77MMF&_St=`G-5)v585Jn?7Ln~EA!8Fe_82Ch>P0PpQ+VT)sB9MB@HR@Z3(I;CA zJo(00bBCDqE0P=Q-p@S%iEzyp(jhvEEnkvBeitFmh~)w7kJK)2IQLuSThcG;t;19m zA}y3r+ik(BUg}RFoeS0@+Aw!O=T#}{7vd=KmTSobahGQvS@-iPF`2(zEWZ|rcL;+h z*A_P95X#6hgKb=iO8R&>Lx(@?U7Hnbcz{}VWQ+Y_<#T}WigYMJ>43m!22#ZMp5gld zvjS`{o;AuM{G5Q_d%Q8HaIyEgX^dy2Nw)g^$op4#@1uRb@iKc^`0oDIN}!Mz`O)-4 zeusYO!vEkuT+-Cu{)g`VLl%DQ1^)|Es7&0Jo|i!!?smr5TtY%458>ez*n}wn6hK@k z`Jf#NB}A3*Xpcyjt>2`!1o+JMh!McM?KR%_f7^?f=04Td*%F0@2j|n!kd%~Ws5j%c1tuc1<14SI~GT{=5FRz6U0JD0S?LmuiOd&*a4Hl2GA3j*mk~0 zHG{zh;!{+DZUTEyhhE~-I~nx~s|gCSu*A?HC1m3($CYe+6H9wDyGls11or9(nytJ| zd*-n%2D@K`5fS*rJ)?+*sq?mMo6t0*6fGywY7RRNIp4Ub#|f4Kahsq^&@5tt_sEw0 z6$tBs!r=*u#H5mic33oSM;v_oggvkemK}+&k^{?7?z2fqgf*5IzCiS_fY*Gr3UPfh4gBdXY(XjrTV_9xzp6snGzFWJz6*U5Ae z>b#^$8`}Oa>Yx%)Z5Ua^{d@1j`9<3&2(qX3VKiS|pK-r78?u0jI73d-73h_vE*v9^nb#_S=Y|+zY*z1#s8FFs5YJ2SHfgyTzIL#sp<+tP{L67dQd6i78rY* zPo1dBFRd8bfj;rLUm!egc@bm@LV0>{3_0s5RelFi_9kbtHD7z!KV_t9cYA;Qp^bbc zltWd_-A&ujR6b=W(!+E`0+JwY$>sB{$|=DQjq@`FVnLG&nzyoVm#wvk&sDJ%kUz$< zsz`N9uTKBzKyxY92j4VNeFI0ST2*<$kTnW%H&05Zz(!w3IP3>SMCedaI4A zV!|4#j{auL*KY|)(UQMQZG@D-G_i}_&nIGbPs1fosoM8gw&|v0gvu#GWiJny6dkAA z-tutWs3nWft)s%3*w5>H2Uz2q{mj;TB{`%`((Z0bgJ@|&bigU0=wieD!l+jHeA2opi z+<@NBOcX&dBF*y`WU)wDjBvt|L{|-1lJPd|sI&$C8(Rp_U|c3sZXHuWY9QX6;iwQ@ zLl)3S<^&wxggq*BjIn5v)~&}bg&vOc?VbThy}Qj`JF9KRFi;(X#(;=Vy)XB6dBV3J zDevR#SQo(;_9_)=xm+BwUe=4x19DusZ;98PG=+T`ysxWBjg|D)oYj_G%rpHZl7LV) zX$v2yquc{&c9dXA4Uk6IXmP8L=$*(MyP&AihZ^D6zu3_R{e=R?eo&(G zgA&1i|9A5rl>F<&q)_1>d>FMGiksGIAa&&UH3jzB36t8@&K8KuOPGl~Sdzxq8MLok zG>?S8p?u(Vy!;k|@2}?>b17=?6)Ue>Yv6hw&-f2<^6QYo2k0O#M4vuP>vh?m3~FAs zWF|jlFeAtn3PM((0JAqP$ndl)Z#OhZ5y~7=^E}9~1p_iy!7Z70a`oMBSE#o}pjLJh zVTz*5IIgH$C%LtC9E*RfOV079G@4(p_z1lzvA&$?%4XRKRqv;AP-^Pnu?;u+((h8i zL2LgIFjx6Cw&tN3x_U7nKUtE$c!a$9$#6D#qZGn;&uoa&U&%^Lp(&%yiJeB8xx|}Y z`tgF8XP6d)@q^wa%SeIAAnL0Rk7uuKv@%S~4y(V+fD5CQP@ZZivy)%ess1v}K?`t@ zQuF)fi}JY6u72#6vftxICFm+nwzg$GCg1zMT?(U0_l)Pc5!=B4LxEJS4ns<{gO;!< zXgw`8Hc(F_hbG98bMbG9=a+QL9r8@r^6nI{s-;H15v2MGagO#T9zUH9Ae$D7YdLjA z+b+6rUT1u5x61&npD`pu?-5155E}FMJ^B~@Z|iSJ|IA;1n~6ymKz||ax)GgDo`@H! z=P1HkG53^qWlx#xF?6NhQERNoVoC3Pkt;yj{nM9isXV40D1&?jp+)C!d0N7Z~W~jmsBwN~D`fatRBJZO#*%k>!yjFS^0uKVbnUJd2Ryq$#3wPIxJfZVqJ{k&L&9 zXGCBQb4AEn#6de{voh66ZgSnUtK&f&3VPU`{pLb@%fxrO3nm!q)B}6PdXBGvSNwRb znYu@N!ldSa(*GSjg59@YnmN^50&QLU~Q;g};bg&FW1uN-D6+(tiSj13|*jaU7szS?JO%dg{la; zsYTbJ>S51)l`=Ja293O0qU*grE{>~Vl~KEju8(CD)=RK6c8wXv=Ry{0eQY>gXHbMs zf(9?Q^CXoZo16h3k5t4ol0WgU@(59J#$rXL#!T$oiR2;)m5l~P=ou9rBG zKW3L*?Z8_lpgc$u*MB}N{M3p2H4S>dtnu8Y?ig969?)uZXiMBkgy{rwyvHX{IwQ*1 zAaq*bEdCiNur{67aksM~O|G6rDQ9Zva~!a|*~U!cX7%1NuGu&KR{sIq?_r_$D%$FK zxv_K6f~%Io%g_V7`)TPMKhqWVq~k!XKec!HEiArL`92$v=|=Fy{>{a`u^4b%_X}@F zaX=)3VSRhobHA_OLU51xa|m;}5)1(E>KAu5Af;kUL_1Q|j#ePnvNgw%f9VT`kTto~ zH}bUvD8g--TZr)D%6`~)z-4bH@U}GFb+C$o1;du}!_&pT=wTNZRcmcOcPPeBVAB6U zApYkL{b%<4&!DbQ;Zh1g7M80S$3itpF5HI{9ABip!2*Jmd?dIe6pq(l?`GSuohd_}1NBcI-LaLWPNMI*u862C=;tK_$ z(n&p`Ly#LKfE1kWXOo8=oF9Zma{O61Y#!*hdweURwIrF`@}}l=L)N;UYbO*a0={5B zQUPPZEY(0o5Osk`nMW4tB5m+6q$f&l_QhIa+@Wd8uwM`_ByCMc5C*DD%?Pb~C@-qq zcUh(7rHYZwlq0;NNurHgAibV_8IBFj&GvdPGrx4aFyXuJ79qf40_xr5Z*&bu?vUHi zrL{iT&VA80Zh;VY{H%tC6_8BZ({o_1Zv)FXq{4b}9w7xB9s!AIEI+J~1?*I0z!gqC z3xG=tIMJp6tvi@N)02M3zh-%m@oA)pc$rU1H2dNhDf8U~Nl`etmlVKWe5;&7d?}X) z#txXgpFv;o;ZgP|?+G}GT#aCqPZCeLfh~{RR&(0C1`nBj>JD@+Yd*Zipb_W7Gf&dR z5V2ZWykWs2WOT2WZg=R5kzfX%oX!y=y@3yCsa3&v#Q~(KRS0=IQG@~}1gL_Hi9MPT zOb$ZvS{D{a8pi$b?0yjmst@Cz0w#;kwov4k0bZp8{{js0aEg`EA7HHgs5Ad#3jY5h z$|y+wcqmZ4jM^{z+5*F5kf?I-8xU8MX!ONG3S{RC{6wKbw}R+RQPww&oWsAMXvhap zt+d>3e}@taRsYzaJdD+4Db3PcR$O_GT)VSUS82Aly#Lhr7-D^DHL6>UFAa!(Z`tDH2S}%#z)&5j#_v zI%kw=H*yBO2=zB(wjZ=7X^wI{0z0=}w?GQ@HU*|v+fE|{v@1JogpFc!`~(7k&3Q|dsgmZW#r!!e8PcYLjUy34;4uRDf z9#U%h>|eU(4V1H2NwYq^1oLj0j2<77JiF#IyodH-sB`399Jg_m`T>J$i9NBqF_T2| zyC&(TTyrJmb{i;KT(J-dQ+S^>oT@Y3lhjgdc2vlbcOEcq*0q?A*6wQ_9vQ>{0LuDb zZRZ6M1wCSOOxa5#T1c;C9jdqIy%R@%1LB=aqoVR=;61$~LOOqq4|2q|NfP$om`cza zxN$MGnK9`qf0*4Mo_0+=CIO(it+Jy|&3OL}#D@u}0H~9Qi!g9G0v+R!Lxh||kCi%P z(<{KR{57SQLKrXLIm6Z6l& zc$4!0Kzl;r(d}r&AQ6n@8xKsH{QdVC#Q%mnNLtVTh4tKLwY8B;`=gfQktp{QX3*lp z`jUi_(Lx+oeZBQoN2=!c z*Zn<;PjN}Bi2kG?u(|4nb8Qp|G&Vaa0zF69U4C+aLaW{18t48hLP};2qUR{TriE(( z_nufef{Tz|-WBOp)YCQ zAo-a9Tr1n4nZc&V?(4X#(kb*jw}?4Yd6IXU`Uo~-tv&3WlZt7X=AE&j>pXna8_WF7 zu%l%hY6M+wzY%r-KGIFb{7Rh~U65B(_(#e9GL)8hnJqlywnCmU+XCwELaE~6}7dR^0< zmG6o(Pe~FJK>Sp-LmmQ_Y{Ny|<%<-BV3k!?K4k7SP4Ui}8v#G&m)pT5%^uHxV*AOf5Z3mFX_%v@} zNJoU0h@y`^L0CQPfmGf{+kDXi6rb#B zHBK+?u?~L}H9l@Q&SWpRuHhg?M142jRAWZ!52aHNiFbvJ8aIyf!pst`fjGf5-6-f= zwb!bz9W=``d@FkoH4BPMZw#@XZv2wK9l1@uAviWs!4QCw$(cAyCaF|bC^_yq$P%7Z zu{nCX$L?(D3Z0;9JzjM5)QOA}SWlpp#I+9B9jRNo7%=6RC*+7oc@0!e*%D|r3Xd&G zl(~xANHEg(s8pe8%^PLPo!Pq5z$A2(dTpf|bb^>)2{CN|a^v@|NwKqqt4y zZJw|xD>_7omTcgs+u=xRHk>B!XurguZl!#dFd1?Y8D;e#LZ6?H0EVS0ayB!QtN-g$ zcH%6hKcDnOkn3A`eE6n7uz(m=Q__Lq7zgQdsbNhgsPy3#m~(CooW9}SsSp8C3pFuJO|^k466PtsDJwZU4jVD^=Zf6c$sz zJx3=tMkj&d{`&C7jN}vI;f;uc?!x`X7yFG4w_mUx-5YG#Gg~Rqd!M6RXb^Pvi z%t2y}>Hezt%l@$N_n%u|v#*jgp3)OuAYCVJJ)n-Lh+21Y{5( z{EQ?{{yV5!#4u$K;;=zlSwb&nd8J2pr6J!ak^wTk~#7Pug_Ji~W zzIeweDy5|82Dy0Q5*14Ejdd$Dj$?r03lnnPl=5km%95RA6a~DGO6YZEuqdOgUaFQO zu4U~)q1@XvD5O}+Z-ug-R`dp$p%jSwk9xHvD07!%0Tc#7cqp%hs;f4&p-QVcZpkl( z`ElaX+Gb+m8b%|Bzs)6CF9b07oG6b5{^&0|4*JL1*mI&oIx`Bew_lWCMGHW+^3k^T zMzNXq(UD+64Ee8TSm5)lC^r`p9Ug|pAbz()b%^tO2IYYLF!PBtzZWsd% zvISKmColu+(}g)1pXXz_g*7c$hjGX{Ga7|Zq2>!uK?&*K9$hJ&Et&?ekLm>0lfgUI z4MCYovgLTSV>!|vG=YIL0FMldJtyfX3?Oyt8JihgBD<$+&SSv@nW0}+4f^>V=?Jex zISZFs+aFnEzB3pEbC_uWhcEv`H8VLSZ#J!#o;EbI?WSGIwwI5GE;R)DF@be11NTRj zkL(pD$XEpP#a>4CVoAC8AxU(M|H*%J8Pc*TD%d;?W4CO2VlbT3e26X=rIpJMW)||t zBtD;=S4a_foJ;IY*+jQH0n*l_#f+dqI!IR5z`tP>Si>@8Uo<S{B0)7%2v-7I!k$kBpHTmCx3?f$ z-V45|wQlS}4y_x{$ax0I*8%XXm3rf9hzemc%s^*5MWkUflo)UxE7I_{PCY`gk8D7? zq}n;5q%8X6nvMkAp|ztEy>0Vq?p3_-m<;NH90_JLIdb`iwJGs})O^2~OaVug9$s;( z1TZ#2rV}R?B2&11e18F2sxI5*ZBPkV_iN@8bnk)$Oa^XTk>TskAA@lF)Y$Wlk=8bD z^~8Br&7r7Oww1+Qove3QT|**)gcG2hqNcwNmx zdKav4mfpGzC$czs#!CmON)5DFpNkY2Zp|nDF;s7?)6KX+izo--brmr3100TkLCV3NKFgNP zzRDHL-TM{8UGWvFl$e9gDvqs1tm7e8r(%k}m`Y@=_?SSB!g#1F`AJPqV30|!=_t#h z(Fz>96BCh@xDW?bmtWDKMo`x_sQAIHQw8-0=%M6^dS$u~RhUPwsr4pG9c@snMx#!v zz4g;^nRb;#+41L~7pu1BqmOog{Kai+aTtfhd#kjHA~ZLN2kB_bi;KzHjR#|?NgMbq zDtE4{hNCD4;Yl8%E#gLcPNNlK;#P_4h`pCd8+gw2kPiuIy;x?#P+wJDc1lF@JeRB@ z$Q|W*vmy&|?Fno9LHPW%3srylO;$JUqKUMV+^Jr}>;^sS*5lp}0mQKrIH+7jfcj1_ zg+s$)`O(~+Z5M1?oCRX%$?t%xb;lIl73z~;%t!lwX8%D0z6e`q4aN9(@%@&dO|W@V z;++@g`9#rU`e;?9(L$G*XN(8Bx}*DJ_pXYD$X;RIbq8Rr%D=?B$lobn(>RSrmZ>`M z-l<&a!zIsh8VZC13ys|@+*k?NH}m`AtVbM^IEkd?ryM$Cw+$2q#>N(Yi)YDlurNR8 z>WtKfeX;c>G{i;QZ0iQAs5v{=VT)>lsdThblcv*gG3QgFQq=PcL_cL3UQ$N(Nxf4R z4mK|YaaoT7B+@rRIk94fCa+#z8pbv>GA{?k6IfD9Qd$Y`8?O7`P8u?l8Bd@O1+~5F zk3b}KkS^EVpdSt0anCSL5RrJwt8hsKk+@l)dZiqBrNB~tHz-%_@?V2tbD~Rua0hn; zWoW$_b;r;ONq=)Qf5hY79~#b-t;BQ{x$wsnqi}_51Z!v z?L4$6bsRH{)NG@|>9RUTPPU;ONhxDMcV4ew6>^FOq?dPAiRxB-ce;+K97R*jDvO87 z%8ORzfSUXc=Fjj9(@u|Z<>=g^{8`_qMa2JjSc)TIdA9;7Ovs|WIF^2?5?@bHmEE9n z?$-A4c@Mu-|KO#O;O7Z`a9q zxJ`0HDXm>7us3bPC>`CLNegu8cx_I)SX5V?5VP5TcLnIIvESG{2TtKQ!ND(1UekCl zc7Z~|Rf=E8iPbjA*?%a-$`REL@!^e6s)e9S6@+6`78Q&|uy3@IdM-hfL5b}12!>@7 zfi4+{dXzwG`c-9RA($`Q=dT2GyitLcY8XS@vZwkO3Ci+XqErPHx&*hRQ>k!PAe-D( zKu_wUU(Mob>8;nnjzNB<#*tzzfAQ<1dwkKY{0Grhe`2(zv-PHPL9cVv!zUYJW6qGB=2E|tUuu!j*P^h z6A5wz`(>$mvRL93>J%R=#xIxH;;J2358v*)8^Nzz=BoGRGwaZ{3P8dA#muN~;kYDc z>n7*>Wq6krKp{owp7p!m9-g#sJ3KjP8~sZMC@ntYOMBxNs?=;(gUT<86<6XlZGIJq zmjh$mh%uR~bHRQ7BgV^SsjIB;v!HL`s&hF=eEGq3m?O6obVrt*UTHzU@Z4X z-?+ybh4+k#yoVF~sH@?!)5R-q4Q|Rswd5kTiVN*bX#f!fWUUvZ%G_8Wh_-8~Krz1T{UZn5L6|icUfS5@Q;jk& zVuJ-%WbUU5U_BeB_uF?JDo7x^y#3+W2V|U%!@mnHH_HruYy(upytxuSII3PphBQALx?9`yvjWq z!{rDyhWNr%9n&I}DeE;wT&`j5^IrP1xa2A;y)KY>>7rzO`p2Zq`2~9mCr27&C9Y}$ zfx-Fm65aMd-EO3PxIP63dL05*oaG(80iFDGhV@zm4jY1XbsMVt3-+Lk$CYS|8+hS& z8-%Yo2Jc~sPn4sx_K6vo)bL^3@`#>GdT8enLM_X2n`ng{EjEy6QHHDJ@!K4W-u}5j z;R82L;^tjjS9s~0wa*aDf%rR1PNM34(^t5xCC6U85Qv z#9;JkXR1$G`yyCjQMyIG)@UwUJ-!4f);oc9t_(w1yln2mwLz7>DA6+c{VHy#uD;PW zN?W=wE0W_bC`8(N-?(lFJxtjI;7k!>)4VR^AiV>FUDtB2%X2l;BD&j^t*Qr5y0^;) zw?b0Lo~#FTBRnG3aNY;OfGPz$bxA(;DSs7~`8HJMf(s=V$pp@Z>o_eid+dOnJS&Ua za40~9C)`k?Zi>!KS8xnaf9n^g-+oHVESv4eYS(du>_~|A515P|J4yDM=;2 zM0UyQN$}xOR(jHhN`2J1+j$tsogdDId=a1G34kCCB(G4k&=$@;>O>I|B>>^{_48Sc zF7goM;qdlV<~?UOte=}I&Ji_tE;=J>U=Zsh&qu-Rdjs0a+UHRgr^ak6plCe6KMeF@ zJU>)>K~p3`ao6e%LWVNsOi6dIjRmGE6I-(kifp$A3{Sw{=m9-@#~)7C{Vyvh&i?kDsRp06ZX^m-c+W=jeJ^p~r` z&+tq(N2?f3FuG>)h|bl(t=@I?$kxS)Nd|=ilsIL(qm|b|;aqq@BJM+w07*Q$e{p1b zO-~@UruWqZ<2gtf-?x_M^b)WpXI+Vm9hQZ_$sO<6#&`h%{5IL4!UqK9F4uw1q`lGK z{0=2%_apif(a-9CV}ppmK!6k0&h0_%`)R_3$Lf)y<^B~YGbDr6N0;I?p&eL8ihQ+5`uJtvS zwQtSfbOCxj}B3QIBrNu;DxC)>e6{U)~!hCzoqNp zny3{~n|&&G;_;E;K01dODI8 zgce24dlcM~M_7Q@}Ut2iC8q15dzD=iGf1Qb}_RWK_mU~xGb!Gi?!VX_-6|Lq=cFf7%4eVe=NU9K=Wtel9tQbDhyk7@)G zaj0%HnuKM}X@kYq@wq8P8UR1P)|Y09o!s#I`tXB|@NbghgAV!lkM0-Gs6jjMIJD5~ zLTaM>2S^zW_=`bgY{)EZmpg5NLtngzEc@%fOLn^h?{04}l=FyNQF^+-l}ln;N$hmK zs2B#P%)WyHu$muQ{niPwIQuM9iJKo*_bCE-xZ`Z`Ay@{x264);+4~-3-OIP`T-_`# zcPeW@wg{)zN6*M}nuJ;(iPbyb|6*;C%?G9x{IRt_{!DECkKr)?_lU;ef7!wRXIhh~ z{OXLMjPxZGE}TT-R6%H#QB;~Xm}EFe9!XYu$?iDUVr#}hM9pkPMw>)@R}d$J6`8?0 zlQf6iR@+cvy2>IC8e=EIH=_Fr1?>&keJd>^B{lK96=5)r-aH_DJkfsL)$Vn@#gXs5 z^)|2l3$yQ#bdR)*R1ofOEmCKVLP9=hd%Cg0imbqfWFZuEnWf4A+bwIgp6Fm8DZ5NW z9#*z_|FNv%tp!F_|2^DKvo?fmnI~PCrHkyKxU54iYVWw-r`#WH1%;I6#AaySpFu+JAajI9B6z9S6suF{--a*iU!GEB`hCyV+7663v!t`g(2DAf^( zvqL8QNtR_6sWrH?nM7C`d^aC+_^@#|yt$va@g@GW)5eal`&80|=ud zy3H!oR{ftWnPfWzqfu6(PngIVY4=rTa-mUM)x;s0BB)^ecXT%Ht3tf}4*m0dr!KVu zHuSYNA8)lLcAv_i3|cY6Gmlf87vpW zgQK60L2h^GY9g%N=dM-xTG!K_Ac~xyX35Q)Ff>57LNZBXOgcjz2f@}X4z`BsMOa+#jN$U=Mv3JwNnzIQSVcM;*Z3^E zA{w3pwPu#}T&w5q>C*~S!>Ck;QfkE4_@~-}UTIWF({*R?NVbKF#Tt%?4oqa2m1%() zy5ShK6#7M)xe0fFu-=Hz<HZzOA9QOVm*w#3~(}3Db$((Bg$sXXoT3D=1ov zkfK!s{bCbgA!eie60>QMBl$du2R;Ll3Orz#P0szlxIga=FiAe;RxOO3j-ZZT+Q5*? z6Q|eE7B>era5Jggs7a`%P6Eqn0q!c6Z}Qx?#9q-qP&^E*n=zQ71Rd7O)>QQ;5D{>< z2$yN_=V^VeVH*_*rA`uoo|=OY-_oF8)MjR)Bm6AOLGqg_X~2FldHi{{#Wi`MrnVzD zalyDY`H#%&obRVPCEA+Q3Z{==JPNl2U5QKkReQteUVho+E$bNh{-J=04tckZ#4b={ z#YfY19!wIu2|?Mr#~!MdwAhG$=D?u3d+3Y#ql3UC%v@ma(Y->Q6+guK5nSZ@t8GPl zx0v*OK4X_58bPD7r_r&0b8Ke7bAga^g~lBc+6|!@rJbWB4|#ay?>4(A_g~*E1n;i@ zK}pYZg7p5CMF#s2%bg+NMygbkP)>)A8rmWDUoh6^L%h% zUUA?NX=0>Bf2xpSkG+4hsathn7-sQHVo1_lFx>~p=JvevkF4kt|1(jzakgQep^wom zfv;MAa8fkl6)X+?yXVr&KOyuO2y@d*%*(WiWs2?0ULdr`zIB!l;Q2S1<20 z7k5(g7f7pd_44zx-869ZHB4^e`7ds-q;y|P;N;>sldO2o=P!Jawe8~XL`#|I-*kidTo?f;>AJ5z^yPW zL_Yy?tCFf_94%n=(yi!hm6D8JwG0Jd^AsX>tTdbR>88;CQdLJ z+Iljw44H!snRV~hZ+`*L@|C{R2I#7>_C4}O(DEM*Z}R&T2-zmMU=mc?Isr*%;l2Z6E@GdQXQ zE6yFGUdVB+48dw^#eF9P@tRto9xXw7caarv>W81sy`xkBCuxLSS zJYB2+XzL$#8wSySDztc86VU-1jzEqUjNycoV#A3LHku%J`m6DjMA&sBA%70|xj?F> z$%deE3^iWo4K}dQJT1D^^_tdz*`(?FuPq%TL5j8}E2Sgk6A=q77Ds1ZK30w{YP>p& z#8Vq#UY6HzAXjm1xJI4Cl-el^%?p2>fy%Q1LhYK1u%WXGg+sMSOM7{D<9fHu zb+yr%#^ebn7uVIY#S~TK9&<jqK}aJc*IBTk3GesKj0%hEbwuH<+{l)@|rc5 z-GAQ-{>shxYk_GNTO?bgUxJQ-v*(hd_CtaB7b_}5`75XJCbf7RdWO2IB<%VdjUhYJ z7abavE%-q)IMZ(_rXmIk8F0$b2D^fJ^0L!SFQ5mNFGF1!vnRa4I-tx|iXn0K<@piu zn!I_Zc>>#8+J`5P%s$me=Di=Bw0FgqGs=|<>MNzw1bHV!z{tO=ts#3LXvR1i7b-bB z(+XTuNJdAmk#H8ahCAUo5Qv$Z{fbN`t@EL+^l`ZQC3gjy8wnWDjeoZ~-X)RmQva6+ zAGHTbjm(R?DsQ^~dbshIIZMyjaTi`&a1+4*v%>4I+w4}F5KMetKAu0j2ezypAqt?~ zIT!PzHOjTgtiStX=)^XLORSQ-T8qwJbKZV^5`a2_Gx?9e%J=f;XO4t{e|#d~(b1GJ z^$Gx@Zl~deLFp61-Us0Gwc!6HhMq<4J6Dn~itURCUOqntcF|)BJI97<8wc2{_enZy zpQYA?u{$78y*U+Vo3?EV&0iyA3X^e@^)cYW-}n9(1BqMq&0Wxs1(oS1R!Zdmh#os@ zGedoc|34|qg>mCjeSZ;yrfpDU|J?f7%CZ25%mj+lgz{;?5%t#KjMYM#a!k_dxKL=O zw%h=CknWQy=-0?1w6l62Uw>z^%}<=K-$VSu?AJn;lNsw#0&Zfci4WRjOh7A;3M6@8 z^LHs+(~mJ31E3#i4h&vKXpTNhdd9K~voy6W9!>;Z%1xc&r!$%{6E{rXI9`I4OqQNy zxJG*RRQSJ2I}>;)w>OSYhR9M~LZos{lo*6aQd!12G`6~;m}DQuPLfa|WlLRKT+1|B zveXroREliLTFIIgd*oJ1uD}18D_+jkpnH6Ltk3UzmiN5pJ?FgVd8qGL{!Dwzg4I zc39+X9C0Lx{^I$>^PQTBw{Rf3>3_1Om{>t(y9z0b^~)7bDnHXYu{`Eble#U_&d!&& zqO0muWxsKCv7awPsWYwfe3b6hW)i9BW@9*n&ud8*nVdYs9=}KKc5lSZ*Y`aF(3%ap zE0P%VUey^Lu(i4%-Ej2%ie^l4si4mG?ef)m+S?0RB6Dg+JSu{nl}^7YYktIO@2mXg zk6v{~eslFzn0gh)_}|ncga~)ueQfGhocpp+;sA$J2xw~&(AF9YwKW`wbJkP_az%>tbe^WB+J|Mg2}58P`%3hV|#z$|=ikYS{X?2i_aoWVRqrw4GpRmSYS!x-AdZqF1dN@&?yW(6tB{}(slgRUw^dojogkv5-xylMbrrR#(P?LBG6U_1d zQ-8r#_esbnGGsqz-4h|7i~gBpB{xT3sAEf?O&#b5@0H&NPIZ((W9#CKl(AZR>XME` zPb()$5P(&J=uEVS-MZpoOfkqk;1$&rj&6sb^2G1b7ka?Ij}Axx}kXn%#&Ka~=( zBEvbvGPh3#IS#_E#a-6As2n2Z8TwkqN*zO|#2W&)1eLqCc(ck-Ndj;4+eDMHIV!@E z2`}z$+Q+u8`;uvWxbY`D(P8UE-9Rw>pa4WEPe**>A*Ffc}-k zi2sj41}83Yj_aGWadB=UoS))DMxUQ;iFq7o#;?R<_pkho;(Z-2L8j8P^u^D%f+dPG;UpB}sTa&=$IoCtP3saye==&j8<*KzwMwDHF+b<+pKzqR{Y_P<(F0mwn zrcl;zL6KVauEe4gHDhPT>Z@l>wLeSVa>1q*r+G8fesLU+(e^7VMd_Za%hk|*$~GF3 zn(%p#^~OgrCASlWg73E2-_vMibv(SI?cLZI?rTqZtAZ%clOC0It!$JlW0yQ1n#S!g z*z@YiP5%vnB#(n^Cz#oLcZFs+q^eM3S-;B$08#&rD;RZ<<^bHMtZmD^iqw zuBB65e^pB8LmvG%aninJoT`EGDyKd=Wa&3AYvQlr4>f1xEy1lR(5T+zoBBF2uU+0g zDv*2a$^5ln%`9J`F_)uF_lEA&znh=2`?0e2I!uhX68b>eF0xOMaUf^1X~ue9sF|S;^NedDo+GnDO%C+Gy1zg=|O+5EmS8KfwBxOGp^YhWZl9LB+ zoWXCn6}9=cTl!D|ka`B=OG1C=u5GOp{kS!4e_KL!?fWQ3@Ge#H@5XwH z8|@}}^H&;Lh*`Eq-rHN*GBln$7*!&cCq~X4tGQ10-EhUmc2~V$442}#p4}EhN{}hO zt)h1`@j%<93zx6DSiUeHVsA)enh?3KU(twm7ct2hzoFi8Fhz4PBbR4oFYZ&Q$;dT> z!C3D0%&p~^eRAO~HLXDdSN+63B{Q}9X>L4NT6^*ZUtz>@ANBO)j_s3mRYP4t;v;y1 z1J$k76io@2(v=)lQ}ui_yf*ydMmBj?=0@)9wY8RMTQft)j}b1B_xu07p-@NTt1O1- zrP&glb2U2-`-Q`(;a+19I#@FcwNEcG3AfmuF+c=pxVoPID8#uB=m8}g~n(O(fV>{k-yrT z%?ghWQ)IKh$vXwJZ@YAD40G=ap`+1KK4p)Br_1Woavo@T^m<>PC&B#hU!|J&ey|k_ z4nD3pDDgS3(P11-Y$uQNhZVz5N6F>F!h6BZllEk!_MdK|&aPx|cXhY3a?=stT8Y=e zON`*J*XWAt)HGrxwZ*q+Vqa@ZR!L$}q20V!284MwiP%v31Gsxj)?B>8!)?>u^OApn zubibAoVP(51dG%rOn3B)1%o>rsY(~gcHxBV%zHNcGJAG5LXzusqp zf6xIB1mL$bi4w3Gd_OZ<=ql@JspAZdBy`p3fx$rYJ<-5uph=7HP0s?jFr8%~{M}+| zNTO>9R$pfs>diHr8rccBgeCIxUk5pYDmyHW0xgInO29$zSUV$u*HXpl8RB4To$Jl) z{=g^)d?NLZLQw)fbI!8X+h+vqVdLNM)J_c802p356&!dPP6 zCE7UwrwB-(Cm67|{rYWDP!Y8AfYQ_I;43A7XB{1Ynw2%tgXFFTJT;NX#G{D6V^}|d zVDJD7^jm?x;T-)4a6Qv{?DzgRb=^((gMaJ8lLIg#^ggES;cg28O4wNB&wi4wpM0>1vR)_@;4cOr@Ob#+|3e&Q7EJv(^^|?+hTO*&u!_h2Ss`y zx5A)}f$&VC1c<8AQN@#OY^LLn!S!0&Q*9~*T1_5YgpxCYw2a=t(UH`pO*9TnO)F@Z z{`~n3`;;u525tv@p!e>cBQ9@1N1Q-(w^ep?vvNE_t6@CZl1Ngs1HH`dhzAnP1TKgR z&x+=ipcT78VZ`UK6Yo4@10Zu1dFQ^1lLKX#%I7Y+9FjbP)?{2X?wBENh6hH0t!iov~!_g0%`C9z|%z*OpA9f0PuiVfdgO zf~Mpy6+QnL1HT-G5DZEdApC1jdVT`D&y5iJDway1HzLD3f(U2xlZ7~o-yeiq2;Q4Q zs9aAMpu!K)v!10Ec)Wr4NDwHhZq{nR)NJ^N3n_D#JihOkz~zHi5)l;c*?&PH>xu*& VCNKd3JGtOvEm(5t0lFyE{{i--k}m)N literal 50710 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 EfAhh=DF6Tf diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index 642d572c..6686a643 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1,2 +1,18 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.0/apache-maven-3.9.0-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar diff --git a/mvnw b/mvnw index 41c0f0c2..b7f06462 100755 --- a/mvnw +++ b/mvnw @@ -19,7 +19,7 @@ # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- -# Maven Start Up Batch script +# Apache Maven Wrapper startup batch script, version 3.1.1 # # Required ENV vars: # ------------------ @@ -27,7 +27,6 @@ # # Optional ENV vars # ----------------- -# M2_HOME - location of maven2's installed home dir # MAVEN_OPTS - parameters passed to the Java VM when running Maven # e.g. to debug Maven itself, use # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 @@ -36,6 +35,10 @@ if [ -z "$MAVEN_SKIP_RC" ] ; then + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + if [ -f /etc/mavenrc ] ; then . /etc/mavenrc fi @@ -58,9 +61,9 @@ case "`uname`" in # See https://developer.apple.com/library/mac/qa/qa1170/_index.html if [ -z "$JAVA_HOME" ]; then if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" + JAVA_HOME="`/usr/libexec/java_home`"; export JAVA_HOME else - export JAVA_HOME="/Library/Java/Home" + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME fi fi ;; @@ -72,36 +75,8 @@ if [ -z "$JAVA_HOME" ] ; then fi fi -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - # For Cygwin, ensure paths are in UNIX format before anything is touched if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` [ -n "$CLASSPATH" ] && @@ -110,8 +85,6 @@ fi # For Mingw, ensure paths are in UNIX format before anything is touched if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" [ -n "$JAVA_HOME" ] && JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" fi @@ -145,7 +118,7 @@ if [ -z "$JAVACMD" ] ; then JAVACMD="$JAVA_HOME/bin/java" fi else - JAVACMD="`which java`" + JAVACMD="`\\unset -f command; \\command -v java`" fi fi @@ -159,12 +132,9 @@ if [ -z "$JAVA_HOME" ] ; then echo "Warning: JAVA_HOME environment variable is not set." fi -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - # traverses directory structure from process work directory to filesystem root # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { - if [ -z "$1" ] then echo "Path not specified to find_maven_basedir" @@ -184,7 +154,7 @@ find_maven_basedir() { fi # end of workaround done - echo "${basedir}" + printf '%s' "$(cd "$basedir"; pwd)" } # concatenates all lines of a file @@ -194,11 +164,16 @@ concat_lines() { fi } -BASE_DIR=`find_maven_basedir "$(pwd)"` +BASE_DIR=$(find_maven_basedir "$(dirname $0)") if [ -z "$BASE_DIR" ]; then exit 1; fi +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi + ########################################################################################## # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central # This allows using the maven wrapper in projects that prohibit checking in binary data. @@ -212,16 +187,16 @@ else echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." fi if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" fi while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + case "$key" in (wrapperUrl) wrapperUrl="$value"; break ;; esac done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" + echo "Downloading from: $wrapperUrl" fi wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" if $cygwin; then @@ -229,42 +204,49 @@ else fi if command -v wget > /dev/null; then + QUIET="--quiet" if [ "$MVNW_VERBOSE" = true ]; then echo "Found wget ... using wget" + QUIET="" fi if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" fi + [ $? -eq 0 ] || rm -f "$wrapperJarPath" elif command -v curl > /dev/null; then + QUIET="--silent" if [ "$MVNW_VERBOSE" = true ]; then echo "Found curl ... using curl" + QUIET="" fi if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L fi - + [ $? -eq 0 ] || rm -f "$wrapperJarPath" else if [ "$MVNW_VERBOSE" = true ]; then echo "Falling back to using Java to download" fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaSource="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" # For Cygwin, switch paths to Windows format before running javac if $cygwin; then + javaSource=`cygpath --path --windows "$javaSource"` javaClass=`cygpath --path --windows "$javaClass"` fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then if [ "$MVNW_VERBOSE" = true ]; then echo " - Compiling MavenWrapperDownloader.java ..." fi # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") + ("$JAVA_HOME/bin/javac" "$javaSource") fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ -e "$javaClass" ]; then # Running the downloader if [ "$MVNW_VERBOSE" = true ]; then echo " - Running MavenWrapperDownloader.java ..." @@ -278,16 +260,10 @@ fi # End of extension ########################################################################################## -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` [ -n "$CLASSPATH" ] && @@ -305,6 +281,7 @@ WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain exec "$JAVACMD" \ $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd index 86115719..cba1f040 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -1,182 +1,187 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.1.1 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% From 1163f479b1b7d067b72840b818148f6e4f5d710c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:21:28 -0800 Subject: [PATCH 107/238] Upgrade Maven Plugins Closes gh-356 --- pom.xml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pom.xml b/pom.xml index 257f1b5f..757f850d 100644 --- a/pom.xml +++ b/pom.xml @@ -75,17 +75,17 @@ com.googlecode.maven-download-plugin download-maven-plugin - 1.6.0 + 1.6.8 org.apache.maven.plugins maven-antrun-plugin - 1.8 + 3.1.0 org.apache.maven.plugins maven-checkstyle-plugin - 3.1.1 + 3.2.1 com.puppycrawl.tools @@ -97,22 +97,22 @@ org.apache.maven.plugins maven-clean-plugin - 3.1.0 + 3.2.0 org.apache.maven.plugins maven-compiler-plugin - 3.8.1 + 3.10.1 org.apache.maven.plugins maven-deploy-plugin - 2.8.2 + 3.0.0 org.apache.maven.plugins maven-dependency-plugin - 3.1.2 + 3.5.0 org.apache.maven.plugins @@ -130,32 +130,32 @@ org.apache.maven.plugins maven-install-plugin - 2.5.2 + 3.1.0 org.apache.maven.plugins maven-invoker-plugin - 3.2.1 + 3.4.0 org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 org.apache.maven.plugins maven-plugin-plugin - 3.6.0 + 3.7.1 org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.4.1 org.apache.maven.plugins maven-site-plugin - 3.9.1 + 3.12.1 org.apache.maven.plugins @@ -179,7 +179,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.2.0 + 3.4.1 8 -Xdoclint:none @@ -188,22 +188,22 @@ org.apache.maven.plugins maven-resources-plugin - 3.2.0 + 3.3.0 org.codehaus.mojo versions-maven-plugin - 2.8.1 + 2.14.2 org.codehaus.mojo exec-maven-plugin - 3.0.0 + 3.1.0 org.codehaus.mojo build-helper-maven-plugin - 3.2.0 + 3.3.0 org.eclipse.tycho From d2c06bfda23eb3a33d586a9aecbd6d8e737b154e Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:21:58 -0800 Subject: [PATCH 108/238] Upgrade to Proguard 9.0.7 Closes gh-357 --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 757f850d..67ef59fd 100644 --- a/pom.xml +++ b/pom.xml @@ -62,12 +62,12 @@ com.github.wvengen proguard-maven-plugin - 2.3.1 + 2.6.0 com.guardsquare - proguard-base - 7.0.0 + proguard-core + 9.0.7 runtime From 6f1aacbd742639ab543cb1cd7f30396bc91a3aaa Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 10:11:03 -0800 Subject: [PATCH 109/238] Upgrade to Gradle 7.6 Closes gh-353 --- .../spring-javaformat-gradle-plugin/build.gradle | 6 +++--- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../spring-javaformat-gradle-plugin/gradlew | 2 +- .../spring-javaformat-gradle-plugin/gradlew.bat | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle index 706161d8..1a94c0a2 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle @@ -8,9 +8,9 @@ repositories { } dependencies { - compile fileTree(dir: 'target/dependencies/compile', include: '*.jar') - testCompile gradleTestKit() - testCompile fileTree(dir: 'target/dependencies/test', include: '*.jar') + implementation fileTree(dir: 'target/dependencies/compile', include: '*.jar') + testImplementation gradleTestKit() + testImplementation fileTree(dir: 'target/dependencies/test', include: '*.jar') } jar { diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradle/wrapper/gradle-wrapper.properties b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradle/wrapper/gradle-wrapper.properties index 4d9ca164..070cb702 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradle/wrapper/gradle-wrapper.properties +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew index 9fcbaf9c..4f906e0c 100755 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew @@ -1,7 +1,7 @@ #!/usr/bin/env sh # -# Copyright 2015-2020 the original author or authors. +# Copyright 2015 the original author or authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat index 534325e8..ac1b06f9 100755 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat @@ -1,5 +1,5 @@ @rem -@rem Copyright 2015-2020 the original author or authors. +@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. From 814f1132f1ec3e328680f1666e7fa8e38a8b0b8f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:23:55 -0800 Subject: [PATCH 110/238] Upgrade to Tycho 3.0.1 Closes gh-358 --- .gitignore | 2 ++ pom.xml | 8 ++++---- .../io.spring.javaformat.eclipse.site/pom.xml | 1 - 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 3b33c61c..ab75a6c8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ target *.ipr *.iws spring-javaformat-eclipse/io.spring.javaformat.eclipse/lib +spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/lib +spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/lib spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/lib .gradle spring-javaformat-gradle/spring-javaformat-gradle-plugin/bin diff --git a/pom.xml b/pom.xml index 67ef59fd..1e1c3c83 100644 --- a/pom.xml +++ b/pom.xml @@ -53,8 +53,8 @@ 1.16.0 1.16.0 3.0.3 - 2.5.0 - 2.5.0 + 3.0.1 + 3.0.1 @@ -230,9 +230,9 @@ ${tycho.version} - org.eclipse.tycho.extras + org.eclipse.tycho tycho-buildtimestamp-jgit - ${tycho-extras.version} + ${tycho.version} diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 92bff157..91180586 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -22,7 +22,6 @@ tycho-packaging-plugin ${project.artifactId} - true From 8d2e54c684984e2553828f9df32b32caf2771a44 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:20:43 -0800 Subject: [PATCH 111/238] Upgrade build to use Java 17 Closes gh-354 --- .sdkmanrc | 2 +- ci/images/get-jdk-url.sh | 17 ----------------- ci/images/setup.sh | 2 +- 3 files changed, 2 insertions(+), 19 deletions(-) delete mode 100755 ci/images/get-jdk-url.sh diff --git a/.sdkmanrc b/.sdkmanrc index 42d4e368..14fdc133 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=11.0.16.1-librca +java=17.0.6-librca diff --git a/ci/images/get-jdk-url.sh b/ci/images/get-jdk-url.sh deleted file mode 100755 index c539e19d..00000000 --- a/ci/images/get-jdk-url.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -set -e - -case "$1" in - java8) - echo "https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz" - ;; - java11) - echo "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz" - ;; - java16) - echo "https://github.com/AdoptOpenJDK/openjdk16-binaries/releases/download/jdk-16%2B36/OpenJDK16-jdk_x64_linux_hotspot_16_36.tar.gz" - ;; - *) - echo $"Unknown java version" - exit 1 -esac diff --git a/ci/images/setup.sh b/ci/images/setup.sh index 52574521..31f56577 100755 --- a/ci/images/setup.sh +++ b/ci/images/setup.sh @@ -16,7 +16,7 @@ curl --output /opt/concourse-release-scripts.jar https://repo.spring.io/release/ ########################################################### # JAVA ########################################################### -JDK_URL=$( ./get-jdk-url.sh java11 ) +JDK_URL=https://github.com/bell-sw/Liberica/releases/download/17.0.6+10/bellsoft-jdk17.0.6+10-linux-amd64.tar.gz mkdir -p /opt/openjdk cd /opt/openjdk From ac00093470c22f171594ba9fdee3d15e132d3f2d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:25:20 -0800 Subject: [PATCH 112/238] Upgrade to Eclipse 2022-12 Closes gh-352 --- pom.xml | 6 +++--- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 8 +++++--- .../io.spring.javaformat.eclipse.tests/build.properties | 3 ++- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 1 - .../io.spring.javaformat.eclipse/pom.xml | 1 + .../eclipse/m2e/MavenProjectSettingsConfigurator.java | 4 ++-- spring-javaformat-eclipse/pom.xml | 6 +++--- 10 files changed, 19 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index 1e1c3c83..877c2775 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2022-06/202206151000/ + https://download.eclipse.org/releases/2022-12/202212071000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 @@ -612,7 +612,7 @@ - -Xmx512m -XX:MaxPermSize=256m -XstartOnFirstThread + -Xmx512m -XstartOnFirstThread @@ -624,7 +624,7 @@ - -Xmx512m -XX:MaxPermSize=256m + -Xmx512m diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 1615bba7..999de9e4 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -13,6 +13,6 @@ Spring JavaFormat Eclipse Plugin Feature ${basedir}/../.. - 11 + 17 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 91180586..8c6f5258 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -13,7 +13,7 @@ Spring JavaFormat Eclipse Plugin Site ${basedir}/../.. - 11 + 17 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index a58dbd73..b3a9b579 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -1,16 +1,18 @@ Manifest-Version: 1.0 Fragment-Host: io.spring.javaformat.eclipse +Import-Package: org.junit, + org.junit.jupiter.api, + org.junit.jupiter.api.io Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests Bundle-Version: 0.0.36.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 -Require-Bundle: org.junit, - org.junit.jupiter.api Bundle-ClassPath: ., lib/assertj-core.jar, lib/byte-buddy-agent.jar, lib/byte-buddy.jar, lib/mockito-core.jar, - lib/objenesis.jar + lib/objenesis.jar, + lib/junit-jupiter-api.jar diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/build.properties b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/build.properties index f084befe..b62f58dd 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/build.properties +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/build.properties @@ -6,4 +6,5 @@ bin.includes = META-INF/,\ lib/byte-buddy-agent.jar,\ lib/byte-buddy.jar,\ lib/mockito-core.jar,\ - lib/objenesis.jar + lib/objenesis.jar,\ + lib/junit-jupiter-api.jar diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 194fa5e8..9f94ca47 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -13,7 +13,7 @@ Spring JavaFormat Eclipse Test ${basedir}/../.. - 11 + 17 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 564a1fc2..e7c5b534 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -10,7 +10,6 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.resources, org.eclipse.core.runtime, org.eclipse.ui.ide, - org.slf4j.api;bundle-version="1.7.0", org.eclipse.jdt.core, org.eclipse.jface.text, org.eclipse.m2e.jdt;resolution:=optional, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 6785b635..e7c31f42 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -13,6 +13,7 @@ Spring JavaFormat Eclipse Plugin ${basedir}/../.. + 17 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java index 5cc7aacd..030a873f 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java @@ -43,13 +43,13 @@ public void configure(ProjectConfigurationRequest request, IProgressMonitor moni new Executor(Messages.springFormatSettingsImportError).run(() -> { List searchFolders = getSearchFolders(request); ProjectSettingsFiles settingsFiles = new ProjectSettingsFilesLocator(searchFolders).locateSettingsFiles(); - settingsFiles.applyToProject(request.getProject(), monitor); + settingsFiles.applyToProject(request.mavenProjectFacade().getProject(), monitor); }); } private List getSearchFolders(ProjectConfigurationRequest request) { List files = new ArrayList<>(); - MavenProject project = request.getMavenProject(); + MavenProject project = request.mavenProject(); while (project != null && project.getBasedir() != null) { files.add(project.getBasedir()); project = project.getParent(); diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 8d391e4a..24fe7ecd 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -13,13 +13,13 @@ Spring JavaFormat Eclipse Parent ${basedir}/.. - 11 + 17 - eclipse-jdk8 + eclipse-jdk11 p2 - ${eclipse.jdk8.repository} + ${eclipse.jdk11.repository} eclipse-checkstyle From 01fd33eaa1a3c1f7bfcde9bdadfee2e17ad958d9 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:37:15 -0800 Subject: [PATCH 113/238] Update CI pipeline --- ci/pipeline.yml | 7 +------ ci/tasks/build-ci-image.yml | 5 ++++- ci/tasks/generate-changelog.yml | 4 +++- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index a870f942..467f75b3 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -41,7 +41,7 @@ resource_types: type: registry-image source: repository: springio/artifactory-resource - tag: "0.0.17" + tag: "0.0.18" - name: pull-request type: registry-image source: @@ -51,11 +51,6 @@ resource_types: source: repository: cfcommunity/slack-notification-resource tag: latest -- name: github-release - type: registry-image - source: - repository: concourse/github-release-resource - tag: 1.7.0 resources: - name: git-repo type: git diff --git a/ci/tasks/build-ci-image.yml b/ci/tasks/build-ci-image.yml index 18f97c02..6f4de778 100644 --- a/ci/tasks/build-ci-image.yml +++ b/ci/tasks/build-ci-image.yml @@ -3,7 +3,10 @@ platform: linux image_resource: type: registry-image source: - repository: vito/oci-build-task + repository: concourse/oci-build-task + tag: 0.10.0 + username: ((docker-hub-username)) + password: ((docker-hub-password)) inputs: - name: ci-images-git-repo outputs: diff --git a/ci/tasks/generate-changelog.yml b/ci/tasks/generate-changelog.yml index 59a43eae..e784e19f 100644 --- a/ci/tasks/generate-changelog.yml +++ b/ci/tasks/generate-changelog.yml @@ -4,7 +4,9 @@ image_resource: type: registry-image source: repository: springio/github-changelog-generator - tag: '0.0.7' + tag: '0.0.8' + username: ((docker-hub-username)) + password: ((docker-hub-password)) inputs: - name: git-repo - name: artifactory-repo From 458bd3b56c720f8a350b29aa9f5de5d9c5904d48 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:41:26 -0800 Subject: [PATCH 114/238] Update CI pipeline --- ci/images/ci-image/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/images/ci-image/Dockerfile b/ci/images/ci-image/Dockerfile index 0fa33ae7..fbdbb4c0 100644 --- a/ci/images/ci-image/Dockerfile +++ b/ci/images/ci-image/Dockerfile @@ -1,7 +1,6 @@ FROM ubuntu:focal-20210401 ADD setup.sh /setup.sh -ADD get-jdk-url.sh /get-jdk-url.sh ADD get-docker-url.sh /get-docker-url.sh RUN ./setup.sh From 4fdd565dffe298f24b45235cb2cb5774dc89ee84 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:49:37 -0800 Subject: [PATCH 115/238] Update CI pipeline --- ci/pipeline.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 467f75b3..d4708570 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -42,15 +42,20 @@ resource_types: source: repository: springio/artifactory-resource tag: "0.0.18" + username: ((docker-hub-username)) + password: ((docker-hub-password)) - name: pull-request type: registry-image source: repository: teliaoss/github-pr-resource + username: ((docker-hub-username)) + password: ((docker-hub-password)) - name: slack-notification type: registry-image source: repository: cfcommunity/slack-notification-resource - tag: latest + username: ((docker-hub-username)) + password: ((docker-hub-password)) resources: - name: git-repo type: git From 4c9bb12d98a7435829e61feee380eab560244d49 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 19:51:50 -0800 Subject: [PATCH 116/238] Change "qualified Invocations" wrapping option Improve fluent API formatting by tweaking the "qualified Invocations" wrapping option. This commit also changes the fix for gh-332 by porting `align_selector_in_method_invocation_on_expression_first_line` to the Java 8 formatter. Closes gh-124 --- .eclipse/org.eclipse.jdt.core.prefs | 4 +- .../formatter/linewrap/WrapPreparator.java | 1687 +++++++++++++++++ .../eclipse/rewrite/EclipseRewriter.java | 8 +- .../javaformat/formatter/FormatterTests.java | 4 +- .../src/test/resources/expected/complex.txt | 6 +- .../multi-line-statement-indentation.txt | 5 +- .../formatter/eclipse/formatter.prefs | 4 +- src/checkstyle/checkstyle-suppressions.xml | 1 + 8 files changed, 1706 insertions(+), 13 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java diff --git a/.eclipse/org.eclipse.jdt.core.prefs b/.eclipse/org.eclipse.jdt.core.prefs index 1d379438..cc3e405e 100644 --- a/.eclipse/org.eclipse.jdt.core.prefs +++ b/.eclipse/org.eclipse.jdt.core.prefs @@ -127,7 +127,7 @@ org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=84 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 @@ -136,7 +136,7 @@ org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false +org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=true org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 org.eclipse.jdt.core.formatter.blank_lines_after_package=1 org.eclipse.jdt.core.formatter.blank_lines_before_field=0 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java new file mode 100644 index 00000000..5ddaf1ca --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java @@ -0,0 +1,1687 @@ +/******************************************************************************* + * Copyright (c) 2014, 2020 Mateusz Matela and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Mateusz Matela - [formatter] Formatter does not format Java code correctly, especially when max line width is set - https://bugs.eclipse.org/303519 + * Mateusz Matela - [formatter] follow up bug for comments - https://bugs.eclipse.org/458208 + *******************************************************************************/ +package org.eclipse.jdt.internal.formatter.linewrap; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; +import java.util.function.ToIntFunction; + +import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.ASTVisitor; +import org.eclipse.jdt.core.dom.Annotation; +import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration; +import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration; +import org.eclipse.jdt.core.dom.AnonymousClassDeclaration; +import org.eclipse.jdt.core.dom.ArrayInitializer; +import org.eclipse.jdt.core.dom.AssertStatement; +import org.eclipse.jdt.core.dom.Assignment; +import org.eclipse.jdt.core.dom.Block; +import org.eclipse.jdt.core.dom.CatchClause; +import org.eclipse.jdt.core.dom.ClassInstanceCreation; +import org.eclipse.jdt.core.dom.ConditionalExpression; +import org.eclipse.jdt.core.dom.ConstructorInvocation; +import org.eclipse.jdt.core.dom.CreationReference; +import org.eclipse.jdt.core.dom.DoStatement; +import org.eclipse.jdt.core.dom.EnhancedForStatement; +import org.eclipse.jdt.core.dom.EnumConstantDeclaration; +import org.eclipse.jdt.core.dom.EnumDeclaration; +import org.eclipse.jdt.core.dom.ExportsDirective; +import org.eclipse.jdt.core.dom.Expression; +import org.eclipse.jdt.core.dom.ExpressionMethodReference; +import org.eclipse.jdt.core.dom.FieldAccess; +import org.eclipse.jdt.core.dom.FieldDeclaration; +import org.eclipse.jdt.core.dom.ForStatement; +import org.eclipse.jdt.core.dom.IExtendedModifier; +import org.eclipse.jdt.core.dom.IfStatement; +import org.eclipse.jdt.core.dom.InfixExpression; +import org.eclipse.jdt.core.dom.InfixExpression.Operator; +import org.eclipse.jdt.core.dom.LambdaExpression; +import org.eclipse.jdt.core.dom.MemberValuePair; +import org.eclipse.jdt.core.dom.MethodDeclaration; +import org.eclipse.jdt.core.dom.MethodInvocation; +import org.eclipse.jdt.core.dom.Name; +import org.eclipse.jdt.core.dom.NormalAnnotation; +import org.eclipse.jdt.core.dom.OpensDirective; +import org.eclipse.jdt.core.dom.PackageDeclaration; +import org.eclipse.jdt.core.dom.ParameterizedType; +import org.eclipse.jdt.core.dom.ProvidesDirective; +import org.eclipse.jdt.core.dom.QualifiedName; +import org.eclipse.jdt.core.dom.RecordDeclaration; +import org.eclipse.jdt.core.dom.SingleMemberAnnotation; +import org.eclipse.jdt.core.dom.SingleVariableDeclaration; +import org.eclipse.jdt.core.dom.Statement; +import org.eclipse.jdt.core.dom.SuperConstructorInvocation; +import org.eclipse.jdt.core.dom.SuperFieldAccess; +import org.eclipse.jdt.core.dom.SuperMethodInvocation; +import org.eclipse.jdt.core.dom.SuperMethodReference; +import org.eclipse.jdt.core.dom.SwitchExpression; +import org.eclipse.jdt.core.dom.SwitchStatement; +import org.eclipse.jdt.core.dom.ThisExpression; +import org.eclipse.jdt.core.dom.TryStatement; +import org.eclipse.jdt.core.dom.Type; +import org.eclipse.jdt.core.dom.TypeDeclaration; +import org.eclipse.jdt.core.dom.TypeMethodReference; +import org.eclipse.jdt.core.dom.TypeParameter; +import org.eclipse.jdt.core.dom.UnionType; +import org.eclipse.jdt.core.dom.VariableDeclaration; +import org.eclipse.jdt.core.dom.VariableDeclarationExpression; +import org.eclipse.jdt.core.dom.VariableDeclarationFragment; +import org.eclipse.jdt.core.dom.VariableDeclarationStatement; +import org.eclipse.jdt.core.dom.WhileStatement; +import org.eclipse.jdt.core.formatter.CodeFormatter; +import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants; +import org.eclipse.jdt.internal.formatter.DefaultCodeFormatterOptions; +import org.eclipse.jdt.internal.formatter.DefaultCodeFormatterOptions.Alignment; +import org.eclipse.jdt.internal.formatter.Token; +import org.eclipse.jdt.internal.formatter.Token.WrapMode; +import org.eclipse.jdt.internal.formatter.Token.WrapPolicy; +import org.eclipse.jdt.internal.formatter.TokenManager; +import org.eclipse.jdt.internal.formatter.TokenTraverser; +import org.eclipse.jface.text.IRegion; + +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOLON; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOMMA; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOMMENT_BLOCK; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOMMENT_JAVADOC; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOMMENT_LINE; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameDOT; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameEQUAL; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameIdentifier; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameLBRACE; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameLESS; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameLPAREN; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameOR; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameQUESTION; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameRBRACE; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameRPAREN; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameSEMICOLON; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameStringLiteral; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameenum; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameextends; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameimplements; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamenew; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamesuper; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamethis; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamethrows; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameto; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamewhile; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamewith; + +public class WrapPreparator extends ASTVisitor { + + // @formatter:off + + /** + * Helper for common handling of all expressions that should be treated the same as + * {@link FieldAccess} + */ + private static class FieldAccessAdapter { + final Expression accessExpression; + + public FieldAccessAdapter(Expression expression) { + this.accessExpression = expression; + } + + public static boolean isFieldAccess(ASTNode expr) { + return expr instanceof FieldAccess || expr instanceof QualifiedName || expr instanceof ThisExpression + || expr instanceof SuperFieldAccess; + } + + public Expression getExpression() { + if (this.accessExpression instanceof FieldAccess) { + return ((FieldAccess) this.accessExpression).getExpression(); + } + if (this.accessExpression instanceof QualifiedName) { + return ((QualifiedName) this.accessExpression).getQualifier(); + } + if (this.accessExpression instanceof ThisExpression) { + return ((ThisExpression) this.accessExpression).getQualifier(); + } + if (this.accessExpression instanceof SuperFieldAccess) { + return ((SuperFieldAccess) this.accessExpression).getQualifier(); + } + throw new AssertionError(); + } + + public int getIdentifierIndex(TokenManager tm) { + if (this.accessExpression instanceof FieldAccess) { + return tm.firstIndexIn(((FieldAccess) this.accessExpression).getName(), TokenNameIdentifier); + } + if (this.accessExpression instanceof QualifiedName) { + return tm.firstIndexIn(((QualifiedName) this.accessExpression).getName(), TokenNameIdentifier); + } + if (this.accessExpression instanceof ThisExpression) { + return tm.lastIndexIn(this.accessExpression, TokenNamethis); + } + if (this.accessExpression instanceof SuperFieldAccess) { + return tm.lastIndexIn(this.accessExpression, TokenNamesuper); + } + throw new AssertionError(); + } + } + + private static final Map OPERATOR_PRECEDENCE; + private static final Map> OPERATOR_WRAPPING_OPTION; + private static final Map> OPERATOR_WRAP_BEFORE_OPTION; + static { + HashMap precedence = new HashMap<>(); + HashMap> wrappingOption = new HashMap<>(); + HashMap> wrapBeforeOption = new HashMap<>(); + for (Operator op : Arrays.asList(Operator.TIMES, Operator.DIVIDE, Operator.REMAINDER)) { + precedence.put(op, 1); + wrappingOption.put(op, o -> o.alignment_for_multiplicative_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_multiplicative_operator); + } + for (Operator op : Arrays.asList(Operator.PLUS, Operator.MINUS)) { + precedence.put(op, 2); + wrappingOption.put(op, o -> o.alignment_for_additive_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_additive_operator); + } + for (Operator op : Arrays.asList(Operator.LEFT_SHIFT, Operator.RIGHT_SHIFT_SIGNED, + Operator.RIGHT_SHIFT_UNSIGNED)) { + precedence.put(op, 3); + wrappingOption.put(op, o -> o.alignment_for_shift_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_shift_operator); + } + for (Operator op : Arrays.asList(Operator.LESS, Operator.GREATER, Operator.LESS_EQUALS, + Operator.GREATER_EQUALS)) { + precedence.put(op, 4); + wrappingOption.put(op, o -> o.alignment_for_relational_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_relational_operator); + } + for (Operator op : Arrays.asList(Operator.EQUALS, Operator.NOT_EQUALS)) { + precedence.put(op, 5); + wrappingOption.put(op, o -> o.alignment_for_relational_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_relational_operator); + } + + precedence.put(Operator.AND, 6); + precedence.put(Operator.XOR, 7); + precedence.put(Operator.OR, 8); + for (Operator op : Arrays.asList(Operator.AND, Operator.XOR, Operator.OR)) { + wrappingOption.put(op, o -> o.alignment_for_bitwise_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_bitwise_operator); + } + + precedence.put(Operator.CONDITIONAL_AND, 9); + precedence.put(Operator.CONDITIONAL_OR, 10); + for (Operator op : Arrays.asList(Operator.CONDITIONAL_AND, Operator.CONDITIONAL_OR)) { + wrappingOption.put(op, o -> o.alignment_for_logical_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_logical_operator); + } + // ternary and assignment operators not relevant to infix expressions + + OPERATOR_PRECEDENCE = Collections.unmodifiableMap(precedence); + OPERATOR_WRAPPING_OPTION = Collections.unmodifiableMap(wrappingOption); + OPERATOR_WRAP_BEFORE_OPTION = Collections.unmodifiableMap(wrapBeforeOption); + } + + /** Penalty multiplier for wraps that are preferred */ + private final static float PREFERRED = 7f / 8; + + final TokenManager tm; + final DefaultCodeFormatterOptions options; + final int kind; + + final Aligner aligner; + + /* + * temporary values used when calling {@link #handleWrap(int)} to avoid ArrayList + * initialization and long lists of parameters + */ + private List wrapIndexes = new ArrayList<>(); + /** + * Indexes for wraps that shouldn't happen but should be indented if cannot be removed + */ + private List secondaryWrapIndexes = new ArrayList<>(); + private List wrapPenalties = new ArrayList<>(); + private int wrapParentIndex = -1; + private int wrapGroupEnd = -1; + + private int currentDepth = 0; + + public WrapPreparator(TokenManager tokenManager, DefaultCodeFormatterOptions options, int kind) { + this.tm = tokenManager; + this.options = options; + this.kind = kind; + + this.aligner = new Aligner(this.tm, this.options); + } + + @Override + public boolean preVisit2(ASTNode node) { + this.currentDepth++; + + assert this.wrapIndexes.isEmpty() && this.secondaryWrapIndexes.isEmpty() && this.wrapPenalties.isEmpty(); + assert this.wrapParentIndex == -1 && this.wrapGroupEnd == -1; + + boolean isMalformed = (node.getFlags() & ASTNode.MALFORMED) != 0; + if (isMalformed) { + this.tm.addDisableFormatTokenPair(this.tm.firstTokenIn(node, -1), this.tm.lastTokenIn(node, -1)); + } + return !isMalformed; + } + + @Override + public void postVisit(ASTNode node) { + this.currentDepth--; + } + + @Override + public boolean visit(PackageDeclaration node) { + handleAnnotations(node.annotations(), this.options.alignment_for_annotations_on_package); + return true; + } + + @Override + public boolean visit(NormalAnnotation node) { + int lParen = this.tm.firstIndexAfter(node.getTypeName(), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_annotation); + + handleArguments(node.values(), this.options.alignment_for_arguments_in_annotation); + return true; + } + + @Override + public boolean visit(SingleMemberAnnotation node) { + int lParen = this.tm.firstIndexAfter(node.getTypeName(), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_annotation); + return true; + } + + @Override + public boolean visit(TypeDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_type); + + Type superclassType = node.getSuperclassType(); + if (superclassType != null) { + this.wrapParentIndex = this.tm.lastIndexIn(node.getName(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(superclassType, -1); + this.wrapIndexes.add(this.tm.firstIndexBefore(superclassType, TokenNameextends)); + this.wrapIndexes.add(this.tm.firstIndexIn(superclassType, -1)); + handleWrap(this.options.alignment_for_superclass_in_type_declaration, PREFERRED); + } + + List superInterfaceTypes = node.superInterfaceTypes(); + if (!superInterfaceTypes.isEmpty()) { + int implementsToken = node.isInterface() ? TokenNameextends : TokenNameimplements; + this.wrapParentIndex = this.tm.lastIndexIn(node.getName(), -1); + this.wrapIndexes.add(this.tm.firstIndexBefore(superInterfaceTypes.get(0), implementsToken)); + prepareElementsList(superInterfaceTypes, TokenNameCOMMA, -1); + handleWrap(this.options.alignment_for_superinterfaces_in_type_declaration, PREFERRED); + } + + prepareElementsList(node.typeParameters(), TokenNameCOMMA, TokenNameLESS); + handleWrap(this.options.alignment_for_type_parameters); + + this.aligner.handleAlign(node.bodyDeclarations()); + + return true; + } + + @Override + public boolean visit(AnnotationTypeDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_type); + this.aligner.handleAlign(node.bodyDeclarations()); + return true; + } + + @Override + public boolean visit(AnnotationTypeMemberDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_method); + return true; + } + + @Override + public boolean visit(AnonymousClassDeclaration node) { + this.aligner.handleAlign(node.bodyDeclarations()); + return true; + } + + @Override + public boolean visit(RecordDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_type); + + int lParen = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + List components = node.recordComponents(); + int rParen = this.tm.firstIndexAfter( + components.isEmpty() ? node.getName() : components.get(components.size() - 1), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_record_declaration); + + if (!components.isEmpty()) { + int wrappingOption = this.options.alignment_for_record_components; + this.wrapGroupEnd = this.tm.lastIndexIn(components.get(components.size() - 1), -1); + handleArguments(components, wrappingOption); + } + + List superInterfaceTypes = node.superInterfaceTypes(); + if (!superInterfaceTypes.isEmpty()) { + this.wrapParentIndex = this.tm.lastIndexIn(node.getName(), -1); + this.wrapIndexes.add(this.tm.firstIndexBefore(superInterfaceTypes.get(0), TokenNameimplements)); + prepareElementsList(superInterfaceTypes, TokenNameCOMMA, -1); + handleWrap(this.options.alignment_for_superinterfaces_in_record_declaration, PREFERRED); + } + return true; + } + + @Override + public boolean visit(MethodDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_method); + + if (!node.isCompactConstructor()) { + int lParen = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + int rParen = node.getBody() == null ? this.tm.lastIndexIn(node, TokenNameRPAREN) + : this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_declaration); + } + + List parameters = node.parameters(); + Type receiverType = node.getReceiverType(); + if (!parameters.isEmpty() || receiverType != null) { + if (receiverType != null) { + this.wrapIndexes.add(this.tm.firstIndexIn(receiverType, -1)); + } + int wrappingOption = node.isConstructor() ? this.options.alignment_for_parameters_in_constructor_declaration + : this.options.alignment_for_parameters_in_method_declaration; + this.wrapGroupEnd = this.tm + .lastIndexIn(parameters.isEmpty() ? receiverType : parameters.get(parameters.size() - 1), -1); + handleArguments(parameters, wrappingOption); + } + + List exceptionTypes = node.thrownExceptionTypes(); + if (!exceptionTypes.isEmpty()) { + int wrappingOption = node.isConstructor() + ? this.options.alignment_for_throws_clause_in_constructor_declaration + : this.options.alignment_for_throws_clause_in_method_declaration; + if ((wrappingOption & Alignment.M_INDENT_ON_COLUMN) == 0) { + this.wrapParentIndex = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + } + prepareElementsList(exceptionTypes, TokenNameCOMMA, TokenNameRPAREN); + // instead of the first exception type, wrap the "throws" token + this.wrapIndexes.set(0, this.tm.firstIndexBefore(exceptionTypes.get(0), TokenNamethrows)); + handleWrap(wrappingOption, 0.5f); + } + + if (!node.isConstructor()) { + this.wrapParentIndex = this.tm.findFirstTokenInLine(this.tm.firstIndexIn(node.getName(), -1)); + while (this.tm.get(this.wrapParentIndex).isComment()) { + this.wrapParentIndex++; + } + List typeParameters = node.typeParameters(); + if (!typeParameters.isEmpty()) { + this.wrapIndexes.add(this.tm.firstIndexIn(typeParameters.get(0), -1)); + } + if (node.getReturnType2() != null) { + int returTypeIndex = this.tm.firstIndexIn(node.getReturnType2(), -1); + if (returTypeIndex != this.wrapParentIndex) { + this.wrapIndexes.add(returTypeIndex); + } + } + this.wrapIndexes.add(this.tm.firstIndexIn(node.getName(), -1)); + this.wrapGroupEnd = this.tm.lastIndexIn(node.getName(), -1); + handleWrap(this.options.alignment_for_method_declaration); + } + + prepareElementsList(node.typeParameters(), TokenNameCOMMA, TokenNameLESS); + handleWrap(this.options.alignment_for_type_parameters); + + return true; + } + + @Override + public boolean visit(EnumDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_type); + + List enumConstants = node.enumConstants(); + int constantsEnd = -1; + if (!enumConstants.isEmpty()) { + for (EnumConstantDeclaration constant : enumConstants) { + this.wrapIndexes.add(this.tm.firstIndexIn(constant, -1)); + } + this.wrapParentIndex = (this.options.alignment_for_enum_constants & Alignment.M_INDENT_ON_COLUMN) > 0 + ? this.tm.firstIndexBefore(enumConstants.get(0), TokenNameLBRACE) + : this.tm.firstIndexIn(node, TokenNameenum); + this.wrapGroupEnd = constantsEnd = this.tm.lastIndexIn(enumConstants.get(enumConstants.size() - 1), -1); + handleWrap(this.options.alignment_for_enum_constants, node); + } + + if (!this.options.join_wrapped_lines) { + // preserve a line break between the last comma and semicolon + int commaIndex = -1; + int i = constantsEnd > 0 ? constantsEnd : this.tm.firstIndexAfter(node.getName(), TokenNameLBRACE); + while (++i < this.tm.size()) { + Token t = this.tm.get(i); + if (t.isComment()) { + continue; + } + if (t.tokenType == TokenNameCOMMA) { + commaIndex = i; + continue; + } + if (t.tokenType == TokenNameSEMICOLON && commaIndex >= 0 + && this.tm.countLineBreaksBetween(this.tm.get(commaIndex), t) == 1) { + t.setWrapPolicy(new WrapPolicy(WrapMode.WHERE_NECESSARY, commaIndex, 0)); + } + break; + } + } + + List superInterfaceTypes = node.superInterfaceTypes(); + if (!superInterfaceTypes.isEmpty()) { + this.wrapParentIndex = this.tm.lastIndexIn(node.getName(), -1); + this.wrapIndexes.add(this.tm.firstIndexBefore(superInterfaceTypes.get(0), TokenNameimplements)); + prepareElementsList(superInterfaceTypes, TokenNameCOMMA, -1); + handleWrap(this.options.alignment_for_superinterfaces_in_enum_declaration, PREFERRED); + } + + this.aligner.handleAlign(node.bodyDeclarations()); + + return true; + } + + @Override + public boolean visit(EnumConstantDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_enum_constant); + + int lParen = this.tm.firstIndexAfter(node.getName(), -1); + while (this.tm.get(lParen).isComment()) { + lParen++; + } + if (this.tm.get(lParen).tokenType == TokenNameLPAREN) { + int rParen = node.getAnonymousClassDeclaration() == null ? this.tm.lastIndexIn(node, TokenNameRPAREN) + : this.tm.firstIndexBefore(node.getAnonymousClassDeclaration(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_enum_constant_declaration); + } + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_enum_constant); + AnonymousClassDeclaration anonymousClass = node.getAnonymousClassDeclaration(); + if (anonymousClass != null) { + forceContinuousWrapping(anonymousClass, this.tm.firstIndexIn(node.getName(), -1)); + } + return true; + } + + @Override + public boolean visit(Block node) { + this.aligner.handleAlign(node); + return true; + } + + @Override + public boolean visit(MethodInvocation node) { + // Method patched based on + // https://git.eclipse.org/r/c/jdt/eclipse.jdt.core/+/189391/4/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java + int lParen = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_method_invocation); + handleTypeArguments(node.typeArguments()); + + boolean isInvocationChainRoot = !(node.getParent() instanceof MethodInvocation) + || node.getLocationInParent() != MethodInvocation.EXPRESSION_PROPERTY; + if (isInvocationChainRoot) { + Expression expression = node; + MethodInvocation invocation = node; + while (expression instanceof MethodInvocation) { + invocation = (MethodInvocation) expression; + expression = invocation.getExpression(); + if (expression != null) { + this.wrapIndexes.add(this.tm.firstIndexBefore(invocation.getName(), TokenNameDOT)); + this.secondaryWrapIndexes.add(this.tm.firstIndexIn(invocation.getName(), TokenNameIdentifier)); + } + } + Collections.reverse(this.wrapIndexes); + expression = (expression != null) ? expression : invocation; + this.wrapParentIndex = this.tm.lastIndexIn(expression, -1); + if ((this.options.alignment_for_selector_in_method_invocation & Alignment.M_INDENT_ON_COLUMN) == 0) { + this.wrapParentIndex = this.tm.firstIndexIn(expression, -1); + } + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + handleWrap(this.options.alignment_for_selector_in_method_invocation); + } + return true; + } + + @Override + public boolean visit(SuperMethodInvocation node) { + int lParen = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_method_invocation); + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(ClassInstanceCreation node) { + int lParen = this.tm.firstIndexAfter(node.getType(), TokenNameLPAREN); + int rParen = node.getAnonymousClassDeclaration() == null ? this.tm.lastIndexIn(node, TokenNameRPAREN) + : this.tm.firstIndexBefore(node.getAnonymousClassDeclaration(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + AnonymousClassDeclaration anonymousClass = node.getAnonymousClassDeclaration(); + if (anonymousClass != null) { + forceContinuousWrapping(anonymousClass, this.tm.firstIndexIn(node, TokenNamenew)); + } + + int wrappingOption = node.getExpression() != null + ? this.options.alignment_for_arguments_in_qualified_allocation_expression + : this.options.alignment_for_arguments_in_allocation_expression; + handleArguments(node.arguments(), wrappingOption); + + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(ConstructorInvocation node) { + int lParen = node.arguments().isEmpty() ? this.tm.lastIndexIn(node, TokenNameLPAREN) + : this.tm.firstIndexBefore((ASTNode) node.arguments().get(0), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_explicit_constructor_call); + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(SuperConstructorInvocation node) { + int lParen = node.arguments().isEmpty() ? this.tm.lastIndexIn(node, TokenNameLPAREN) + : this.tm.firstIndexBefore((ASTNode) node.arguments().get(0), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_explicit_constructor_call); + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(FieldAccess node) { + handleFieldAccess(node); + return true; + } + + @Override + public boolean visit(QualifiedName node) { + handleFieldAccess(node); + return true; + } + + @Override + public boolean visit(ThisExpression node) { + handleFieldAccess(node); + return true; + } + + @Override + public boolean visit(SuperFieldAccess node) { + handleFieldAccess(node); + return true; + } + + private void handleFieldAccess(Expression node) { + boolean isAccessChainRoot = !FieldAccessAdapter.isFieldAccess(node.getParent()); + if (!isAccessChainRoot) { + return; + } + + Expression expression = node; + FieldAccessAdapter access = null; + while (FieldAccessAdapter.isFieldAccess(expression)) { + access = new FieldAccessAdapter(expression); + int nameIndex = access.getIdentifierIndex(this.tm); + // find a dot preceding the name, may not be there + for (int i = nameIndex - 1; i > this.tm.firstIndexIn(node, -1); i--) { + Token t = this.tm.get(i); + if (t.tokenType == TokenNameDOT) { + this.wrapIndexes.add(i); + this.secondaryWrapIndexes.add(nameIndex); + } + if (!t.isComment() && t.tokenType != TokenNamesuper) { + break; + } + } + expression = access.getExpression(); + } + Collections.reverse(this.wrapIndexes); + this.wrapParentIndex = this.tm.lastIndexIn(expression != null ? expression : access.accessExpression, -1); + boolean isFollowedByInvocation = node.getParent() instanceof MethodInvocation + && node.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY; + this.wrapGroupEnd = isFollowedByInvocation ? this.tm.lastIndexIn(node.getParent(), -1) + : new FieldAccessAdapter(node).getIdentifierIndex(this.tm); + // TODO need configuration for this, now only handles line breaks that cannot be + // removed + handleWrap(Alignment.M_NO_ALIGNMENT); + } + + @Override + public boolean visit(InfixExpression node) { + Integer operatorPrecedence = OPERATOR_PRECEDENCE.get(node.getOperator()); + if (operatorPrecedence == null) { + return true; + } + ASTNode parent = node.getParent(); + if ((parent instanceof InfixExpression) && samePrecedence(node, (InfixExpression) parent)) { + return true; // this node has been handled higher in the AST + } + + int wrappingOption = OPERATOR_WRAPPING_OPTION.get(node.getOperator()).applyAsInt(this.options); + boolean wrapBeforeOperator = OPERATOR_WRAP_BEFORE_OPTION.get(node.getOperator()).test(this.options); + if (this.tm.isStringConcatenation(node)) { + wrappingOption = this.options.alignment_for_string_concatenation; + wrapBeforeOperator = this.options.wrap_before_string_concatenation; + } + + findTokensToWrap(node, wrapBeforeOperator, 0); + this.wrapParentIndex = this.wrapIndexes.remove(0); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + if ((wrappingOption & Alignment.M_INDENT_ON_COLUMN) != 0 && this.wrapParentIndex > 0) { + this.wrapParentIndex--; + } + for (int i = this.wrapParentIndex; i >= 0; i--) { + if (!this.tm.get(i).isComment()) { + this.wrapParentIndex = i; + break; + } + } + handleWrap(wrappingOption, !wrapBeforeOperator, node); + return true; + } + + private void findTokensToWrap(InfixExpression node, boolean wrapBeforeOperator, int depth) { + Expression left = node.getLeftOperand(); + if (left instanceof InfixExpression && samePrecedence(node, (InfixExpression) left)) { + findTokensToWrap((InfixExpression) left, wrapBeforeOperator, depth + 1); + } + else if (this.wrapIndexes.isEmpty() // always add first operand, it will be taken + // as wrap parent + || !wrapBeforeOperator) { + this.wrapIndexes.add(this.tm.firstIndexIn(left, -1)); + } + + Expression right = node.getRightOperand(); + List extended = node.extendedOperands(); + for (int i = -1; i < extended.size(); i++) { + Expression operand = (i == -1) ? right : extended.get(i); + if (operand instanceof InfixExpression && samePrecedence(node, (InfixExpression) operand)) { + findTokensToWrap((InfixExpression) operand, wrapBeforeOperator, depth + 1); + } + int indexBefore = this.tm.firstIndexBefore(operand, -1); + while (this.tm.get(indexBefore).isComment()) { + indexBefore--; + } + assert node.getOperator().toString().equals(this.tm.toString(indexBefore)); + int indexAfter = this.tm.firstIndexIn(operand, -1); + this.wrapIndexes.add(wrapBeforeOperator ? indexBefore : indexAfter); + this.secondaryWrapIndexes.add(wrapBeforeOperator ? indexAfter : indexBefore); + + if (!this.options.join_wrapped_lines) { + // TODO there should be an option for never joining wraps on opposite side + // of the operator + if (wrapBeforeOperator) { + if (this.tm.countLineBreaksBetween(this.tm.get(indexAfter - 1), this.tm.get(indexAfter)) > 0) { + this.wrapIndexes.add(indexAfter); + } + } + else { + if (this.tm.countLineBreaksBetween(this.tm.get(indexBefore), this.tm.get(indexBefore - 1)) > 0) { + this.wrapIndexes.add(indexBefore); + } + } + } + } + } + + private boolean samePrecedence(InfixExpression expression1, InfixExpression expression2) { + Integer precedence1 = OPERATOR_PRECEDENCE.get(expression1.getOperator()); + Integer precedence2 = OPERATOR_PRECEDENCE.get(expression2.getOperator()); + if (precedence1 == null || precedence2 == null) { + return false; + } + return precedence1.equals(precedence2); + } + + @Override + public boolean visit(ConditionalExpression node) { + boolean chainsMatter = (this.options.alignment_for_conditional_expression_chain + & Alignment.SPLIT_MASK) != Alignment.M_NO_ALIGNMENT; + boolean isNextInChain = node.getParent() instanceof ConditionalExpression + && node == ((ConditionalExpression) node.getParent()).getElseExpression(); + boolean isFirstInChain = node.getElseExpression() instanceof ConditionalExpression && !isNextInChain; + boolean wrapBefore = this.options.wrap_before_conditional_operator; + List before = wrapBefore ? this.wrapIndexes : this.secondaryWrapIndexes; + List after = wrapBefore ? this.secondaryWrapIndexes : this.wrapIndexes; + if (!chainsMatter || (!isFirstInChain && !isNextInChain)) { + before.add(this.tm.firstIndexAfter(node.getExpression(), TokenNameQUESTION)); + before.add(this.tm.firstIndexAfter(node.getThenExpression(), TokenNameCOLON)); + after.add(this.tm.firstIndexIn(node.getThenExpression(), -1)); + after.add(this.tm.firstIndexIn(node.getElseExpression(), -1)); + this.wrapParentIndex = this.tm.lastIndexIn(node.getExpression(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + handleWrap(this.options.alignment_for_conditional_expression); + + } + else if (isFirstInChain) { + List chain = new ArrayList<>(); + chain.add(node); + ConditionalExpression next = node; + while (next.getElseExpression() instanceof ConditionalExpression) { + next = (ConditionalExpression) next.getElseExpression(); + chain.add(next); + } + + for (ConditionalExpression conditional : chain) { + before.add(this.tm.firstIndexAfter(conditional.getThenExpression(), TokenNameCOLON)); + after.add(this.tm.firstIndexIn(conditional.getElseExpression(), -1)); + } + this.wrapParentIndex = this.tm.firstIndexIn(node.getExpression(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + handleWrap(this.options.alignment_for_conditional_expression_chain); + + this.currentDepth++; + for (ConditionalExpression conditional : chain) { + before.add(this.tm.firstIndexAfter(conditional.getExpression(), TokenNameQUESTION)); + after.add(this.tm.firstIndexIn(conditional.getThenExpression(), -1)); + this.wrapParentIndex = this.tm.firstIndexIn(conditional.getExpression(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(conditional.getThenExpression(), -1); + handleWrap(this.options.alignment_for_conditional_expression); + } + this.currentDepth--; + } + return true; + } + + @Override + public boolean visit(ArrayInitializer node) { + List expressions = node.expressions(); + if (!expressions.isEmpty()) { + prepareElementsList(expressions, TokenNameCOMMA, TokenNameLBRACE); + handleWrap(this.options.alignment_for_expressions_in_array_initializer, node); + } + int openingBraceIndex = this.tm.firstIndexIn(node, TokenNameLBRACE); + Token openingBrace = this.tm.get(openingBraceIndex); + if (openingBrace.isNextLineOnWrap() && openingBrace.getWrapPolicy() == null && openingBraceIndex > 0) { + // add fake wrap policy to make sure the brace indentation is right + openingBrace.setWrapPolicy(new WrapPolicy(WrapMode.DISABLED, openingBraceIndex - 1, 0)); + } + if (!this.options.join_wrapped_lines + && !this.options.insert_new_line_before_closing_brace_in_array_initializer) { + // if there is a line break before the closing brace, formatter should treat + // it as a valid wrap to preserve + int closingBraceIndex = this.tm.lastIndexIn(node, TokenNameRBRACE); + Token closingBrace = this.tm.get(closingBraceIndex); + if (this.tm.countLineBreaksBetween(this.tm.get(closingBraceIndex - 1), closingBrace) == 1) { + closingBrace.setWrapPolicy(new WrapPolicy(WrapMode.WHERE_NECESSARY, openingBraceIndex, + closingBraceIndex, 0, this.currentDepth, 1, true, false)); + } + } + if (this.options.brace_position_for_array_initializer.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED) + && openingBrace.getWrapPolicy() == null && (node.getParent() instanceof SingleMemberAnnotation + || node.getParent() instanceof MemberValuePair)) { + int parentIndex = this.tm.firstIndexIn(node.getParent(), -1); + int indent = this.options.indentation_size; + openingBrace.setWrapPolicy(new WrapPolicy(WrapMode.BLOCK_INDENT, parentIndex, indent)); + } + return true; + } + + @Override + public boolean visit(Assignment node) { + int rightSideIndex = this.tm.firstIndexIn(node.getRightHandSide(), -1); + if (this.tm.get(rightSideIndex).getLineBreaksBefore() > 0) { + return true; // must be an array initializer in new line because of + // brace_position_for_array_initializer + } + + int operatorIndex = this.tm.firstIndexBefore(node.getRightHandSide(), -1); + while (this.tm.get(operatorIndex).isComment()) { + operatorIndex--; + } + assert node.getOperator().toString().equals(this.tm.toString(operatorIndex)); + + this.wrapIndexes.add(this.options.wrap_before_assignment_operator ? operatorIndex : rightSideIndex); + this.secondaryWrapIndexes.add(this.options.wrap_before_assignment_operator ? rightSideIndex : operatorIndex); + this.wrapParentIndex = operatorIndex - 1; + this.wrapGroupEnd = this.tm.lastIndexIn(node.getRightHandSide(), -1); + handleWrap(this.options.alignment_for_assignment); + return true; + } + + @Override + public boolean visit(VariableDeclarationFragment node) { + if (node.getInitializer() == null) { + return true; + } + int rightSideIndex = this.tm.firstIndexIn(node.getInitializer(), -1); + if (this.tm.get(rightSideIndex).getLineBreaksBefore() > 0) { + return true; // must be an array initializer in new line because of + // brace_position_for_array_initializer + } + int equalIndex = this.tm.firstIndexBefore(node.getInitializer(), TokenNameEQUAL); + + this.wrapIndexes.add(this.options.wrap_before_assignment_operator ? equalIndex : rightSideIndex); + this.secondaryWrapIndexes.add(this.options.wrap_before_assignment_operator ? rightSideIndex : equalIndex); + this.wrapParentIndex = equalIndex - 1; + this.wrapGroupEnd = this.tm.lastIndexIn(node.getInitializer(), -1); + handleWrap(this.options.alignment_for_assignment); + return true; + } + + @Override + public boolean visit(IfStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_if_while_statement); + + Statement elseStatement = node.getElseStatement(); + boolean keepThenOnSameLine = this.options.keep_then_statement_on_same_line + || (this.options.keep_simple_if_on_one_line && elseStatement == null); + if (keepThenOnSameLine) { + handleSimpleLoop(node.getThenStatement(), this.options.alignment_for_compact_if); + } + + if (this.options.keep_else_statement_on_same_line && elseStatement != null) { + handleSimpleLoop(elseStatement, this.options.alignment_for_compact_if); + } + return true; + } + + @Override + public boolean visit(ForStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_for_statement); + + List initializers = node.initializers(); + if (!initializers.isEmpty()) { + this.wrapIndexes.add(this.tm.firstIndexIn(initializers.get(0), -1)); + } + if (node.getExpression() != null) { + this.wrapIndexes.add(this.tm.firstIndexIn(node.getExpression(), -1)); + } + List updaters = node.updaters(); + if (!updaters.isEmpty()) { + this.wrapIndexes.add(this.tm.firstIndexIn(updaters.get(0), -1)); + } + if (!this.wrapIndexes.isEmpty()) { + this.wrapParentIndex = lParen; + this.wrapGroupEnd = rParen; + handleWrap(this.options.alignment_for_expressions_in_for_loop_header); + } + if (this.options.keep_simple_for_body_on_same_line) { + handleSimpleLoop(node.getBody(), this.options.alignment_for_compact_loop); + } + return true; + } + + @Override + public boolean visit(EnhancedForStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_for_statement); + + if (this.options.keep_simple_for_body_on_same_line) { + handleSimpleLoop(node.getBody(), this.options.alignment_for_compact_loop); + } + return true; + } + + @Override + public boolean visit(WhileStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_if_while_statement); + + if (this.options.keep_simple_while_body_on_same_line) { + handleSimpleLoop(node.getBody(), this.options.alignment_for_compact_loop); + } + return true; + } + + private void handleSimpleLoop(Statement body, int wrappingOption) { + if (!(body instanceof Block)) { + this.wrapIndexes.add(this.tm.firstIndexIn(body, -1)); + this.wrapParentIndex = this.tm.firstIndexBefore(body, TokenNameRPAREN); + this.wrapGroupEnd = this.tm.lastIndexIn(body, -1); + handleWrap(wrappingOption, body.getParent()); + + body.accept(new ASTVisitor() { + @Override + public boolean visit(Block node) { + forceContinuousWrapping(node, WrapPreparator.this.tm.firstIndexIn(node, -1)); + return false; + } + }); + } + } + + @Override + public void endVisit(DoStatement node) { + if (this.options.keep_simple_do_while_body_on_same_line && !(node.getBody() instanceof Block)) { + int whileIndex = this.tm.firstIndexAfter(node.getBody(), TokenNamewhile); + this.wrapIndexes.add(whileIndex); + this.wrapParentIndex = this.tm.lastIndexIn(node.getBody(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + + int alignment = this.options.alignment_for_compact_loop; + for (int i = this.tm.firstIndexIn(node, -1) + 1; i < whileIndex; i++) { + Token token = this.tm.get(i); + if (token.getLineBreaksBefore() > 0 || token.getLineBreaksAfter() > 0) { + alignment |= Alignment.M_FORCE; + } + } + handleWrap(alignment, node); + } + } + + @Override + public boolean visit(TryStatement node) { + if (!node.resources().isEmpty()) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_try_clause); + } + prepareElementsList(node.resources(), TokenNameSEMICOLON, TokenNameLPAREN); + handleWrap(this.options.alignment_for_resources_in_try); + return true; + } + + @Override + public boolean visit(UnionType node) { + List types = node.types(); + if (types.isEmpty()) { + return true; + } + if (this.options.wrap_before_or_operator_multicatch) { + for (Type type : types) { + if (this.wrapIndexes.isEmpty()) { + this.wrapIndexes.add(this.tm.firstIndexIn(type, -1)); + } + else { + this.wrapIndexes.add(this.tm.firstIndexBefore(type, TokenNameOR)); + this.secondaryWrapIndexes.add(this.tm.firstIndexIn(type, -1)); + } + } + this.wrapParentIndex = this.tm.firstIndexBefore(node, -1); + while (this.tm.get(this.wrapParentIndex).isComment()) { + this.wrapParentIndex--; + } + this.wrapGroupEnd = this.tm.lastIndexIn(types.get(types.size() - 1), -1); + handleWrap(this.options.alignment_for_union_type_in_multicatch); + } + else { + prepareElementsList(types, TokenNameOR, TokenNameLPAREN); + handleWrap(this.options.alignment_for_union_type_in_multicatch); + } + return true; + } + + @Override + public boolean visit(LambdaExpression node) { + int lParen = this.tm.firstIndexIn(node, -1); + if (this.tm.get(lParen).tokenType == TokenNameLPAREN) { + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_lambda_declaration); + } + if (node.getBody() instanceof Block) { + forceContinuousWrapping(node.getBody(), this.tm.firstIndexIn(node, -1)); + + List statements = ((Block) node.getBody()).statements(); + if (!statements.isEmpty()) { + int openBraceIndex = this.tm.firstIndexBefore(statements.get(0), TokenNameLBRACE); + int closeBraceIndex = this.tm.firstIndexAfter(statements.get(statements.size() - 1), TokenNameRBRACE); + boolean areKeptOnOneLine = this.tm.stream().skip(openBraceIndex + 1) + .limit(closeBraceIndex - openBraceIndex - 1) + .allMatch(t -> t.getLineBreaksBefore() == 0 && t.getLineBreaksAfter() == 0); + if (areKeptOnOneLine) { + for (Statement statement : statements) { + this.wrapIndexes.add(this.tm.firstIndexIn(statement, -1)); + } + this.wrapParentIndex = openBraceIndex; + this.wrapGroupEnd = closeBraceIndex; + handleWrap(Alignment.M_ONE_PER_LINE_SPLIT, node); + this.tm.get(closeBraceIndex).setWrapPolicy(new WrapPolicy(WrapMode.TOP_PRIORITY, openBraceIndex, + closeBraceIndex, 0, this.currentDepth, 1, false, false)); + } + } + } + if (node.hasParentheses()) { + List parameters = node.parameters(); + // the legacy formatter didn't like wrapping lambda parameters, so neither do + // we + this.currentDepth++; + handleArguments(parameters, this.options.alignment_for_parameters_in_method_declaration); + this.currentDepth--; + } + return true; + } + + @Override + public boolean visit(FieldDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_field); + handleVariableDeclarations(node.fragments()); + return true; + } + + @Override + public boolean visit(VariableDeclarationStatement node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_local_variable); + handleVariableDeclarations(node.fragments()); + return true; + } + + @Override + public boolean visit(VariableDeclarationExpression node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_local_variable); + handleVariableDeclarations(node.fragments()); + return true; + } + + @Override + public boolean visit(SingleVariableDeclaration node) { + handleAnnotations(node.modifiers(), + node.getParent() instanceof EnhancedForStatement + ? this.options.alignment_for_annotations_on_local_variable + : this.options.alignment_for_annotations_on_parameter); + return true; + } + + @Override + public boolean visit(ParameterizedType node) { + prepareElementsList(node.typeArguments(), TokenNameCOMMA, TokenNameLESS); + handleWrap(this.options.alignment_for_parameterized_type_references); + return true; + } + + @Override + public boolean visit(TypeMethodReference node) { + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(ExpressionMethodReference node) { + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(SuperMethodReference node) { + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(CreationReference node) { + handleTypeArguments(node.typeArguments()); + return true; + } + + private void handleTypeArguments(List typeArguments) { + if (typeArguments.isEmpty()) { + return; + } + prepareElementsList(typeArguments, TokenNameCOMMA, TokenNameLESS); + handleWrap(this.options.alignment_for_type_arguments); + } + + @Override + public boolean visit(ExportsDirective node) { + handleModuleStatement(node.modules(), TokenNameto); + return true; + } + + @Override + public boolean visit(OpensDirective node) { + handleModuleStatement(node.modules(), TokenNameto); + return true; + } + + @Override + public boolean visit(ProvidesDirective node) { + handleModuleStatement(node.implementations(), TokenNamewith); + return true; + } + + private void handleModuleStatement(List names, int joiningTokenType) { + if (names.isEmpty()) { + return; + } + int joiningTokenIndex = this.tm.firstIndexBefore(names.get(0), joiningTokenType); + this.wrapParentIndex = this.tm.firstIndexBefore(names.get(0), TokenNameIdentifier); + this.wrapIndexes.add(joiningTokenIndex); + prepareElementsList(names, TokenNameCOMMA, -1); + handleWrap(this.options.alignment_for_module_statements, PREFERRED); + } + + @Override + public boolean visit(CatchClause node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_catch_clause); + return true; + } + + @Override + public boolean visit(SwitchStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_switch_statement); + return true; + } + + @Override + public boolean visit(SwitchExpression node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_switch_statement); + return true; + } + + @Override + public boolean visit(DoStatement node) { + int lParen = this.tm.firstIndexBefore(node.getExpression(), TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_if_while_statement); + return true; + } + + @Override + public boolean visit(AssertStatement node) { + Expression message = node.getMessage(); + if (message != null) { + int atColon = this.tm.firstIndexBefore(message, TokenNameCOLON); + int afterColon = this.tm.firstIndexIn(message, -1); + if (this.options.wrap_before_assertion_message_operator) { + this.wrapIndexes.add(atColon); + this.secondaryWrapIndexes.add(afterColon); + } + else { + this.wrapIndexes.add(afterColon); + this.secondaryWrapIndexes.add(atColon); + } + this.wrapParentIndex = this.tm.firstIndexIn(node, -1); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + handleWrap(this.options.alignment_for_assertion_message); + } + return true; + } + + /** + * Makes sure all new lines within given node will have wrap policy so that wrap + * executor will fix their indentation if necessary. + */ + void forceContinuousWrapping(ASTNode node, int parentIndex) { + int parentIndent = this.tm.get(parentIndex).getIndent(); + int indentChange = -parentIndent; + int lineStart = this.tm.findFirstTokenInLine(parentIndex); + for (int i = parentIndex; i >= lineStart; i--) { + int align = this.tm.get(i).getAlign(); + if (align > 0) { + indentChange = -2 * parentIndent + align; + break; + } + } + + Token previous = null; + int from = this.tm.firstIndexIn(node, -1); + int to = this.tm.lastIndexIn(node, -1); + for (int i = from; i <= to; i++) { + Token token = this.tm.get(i); + if ((token.getLineBreaksBefore() > 0 || (previous != null && previous.getLineBreaksAfter() > 0)) + && (token.getWrapPolicy() == null || token.getWrapPolicy().wrapMode == WrapMode.BLOCK_INDENT)) { + int extraIndent = token.getIndent() + indentChange; + token.setWrapPolicy(new WrapPolicy(WrapMode.BLOCK_INDENT, parentIndex, extraIndent)); + token.setIndent(parentIndent + extraIndent); + } + previous = token; + } + } + + private void handleVariableDeclarations(List fragments) { + if (fragments.size() > 1) { + this.wrapParentIndex = this.tm.firstIndexIn(fragments.get(0), -1); + prepareElementsList(fragments, TokenNameCOMMA, -1); + this.wrapIndexes.remove(0); + handleWrap(this.options.alignment_for_multiple_fields); + } + } + + private void handleArguments(List arguments, int wrappingOption) { + this.wrapPenalties.add(1 / PREFERRED); + prepareElementsList(arguments, TokenNameCOMMA, TokenNameLPAREN); + handleWrap(wrappingOption); + } + + private void handleAnnotations(List modifiers, int wrappingOption) { + Annotation last = null; + int i; + for (i = 0; i < modifiers.size(); i++) { + if (modifiers.get(i).isModifier()) { + break; + } + Annotation annotation = (Annotation) modifiers.get(i); + if (i == 0) { + this.wrapParentIndex = this.tm.firstIndexIn(annotation, -1); + } + else { + this.wrapIndexes.add(this.tm.firstIndexIn(annotation, -1)); + this.wrapGroupEnd = this.tm.lastIndexIn(annotation, -1); + } + last = annotation; + } + handleWrap(wrappingOption, last); + + if (i < modifiers.size()) { + // any annotations following other modifiers will be associated with + // declaration type + handleAnnotations(modifiers.subList(i + 1, modifiers.size()), this.options.alignment_for_type_annotations); + } + } + + private void prepareElementsList(List elements, int separatorType, int wrapParentType) { + for (int i = 0; i < elements.size(); i++) { + ASTNode element = elements.get(i); + this.wrapIndexes.add(this.tm.firstIndexIn(element, -1)); + if (i > 0) { + this.secondaryWrapIndexes.add(this.tm.firstIndexBefore(element, separatorType)); + } + } + // wrapIndexes may have been filled with additional values even if arguments is + // empty + if (!this.wrapIndexes.isEmpty()) { + Token firstToken = this.tm.get(this.wrapIndexes.get(0)); + if (this.wrapParentIndex < 0) { + this.wrapParentIndex = this.tm.findIndex(firstToken.originalStart - 1, wrapParentType, false); + } + if (!elements.isEmpty() && this.wrapGroupEnd < 0) { + this.wrapGroupEnd = this.tm.lastIndexIn(elements.get(elements.size() - 1), -1); + } + } + } + + private void handleWrap(int wrappingOption) { + handleWrap(wrappingOption, null); + } + + private void handleWrap(int wrappingOption, float firstPenaltyMultiplier) { + this.wrapPenalties.add(firstPenaltyMultiplier); + handleWrap(wrappingOption, null); + } + + private void handleWrap(int wrappingOption, ASTNode parentNode) { + handleWrap(wrappingOption, true, parentNode); + } + + private void handleWrap(int wrappingOption, boolean wrapPreceedingComments, ASTNode parentNode) { + doHandleWrap(wrappingOption, wrapPreceedingComments, parentNode); + this.wrapIndexes.clear(); + this.secondaryWrapIndexes.clear(); + this.wrapPenalties.clear(); + this.wrapParentIndex = this.wrapGroupEnd = -1; + } + + private void doHandleWrap(int wrappingOption, boolean wrapPreceedingComments, ASTNode parentNode) { + if (this.wrapIndexes.isEmpty()) { + return; + } + assert this.wrapParentIndex >= 0 && this.wrapParentIndex < this.wrapIndexes.get(0); + assert this.wrapGroupEnd >= this.wrapIndexes.get(this.wrapIndexes.size() - 1); + + while (this.tm.get(this.wrapParentIndex).isComment() && this.wrapParentIndex > 0) { + this.wrapParentIndex--; + } + + float penalty = this.wrapPenalties.isEmpty() ? 1 : this.wrapPenalties.get(0); + WrapPolicy policy = getWrapPolicy(wrappingOption, penalty, true, parentNode); + + WrapPolicy existing = this.tm.get(this.wrapIndexes.get(0)).getWrapPolicy(); + if (existing != null && existing.wrapMode == WrapMode.TOP_PRIORITY) { + // SEPARATE_LINES_IF_WRAPPED + assert existing.wrapParentIndex == this.wrapParentIndex; + this.wrapGroupEnd = existing.groupEndIndex; + policy = new WrapPolicy(WrapMode.TOP_PRIORITY, policy.wrapParentIndex, this.wrapGroupEnd, + policy.extraIndent, policy.structureDepth, policy.penaltyMultiplier, true, policy.indentOnColumn); + } + + setTokenWrapPolicy(0, policy, true); + + for (int i = 1; i < this.wrapIndexes.size(); i++) { + penalty = this.wrapPenalties.size() > i ? this.wrapPenalties.get(i) : 1; + if (penalty != policy.penaltyMultiplier || i == 1) { + policy = getWrapPolicy(wrappingOption, penalty, false, parentNode); + } + setTokenWrapPolicy(i, policy, wrapPreceedingComments); + } + + if (!this.secondaryWrapIndexes.isEmpty()) { + int optionNoAlignment = (wrappingOption & ~Alignment.SPLIT_MASK) | Alignment.M_NO_ALIGNMENT; + policy = getWrapPolicy(optionNoAlignment, 1, false, parentNode); + for (int index : this.secondaryWrapIndexes) { + Token token = this.tm.get(index); + if (token.getWrapPolicy() == null) { + token.setWrapPolicy(policy); + } + } + } + } + + private void setTokenWrapPolicy(int wrapIndexesIndex, WrapPolicy policy, boolean wrapPreceedingComments) { + int index = this.wrapIndexes.get(wrapIndexesIndex); + if (wrapPreceedingComments) { + for (int i = index - 1; i >= 0; i--) { + Token previous = this.tm.get(i); + if (!previous.isComment()) { + break; + } + if (previous.getWrapPolicy() == WrapPolicy.FORCE_FIRST_COLUMN) { + break; + } + if (previous.getLineBreaksAfter() == 0 && i == index - 1) { + index = i; + } + if (previous.getLineBreaksBefore() > 0) { + previous.setWrapPolicy(policy); + } + } + this.wrapIndexes.set(wrapIndexesIndex, index); + } + + Token token = this.tm.get(index); + if (token.getWrapPolicy() == WrapPolicy.DISABLE_WRAP) { + return; + } + + token.setWrapPolicy(policy); + if (policy.wrapMode == WrapMode.FORCE) { + token.breakBefore(); + } + else if (this.options.join_wrapped_lines && token.tokenType == TokenNameCOMMENT_BLOCK) { + // allow wrap preparator to decide if this comment should be wrapped + token.clearLineBreaksBefore(); + } + } + + private WrapPolicy getWrapPolicy(int wrappingOption, float penaltyMultiplier, boolean isFirst, ASTNode parentNode) { + assert this.wrapParentIndex >= 0 && this.wrapGroupEnd >= 0; + int extraIndent = this.options.continuation_indentation; + boolean indentOnColumn = (wrappingOption & Alignment.M_INDENT_ON_COLUMN) != 0; + boolean isForceWrap = (wrappingOption & Alignment.M_FORCE) != 0; + boolean isAlreadyWrapped = false; + if (indentOnColumn) { + extraIndent = 0; + } + else if (parentNode instanceof Annotation) { + extraIndent = 0; + } + else if (parentNode instanceof EnumDeclaration) { + // special behavior for compatibility with legacy formatter + extraIndent = ((wrappingOption & Alignment.M_INDENT_BY_ONE) != 0) ? 2 : 1; + if (!this.options.indent_body_declarations_compare_to_enum_declaration_header) { + extraIndent--; + } + isAlreadyWrapped = isFirst; + } + else if (parentNode instanceof IfStatement || parentNode instanceof ForStatement + || parentNode instanceof EnhancedForStatement || parentNode instanceof WhileStatement) { + extraIndent = 1; + this.wrapParentIndex = this.tm.firstIndexIn(parentNode, -1); // only if + // !indoentOnColumn + } + else if (parentNode instanceof DoStatement) { + extraIndent = 0; + this.wrapParentIndex = this.tm.firstIndexIn(parentNode, -1); // only if + // !indoentOnColumn + } + else if (parentNode instanceof LambdaExpression) { + extraIndent = 1; + } + else if ((wrappingOption & Alignment.M_INDENT_BY_ONE) != 0) { + extraIndent = 1; + } + else if (parentNode instanceof ArrayInitializer) { + extraIndent = this.options.continuation_indentation_for_array_initializer; + isAlreadyWrapped = isFirst && this.options.insert_new_line_after_opening_brace_in_array_initializer; + } + + WrapMode wrapMode = WrapMode.WHERE_NECESSARY; + boolean isTopPriority = false; + switch (wrappingOption & Alignment.SPLIT_MASK) { + case Alignment.M_NO_ALIGNMENT: + wrapMode = WrapMode.DISABLED; + isForceWrap = false; + break; + case Alignment.M_COMPACT_FIRST_BREAK_SPLIT: + isTopPriority = isFirst; + isForceWrap &= isFirst; + break; + case Alignment.M_ONE_PER_LINE_SPLIT: + isTopPriority = true; + break; + case Alignment.M_NEXT_SHIFTED_SPLIT: + isTopPriority = true; + if (!isFirst) { + extraIndent++; + } + break; + case Alignment.M_NEXT_PER_LINE_SPLIT: + isTopPriority = !isFirst; + isForceWrap &= !isFirst; + break; + } + + if (isForceWrap) { + wrapMode = WrapMode.FORCE; + } + else if (isAlreadyWrapped) { + wrapMode = WrapMode.DISABLED; // to avoid triggering top priority wrapping + } + else if (isTopPriority) { + wrapMode = WrapMode.TOP_PRIORITY; + } + extraIndent *= this.options.indentation_size; + return new WrapPolicy(wrapMode, this.wrapParentIndex, this.wrapGroupEnd, extraIndent, this.currentDepth, + penaltyMultiplier, isFirst, indentOnColumn); + } + + public void finishUp(ASTNode astRoot, List regions) { + preserveExistingLineBreaks(); + applyBreaksOutsideRegions(regions); + new WrapExecutor(this.tm, this.options, regions).executeWraps(); + this.aligner.alignComments(); + wrapComments(); + fixEnumConstantIndents(astRoot); + } + + private void preserveExistingLineBreaks() { + // normally n empty lines = n+1 line breaks, but not at the file start and end + Token first = this.tm.get(0); + int startingBreaks = first.getLineBreaksBefore(); + first.clearLineBreaksBefore(); + first.putLineBreaksBefore(startingBreaks - 1); + + this.tm.traverse(0, new TokenTraverser() { + boolean join_wrapped_lines = WrapPreparator.this.options.join_wrapped_lines; + + @Override + protected boolean token(Token token, int index) { + int lineBreaks = getLineBreaksToPreserve(getPrevious(), token); + if (lineBreaks > 1 || (!this.join_wrapped_lines && token.isWrappable()) || index == 0) { + token.putLineBreaksBefore(lineBreaks); + } + return true; + } + + }); + + Token last = this.tm.get(this.tm.size() - 1); + last.clearLineBreaksAfter(); + int endingBreaks = getLineBreaksToPreserve(last, null); + if (endingBreaks > 0) { + last.putLineBreaksAfter(endingBreaks); + } + else if ((this.kind & (CodeFormatter.K_COMPILATION_UNIT | CodeFormatter.K_MODULE_INFO)) != 0 + && this.options.insert_new_line_at_end_of_file_if_missing) { + last.breakAfter(); + } + } + + int getLineBreaksToPreserve(Token token1, Token token2) { + if ((token1 != null && !token1.isPreserveLineBreaksAfter()) + || (token2 != null && !token2.isPreserveLineBreaksBefore())) { + return 0; + } + if (token1 != null) { + List structure = token1.getInternalStructure(); + if (structure != null && !structure.isEmpty()) { + token1 = structure.get(structure.size() - 1); + } + } + if (token2 != null) { + List structure = token2.getInternalStructure(); + if (structure != null && !structure.isEmpty()) { + token2 = structure.get(0); + } + } + int lineBreaks = WrapPreparator.this.tm.countLineBreaksBetween(token1, token2); + int toPreserve = this.options.number_of_empty_lines_to_preserve; + if (token1 != null && token2 != null) { + toPreserve++; // n empty lines = n+1 line breaks, except for file start and + // end + } + return Math.min(lineBreaks, toPreserve); + } + + private void applyBreaksOutsideRegions(List regions) { + String source = this.tm.getSource(); + int previousRegionEnd = 0; + for (IRegion region : regions) { + int index = this.tm.findIndex(previousRegionEnd, -1, true); + Token token = this.tm.get(index); + if (this.tm.countLineBreaksBetween(source, previousRegionEnd, + Math.min(token.originalStart, region.getOffset())) > 0) { + token.breakBefore(); + } + for (index++; index < this.tm.size(); index++) { + Token next = this.tm.get(index); + if (next.originalStart > region.getOffset()) { + if (this.tm.countLineBreaksBetween(source, token.originalEnd, region.getOffset()) > 0) { + next.breakBefore(); + } + break; + } + if (this.tm.countLineBreaksBetween(token, next) > 0) { + next.breakBefore(); + } + token = next; + } + previousRegionEnd = region.getOffset() + region.getLength() - 1; + } + } + + private void wrapComments() { + CommentWrapExecutor commentWrapper = new CommentWrapExecutor(this.tm, this.options); + boolean isNLSTagInLine = false; + for (int i = 0; i < this.tm.size(); i++) { + Token token = this.tm.get(i); + if (token.getLineBreaksBefore() > 0 || token.getLineBreaksAfter() > 0) { + isNLSTagInLine = false; + } + if (token.hasNLSTag()) { + assert token.tokenType == TokenNameStringLiteral; + isNLSTagInLine = true; + } + List structure = token.getInternalStructure(); + if (token.isComment() && structure != null && !structure.isEmpty() && !isNLSTagInLine) { + int startPosition = this.tm.getPositionInLine(i); + if (token.tokenType == TokenNameCOMMENT_LINE) { + commentWrapper.wrapLineComment(token, startPosition); + } + else { + assert token.tokenType == TokenNameCOMMENT_BLOCK || token.tokenType == TokenNameCOMMENT_JAVADOC; + commentWrapper.wrapMultiLineComment(token, startPosition, false, false); + } + } + } + } + + private void fixEnumConstantIndents(ASTNode astRoot) { + if (this.options.use_tabs_only_for_leading_indentations) { + // enum constants should be indented like other declarations, not like wrapped + // elements + astRoot.accept(new ASTVisitor() { + + @Override + public boolean visit(EnumConstantDeclaration node) { + WrapPreparator.this.tm.firstTokenIn(node, -1).setWrapPolicy(null); + return true; + } + }); + } + } + + private void handleParenthesesPositions(int openingParenIndex, int closingParenIndex, String positionsSetting) { + boolean isEmpty = openingParenIndex + 1 == closingParenIndex; + switch (positionsSetting) { + case DefaultCodeFormatterConstants.COMMON_LINES: + // nothing to do + break; + case DefaultCodeFormatterConstants.SEPARATE_LINES_IF_WRAPPED: + if (isEmpty) { + break; + } + this.tm.get(openingParenIndex + 1).setWrapPolicy(new WrapPolicy(WrapMode.TOP_PRIORITY, openingParenIndex, + closingParenIndex, this.options.indentation_size, this.currentDepth, 1, true, false)); + this.tm.get(closingParenIndex).setWrapPolicy(new WrapPolicy(WrapMode.TOP_PRIORITY, openingParenIndex, + closingParenIndex, 0, this.currentDepth, 1, false, false)); + break; + case DefaultCodeFormatterConstants.SEPARATE_LINES_IF_NOT_EMPTY: + if (isEmpty) { + break; + } + //$FALL-THROUGH$ + case DefaultCodeFormatterConstants.SEPARATE_LINES: + case DefaultCodeFormatterConstants.PRESERVE_POSITIONS: + boolean always = !positionsSetting.equals(DefaultCodeFormatterConstants.PRESERVE_POSITIONS); + Token afterOpening = this.tm.get(openingParenIndex + 1); + if (always || this.tm.countLineBreaksBetween(this.tm.get(openingParenIndex), afterOpening) > 0) { + afterOpening.setWrapPolicy( + new WrapPolicy(WrapMode.WHERE_NECESSARY, openingParenIndex, this.options.indentation_size)); + afterOpening.breakBefore(); + } + Token closingParen = this.tm.get(closingParenIndex); + if (always || this.tm.countLineBreaksBetween(this.tm.get(closingParenIndex - 1), closingParen) > 0) { + closingParen.setWrapPolicy(new WrapPolicy(WrapMode.WHERE_NECESSARY, openingParenIndex, 0)); + closingParen.breakBefore(); + } + break; + default: + throw new IllegalArgumentException("Unrecognized parentheses positions setting: " + positionsSetting); //$NON-NLS-1$ + } + } + + // @formatter:on +} diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index 232f1d25..60aad783 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -77,6 +77,7 @@ private void rewrite(JdkVersion jdkVersion, FileSystem zip) throws IOException { DefaultCodeFormatterManipulator::new); if (jdkVersion == JdkVersion.V8) { rewrite(zip, "org/eclipse/osgi/util/NLS$1.class", NlsJdk8Manipulator::new); + deleteWrapPreparator(zip); } else { rewrite(zip, "org/eclipse/osgi/util/NLS.class", NlsJdk11Manipulator::new); @@ -94,6 +95,11 @@ private void rewrite(FileSystem zip, String name, Function + From 23f4faacbae5b8154c8497ed22338d252b43c029 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 7 Feb 2023 13:04:05 -0800 Subject: [PATCH 117/238] Update copyright header to fix test --- .../src/test/resources/source/complex.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt index 15283fa8..936faa1b 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 759dfdf66f232a01cf4db2dd8c4d860993593c8a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 7 Feb 2023 17:26:10 -0800 Subject: [PATCH 118/238] Add basedir property --- .../io.spring.javaformat.gradle.plugin/pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index e41e6604..5a9a4e8f 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -11,6 +11,9 @@ io.spring.javaformat.gradle.plugin pom Spring JavaFormat Gradle Plugin Marker Artifact + + ${basedir}/../.. + io.spring.javaformat From 91d1381c537423e99c3fdd585fb8512dd1d09d25 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 7 Feb 2023 20:47:33 -0800 Subject: [PATCH 119/238] Switch to DocumentFormattingService interface Upgrade to IntelliJ IDEA 2022.3.2 and change the formatter to be an implementation of `DocumentFormattingService`. This significantly simplifies the plugin and hopefully removes some of the compatibility issues that have happened in the past. Closes gh-359 --- README.adoc | 2 +- .../pom.xml | 38 ++- .../formatter/intellij/SpringFormat.java | 160 ------------ .../codestyle/DelegatingCodeStyleManager.java | 222 ---------------- .../codestyle/SpringCodeStyleManager.java | 73 ------ .../intellij/codestyle/SpringReformatter.java | 132 ---------- .../EclipseDocumentAdapter.java | 4 +- .../EclipseRegionAdapter.java | 11 +- .../SpringJavaFormatFormattingService.java | 103 ++++++++ .../{codestyle => }/monitor/FileMonitor.java | 10 +- .../monitor/GradleMonitor.java | 23 +- .../{codestyle => }/monitor/MavenMonitor.java | 6 +- .../{codestyle => }/monitor/Monitor.java | 4 +- .../{codestyle => }/monitor/Monitors.java | 6 +- .../{codestyle => }/monitor/Trigger.java | 23 +- .../ManagedSpringJavaFormatProject.java | 89 +++++++ .../SpringJavaFormatStartupActivity.java} | 10 +- .../formatter/intellij/state/State.java | 59 +++++ .../intellij/{ => ui}/StatusIndicator.java | 12 +- .../src/main/resources/META-INF/plugin.xml | 3 +- .../DelegatingCodeStyleManagerTests.java | 243 ------------------ .../SpringCodeStyleManagerTests.java | 117 --------- .../codestyle/SpringReformatterTests.java | 121 --------- .../EclipseDocumentAdapterTests.java | 11 +- .../EclipseRegionAdapterTests.java | 12 +- ...pringJavaFormatFormattingServiceTests.java | 94 +++++++ .../pom.xml | 186 +++++++------- 27 files changed, 527 insertions(+), 1247 deletions(-) delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => formatting}/EclipseDocumentAdapter.java (92%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => formatting}/EclipseRegionAdapter.java (79%) create mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/FileMonitor.java (88%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/GradleMonitor.java (83%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/MavenMonitor.java (93%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/Monitor.java (93%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/Monitors.java (94%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/Trigger.java (73%) create mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{SpringFormatStartupActivity.java => startup/SpringJavaFormatStartupActivity.java} (71%) create mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{ => ui}/StatusIndicator.java (89%) delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/{codestyle => formatting}/EclipseDocumentAdapterTests.java (83%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/{codestyle => formatting}/EclipseRegionAdapterTests.java (81%) create mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java diff --git a/README.adoc b/README.adoc index af1ce970..5ffd15a1 100644 --- a/README.adoc +++ b/README.adoc @@ -224,7 +224,7 @@ or use the https://repo.spring.io/javaformat-eclipse-update-site/[update site]. === IntelliJ IDEA The IntelliJ IDEA plugin provides custom formatter support for IntelliJ IDEA. -The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script. +The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script or if a `.springjavaformatconfig` file. A Spring Java Format icon (image:spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/spring-javaformat/formatOn.png[title="Icon"]) will also be displayed in the status bar to indicate the formatter is active. You can use the standard `code` -> `reformat code` action to format the code. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 88ddb665..5b0b83d1 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -12,15 +12,10 @@ Spring JavaFormat IntelliJ IDEA Plugin ${basedir}/../.. - 11 + 17 - - io.spring.javaformat - spring-javaformat-formatter - ${project.version} - io.spring.javaformat spring-javaformat-formatter-eclipse-runtime @@ -32,6 +27,11 @@ + + io.spring.javaformat + spring-javaformat-formatter + ${project.version} + io.spring.javaformat @@ -41,14 +41,20 @@ provided - io.spring.javaformat.intellij.idea + org.jetbrains annotations + 13.0 + provided + + + io.spring.javaformat.intellij.idea + app ${project.version} provided io.spring.javaformat.intellij.idea - platform-api + jps-model ${project.version} provided @@ -66,7 +72,7 @@ io.spring.javaformat.intellij.idea - idea + util_rt ${project.version} provided @@ -78,7 +84,7 @@ io.spring.javaformat.intellij.idea - maven-server-api + maven-server ${project.version} provided @@ -110,6 +116,18 @@ picocontainer provided + + org.jetbrains.kotlinx + kotlinx-coroutines-core + 1.6.4 + provided + + + it.unimi.dsi + fastutil + 8.5.11 + provided + diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java deleted file mode 100644 index 79a76382..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.formatter.intellij; - -import java.lang.reflect.Method; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -import com.intellij.ide.plugins.IdeaPluginDescriptor; -import com.intellij.ide.plugins.PluginManagerCore; -import com.intellij.ide.util.PropertiesComponent; -import com.intellij.openapi.application.ApplicationInfo; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.PluginDescriptor; -import com.intellij.openapi.extensions.PluginId; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Disposer; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.serviceContainer.ComponentManagerImpl; -import org.picocontainer.MutablePicoContainer; - -import io.spring.format.formatter.intellij.codestyle.SpringCodeStyleManager; -import io.spring.format.formatter.intellij.codestyle.monitor.FileMonitor; -import io.spring.format.formatter.intellij.codestyle.monitor.GradleMonitor; -import io.spring.format.formatter.intellij.codestyle.monitor.MavenMonitor; -import io.spring.format.formatter.intellij.codestyle.monitor.Monitors; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; - -/** - * Spring Java Format IntelliJ support added to a {@link Project}. - * - * @author Phillip Webb - */ -public class SpringFormat { - - private static final String CODE_STYLE_MANAGER_KEY = CodeStyleManager.class.getName(); - - private static final String ACTIVE_PROPERTY = SpringFormat.class.getName() + ".ACTIVE"; - - private static final Logger logger = Logger.getInstance(SpringFormat.class); - - private final Project project; - - private final StatusIndicator statusIndicator; - - private final Lock lock = new ReentrantLock(); - - private Monitors monitors; - - private PropertiesComponent properties; - - protected SpringFormat(Project project) { - logger.info("Initializing Spring Format for project " + project.getName()); - this.project = project; - this.statusIndicator = new StatusIndicator(project); - this.properties = PropertiesComponent.getInstance(project); - if (this.properties.getBoolean(ACTIVE_PROPERTY, false)) { - update(State.ACTIVE); - } - this.monitors = new Monitors(this.project, this::update, FileMonitor.factory(), MavenMonitor.factory(), - GradleMonitor.factory()); - Disposer.register(project, this::dispose); - } - - private void dispose() { - if (this.monitors != null) { - this.monitors.stop(); - this.monitors = null; - } - } - - private void update(State state) { - logger.info("Updating state of " + this.project.getName() + " to " + state); - this.lock.lock(); - try { - CodeStyleManager manager = CodeStyleManager.getInstance(this.project); - if (manager == null) { - logger.warn("Unable to find exiting CodeStyleManager"); - return; - } - if (state == State.ACTIVE && !(manager instanceof SpringCodeStyleManager)) { - logger.debug("Enabling SpringCodeStyleManager"); - registerCodeStyleManager(new SpringCodeStyleManager(manager)); - this.properties.setValue(ACTIVE_PROPERTY, true); - } - if (state == State.NOT_ACTIVE && (manager instanceof SpringCodeStyleManager)) { - logger.debug("Disabling SpringCodeStyleManager"); - registerCodeStyleManager(((SpringCodeStyleManager) manager).getDelegate()); - this.properties.setValue(ACTIVE_PROPERTY, false); - } - ApplicationManager.getApplication().invokeLater(() -> this.statusIndicator.update(state)); - } - finally { - this.lock.unlock(); - } - } - - private void registerCodeStyleManager(CodeStyleManager manager) { - if (ApplicationInfo.getInstance().getBuild().getBaselineVersion() >= 193) { - IdeaPluginDescriptor plugin = PluginManagerCore.getPlugin(PluginId.getId("spring-javaformat")); - try { - ((ComponentManagerImpl) this.project).registerServiceInstance(CodeStyleManager.class, manager, plugin); - } - catch (NoSuchMethodError ex) { - Method method = findRegisterServiceInstanceMethod(this.project.getClass()); - invokeRegisterServiceInstanceMethod(manager, plugin, method); - } - } - else { - MutablePicoContainer container = (MutablePicoContainer) this.project.getPicoContainer(); - container.unregisterComponent(CODE_STYLE_MANAGER_KEY); - container.registerComponentInstance(CODE_STYLE_MANAGER_KEY, manager); - } - } - - private Method findRegisterServiceInstanceMethod(Class projectClass) { - if (projectClass != null) { - Method[] methods = projectClass.getDeclaredMethods(); - for (Method method : methods) { - if (method.getName().equals("registerServiceInstance") && method.getParameterCount() == 3) { - if (PluginDescriptor.class.isAssignableFrom(method.getParameterTypes()[2])) { - return method; - } - } - } - return findRegisterServiceInstanceMethod(projectClass.getSuperclass()); - } - return null; - } - - private void invokeRegisterServiceInstanceMethod(CodeStyleManager manager, IdeaPluginDescriptor plugin, - Method method) { - if (method == null) { - throw new IllegalStateException("Unsupported IntelliJ IDEA version"); - } - method.setAccessible(true); - try { - method.invoke(this.project, manager, plugin); - } - catch (Exception ex) { - throw new IllegalStateException(ex); - } - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java deleted file mode 100644 index c133d872..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.formatter.intellij.codestyle; - -import java.util.Collection; - -import com.intellij.formatting.FormattingMode; -import com.intellij.lang.ASTNode; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.ChangedRangesInfo; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.codeStyle.DocCommentSettings; -import com.intellij.psi.codeStyle.FormattingModeAwareIndentAdjuster; -import com.intellij.util.IncorrectOperationException; -import com.intellij.util.ThrowableRunnable; - -/** - * {@link CodeStyleManager} implementation that delegates all calls. - * - * @author Phillip Webb - */ -public class DelegatingCodeStyleManager extends CodeStyleManager implements FormattingModeAwareIndentAdjuster { - - private final CodeStyleManager delegate; - - public DelegatingCodeStyleManager(CodeStyleManager delegate) { - this.delegate = delegate; - } - - public CodeStyleManager getDelegate() { - return this.delegate; - } - - @Override - public int getSpacing(PsiFile file, int offset) { - return this.delegate.getSpacing(file, offset); - } - - @Override - public int getMinLineFeeds(PsiFile file, int offset) { - return this.delegate.getMinLineFeeds(file, offset); - } - - @Override - public void runWithDocCommentFormattingDisabled(PsiFile file, Runnable runnable) { - this.delegate.runWithDocCommentFormattingDisabled(file, runnable); - } - - @Override - public DocCommentSettings getDocCommentSettings(PsiFile file) { - return this.delegate.getDocCommentSettings(file); - } - - @Override - public Project getProject() { - return this.delegate.getProject(); - } - - @Override - public PsiElement reformat(PsiElement element) throws IncorrectOperationException { - return this.delegate.reformat(element); - } - - @Override - public PsiElement reformat(PsiElement element, boolean canChangeWhiteSpacesOnly) - throws IncorrectOperationException { - return this.delegate.reformat(element, canChangeWhiteSpacesOnly); - } - - @Override - public PsiElement reformatRange(PsiElement element, int startOffset, int endOffset) - throws IncorrectOperationException { - return this.delegate.reformatRange(element, startOffset, endOffset); - } - - @Override - public PsiElement reformatRange(PsiElement element, int startOffset, int endOffset, - boolean canChangeWhiteSpacesOnly) throws IncorrectOperationException { - return this.delegate.reformatRange(element, startOffset, endOffset, canChangeWhiteSpacesOnly); - } - - @Override - public void reformatText(PsiFile file, int startOffset, int endOffset) throws IncorrectOperationException { - this.delegate.reformatText(file, startOffset, endOffset); - } - - @Override - public void reformatText(PsiFile file, Collection ranges) throws IncorrectOperationException { - this.delegate.reformatText(file, ranges); - } - - @Override - public void reformatTextWithContext(PsiFile file, ChangedRangesInfo info) throws IncorrectOperationException { - this.delegate.reformatTextWithContext(file, info); - } - - @Override - public void adjustLineIndent(PsiFile file, TextRange rangeToAdjust) throws IncorrectOperationException { - this.delegate.adjustLineIndent(file, rangeToAdjust); - } - - @Override - public int adjustLineIndent(PsiFile file, int offset) throws IncorrectOperationException { - return this.delegate.adjustLineIndent(file, offset); - } - - @Override - public int adjustLineIndent(Document document, int offset) { - return this.delegate.adjustLineIndent(document, offset); - } - - @Override - @Deprecated - public boolean isLineToBeIndented(PsiFile file, int offset) { - return this.delegate.isLineToBeIndented(file, offset); - } - - @Override - public String getLineIndent(PsiFile file, int offset) { - return this.delegate.getLineIndent(file, offset); - } - - @Override - public String getLineIndent(Document document, int offset) { - return this.delegate.getLineIndent(document, offset); - } - - @Override - public String getLineIndent(PsiFile file, int offset, FormattingMode mode) { - return this.delegate.getLineIndent(file, offset, mode); - } - - @Override - @Deprecated - public com.intellij.psi.codeStyle.Indent getIndent(String text, FileType fileType) { - return this.delegate.getIndent(text, fileType); - } - - @Override - @Deprecated - public String fillIndent(com.intellij.psi.codeStyle.Indent indent, FileType fileType) { - return this.delegate.fillIndent(indent, fileType); - } - - @Override - @Deprecated - public com.intellij.psi.codeStyle.Indent zeroIndent() { - return this.delegate.zeroIndent(); - } - - @Override - public void reformatNewlyAddedElement(ASTNode block, ASTNode addedElement) throws IncorrectOperationException { - this.delegate.reformatNewlyAddedElement(block, addedElement); - } - - @Override - public boolean isSequentialProcessingAllowed() { - return this.delegate.isSequentialProcessingAllowed(); - } - - @Override - public void performActionWithFormatterDisabled(Runnable r) { - this.delegate.performActionWithFormatterDisabled(r); - } - - @Override - public void performActionWithFormatterDisabled(ThrowableRunnable r) throws T { - this.delegate.performActionWithFormatterDisabled(r); - } - - @Override - public T performActionWithFormatterDisabled(Computable r) { - return this.delegate.performActionWithFormatterDisabled(r); - } - - @Override - public int adjustLineIndent(Document document, int offset, FormattingMode mode) { - if (this.delegate instanceof FormattingModeAwareIndentAdjuster) { - return ((FormattingModeAwareIndentAdjuster) this.delegate).adjustLineIndent(document, offset, mode); - } - return offset; - } - - @Override - public FormattingMode getCurrentFormattingMode() { - if (this.delegate instanceof FormattingModeAwareIndentAdjuster) { - return ((FormattingModeAwareIndentAdjuster) this.delegate).getCurrentFormattingMode(); - } - return FormattingMode.REFORMAT; - } - - @Override - public void scheduleIndentAdjustment(Document document, int offset) { - this.delegate.scheduleIndentAdjustment(document, offset); - } - - @Override - public void scheduleReformatWhenSettingsComputed(PsiFile file) { - this.delegate.scheduleReformatWhenSettingsComputed(file); - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java deleted file mode 100644 index 56b94ab5..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.formatter.intellij.codestyle; - -import java.util.Collection; -import java.util.Collections; -import java.util.function.Supplier; - -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.ChangedRangesInfo; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.util.IncorrectOperationException; - -/** - * {@link CodeStyleManager} to apply Spring Formatting conventions. - * - * @author Phillip Webb - */ -public class SpringCodeStyleManager extends DelegatingCodeStyleManager { - - private final SpringReformatter springReformatter; - - public SpringCodeStyleManager(CodeStyleManager delegate) { - super(delegate); - this.springReformatter = new SpringReformatter(() -> getProject()); - } - - SpringCodeStyleManager(CodeStyleManager delegate, SpringReformatter springReformatter) { - super(delegate); - this.springReformatter = springReformatter; - } - - @Override - public void reformatText(PsiFile file, int startOffset, int endOffset) throws IncorrectOperationException { - reformat(file, () -> Collections.singleton(new TextRange(startOffset, endOffset)), - () -> super.reformatText(file, startOffset, endOffset)); - } - - @Override - public void reformatText(PsiFile file, Collection ranges) throws IncorrectOperationException { - reformat(file, () -> ranges, () -> super.reformatText(file, ranges)); - } - - @Override - public void reformatTextWithContext(PsiFile file, ChangedRangesInfo info) throws IncorrectOperationException { - reformat(file, () -> info.allChangedRanges, () -> super.reformatTextWithContext(file, info)); - } - - private void reformat(PsiFile file, Supplier> ranges, Runnable delegate) { - if (this.springReformatter.canReformat(file)) { - this.springReformatter.reformat(file, ranges.get()); - } - else { - delegate.run(); - } - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java deleted file mode 100644 index be1ceed0..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.formatter.intellij.codestyle; - -import java.util.Collection; -import java.util.function.Supplier; - -import com.intellij.core.CoreBundle; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.FileTypeManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDirectory; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.util.IncorrectOperationException; -import org.eclipse.jface.text.IRegion; -import org.eclipse.text.edits.TextEdit; - -import io.spring.javaformat.config.JavaFormatConfig; -import io.spring.javaformat.formatter.Formatter; - -/** - * Reformatter used by {@link SpringCodeStyleManager} to determine when formatting can - * apply and to perform the actual formatting. - * - * @author Phillip Webb - */ -class SpringReformatter { - - private static final String NORMALIZED_LINE_SEPARATOR = "\n"; - - private static final FileType JAVA_FILE_TYPE = FileTypeManager.getInstance().getStdFileType("JAVA"); - - private final Supplier project; - - private final Supplier application; - - private final Supplier documentManager; - - SpringReformatter(Supplier project) { - this.project = project; - this.application = () -> ApplicationManager.getApplication(); - this.documentManager = () -> PsiDocumentManager.getInstance(project.get()); - } - - SpringReformatter(Supplier project, Supplier application, - Supplier documentManager) { - this.project = project; - this.application = application; - this.documentManager = documentManager; - } - - public boolean canReformat(PsiFile file) { - return JAVA_FILE_TYPE.equals(file.getFileType()); - } - - public void reformat(PsiFile file, Collection ranges) { - this.application.get().assertWriteAccessAllowed(); - this.documentManager.get().commitAllDocuments(); - if (!file.isWritable()) { - throwNotWritableException(file); - } - reformat(file, ranges, this.documentManager.get().getDocument(file)); - } - - private void throwNotWritableException(PsiElement element) throws IncorrectOperationException { - if (element instanceof PsiDirectory) { - String url = ((PsiDirectory) element).getVirtualFile().getPresentableUrl(); - throw new IncorrectOperationException(CoreBundle.message("cannot.modify.a.read.only.directory", url)); - } - PsiFile file = element.getContainingFile(); - if (file == null) { - throw new IncorrectOperationException(); - } - VirtualFile virtualFile = file.getVirtualFile(); - if (virtualFile == null) { - throw new IncorrectOperationException(); - } - throw new IncorrectOperationException( - CoreBundle.message("cannot.modify.a.read.only.file", virtualFile.getPresentableUrl())); - } - - private void reformat(PsiFile file, Collection ranges, Document document) { - if (document != null && file.getVirtualFile() != null) { - JavaFormatConfig javaFormatConfig = JavaFormatConfig.findFrom(file.getVirtualFile().toNioPath()); - Formatter formatter = new Formatter(javaFormatConfig); - String source = document.getText(); - IRegion[] regions = EclipseRegionAdapter.asArray(ranges); - TextEdit edit = formatter.format(source, regions, NORMALIZED_LINE_SEPARATOR); - applyEdit(document, edit); - } - } - - private void applyEdit(Document document, TextEdit textEdit) { - runWriteCommandAction(() -> { - try { - EclipseDocumentAdapter adapter = new EclipseDocumentAdapter(document); - textEdit.apply(adapter); - this.documentManager.get().commitDocument(document); - } - catch (Exception ex) { - throw new IllegalStateException(ex); - } - }); - } - - protected void runWriteCommandAction(Runnable runnable) { - WriteCommandAction.runWriteCommandAction(this.project.get(), runnable); - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java similarity index 92% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapter.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java index 99dadda0..8d874234 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle; +package io.spring.format.formatter.intellij.formatting; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.Document; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java similarity index 79% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapter.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java index 59169754..20888b55 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,9 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle; +package io.spring.format.formatter.intellij.formatting; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import com.intellij.openapi.util.TextRange; @@ -29,15 +28,15 @@ * * @author Phillip Webb */ -public class EclipseRegionAdapter extends Region { +class EclipseRegionAdapter extends Region { private static final IRegion[] NO_REGIONS = {}; - public EclipseRegionAdapter(TextRange range) { + EclipseRegionAdapter(TextRange range) { super(range.getStartOffset(), range.getLength()); } - public static IRegion[] asArray(Collection ranges) { + static IRegion[] asArray(List ranges) { if (ranges == null) { return NO_REGIONS; } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java new file mode 100644 index 00000000..a457072f --- /dev/null +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java @@ -0,0 +1,103 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.formatter.intellij.formatting; + +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; + +import com.intellij.formatting.FormattingContext; +import com.intellij.formatting.service.AbstractDocumentFormattingService; +import com.intellij.formatting.service.FormattingService; +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.fileTypes.FileTypeManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiFile; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IRegion; +import org.eclipse.text.edits.TextEdit; +import org.jetbrains.annotations.NotNull; + +import io.spring.format.formatter.intellij.state.State; +import io.spring.javaformat.config.JavaFormatConfig; +import io.spring.javaformat.formatter.Formatter; + +/** + * {@link FormattingService} to apply Spring formatting conventions. + * + * @author Phillip Webb + */ +public class SpringJavaFormatFormattingService extends AbstractDocumentFormattingService { + + private static final String NORMALIZED_LINE_SEPARATOR = "\n"; + + private static final Set FEATURES = Set.of(Feature.FORMAT_FRAGMENTS); + + private static final FileType JAVA_FILE_TYPE = FileTypeManager.getInstance().getStdFileType("JAVA"); + + private final BiConsumer runAction; + + public SpringJavaFormatFormattingService() { + this(WriteCommandAction::runWriteCommandAction); + } + + SpringJavaFormatFormattingService(BiConsumer runAction) { + this.runAction = runAction; + } + + @Override + public @NotNull Set getFeatures() { + return FEATURES; + } + + @Override + public boolean canFormat(@NotNull PsiFile file) { + return JAVA_FILE_TYPE.equals(file.getFileType()) && State.get(file.getProject()) == State.ACTIVE; + } + + @Override + public void formatDocument(@NotNull Document document, @NotNull List formattingRanges, + @NotNull FormattingContext formattingContext, boolean canChangeWhiteSpaceOnly, boolean quickFormat) { + VirtualFile file = formattingContext.getVirtualFile(); + Path path = (file != null) ? file.toNioPath() : null; + JavaFormatConfig config = JavaFormatConfig.findFrom(path); + Formatter formatter = new Formatter(config); + String source = document.getText(); + formattingRanges = (!formattingRanges.isEmpty()) ? formattingRanges : List.of(TextRange.allOf(source)); + IRegion[] regions = EclipseRegionAdapter.asArray(formattingRanges); + TextEdit edit = formatter.format(source, regions, NORMALIZED_LINE_SEPARATOR); + applyEdit(formattingContext.getProject(), document, edit); + } + + private void applyEdit(Project project, Document document, TextEdit textEdit) { + this.runAction.accept(project, () -> { + try { + IDocument adapted = new EclipseDocumentAdapter(document); + textEdit.apply(adapted); + } + catch (Exception ex) { + throw new IllegalStateException(ex); + } + }); + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/FileMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java similarity index 88% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/FileMonitor.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java index cc93579c..ac930e50 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/FileMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; @@ -24,16 +24,16 @@ import com.intellij.openapi.vfs.VirtualFileMoveEvent; import com.intellij.openapi.vfs.VirtualFilePropertyEvent; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** - * {@link Monitor} that looks for a {@literal .springformat} file. + * {@link Monitor} that looks for a {@literal .springjavaformatconfig} file. * * @author Phillip Webb */ public class FileMonitor extends Monitor { - private static final String TRIGGER_FILE = ".springformat"; + private static final String TRIGGER_FILE = ".springjavaformatconfig"; private final VirtualFileManager fileManager; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java similarity index 83% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java index a90c9ce6..6ad8d657 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,10 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import java.util.Collection; -import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.model.DataNode; import com.intellij.openapi.externalSystem.model.ExternalProjectInfo; @@ -27,13 +26,14 @@ import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataImportListener; import com.intellij.openapi.project.Project; import com.intellij.util.messages.MessageBusConnection; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.util.GradleConstants; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** - * {@link Monitor} that looks for a {@code spring-javaformat-gradle-plugin} declaration in - * the build.gradle file. + * {@link Monitor} that looks for a {@code spring-javaformat-gradle-plugin} + * declaration in the build.gradle file. * * @author Phillip Webb */ @@ -46,12 +46,19 @@ public class GradleMonitor extends Monitor { public GradleMonitor(Project project, Trigger trigger) { super(project, trigger); MessageBusConnection messageBus = project.getMessageBus().connect(); - messageBus.subscribe(ProjectDataImportListener.TOPIC, (path) -> check()); + messageBus.subscribe(ProjectDataImportListener.TOPIC, new ProjectDataImportListener() { + + @Override + public void onImportFinished(@Nullable String projectPath) { + check(); + } + + }); } private void check() { logger.info("Checking " + getProject().getName() + " for use of Spring Java Format"); - ProjectDataManager projectDataManager = ServiceManager.getService(ProjectDataManager.class); + ProjectDataManager projectDataManager = getProject().getService(ProjectDataManager.class); boolean hasFormatPlugin = hasFormatPlugin( projectDataManager.getExternalProjectsData(getProject(), GradleConstants.SYSTEM_ID)); getTrigger().updateState(hasFormatPlugin ? State.ACTIVE : State.NOT_ACTIVE); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/MavenMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java similarity index 93% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/MavenMonitor.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java index c0cab821..5af1f808 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/MavenMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import java.util.List; @@ -26,7 +26,7 @@ import org.jetbrains.idea.maven.project.MavenProjectsTree.Listener; import org.jetbrains.idea.maven.server.NativeMavenProjectHolder; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** * {@link Monitor} that looks for a {@code spring-javaformat-maven-plugin} declaration in diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java similarity index 93% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitor.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java index 81710cd5..ec69d85e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import com.intellij.openapi.project.Project; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitors.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java similarity index 94% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitors.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java index 33d1b7e1..5af61007 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitors.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import java.util.ArrayList; import java.util.Arrays; @@ -24,7 +24,7 @@ import com.intellij.openapi.project.Project; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** * Utility class used to manage a collection of {@link Monitors}. Creates and manages diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Trigger.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java similarity index 73% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Trigger.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java index 10bbc5ba..8bab9300 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Trigger.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,9 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; + +import io.spring.format.formatter.intellij.state.State; /** * Trigger used to to update the state for this monitor. Triggers are thread safe and can @@ -30,21 +32,4 @@ public interface Trigger { */ void updateState(State state); - /** - * The desired state of the plugin for this monitor. - */ - enum State { - - /** - * The plugin should be active. - */ - ACTIVE, - - /** - * The plugin need not be active. - */ - NOT_ACTIVE - - } - } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java new file mode 100644 index 00000000..043de49c --- /dev/null +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java @@ -0,0 +1,89 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.formatter.intellij.startup; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +import com.intellij.ide.util.PropertiesComponent; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; + +import io.spring.format.formatter.intellij.monitor.FileMonitor; +import io.spring.format.formatter.intellij.monitor.GradleMonitor; +import io.spring.format.formatter.intellij.monitor.MavenMonitor; +import io.spring.format.formatter.intellij.monitor.Monitors; +import io.spring.format.formatter.intellij.state.State; +import io.spring.format.formatter.intellij.ui.StatusIndicator; + +/** + * Spring Java Format IntelliJ support added to a {@link Project}. + * + * @author Phillip Webb + */ +class ManagedSpringJavaFormatProject { + + private static final String ACTIVE_PROPERTY = ManagedSpringJavaFormatProject.class.getName() + ".ACTIVE"; + + private static final Logger logger = Logger.getInstance(ManagedSpringJavaFormatProject.class); + + private final Project project; + + private final StatusIndicator statusIndicator; + + private final Lock lock = new ReentrantLock(); + + private Monitors monitors; + + private PropertiesComponent properties; + + protected ManagedSpringJavaFormatProject(Project project) { + logger.info("Initializing Spring Format for project " + project.getName()); + this.project = project; + this.statusIndicator = new StatusIndicator(project); + this.properties = PropertiesComponent.getInstance(project); + if (this.properties.getBoolean(ACTIVE_PROPERTY, false)) { + update(State.ACTIVE); + } + this.monitors = new Monitors(this.project, this::update, FileMonitor.factory(), MavenMonitor.factory(), + GradleMonitor.factory()); + Disposer.register(project, this::dispose); + } + + private void dispose() { + if (this.monitors != null) { + logger.info("Stopping monitors for " + this.project.getName()); + this.monitors.stop(); + this.monitors = null; + } + } + + private void update(State state) { + logger.info("Updating state of " + this.project.getName() + " to " + state); + this.lock.lock(); + try { + state.put(this.project); + ApplicationManager.getApplication().invokeLater(() -> this.statusIndicator.update(state)); + } + finally { + this.lock.unlock(); + } + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatStartupActivity.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java similarity index 71% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatStartupActivity.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java index 8005c961..4d9c4a98 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatStartupActivity.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,21 +14,21 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij; +package io.spring.format.formatter.intellij.startup; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupActivity; /** - * {@link StartupActivity} hook for {@link SpringFormat}. + * {@link StartupActivity} hook for {@link ManagedSpringJavaFormatProject}. * * @author Phillip Webb */ -public class SpringFormatStartupActivity implements StartupActivity { +public class SpringJavaFormatStartupActivity implements StartupActivity { @Override public void runActivity(Project project) { - new SpringFormat(project); + new ManagedSpringJavaFormatProject(project); } } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java new file mode 100644 index 00000000..c093671b --- /dev/null +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java @@ -0,0 +1,59 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.formatter.intellij.state; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Key; + +/** + * The state of the plugin. + * + * @author Phillip Webb + */ +public enum State { + + /** + * The plugin is active. + */ + ACTIVE, + + /** + * The plugin is not active. + */ + NOT_ACTIVE; + + private static final Key KEY = Key.create(State.class.getName()); + + /** + * Put this state to the given project. + * @param project the project that should save the state + */ + public void put(Project project) { + project.putUserData(KEY, this); + } + + /** + * Return the state from the given project. + * @param project the project to check + * @return the state of the project + */ + public static State get(Project project) { + State state = (project != null) ? project.getUserData(KEY) : null; + return (state != null) ? state : NOT_ACTIVE; + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/StatusIndicator.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java similarity index 89% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/StatusIndicator.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java index e7a2ee89..85287af9 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/StatusIndicator.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij; +package io.spring.format.formatter.intellij.ui; import java.awt.event.MouseEvent; import java.util.concurrent.TimeUnit; @@ -30,26 +30,26 @@ import com.intellij.util.Consumer; import com.intellij.util.concurrency.AppExecutorUtil; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** * Indicator used to show when Spring Formatting is active. * * @author Phillip Webb */ -class StatusIndicator { +public class StatusIndicator { private final Project project; private Widget widget; - StatusIndicator(Project project) { + public StatusIndicator(Project project) { this.project = project; } public void update(State state) { WindowManager windowManager = WindowManager.getInstance(); - final StatusBar statusBar = windowManager.getStatusBar(this.project); + StatusBar statusBar = windowManager.getStatusBar(this.project); if (statusBar == null) { AppExecutorUtil.getAppScheduledExecutorService().schedule(() -> retryUpdate(state), 1, TimeUnit.SECONDS); return; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/META-INF/plugin.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/META-INF/plugin.xml index ccbca400..21c74b0f 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/META-INF/plugin.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/META-INF/plugin.xml @@ -9,6 +9,7 @@ org.jetbrains.idea.maven org.jetbrains.plugins.gradle - + + diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java deleted file mode 100644 index b8ab5809..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.formatter.intellij.codestyle; - -import java.util.Collection; -import java.util.Collections; - -import com.intellij.lang.ASTNode; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.ChangedRangesInfo; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.util.ThrowableRunnable; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * Tests for {@link DelegatingCodeStyleManager}. - * - * @author Phillip Webb - */ -public class DelegatingCodeStyleManagerTests { - - @Mock - private CodeStyleManager delegate; - - private DelegatingCodeStyleManager delegating; - - @Mock - private PsiElement element; - - @Mock - private PsiFile file; - - @Mock - private TextRange range; - - private Collection ranges; - - @Mock - private Document document; - - @Mock - private FileType fileType; - - @Mock - private ASTNode block; - - @Mock - private ASTNode node; - - @Mock - private ChangedRangesInfo changedRangesInfo; - - @BeforeEach - public void setup() { - MockitoAnnotations.initMocks(this); - this.delegating = new DelegatingCodeStyleManager(this.delegate); - this.ranges = Collections.singleton(mock(TextRange.class)); - } - - @Test - public void getDelegateShouldGetDelegate() throws Exception { - assertThat(this.delegating.getDelegate()).isEqualTo(this.delegate); - } - - @Test - public void getProjectShouldCallDelegate() throws Exception { - this.delegating.getProject(); - verify(this.delegate).getProject(); - } - - @Test - public void reformatShouldCallDelegate() throws Exception { - this.delegating.reformat(this.element); - verify(this.delegate).reformat(this.element); - } - - @Test - public void reformatWithCanChangeWhiteSpacesOnlyShouldCallDelegate() throws Exception { - this.delegating.reformat(this.element, true); - verify(this.delegate).reformat(this.element, true); - } - - @Test - public void reformatRangeShouldCallDelegate() throws Exception { - this.delegating.reformatRange(this.element, 12, 34); - verify(this.delegate).reformatRange(this.element, 12, 34); - } - - @Test - public void reformatRangeWithCanChangeWhiteSpacesOnlyShouldCallDelegate() throws Exception { - this.delegating.reformatRange(this.element, 12, 34, true); - verify(this.delegate).reformatRange(this.element, 12, 34, true); - } - - @Test - public void reformatTextShouldCallDelegate() throws Exception { - this.delegating.reformatText(this.file, 12, 34); - verify(this.delegate).reformatText(this.file, 12, 34); - } - - @Test - public void reformatTextWithRangeCollectionShouldCallDelegate() throws Exception { - this.delegating.reformatText(this.file, this.ranges); - verify(this.delegate).reformatText(this.file, this.ranges); - } - - @Test - public void reformatTextWithContextShouldCallDelegate() throws Exception { - this.delegating.reformatTextWithContext(this.file, this.ranges); - ArgumentCaptor changedRanges = ArgumentCaptor.forClass(ChangedRangesInfo.class); - verify(this.delegate).reformatTextWithContext(eq(this.file), changedRanges.capture()); - assertThat(changedRanges.getValue().allChangedRanges).containsExactlyElementsOf(this.ranges); - } - - @Test - public void reformatTextWithContextInfoShouldCallDelegate() throws Exception { - this.delegating.reformatTextWithContext(this.file, this.changedRangesInfo); - verify(this.delegate).reformatTextWithContext(this.file, this.changedRangesInfo); - } - - @Test - public void adjustLineIndentForFileWithRangeShouldCallDelegate() throws Exception { - this.delegating.adjustLineIndent(this.file, this.range); - verify(this.delegate).adjustLineIndent(this.file, this.range); - } - - @Test - public void adjustLineIndentForFileShouldCallDelegate() throws Exception { - this.delegating.adjustLineIndent(this.file, 123); - verify(this.delegate).adjustLineIndent(this.file, 123); - } - - @Test - public void adjustLineIndentForDocumentShouldCallDelegate() throws Exception { - this.delegating.adjustLineIndent(this.document, 123); - verify(this.delegate).adjustLineIndent(this.document, 123); - } - - @Test - @Deprecated - public void isLineToBeIndentedShouldCallDelegate() throws Exception { - this.delegating.isLineToBeIndented(this.file, 123); - verify(this.delegate).isLineToBeIndented(this.file, 123); - } - - @Test - public void getLineIndentForFileShouldCallDelegate() throws Exception { - this.delegating.getLineIndent(this.file, 123); - verify(this.delegate).getLineIndent(this.file, 123); - } - - @Test - public void getLineIndentForDocumentShouldCallDelegate() throws Exception { - this.delegating.getLineIndent(this.document, 123); - verify(this.delegate).getLineIndent(this.document, 123); - } - - @Test - @Deprecated - public void getIndentShouldCallDelegate() throws Exception { - this.delegating.getIndent("hello", this.fileType); - verify(this.delegate).getIndent("hello", this.fileType); - } - - @Test - @Deprecated - public void fillIndentShouldCallDelegate() throws Exception { - com.intellij.psi.codeStyle.Indent indent = mock(com.intellij.psi.codeStyle.Indent.class); - this.delegating.fillIndent(indent, this.fileType); - verify(this.delegate).fillIndent(indent, this.fileType); - } - - @Test - @Deprecated - public void zeroIndentShouldCallDelegate() throws Exception { - this.delegating.zeroIndent(); - verify(this.delegate).zeroIndent(); - } - - @Test - public void reformatNewlyAddedElementShouldCallDelegate() throws Exception { - this.delegating.reformatNewlyAddedElement(this.block, this.node); - verify(this.delegate).reformatNewlyAddedElement(this.block, this.node); - } - - @Test - public void isSequentialProcessingAllowedShouldCallDelegate() throws Exception { - this.delegating.isSequentialProcessingAllowed(); - verify(this.delegate).isSequentialProcessingAllowed(); - } - - @Test - public void performActionWithFormatterDisabledWithRunnableShouldCallDelegate() throws Exception { - Runnable runnable = mock(Runnable.class); - this.delegating.performActionWithFormatterDisabled(runnable); - verify(this.delegate).performActionWithFormatterDisabled(runnable); - } - - @Test - @SuppressWarnings({ "rawtypes", "unchecked" }) - public void performActionWithFormatterDisabledWithThrowableRunnableShouldCallDelegate() throws Throwable { - ThrowableRunnable runnable = mock(ThrowableRunnable.class); - this.delegating.performActionWithFormatterDisabled(runnable); - verify(this.delegate).performActionWithFormatterDisabled(runnable); - } - - @Test - @SuppressWarnings({ "rawtypes", "unchecked" }) - public void performActionWithFormatterDisabledWithComputableShouldCallDelegate() throws Exception { - Computable computable = mock(Computable.class); - this.delegating.performActionWithFormatterDisabled(computable); - verify(this.delegate).performActionWithFormatterDisabled(computable); - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java deleted file mode 100644 index cfe25a39..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.formatter.intellij.codestyle; - -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.ChangedRangesInfo; -import com.intellij.psi.codeStyle.CodeStyleManager; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; - -/** - * Tests for {@link SpringCodeStyleManager}. - * - * @author Phillip Webb - */ -public class SpringCodeStyleManagerTests { - - @Mock - private CodeStyleManager delegate; - - @Mock - private SpringReformatter springReformatter; - - private SpringCodeStyleManager styleManager; - - @Mock - private PsiFile file; - - @BeforeEach - public void setup() { - MockitoAnnotations.initMocks(this); - this.styleManager = new SpringCodeStyleManager(this.delegate, this.springReformatter); - } - - @Test - public void reformatTextWithOffsetWhenCantFormatShouldCallDelegate() { - given(this.springReformatter.canReformat(any())).willReturn(false); - this.styleManager.reformatText(this.file, 10, 20); - verify(this.delegate).reformatText(this.file, 10, 20); - } - - @Test - public void reformatTextWithOffsetWhenCanFormatShouldCallFormatter() { - given(this.springReformatter.canReformat(any())).willReturn(true); - Set ranges = new HashSet<>(Arrays.asList(new TextRange(10, 20))); - this.styleManager.reformatText(this.file, 10, 20); - verify(this.springReformatter).reformat(this.file, ranges); - verifyZeroInteractions(this.delegate); - } - - @Test - public void reformatTextWithRangeWhenCantFormatShouldCallDelegate() { - given(this.springReformatter.canReformat(any())).willReturn(false); - Collection ranges = Arrays.asList(new TextRange(10, 20)); - this.styleManager.reformatText(this.file, ranges); - verify(this.delegate).reformatText(this.file, ranges); - } - - @Test - public void reformatTextWithRangeWhenCanFormatShouldCallFormatter() { - given(this.springReformatter.canReformat(any())).willReturn(true); - Collection ranges = Arrays.asList(new TextRange(10, 20)); - this.styleManager.reformatText(this.file, ranges); - verify(this.springReformatter).reformat(this.file, ranges); - verifyZeroInteractions(this.delegate); - } - - @Test - public void reformatTextWithContextWhenCantFormatShouldCallDelegate() { - given(this.springReformatter.canReformat(any())).willReturn(false); - Collection ranges = Arrays.asList(new TextRange(10, 20)); - this.styleManager.reformatTextWithContext(this.file, ranges); - ArgumentCaptor changedRanges = ArgumentCaptor.forClass(ChangedRangesInfo.class); - verify(this.delegate).reformatTextWithContext(eq(this.file), changedRanges.capture()); - assertThat(changedRanges.getValue().allChangedRanges).containsExactlyElementsOf(ranges); - } - - @Test - public void reformatTextWithContextWhenCanFormatShouldCallFormatter() { - given(this.springReformatter.canReformat(any())).willReturn(true); - Collection ranges = Arrays.asList(new TextRange(10, 20)); - this.styleManager.reformatTextWithContext(this.file, ranges); - verify(this.springReformatter).reformat(this.file, ranges); - verifyZeroInteractions(this.delegate); - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java deleted file mode 100644 index a37ddce7..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.format.formatter.intellij.codestyle; - -import java.util.Arrays; -import java.util.Collection; -import java.util.function.Supplier; - -import com.intellij.openapi.application.Application; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; -import com.intellij.util.IncorrectOperationException; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * Tests for {@link SpringReformatter}. - * - * @author Phillip Webb - */ -public class SpringReformatterTests { - - @Mock - private Project project; - - @Mock - private Application application; - - @Mock - private PsiDocumentManager documentManager; - - private SpringReformatter reformatter; - - @Mock - private PsiFile file; - - @Mock - VirtualFile virtualFile; - - private Collection ranges = Arrays.asList(new TextRange(10, 20)); - - @BeforeEach - public void setup() { - MockitoAnnotations.initMocks(this); - given(this.file.getVirtualFile()).willReturn(this.virtualFile); - this.reformatter = new TestSpringReformatter(() -> this.project, () -> this.application, - () -> this.documentManager); - } - - @Test - public void reformatShouldAssertWriteAccess() throws Exception { - given(this.file.isWritable()).willReturn(true); - this.reformatter.reformat(this.file, this.ranges); - verify(this.application).assertWriteAccessAllowed(); - } - - @Test - public void reformatShouldCommitAllDocuments() throws Exception { - given(this.file.isWritable()).willReturn(true); - this.reformatter.reformat(this.file, this.ranges); - verify(this.documentManager).commitAllDocuments(); - } - - @Test - public void reformatWhenFileIsNotWriteableShouldThrow() throws Exception { - assertThatExceptionOfType(IncorrectOperationException.class) - .isThrownBy(() -> this.reformatter.reformat(this.file, this.ranges)); - } - - @Test - public void reformatShouldReformatDocument() throws Exception { - given(this.file.isWritable()).willReturn(true); - Document document = mock(Document.class); - String text = "public class Hello {}"; - given(document.getText()).willReturn(text); - given(this.documentManager.getDocument(this.file)).willReturn(document); - this.reformatter.reformat(this.file, Arrays.asList(new TextRange(0, text.length()))); - verify(document).replaceString(20, 20, "\n\n"); - verify(this.documentManager).commitDocument(document); - } - - static class TestSpringReformatter extends SpringReformatter { - - TestSpringReformatter(Supplier project, Supplier application, - Supplier documentManager) { - super(project, application, documentManager); - } - - @Override - protected void runWriteCommandAction(Runnable runnable) { - runnable.run(); - } - - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java similarity index 83% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java index 4d9b4b4d..09a8a0d9 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle; +package io.spring.format.formatter.intellij.formatting; import com.intellij.openapi.editor.Document; import org.junit.jupiter.api.Test; @@ -29,10 +29,10 @@ * * @author Phillip Webb */ -public class EclipseDocumentAdapterTests { +class EclipseDocumentAdapterTests { @Test - public void createShouldUseDocumentText() throws Exception { + void createUsesDocumentText() throws Exception { Document intellijDocument = mock(Document.class); given(intellijDocument.getText()).willReturn("hello"); EclipseDocumentAdapter adapter = new EclipseDocumentAdapter(intellijDocument); @@ -40,7 +40,7 @@ public void createShouldUseDocumentText() throws Exception { } @Test - public void replaceShouldApplyToIntellijDocument() throws Exception { + void replaceAppliesToIntellijDocument() throws Exception { Document intellijDocument = mock(Document.class); given(intellijDocument.getText()).willReturn("hello"); EclipseDocumentAdapter adapter = new EclipseDocumentAdapter(intellijDocument); @@ -48,5 +48,4 @@ public void replaceShouldApplyToIntellijDocument() throws Exception { assertThat(adapter.get()).isEqualTo("help"); verify(intellijDocument).replaceString(3, 5, "p"); } - } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java similarity index 81% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java index b281ad5c..873d7fec 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle; +package io.spring.format.formatter.intellij.formatting; import java.util.Arrays; import java.util.List; @@ -33,25 +33,25 @@ public class EclipseRegionAdapterTests { @Test - public void getOffsetShouldReturnStartOffset() throws Exception { + void getOffsetReturnsStartOffset() throws Exception { IRegion region = new EclipseRegionAdapter(new TextRange(10, 20)); assertThat(region.getOffset()).isEqualTo(10); } @Test - public void getLengthShouldReturnLength() throws Exception { + void getLengthReturnsLength() throws Exception { IRegion region = new EclipseRegionAdapter(new TextRange(10, 20)); assertThat(region.getLength()).isEqualTo(10); } @Test - public void asArrayWhenCollectionIsNullShouldReturnEmptyArray() throws Exception { + void asArrayWhenCollectionIsNullReturnsEmptyArray() throws Exception { IRegion[] regions = EclipseRegionAdapter.asArray(null); assertThat(regions).isNotNull().isEmpty(); } @Test - public void asArrayShouldReturnArray() throws Exception { + void asArrayReturnsArray() throws Exception { List ranges = Arrays.asList(new TextRange(10, 20), new TextRange(30, 35)); IRegion[] regions = EclipseRegionAdapter.asArray(ranges); assertThat(regions).hasSize(2); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java new file mode 100644 index 00000000..c49bae99 --- /dev/null +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java @@ -0,0 +1,94 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.format.formatter.intellij.formatting; + +import java.util.Collections; + +import com.intellij.formatting.FormattingContext; +import com.intellij.formatting.service.FormattingService.Feature; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.fileTypes.FileTypeManager; +import com.intellij.openapi.fileTypes.PlainTextFileType; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import org.junit.jupiter.api.Test; + +import io.spring.format.formatter.intellij.state.State; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +/** + * Tests for {@link SpringJavaFormatFormattingService}. + * + * @author Phillip Webb + */ +class SpringJavaFormatFormattingServiceTests { + + private SpringJavaFormatFormattingService service = new SpringJavaFormatFormattingService( + (project, runnable) -> runnable.run()); + + @Test + void getFeaturesReturnsFormatFragments() { + assertThat(this.service.getFeatures()).containsExactly(Feature.FORMAT_FRAGMENTS); + } + + @Test + void canFormatWhenNotJavaReturnsFalse() { + FileType fileType = PlainTextFileType.INSTANCE; + PsiFile file = mockFile(fileType, State.ACTIVE); + assertThat(this.service.canFormat(file)).isFalse(); + } + + @Test + void canFormatWhenJavaFileAndNotActiveReturnsFalse() { + FileType fileType = FileTypeManager.getInstance().getStdFileType("JAVA"); + PsiFile file = mockFile(fileType, State.NOT_ACTIVE); + assertThat(this.service.canFormat(file)).isFalse(); + } + + @Test + void canFormatWhenJavaFileAndActiveReturnsTrue() { + FileType fileType = FileTypeManager.getInstance().getStdFileType("JAVA"); + PsiFile file = mockFile(fileType, State.ACTIVE); + assertThat(this.service.canFormat(file)).isTrue(); + } + + @Test + void formatDocumentAppliesFormatting() { + Document document = mock(Document.class); + String text = "public class Hello {}"; + given(document.getText()).willReturn(text); + FormattingContext formattingContext = mock(FormattingContext.class); + this.service.formatDocument(document, Collections.emptyList(), formattingContext, false, false); + verify(document).replaceString(20, 20, "\n\n"); + } + + private PsiFile mockFile(FileType fileType, State state) { + PsiFile file = mock(PsiFile.class); + given(file.getFileType()).willReturn(fileType); + Project project = mock(Project.class); + given(project.getUserData(any())).willReturn(state); + given(file.getProject()).willReturn(project); + return file; + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 2d474eb4..d49d6851 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -13,9 +13,10 @@ Spring JavaFormat IntelliJ IDEA Runtime ${basedir}/../.. - https://download.jetbrains.com/idea/ideaIC-2021.2.tar.gz - https://github.com/JetBrains/intellij-community/archive/idea/212.4746.92.zip - idea-IC-212.4746.92 + https://download.jetbrains.com/idea/ideaIC-2022.3.2.tar.gz + https://github.com/JetBrains/intellij-community/archive/idea/223.8617.56.zip + ${project.build.directory}/intellij-source + idea-IC-223.8617.56 @@ -66,64 +67,71 @@ - + + dest="${project.build.directory}/intellij"> + + src="${intellij.source.directory}.zip" + dest="${intellij.source.directory}"> - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -134,150 +142,136 @@ maven-install-plugin - install-intellij-annotations - install - false - - install-file - - - ${project.build.directory}/intellij/annotations.jar - io.spring.javaformat.intellij.idea - annotations - ${project.version} - jar - true - - - - install-intellij-platform-api + install-intellij-util install false install-file - ${project.build.directory}/intellij/platform-api.jar - ${project.build.directory}/intellij-source/platform-api-sources.zip + ${project.build.directory}/intellij/util.jar + ${intellij.source.directory}/util-sources.zip io.spring.javaformat.intellij.idea - platform-api + util ${project.version} jar true - install-intellij-platform-impl + install-intellij-util_rt install false install-file - ${project.build.directory}/intellij/platform-impl.jar - ${project.build.directory}/intellij-source/platform-impl-sources.zip + ${project.build.directory}/intellij/util_rt.jar + ${intellij.source.directory}/util_rt-sources.zip io.spring.javaformat.intellij.idea - platform-impl + util_rt ${project.version} jar true - install-intellij-util + install-intellij-app install false install-file - ${project.build.directory}/intellij/util.jar - ${project.build.directory}/intellij-source/util-sources.zip + ${project.build.directory}/intellij/app.jar + ${intellij.source.directory}/app-sources.zip io.spring.javaformat.intellij.idea - util + app ${project.version} jar true - install-intellij-idea + install-intellij-maven install false install-file - ${project.build.directory}/intellij/idea.jar + ${project.build.directory}/intellij/maven.jar + ${intellij.source.directory}/maven-sources.zip io.spring.javaformat.intellij.idea - idea + maven ${project.version} jar true - install-intellij-maven + install-intellij-maven-server install false install-file - ${project.build.directory}/intellij/maven.jar - ${project.build.directory}/intellij-source/maven-sources.zip + ${project.build.directory}/intellij/maven-server.jar + ${intellij.source.directory}/maven-server-sources.zip io.spring.javaformat.intellij.idea - maven + maven-server ${project.version} jar true - install-intellij-maven-server-api + install-intellij-gradle install false install-file - ${project.build.directory}/intellij/maven-server-api.jar + ${project.build.directory}/intellij/gradle.jar + ${intellij.source.directory}/gradle-sources.zip io.spring.javaformat.intellij.idea - maven-server-api + gradle ${project.version} jar true - install-intellij-gradle + install-intellij-gradle-tooling-extension-api install false install-file - ${project.build.directory}/intellij/gradle.jar - ${project.build.directory}/intellij-source/gradle-sources.zip + ${project.build.directory}/intellij/gradle-tooling-extension-api.jar + ${intellij.source.directory}/gradle-tooling-extension-api-sources.zip io.spring.javaformat.intellij.idea - gradle + gradle-tooling-extension-api ${project.version} jar true - install-intellij-gradle-tooling-extension-api + install-intellij-jps-model install false install-file - ${project.build.directory}/intellij/gradle-tooling-extension-api.jar - ${project.build.directory}/intellij-source/gradle-tooling-extension-api-sources.zip + ${project.build.directory}/intellij/jps-model.jar + ${intellij.source.directory}/jps-model-sources.zip io.spring.javaformat.intellij.idea - gradle-tooling-extension-api + jps-model ${project.version} jar true @@ -292,7 +286,7 @@ ${project.build.directory}/intellij/gradle-tooling-extension-impl.jar - ${project.build.directory}/intellij-source/gradle-tooling-extension-impl-sources.zip + ${intellij.source.directory}/gradle-tooling-extension-impl-sources.zip io.spring.javaformat.intellij.idea gradle-tooling-extension-impl ${project.version} From 4adf445a55cf4b13abe804c0d45b84406de4e934 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 7 Feb 2023 21:20:48 -0800 Subject: [PATCH 120/238] Remove old IntelliJ dependency See gh-359 --- .../spring-javaformat-intellij-idea-plugin/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 5b0b83d1..f1743282 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -58,12 +58,6 @@ ${project.version} provided - - io.spring.javaformat.intellij.idea - platform-impl - ${project.version} - provided - io.spring.javaformat.intellij.idea util From 836c1a03ae6a41f82f8ed452e0bc8a9881680364 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 13 Feb 2023 16:36:24 -0800 Subject: [PATCH 121/238] Polish tests --- .../javaformat/eclipse/MessagesTests.java | 4 +-- .../ProjectPropertiesTests.java | 10 +++---- .../ProjectSettingsFileTests.java | 10 +++---- .../ProjectSettingsFilesLocatorTests.java | 28 +++++++++---------- .../ProjectSettingsFilesTests.java | 10 +++---- .../javaformat/gradle/CheckTaskTests.java | 19 +++++++------ .../javaformat/gradle/FormatTaskTests.java | 12 ++++---- .../javaformat/formatter/FileEditTests.java | 14 +++++----- .../formatter/FileFormatterTests.java | 18 +++++++----- .../javaformat/formatter/FormatterTests.java | 6 ++-- .../javaformat/formatter/JavaContainer.java | 4 +-- 11 files changed, 70 insertions(+), 65 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java index 32020b10..2db40cd9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ public class MessagesTests { @Test - public void bindHasCorrectMessage() { + void bindHasCorrectMessage() { String message = NLS.bind(Messages.springFormatSettingsImportError, "reason"); assertThat(message).isEqualTo("Error importing project specific settings: reason"); } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java index 0c7ed16b..3ab28f27 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,7 +44,7 @@ public class ProjectPropertiesTests { public File temp; @Test - public void addFromFolderAddsEclipseProperties() throws IOException { + void addFromFolderAddsEclipseProperties() throws IOException { File file = new File(this.temp, "eclipse.properties"); writeProperties(file, "2018"); ProjectProperties properties = new ProjectProperties(); @@ -53,7 +53,7 @@ public void addFromFolderAddsEclipseProperties() throws IOException { } @Test - public void addFromFolderWhenAlreadySetDoesNotOverwrite() throws IOException { + void addFromFolderWhenAlreadySetDoesNotOverwrite() throws IOException { ProjectProperties properties = new ProjectProperties(); File folder1 = new File(this.temp, "1"); folder1.mkdirs(); @@ -67,7 +67,7 @@ public void addFromFolderWhenAlreadySetDoesNotOverwrite() throws IOException { } @Test - public void addFromEmptyFolderUsesDefaults() throws IOException { + void addFromEmptyFolderUsesDefaults() throws IOException { ProjectProperties properties = new ProjectProperties(); properties.addFromFolder(this.temp); String currentYear = String.valueOf(LocalDate.now().getYear()); @@ -75,7 +75,7 @@ public void addFromEmptyFolderUsesDefaults() throws IOException { } @Test - public void getModifiedContentReplacesCopyrightYear() throws IOException { + void getModifiedContentReplacesCopyrightYear() throws IOException { String year = "2016-2020"; File file = new File(this.temp, "eclipse.properties"); writeProperties(file, year); diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java index 4a0f3128..31bda8ff 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,21 +39,21 @@ public class ProjectSettingsFileTests { public File temp; @Test - public void fromFileAdaptsFile() throws Exception { + void fromFileAdaptsFile() throws Exception { File file = new File(this.temp, "file"); writeText(file, "test"); ProjectSettingsFile projectSettingsFile = ProjectSettingsFile.fromFile(file); assertThat(projectSettingsFile.getName()).isEqualTo(file.getName()); assertThat(projectSettingsFile.getContent(JavaFormatConfig.DEFAULT)) - .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); + .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); } @Test - public void fromClasspathResourceAdaptsResource() throws Exception { + void fromClasspathResourceAdaptsResource() throws Exception { ProjectSettingsFile projectSettingsFile = ProjectSettingsFile.fromClasspath(getClass(), "test.txt"); assertThat(projectSettingsFile.getName()).isEqualTo("test.txt"); assertThat(projectSettingsFile.getContent(JavaFormatConfig.DEFAULT)) - .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); + .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); } private void writeText(File file, String s) throws FileNotFoundException { diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java index ea0afe78..c9261ead 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,23 +45,23 @@ public class ProjectSettingsFilesLocatorTests { public File temp; @Test - public void locateSettingsFilesWhenNoFoldersShouldReturnDefault() throws IOException { + void locateSettingsFilesWhenNoFoldersReturnsDefault() throws IOException { ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); - assertThat(files.iterator()).extracting(ProjectSettingsFile::getName).containsOnly("org.eclipse.jdt.core.prefs", - "org.eclipse.jdt.ui.prefs"); + assertThat(files.iterator()).extracting(ProjectSettingsFile::getName) + .containsOnly("org.eclipse.jdt.core.prefs", "org.eclipse.jdt.ui.prefs"); } @Test - public void locateSettingsFilesOnlyFindPrefs() throws Exception { + void locateSettingsFilesOnlyFindPrefs() throws Exception { writeFile(this.temp, "foo.prefs"); writeFile(this.temp, "bar.notprefs"); ProjectSettingsFiles files = new ProjectSettingsFilesLocator(this.temp).locateSettingsFiles(); - assertThat(files.iterator()).extracting(ProjectSettingsFile::getName).containsOnly("org.eclipse.jdt.core.prefs", - "org.eclipse.jdt.ui.prefs", "foo.prefs"); + assertThat(files.iterator()).extracting(ProjectSettingsFile::getName) + .containsOnly("org.eclipse.jdt.core.prefs", "org.eclipse.jdt.ui.prefs", "foo.prefs"); } @Test - public void locateSettingsFilesWhenMultipleFoldersFindsInEarliest() throws Exception { + void locateSettingsFilesWhenMultipleFoldersFindsInEarliest() throws Exception { File folder1 = new File(this.temp, "1"); writeFile(folder1, "foo.prefs", "foo1"); File folder2 = new File(this.temp, "2"); @@ -71,32 +71,32 @@ public void locateSettingsFilesWhenMultipleFoldersFindsInEarliest() throws Excep Map found = new LinkedHashMap<>(); files.iterator().forEachRemaining((f) -> found.put(f.getName(), f)); assertThat(found.get("foo.prefs").getContent(JavaFormatConfig.DEFAULT)) - .hasSameContentAs(new ByteArrayInputStream("foo1".getBytes())); + .hasSameContentAs(new ByteArrayInputStream("foo1".getBytes())); assertThat(found.get("org.eclipse.jdt.core.prefs").getContent(JavaFormatConfig.DEFAULT)) - .hasSameContentAs(new ByteArrayInputStream("core2".getBytes())); + .hasSameContentAs(new ByteArrayInputStream("core2".getBytes())); } @Test - public void jdtCorePrefsFormatterWhenDefaultShouldUseTabs() throws IOException { + void jdtCorePrefsFormatterWhenDefaultUsesTabs() throws IOException { ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); ProjectSettingsFile file = get(files, "org.eclipse.jdt.core.prefs"); try (InputStream content = file.getContent(JavaFormatConfig.DEFAULT)) { Properties properties = new Properties(); properties.load(content); assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) - .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk11.tabs"); + .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk11.tabs"); } } @Test - public void jdtCorePrefsFormatterWhenSpacesShouldUseSpaces() throws IOException { + void jdtCorePrefsFormatterWhenSpacesUsesSpaces() throws IOException { ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); ProjectSettingsFile file = get(files, "org.eclipse.jdt.core.prefs"); try (InputStream content = file.getContent(JavaFormatConfig.of(JavaBaseline.V8, IndentationStyle.SPACES))) { Properties properties = new Properties(); properties.load(content); assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) - .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk8.spaces"); + .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk8.spaces"); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java index cdc6b297..a75b92b1 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,14 +52,14 @@ public class ProjectSettingsFilesTests { public File temp; @Test - public void iteratorIteratesFiles() throws Exception { + void iteratorIteratesFiles() throws Exception { ProjectSettingsFile file = ProjectSettingsFile.fromFile(new File(this.temp, "file.prefs")); ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); assertThat(files).containsOnly(file); } @Test - public void applyToProjectWithoutFileCopiesToDotSettings() throws Exception { + void applyToProjectWithoutFileCopiesToDotSettings() throws Exception { ProjectSettingsFile file = createPrefsFile(); ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); IProject project = mock(IProject.class); @@ -78,7 +78,7 @@ public void applyToProjectWithoutFileCopiesToDotSettings() throws Exception { } @Test - public void applyToProjectWithFileMergesToDotSettings() throws Exception { + void applyToProjectWithFileMergesToDotSettings() throws Exception { ProjectSettingsFile file = createPrefsFile(); ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); IProject project = mock(IProject.class); @@ -87,7 +87,7 @@ public void applyToProjectWithFileMergesToDotSettings() throws Exception { given(project.getFile(".settings/foo.prefs")).willReturn(projectFile); given(projectFile.exists()).willReturn(true); given(projectFile.getContents(true)) - .willReturn(new ByteArrayInputStream("a=b\n".getBytes(StandardCharsets.UTF_8))); + .willReturn(new ByteArrayInputStream("a=b\n".getBytes(StandardCharsets.UTF_8))); ByteArrayOutputStream out = new ByteArrayOutputStream(); will((invocation) -> { invocation.getArgument(0, InputStream.class).transferTo(out); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index 6e38db7b..a5554177 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,13 +52,13 @@ public class CheckTaskTests { public File temp; @Test - public void checkOk() throws IOException { + void checkOk() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/check-ok").build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @Test - public void whenFirstInvocationSucceedsThenSecondInvocationIsUpToDate() throws IOException { + void whenFirstInvocationSucceedsThenSecondInvocationIsUpToDate() throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-ok"); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -67,7 +67,7 @@ public void whenFirstInvocationSucceedsThenSecondInvocationIsUpToDate() throws I } @Test - public void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSucceeds() throws IOException { + void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSucceeds() throws IOException { copyFolder(new File("src/test/resources/check-ok").toPath(), this.temp.toPath()); GradleBuild gradleBuild = this.gradleBuild.source(this.temp); BuildResult result = gradleBuild.build("check"); @@ -79,7 +79,7 @@ public void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSu } @Test - public void whenFirstInvocationSucceedsAndIndentationStyleIsChangedThenSecondInvocationFails() throws IOException { + void whenFirstInvocationSucceedsAndIndentationStyleIsChangedThenSecondInvocationFails() throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-ok"); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -90,7 +90,7 @@ public void whenFirstInvocationSucceedsAndIndentationStyleIsChangedThenSecondInv } @Test - public void whenFirstInvocationFailsAndIndentationStyleIsChangedThenSecondInvocationSucceeds() throws IOException { + void whenFirstInvocationFailsAndIndentationStyleIsChangedThenSecondInvocationSucceeds() throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-spaces"); BuildResult result = gradleBuild.buildAndFail("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); @@ -101,7 +101,8 @@ public void whenFirstInvocationFailsAndIndentationStyleIsChangedThenSecondInvoca } @Test - public void whenFirstInvocationSucceedsAndJavaBaselineIsChangedThenSecondInvocationSucceedsAndThirdIsUpToDate() throws IOException { + void whenFirstInvocationSucceedsAndJavaBaselineIsChangedThenSecondInvocationSucceedsAndThirdIsUpToDate() + throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-ok"); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -114,13 +115,13 @@ public void whenFirstInvocationSucceedsAndJavaBaselineIsChangedThenSecondInvocat } @Test - public void checkBad() throws IOException { + void checkBad() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/check-bad").buildAndFail("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); } @Test - public void whenFirstInvocationFailsThenSecondInvocationFails() throws IOException { + void whenFirstInvocationFailsThenSecondInvocationFails() throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-bad"); BuildResult result = gradleBuild.buildAndFail("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index 023b4d0d..ed1648cc 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,7 +44,7 @@ public class FormatTaskTests { private final GradleBuild gradleBuild = new GradleBuild(); @Test - public void checkOk() throws IOException { + void checkOk() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/format").build("format"); assertThat(result.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File formattedFile = new File(this.gradleBuild.getProjectDir(), "src/main/java/simple/Simple.java"); @@ -53,7 +53,7 @@ public void checkOk() throws IOException { } @Test - public void checkUpToDate() throws IOException { + void checkUpToDate() throws IOException { GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); // Format that changes files assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -64,7 +64,7 @@ public void checkUpToDate() throws IOException { } @Test - public void notUpToDateWhenJavaBaselineChanges() throws IOException { + void notUpToDateWhenJavaBaselineChanges() throws IOException { GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); // Format that changes files assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -78,7 +78,7 @@ public void notUpToDateWhenJavaBaselineChanges() throws IOException { } @Test - public void notUpToDateWhenIndentationStyleChanges() throws IOException { + void notUpToDateWhenIndentationStyleChanges() throws IOException { GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); // Format that changes files assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -92,7 +92,7 @@ public void notUpToDateWhenIndentationStyleChanges() throws IOException { } @Test - public void checkSpacesOk() throws IOException { + void checkSpacesOk() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/format-spaces").build("format"); assertThat(result.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File formattedFile = new File(this.gradleBuild.getProjectDir(), "src/main/java/simple/Simple.java"); diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java index 59c6d57a..79570f7d 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -51,7 +51,7 @@ public class FileEditTests { private FileEdit fileEdit; @BeforeEach - public void setup() throws IOException { + void setup() throws IOException { this.source = new File(this.temp, "source.txt"); this.expected = new File(this.temp, "expected.txt"); Files.copy(new File("src/test/resources/source/javadoc-top.txt").toPath(), this.source.toPath(), @@ -64,17 +64,17 @@ public void setup() throws IOException { } @Test - public void getFileShouldReturnFile() throws Exception { + void getFileReturnsFile() throws Exception { assertThat(this.fileEdit.getFile()).isEqualTo(this.source); } @Test - public void hasEditsWhenHasEditsShouldReturnTrue() throws Exception { + void hasEditsWhenHasEditsReturnsTrue() throws Exception { assertThat(this.fileEdit.hasEdits()).isTrue(); } @Test - public void hasEditsWhenHasNoEditsShouldReturnFalse() throws Exception { + void hasEditsWhenHasNoEditsReturnsFalse() throws Exception { String content = read(this.expected); this.textEdit = new Formatter().format(content); this.fileEdit = new FileEdit(this.source, UTF_8, content, this.textEdit); @@ -82,7 +82,7 @@ public void hasEditsWhenHasNoEditsShouldReturnFalse() throws Exception { } @Test - public void saveShouldSaveContent() throws Exception { + void saveSavesContent() throws Exception { String expected = read(this.expected); assertThat(read(this.source)).isNotEqualTo(expected); this.fileEdit.save(); @@ -90,7 +90,7 @@ public void saveShouldSaveContent() throws Exception { } @Test - public void getFormattedContentShouldReturnFormattedContent() throws Exception { + void getFormattedContentReturnsFormattedContent() throws Exception { String expected = read(this.expected); assertThat(this.fileEdit.getFormattedContent()).isEqualTo(expected); } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java index dc49c4f6..5c43641b 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,23 +36,27 @@ public class FileFormatterTests extends AbstractFormatterTests { @ParameterizedTest @MethodSource("items") - public void formatFilesFromIteratorShouldFormatFile(Item item) throws Exception { + void formatFilesFromIteratorFormatsFile(Item item) throws Exception { FileEdit edit = new FileFormatter(item.getConfig()) - .formatFiles(Arrays.asList(item.getSource()), StandardCharsets.UTF_8).findFirst().get(); + .formatFiles(Arrays.asList(item.getSource()), StandardCharsets.UTF_8) + .findFirst() + .get(); assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); } @ParameterizedTest @MethodSource("items") - public void formatFilesFromStreamShouldFormatFile(Item item) throws Exception { + void formatFilesFromStreamFormatsFile(Item item) throws Exception { FileEdit edit = new FileFormatter(item.getConfig()) - .formatFiles(Arrays.asList(item.getSource()).stream(), StandardCharsets.UTF_8).findFirst().get(); + .formatFiles(Arrays.asList(item.getSource()).stream(), StandardCharsets.UTF_8) + .findFirst() + .get(); assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); } @ParameterizedTest @MethodSource("items") - public void formatFileShouldFormatFile(Item item) throws Exception { + void formatFileFormatsFile(Item item) throws Exception { File source = item.getSource(); FileEdit edit = new FileFormatter(item.getConfig()).formatFile(source, StandardCharsets.UTF_8); String formattedContent = edit.getFormattedContent(); @@ -68,7 +72,7 @@ public void formatFileShouldFormatFile(Item item) throws Exception { assertThat(formattedContent).isEqualTo(expected); } - public static Item[] items() { + static Item[] items() { return items(null); } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java index b847db7a..d6af9c71 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java @@ -33,7 +33,7 @@ public class FormatterTests extends AbstractFormatterTests { @ParameterizedTest @MethodSource("items") - public void format(Item item) throws Exception { + void format(Item item) throws Exception { String sourceContent = read(item.getSource()); String expectedContent = read(item.getExpected()); String formattedContent = format(item.getConfig(), sourceContent); @@ -44,7 +44,7 @@ public void format(Item item) throws Exception { print("Got", formattedContent); System.out.println("========================================"); assertThat(formattedContent).isEqualTo(expectedContent) - .describedAs("Formatted content does not match for " + item.getSource()); + .describedAs("Formatted content does not match for " + item.getSource()); } } @@ -55,7 +55,7 @@ private String format(JavaFormatConfig config, String sourceContent) throws Exce return document.get(); } - public static Item[] items() { + static Item[] items() { return items("FormatterTests-expected"); } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java index 9632f95e..9eacfbc6 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ */ public class JavaContainer extends GenericContainer { - public JavaContainer(String version) { + JavaContainer(String version) { super("bellsoft/liberica-openjdk-debian:" + version); } From 5b2036fd857a9eae51bb2cf7ed38dde4fb71d536 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 19:23:46 -0800 Subject: [PATCH 122/238] Polish CONTRIBUTING.adoc --- CONTRIBUTING.adoc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 055b745e..93f7b6d3 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -108,6 +108,7 @@ image::.github/images/setup-idea-dependency.png[Setup IntelliJ IDEA Dependencies === Setting up IntelliJ IDEA Plugin Development + ==== Download Images To develop the `spring-javaformat-intellij-idea-plugin` module, you need an IntelliJ IDEA application on your local machine. @@ -185,7 +186,14 @@ Under `spring-javaformat` the following projects are defined: * `spring-javaformat-checkstyle` - The checkstyle plugin * `spring-javaformat-formatter` - The main formatter code -* `spring-javaformat-formatter-eclipse` - The eclipse formatter (repackaged and slightly adapted) +* `spring-javaformat-formatter-test-support` - Support classes for tests +* `spring-javaformat-formatter-tests` - Tests for the formatter (external so that they we can test Java 8 and 11) +* `spring-javaformat-formatter-shader` - Shader support classes +* `spring-javaformat-formatter-shaded` - A shaded version of the formatter with all dependencies included +* `spring-javaformat-formatter-eclipse-jdk8` - The eclipse JDK 8 formatter (repackaged and slightly adapted) +* `spring-javaformat-formatter-eclipse-jdk11` - The eclipse JDK 11 formatter (repackaged and slightly adapted) +* `spring-javaformat-formatter-eclipse-jdt-jdk8` - The eclipse JDT import for JDK 8 +* `spring-javaformat-formatter-eclipse-jdt-jdk11` - The eclipse JDT import for JDK 8 * `spring-javaformat-formatter-eclipse-rewriter` - Internal utility used to modify eclipse code * `spring-javaformat-formatter-eclipse-runtime` - Eclipse runtime JAR for use when running outside of Eclipse From 2a1f20391d491fa731a1a10d6716fbcf58f5fbed Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 18:21:24 -0800 Subject: [PATCH 123/238] Add StreamsFormatter Add a new `StreamsFormatter` class which is similar to `FileFormatter` but designed to work with `java.io` streams. Closes gh-361 --- .../formatter/StreamsEditTests.java | 114 ++++++++++++++++ .../formatter/StreamsFormatterTests.java | 68 ++++++++++ .../io/spring/javaformat/formatter/Edit.java | 59 +++++++++ .../spring/javaformat/formatter/FileEdit.java | 36 ++--- .../javaformat/formatter/FileFormatter.java | 18 +-- .../javaformat/formatter/StreamsEdit.java | 73 +++++++++++ .../formatter/StreamsFormatter.java | 124 ++++++++++++++++++ 7 files changed, 455 insertions(+), 37 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java new file mode 100644 index 00000000..be73afcc --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java @@ -0,0 +1,114 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; + +import org.eclipse.text.edits.TextEdit; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link StreamsEdit}. + * + * @author Phillip Webb + */ +public class StreamsEditTests { + + private static final Charset UTF_8 = StandardCharsets.UTF_8; + + @TempDir + public File temp; + + private File source; + + private File expected; + + private TextEdit textEdit; + + private StreamsEdit streamsEdit; + + @BeforeEach + void setup() throws IOException { + this.source = new File(this.temp, "source.txt"); + this.expected = new File(this.temp, "expected.txt"); + Files.copy(new File("src/test/resources/source/javadoc-top.txt").toPath(), this.source.toPath(), + StandardCopyOption.REPLACE_EXISTING); + Files.copy(new File("src/test/resources/expected/javadoc-top.txt").toPath(), this.expected.toPath(), + StandardCopyOption.REPLACE_EXISTING); + String content = read(this.source); + this.textEdit = new Formatter().format(content); + this.streamsEdit = new StreamsEdit(content, this.textEdit); + } + + @Test + void hasEditsWhenHasEditsReturnsTrue() throws Exception { + assertThat(this.streamsEdit.hasEdits()).isTrue(); + } + + @Test + void hasEditsWhenHasNoEditsReturnsFalse() throws Exception { + String content = read(this.expected); + this.textEdit = new Formatter().format(content); + this.streamsEdit = new StreamsEdit(content, this.textEdit); + assertThat(this.streamsEdit.hasEdits()).isFalse(); + } + + @Test + void writeToOutputStreamWritesContent() throws Exception { + String expected = read(this.expected); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + this.streamsEdit.writeTo(outputStream); + assertThat(outputStream.toByteArray()).isEqualTo(expected.getBytes(UTF_8)); + } + + @Test + void writeToOutputStreamWithCharsetWritesContent() throws IOException { + String expected = read(this.expected); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + this.streamsEdit.writeTo(outputStream, UTF_8); + assertThat(outputStream.toByteArray()).isEqualTo(expected.getBytes(UTF_8)); + } + + @Test + void writeToAppendableWritesContent() throws IOException { + String expected = read(this.expected); + StringBuilder output = new StringBuilder(); + this.streamsEdit.writeTo(output); + assertThat(output.toString()).isEqualTo(expected); + } + + @Test + void getFormattedContentReturnsFormattedContent() throws Exception { + String expected = read(this.expected); + assertThat(this.streamsEdit.getFormattedContent()).isEqualTo(expected); + } + + private String read(File file) throws IOException { + return new String(Files.readAllBytes(file.toPath()), UTF_8); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java new file mode 100644 index 00000000..34477c47 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java @@ -0,0 +1,68 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link StreamsFormatter}. + * + * @author Phillip Webb + */ +public class StreamsFormatterTests extends AbstractFormatterTests { + + @ParameterizedTest + @MethodSource("items") + void formatInputStreamFormatsFile(Item item) throws Exception { + try (InputStream inputStream = new FileInputStream(item.getSource())) { + StreamsEdit edit = new StreamsFormatter(item.getConfig()).format(inputStream); + assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); + } + } + + @ParameterizedTest + @MethodSource("items") + void formatInputStreamWithCharsetFormatsFile(Item item) throws Exception { + try (InputStream inputStream = new FileInputStream(item.getSource())) { + StreamsEdit edit = new StreamsFormatter(item.getConfig()).format(inputStream, StandardCharsets.UTF_8); + assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); + } + } + + @ParameterizedTest + @MethodSource("items") + void formatReaderFormatsFile(Item item) throws Exception { + try (Reader reader = new InputStreamReader(new FileInputStream(item.getSource()))) { + StreamsEdit edit = new StreamsFormatter(item.getConfig()).format(reader); + assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); + } + } + + static Item[] items() { + return items(null); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java new file mode 100644 index 00000000..7dbf18d8 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java @@ -0,0 +1,59 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter; + +import java.util.regex.Pattern; + +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.text.edits.TextEdit; + +/** + * Base class for edits that can be applied to content. + * + * @author Phillip Webb + */ +public abstract class Edit { + + private static final Pattern TRAILING_WHITESPACE = Pattern.compile(" +$", Pattern.MULTILINE); + + private final String originalContent; + + private final TextEdit textEdit; + + protected Edit(String originalContent, TextEdit textEdit) { + super(); + this.originalContent = originalContent; + this.textEdit = textEdit; + } + + public boolean hasEdits() { + return (this.textEdit.hasChildren() || this.textEdit.getLength() > 0); + } + + protected String getFormattedContent() throws Exception { + IDocument document = new Document(this.originalContent); + this.textEdit.apply(document); + String formattedContent = document.get(); + return trimTrailingWhitespace(formattedContent); + } + + private String trimTrailingWhitespace(String content) { + return TRAILING_WHITESPACE.matcher(content).replaceAll(""); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java index 78604658..f7252a23 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,44 +20,30 @@ import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.StandardOpenOption; -import java.util.regex.Pattern; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; import org.eclipse.text.edits.TextEdit; /** - * An Edit that can be applied to a File. + * An {@link Edit} that can be applied to a {@link File}. * * @author Phillip Webb */ -public class FileEdit { - - private static final Pattern TRAILING_WHITESPACE = Pattern.compile(" +$", Pattern.MULTILINE); +public class FileEdit extends Edit { private final File file; private final Charset encoding; - private final String originalContent; - - private final TextEdit edit; - - FileEdit(File file, Charset encoding, String originalContent, TextEdit edit) { + FileEdit(File file, Charset encoding, String originalContent, TextEdit textEdit) { + super(originalContent, textEdit); this.file = file; this.encoding = encoding; - this.originalContent = originalContent; - this.edit = edit; } public File getFile() { return this.file; } - public boolean hasEdits() { - return (this.edit.hasChildren() || this.edit.getLength() > 0); - } - public void save() { try { String formattedContent = getFormattedContent(); @@ -69,20 +55,14 @@ public void save() { } } - public String getFormattedContent() throws Exception { + @Override + protected String getFormattedContent() throws Exception { try { - IDocument document = new Document(this.originalContent); - this.edit.apply(document); - String formattedContent = document.get(); - return trimTrailingWhitespace(formattedContent); + return super.getFormattedContent(); } catch (Exception ex) { throw FileFormatterException.wrap(this.file, ex); } } - private String trimTrailingWhitespace(String content) { - return TRAILING_WHITESPACE.matcher(content).replaceAll(""); - } - } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java index fe93fe9a..7f6fbf34 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ public FileFormatter(Formatter formatter) { * instances. * @param files the files to format * @param encoding the source encoding - * @return a stream of formatted files that have edits + * @return a stream of file edits */ public Stream formatFiles(Iterable files, Charset encoding) { return formatFiles(files, encoding, Formatter.DEFAULT_LINE_SEPARATOR); @@ -67,7 +67,7 @@ public Stream formatFiles(Iterable files, Charset encoding) { * @param files the files to format * @param encoding the source encoding * @param lineSeparator the line separator - * @return a stream of formatted files that have edits + * @return a stream of file edits */ public Stream formatFiles(Iterable files, Charset encoding, String lineSeparator) { return formatFiles(StreamSupport.stream(files.spliterator(), false), encoding, lineSeparator); @@ -78,7 +78,7 @@ public Stream formatFiles(Iterable files, Charset encoding, Stri * instances. * @param files the files to format * @param encoding the source encoding - * @return a stream of formatted files that have edits + * @return a stream of file edits */ public Stream formatFiles(Stream files, Charset encoding) { return formatFiles(files, encoding, Formatter.DEFAULT_LINE_SEPARATOR); @@ -90,28 +90,28 @@ public Stream formatFiles(Stream files, Charset encoding) { * @param files the files to format * @param encoding the source encoding * @param lineSeparator the line separator - * @return a stream of formatted files that have edits + * @return a stream of file edits */ public Stream formatFiles(Stream files, Charset encoding, String lineSeparator) { return files.map((file) -> formatFile(file, encoding, lineSeparator)); } /** - * Format the the given source file and return a {@link FileEdit} instance. + * Format the given source file and return a {@link FileEdit} instance. * @param file the file to format * @param encoding the source encoding - * @return a formatted file + * @return a file edit */ public FileEdit formatFile(File file, Charset encoding) { return formatFile(file, encoding, Formatter.DEFAULT_LINE_SEPARATOR); } /** - * Format the the given source file and return a {@link FileEdit} instance. + * Format the given source file and return a {@link FileEdit} instance. * @param file the file to format * @param encoding the source encoding * @param lineSeparator the line separator - * @return a formatted file + * @return a file edit */ public FileEdit formatFile(File file, Charset encoding, String lineSeparator) { try { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java new file mode 100644 index 00000000..168d40b6 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java @@ -0,0 +1,73 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +import org.eclipse.text.edits.TextEdit; + +/** + * An {@link Edit} that can be applied to IO Streams. + * + * @author Phillip Webb + */ +public class StreamsEdit extends Edit { + + StreamsEdit(String originalContent, TextEdit textEdit) { + super(originalContent, textEdit); + } + + /** + * Write the edited content to the given {@link OutputStream}. + * @param outputStream the output stream where formatted content should be written + */ + public void writeTo(OutputStream outputStream) { + writeTo(outputStream, StandardCharsets.UTF_8); + } + + /** + * Write the edited content to the given {@link OutputStream}. + * @param outputStream the output stream where formatted content should be written + * @param encoding the source encoding + */ + public void writeTo(OutputStream outputStream, Charset encoding) { + try (OutputStreamWriter writer = new OutputStreamWriter(outputStream, encoding)) { + writeTo(writer); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + /** + * Write the edited content to the given {@link Appendable}. + * @param appendable the appendable where formatted content should be written + */ + public void writeTo(Appendable appendable) { + try { + appendable.append(getFormattedContent()); + } + catch (Exception ex) { + throw new RuntimeException(ex); + } + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java new file mode 100644 index 00000000..6f03d89c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java @@ -0,0 +1,124 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.javaformat.formatter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Optional; + +import org.eclipse.text.edits.TextEdit; + +import io.spring.javaformat.config.JavaFormatConfig; + +/** + * A code formatter designed to work with IO streams. + * + * @author Phillip Webb + * @see Formatter + */ +public class StreamsFormatter { + + private final Formatter formatter; + + public StreamsFormatter() { + this(new Formatter()); + } + + public StreamsFormatter(JavaFormatConfig javaFormatConfig) { + this(new Formatter(javaFormatConfig)); + } + + public StreamsFormatter(Formatter formatter) { + Optional.ofNullable(formatter).orElseThrow(() -> new IllegalArgumentException("Formatter must not be null")); + this.formatter = formatter; + } + + /** + * Format content from the given source {@link InputStream} and return a + * {@link StreamsEdit} instance. + * @param inputStream the source input stream + * @return a streams edit + */ + public StreamsEdit format(InputStream inputStream) { + return format(inputStream, StandardCharsets.UTF_8); + } + + /** + * Format content from the given source {@link InputStream} and return a + * {@link StreamsEdit} instance. + * @param inputStream the source input stream + * @param encoding the source encoding + * @return a streams edit + */ + public StreamsEdit format(InputStream inputStream, Charset encoding) { + return format(inputStream, encoding, Formatter.DEFAULT_LINE_SEPARATOR); + } + + /** + * Format content from the given source {@link InputStream} and return a + * {@link StreamsEdit} instance. + * @param inputStream the source input stream + * @param encoding the source encoding + * @param lineSeparator the line separator + * @return a streams edit + */ + public StreamsEdit format(InputStream inputStream, Charset encoding, String lineSeparator) { + return format(new InputStreamReader(inputStream, encoding), lineSeparator); + } + + /** + * Format content from the given source {@link Reader} and return a + * {@link StreamsEdit} instance. + * @param reader the source reader + * @return a streams edit + */ + public StreamsEdit format(Reader reader) { + return format(reader, Formatter.DEFAULT_LINE_SEPARATOR); + } + + /** + * Format content from the given source {@link Reader} and return a + * {@link StreamsEdit} instance. + * @param reader the source reader + * @param lineSeparator the line separator + * @return a streams edit + */ + public StreamsEdit format(Reader reader, String lineSeparator) { + try { + String content = readContent(reader); + TextEdit edit = this.formatter.format(content, lineSeparator); + return new StreamsEdit(content, edit); + } + catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + private String readContent(Reader reader) throws IOException { + StringBuilder result = new StringBuilder(); + char[] buffer = new char[2048]; + int numChars; + while ((numChars = reader.read(buffer)) >= 0) { + result.append(buffer, 0, numChars); + } + return result.toString(); + } +} From c7fa27d7dc5dca23b686468be981140d97040414 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 19:39:43 -0800 Subject: [PATCH 124/238] Polish README.adoc --- README.adoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.adoc b/README.adoc index 5ffd15a1..0ec03fe8 100644 --- a/README.adoc +++ b/README.adoc @@ -222,6 +222,7 @@ https://repo1.maven.org/maven2/io/spring/javaformat/io.spring.javaformat.eclipse or use the https://repo.spring.io/javaformat-eclipse-update-site/[update site]. + === IntelliJ IDEA The IntelliJ IDEA plugin provides custom formatter support for IntelliJ IDEA. The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script or if a `.springjavaformatconfig` file. @@ -240,6 +241,8 @@ The plugin is automatically enabled when one or more of the following conditions * For a Maven-based project, `spring-javaformat-maven-plugin` plugin is defined in `pom.xml` * For a Gradle-based project, `io.spring.javaformat` plugin is applied + + ==== CheckStyle-IDEA plugin The https://plugins.jetbrains.com/plugin/1065-checkstyle-idea[CheckStyle-IDEA plugin] provides Checkstyle integration for IntelliJ IDEA. From 6bfc715f401a9a7de7c7c930c57df00e44444a46 Mon Sep 17 00:00:00 2001 From: "Howard.Zuo" Date: Sat, 20 Jul 2019 18:51:49 +0800 Subject: [PATCH 125/238] Create Visual Studio Code extension Add Visual Studio Code extension to apply spring-javaformat conventions. See gh-142 --- .gitignore | 8 + README.adoc | 6 + spring-javaformat-vscode/README.md | 19 + spring-javaformat-vscode/format.gif | Bin 0 -> 1830053 bytes spring-javaformat-vscode/pom.xml | 20 + .../.vscode/launch.json | 11 + .../.vscode/settings.json | 4 + .../spring-javaformat-format-service/pom.xml | 121 ++++++ .../format/FormatterWebApplication.java | 35 ++ .../format/controllers/FormatController.java | 42 ++ .../format/controllers/HealthController.java | 43 ++ .../spring/format/request/FormatRequest.java | 36 ++ .../spring/format/services/HealthService.java | 50 +++ .../io/spring/format/tools/FormatContent.java | 62 +++ .../main/resources/config/application.yaml | 5 + .../spring-javaformat/.prettierrc | 6 + .../spring-javaformat/.vscode/extensions.json | 7 + .../spring-javaformat/.vscode/launch.json | 36 ++ .../spring-javaformat/.vscode/settings.json | 15 + .../spring-javaformat/.vscode/tasks.json | 20 + .../spring-javaformat/.vscodeignore | 10 + .../spring-javaformat/README.md | 6 + .../spring-javaformat/package.json | 42 ++ .../src/SpringJavaFormatter.ts | 28 ++ .../spring-javaformat/src/extension.ts | 31 ++ .../src/formatters/JavaFormatter.ts | 10 + .../src/formatters/MarkdownFormatter.ts | 28 ++ .../src/services/FormatService.ts | 103 +++++ .../spring-javaformat/tsconfig.json | 17 + .../spring-javaformat/tslint.json | 15 + .../spring-javaformat/yarn.lock | 388 ++++++++++++++++++ 31 files changed, 1224 insertions(+) create mode 100644 spring-javaformat-vscode/README.md create mode 100644 spring-javaformat-vscode/format.gif create mode 100644 spring-javaformat-vscode/pom.xml create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/pom.xml create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml create mode 100644 spring-javaformat-vscode/spring-javaformat/.prettierrc create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/launch.json create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/settings.json create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscodeignore create mode 100644 spring-javaformat-vscode/spring-javaformat/README.md create mode 100644 spring-javaformat-vscode/spring-javaformat/package.json create mode 100644 spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/src/extension.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/tsconfig.json create mode 100644 spring-javaformat-vscode/spring-javaformat/tslint.json create mode 100644 spring-javaformat-vscode/spring-javaformat/yarn.lock diff --git a/.gitignore b/.gitignore index ab75a6c8..20cd4cfc 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,11 @@ spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/bin build.log pid .factorypath + +# npm +node_modules/ + +# vscode +spring-javaformat-vscode/spring-javaformat/out/ +spring-javaformat-vscode/spring-javaformat/runtime/ +*.vsix diff --git a/README.adoc b/README.adoc index 0ec03fe8..38658a8a 100644 --- a/README.adoc +++ b/README.adoc @@ -268,6 +268,12 @@ Once the configuration file is created, configure your IDE to use it: +=== Visual Studio Code +The vscode extension provides custom formatter support for Visual Studio Code. +The extension is automatically activated whenever a `.java` file is opened. And it requires a few seconds to warm-up while you start with the first workspace. + + + === About the Conventions Most of the coding conventions and style comes from the Spring Framework and Spring Boot projects. Spring Framework manually formats code, where as Spring Boot uses automatic formatting. diff --git a/spring-javaformat-vscode/README.md b/spring-javaformat-vscode/README.md new file mode 100644 index 00000000..e6dea6c9 --- /dev/null +++ b/spring-javaformat-vscode/README.md @@ -0,0 +1,19 @@ +# spring-javaformat-vscode + +`spring-javaformat` extension for visual studio code. + +![](./format.gif) + +## Prerequisites + +* Install [node.js](https://nodejs.org/en/download/) +* Install [yarn](https://yarnpkg.com/en/docs/install) +* Install [vsce](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#vsce) + +## Generate extension + +Just `mvn clean package` + + +> `spring-javaformat-1.0.0.vsix` will be generated there + diff --git a/spring-javaformat-vscode/format.gif b/spring-javaformat-vscode/format.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd1fdacd84d888b9401a0a0d286fe2b44f072578 GIT binary patch literal 1830053 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�qqOu0ZwO~N;|2!N{!Y_&qA`Ok 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