diff --git a/CHANGES.md b/CHANGES.md index 22f14f2137..0e44b999e2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,6 +19,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * Bump default `shfmt` version to latest `3.7.0` -> `3.8.0`. ([#2050](https://github.com/diffplug/spotless/pull/2050)) * Bump default `ktlint` version to latest `1.1.1` -> `1.2.1`. ([#2057](https://github.com/diffplug/spotless/pull/2057)) * Bump default `sortpom` version to latest `3.4.0` -> `3.4.1`. ([#2078](https://github.com/diffplug/spotless/pull/2078)) +* Bump default `sortpom` version to latest `3.4.1` -> `4.0.0` and support versions back to `3.2.1`. ([#2115](https://github.com/diffplug/spotless/pull/2115)) ### Removed * **BREAKING** Remove `JarState.getMavenCoordinate(String prefix)`. ([#1945](https://github.com/diffplug/spotless/pull/1945)) * **BREAKING** Replace `PipeStepPair` with `FenceStep`. ([#1954](https://github.com/diffplug/spotless/pull/1954)) diff --git a/lib/build.gradle b/lib/build.gradle index 9a1e1ac3b9..cbcbe69d37 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -128,7 +128,7 @@ dependencies { // scalafmt scalafmtCompileOnly "org.scalameta:scalafmt-core_2.13:3.7.3" // sortPom - sortPomCompileOnly 'com.github.ekryd.sortpom:sortpom-sorter:3.4.1' + sortPomCompileOnly 'com.github.ekryd.sortpom:sortpom-sorter:4.0.0' sortPomCompileOnly 'org.slf4j:slf4j-api:2.0.12' // zjsonPatch zjsonPatchCompileOnly 'com.flipkart.zjsonpatch:zjsonpatch:0.4.14' diff --git a/lib/src/main/java/com/diffplug/spotless/pom/SortPomCfg.java b/lib/src/main/java/com/diffplug/spotless/pom/SortPomCfg.java index 58e3f9d45a..656b6f16f4 100644 --- a/lib/src/main/java/com/diffplug/spotless/pom/SortPomCfg.java +++ b/lib/src/main/java/com/diffplug/spotless/pom/SortPomCfg.java @@ -21,7 +21,7 @@ public class SortPomCfg implements Serializable { private static final long serialVersionUID = 1L; - public String version = "3.4.1"; + public String version = "4.0.0"; public String encoding = "UTF-8"; @@ -41,6 +41,8 @@ public class SortPomCfg implements Serializable { public boolean indentSchemaLocation = false; + public String indentAttribute = null; + public String predefinedSortOrder = "recommended_2008_06"; public String sortOrderFile = null; diff --git a/lib/src/sortPom/java/com/diffplug/spotless/glue/pom/SortPomFormatterFunc.java b/lib/src/sortPom/java/com/diffplug/spotless/glue/pom/SortPomFormatterFunc.java index 57b96d70c7..d1ab469af0 100644 --- a/lib/src/sortPom/java/com/diffplug/spotless/glue/pom/SortPomFormatterFunc.java +++ b/lib/src/sortPom/java/com/diffplug/spotless/glue/pom/SortPomFormatterFunc.java @@ -16,6 +16,7 @@ package com.diffplug.spotless.glue.pom; import java.io.*; +import java.lang.reflect.Method; import java.nio.charset.Charset; import java.nio.file.Files; @@ -46,17 +47,45 @@ public String apply(String input) throws Exception { writer.write(input); } SortPomImpl sortPom = new SortPomImpl(); - sortPom.setup(new MySortPomLogger(), PluginParameters.builder() + PluginParameters.Builder builder = PluginParameters.builder() .setPomFile(pom) .setFileOutput(false, null, null, false) - .setEncoding(cfg.encoding) - .setFormatting(cfg.lineSeparator, cfg.expandEmptyElements, cfg.spaceBeforeCloseEmptyElement, cfg.keepBlankLines, cfg.endWithNewline) - .setIndent(cfg.nrOfIndentSpace, cfg.indentBlankLines, cfg.indentSchemaLocation) + .setEncoding(cfg.encoding); + try { + builder = builder + .setFormatting(cfg.lineSeparator, cfg.expandEmptyElements, cfg.spaceBeforeCloseEmptyElement, + cfg.keepBlankLines, cfg.endWithNewline); + } catch (NoSuchMethodError e) { + try { + Method method = PluginParameters.Builder.class + .getMethod("setFormatting", String.class, boolean.class, boolean.class, boolean.class); + builder = (PluginParameters.Builder) method + .invoke(builder, cfg.lineSeparator, cfg.expandEmptyElements, cfg.spaceBeforeCloseEmptyElement, + cfg.keepBlankLines); + } catch (ReflectiveOperationException | RuntimeException ignore) { + throw e; + } + } + try { + builder = builder + .setIndent(cfg.nrOfIndentSpace, cfg.indentBlankLines, cfg.indentSchemaLocation, + cfg.indentAttribute); + } catch (NoSuchMethodError e) { + try { + Method method = PluginParameters.Builder.class + .getMethod("setIndent", int.class, boolean.class, boolean.class); + builder = (PluginParameters.Builder) method + .invoke(builder, cfg.nrOfIndentSpace, cfg.indentBlankLines, cfg.indentSchemaLocation); + } catch (ReflectiveOperationException | RuntimeException ignore) { + throw e; + } + } + builder = builder .setSortOrder(cfg.sortOrderFile, cfg.predefinedSortOrder) .setSortEntities(cfg.sortDependencies, cfg.sortDependencyExclusions, cfg.sortDependencyManagement, cfg.sortPlugins, cfg.sortProperties, cfg.sortModules, cfg.sortExecutions) - .setIgnoreLineSeparators(false) - .build()); + .setIgnoreLineSeparators(false); + sortPom.setup(new MySortPomLogger(), builder.build()); sortPom.sortPom(); return Files.readString(pom.toPath(), Charset.forName(cfg.encoding)); } diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index ffaaa932dc..9ff689d273 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -14,6 +14,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * Bump default `shfmt` version to latest `3.7.0` -> `3.8.0`. ([#2050](https://github.com/diffplug/spotless/pull/2050)) * Bump default `ktlint` version to latest `1.1.1` -> `1.2.1`. ([#2057](https://github.com/diffplug/spotless/pull/2057)) * Bump default `sortpom` version to latest `3.4.0` -> `3.4.1`. ([#2078](https://github.com/diffplug/spotless/pull/2078)) +* Bump default `sortpom` version to latest `3.4.1` -> `4.0.0` and support versions back to `3.2.1`. ([#2115](https://github.com/diffplug/spotless/pull/2115)) ### Added * Respect `.editorconfig` settings for formatting shell via `shfmt` ([#2031](https://github.com/diffplug/spotless/pull/2031)) * Add support for formatting and sorting Maven POMs ([#2082](https://github.com/diffplug/spotless/issues/2082)) diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 606589ed7f..bb1a9dd6dc 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -700,7 +700,7 @@ All configuration settings are optional, they are described in detail [here](htt ```gradle spotless { pom { - sortPom('3.4.0') + sortPom('4.0.0') .encoding('UTF-8') // The encoding of the pom files .lineSeparator(System.getProperty('line.separator')) // line separator to use .expandEmptyElements(true) // Should empty elements be expanded @@ -710,6 +710,7 @@ spotless { .nrOfIndentSpace(2) // Indentation .indentBlankLines(false) // Should empty lines be indented .indentSchemaLocation(false) // Should schema locations be indented + .indentAttribute(null) // Should the xml attributes be indented .predefinedSortOrder('recommended_2008_06') // Sort order of elements: https://github.com/Ekryd/sortpom/wiki/PredefinedSortOrderProfiles .sortOrderFile(null) // Custom sort order of elements: https://raw.githubusercontent.com/Ekryd/sortpom/master/sorter/src/main/resources/custom_1.xml .sortDependencies(null) // Sort dependencies: https://github.com/Ekryd/sortpom/wiki/SortDependencies diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PomExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PomExtension.java index 463463d320..4474a36385 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PomExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PomExtension.java @@ -107,6 +107,11 @@ public SortPomGradleConfig indentSchemaLocation(boolean indentSchemaLocation) { return this; } + public SortPomGradleConfig indentAttribute(String indentAttribute) { + cfg.indentAttribute = indentAttribute; + return this; + } + public SortPomGradleConfig predefinedSortOrder(String predefinedSortOrder) { cfg.predefinedSortOrder = predefinedSortOrder; return this; diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SortPomGradleTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SortPomGradleTest.java index 1c51d4c2a8..80c8f254f2 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SortPomGradleTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SortPomGradleTest.java @@ -16,6 +16,8 @@ package com.diffplug.gradle.spotless; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; class SortPomGradleTest extends GradleIntegrationHarness { @Test @@ -63,8 +65,9 @@ void sortPomWithTarget() throws Exception { assertFile("test.xml").sameAsResource("pom/pom_clean_default.xml"); } - @Test - void sortPomWithVersion() throws Exception { + @ParameterizedTest + @ValueSource(strings = {"3.2.1", "3.3.0", "3.4.1", "4.0.0"}) + void sortPomWithVersion(String version) throws Exception { // given setFile("build.gradle").toLines( "plugins {", @@ -73,7 +76,7 @@ void sortPomWithVersion() throws Exception { "repositories { mavenCentral() }", "spotless {", " pom {", - " sortPom '3.4.0'", + " sortPom '" + version + "'", " }", "}"); setFile("pom.xml").toResource("pom/pom_dirty.xml"); @@ -105,6 +108,7 @@ void sortPomWithParameters() throws Exception { " .nrOfIndentSpace(2)", " .indentBlankLines(false)", " .indentSchemaLocation(false)", + " .indentAttribute(null)", " .predefinedSortOrder('recommended_2008_06')", " .sortOrderFile(null)", " .sortDependencies(null)", diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index af419b1ad3..a759f923b9 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -12,6 +12,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * Bump default `shfmt` version to latest `3.7.0` -> `3.8.0`. ([#2050](https://github.com/diffplug/spotless/pull/2050)) * Bump default `ktlint` version to latest `1.1.1` -> `1.2.1`. ([#2057](https://github.com/diffplug/spotless/pull/2057)) * Bump default `sortpom` version to latest `3.4.0` -> `3.4.1`. ([#2078](https://github.com/diffplug/spotless/pull/2078)) +* Bump default `sortpom` version to latest `3.4.1` -> `4.0.0` and support versions back to `3.2.1`. ([#2115](https://github.com/diffplug/spotless/pull/2115)) ### Added * Respect `.editorconfig` settings for formatting shell via `shfmt` ([#2031](https://github.com/diffplug/spotless/pull/2031)) * Skip execution in M2E (incremental) builds by default ([#1814](https://github.com/diffplug/spotless/issues/1814), [#2037](https://github.com/diffplug/spotless/issues/2037)) diff --git a/plugin-maven/README.md b/plugin-maven/README.md index 383efd53ec..ff46b87bb7 100644 --- a/plugin-maven/README.md +++ b/plugin-maven/README.md @@ -667,6 +667,8 @@ All configuration settings are optional, they are described in detail [here](htt false + + recommended_2008_06 diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/pom/SortPom.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/pom/SortPom.java index efa2f533b8..8b0df8a7b0 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/pom/SortPom.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/pom/SortPom.java @@ -56,6 +56,9 @@ public class SortPom implements FormatterStepFactory { @Parameter boolean indentSchemaLocation = defaultValues.indentSchemaLocation; + @Parameter + String indentAttribute = defaultValues.indentAttribute; + @Parameter String predefinedSortOrder = defaultValues.predefinedSortOrder; @@ -96,6 +99,7 @@ public FormatterStep newFormatterStep(FormatterStepConfig stepConfig) { cfg.nrOfIndentSpace = nrOfIndentSpace; cfg.indentBlankLines = indentBlankLines; cfg.indentSchemaLocation = indentSchemaLocation; + cfg.indentAttribute = indentAttribute; cfg.predefinedSortOrder = predefinedSortOrder; cfg.sortOrderFile = sortOrderFile; cfg.sortDependencies = sortDependencies; diff --git a/testlib/src/test/java/com/diffplug/spotless/pom/SortPomTest.java b/testlib/src/test/java/com/diffplug/spotless/pom/SortPomTest.java index 873511cdda..15610ace58 100644 --- a/testlib/src/test/java/com/diffplug/spotless/pom/SortPomTest.java +++ b/testlib/src/test/java/com/diffplug/spotless/pom/SortPomTest.java @@ -16,6 +16,8 @@ package com.diffplug.spotless.pom; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import com.diffplug.spotless.*; @@ -27,10 +29,11 @@ public void testSortPomWithDefaultConfig() { StepHarness.forStep(step).testResource("pom/pom_dirty.xml", "pom/pom_clean_default.xml"); } - @Test - public void testSortPomWithVersion() { + @ParameterizedTest + @ValueSource(strings = {"3.2.1", "3.3.0", "3.4.1", "4.0.0"}) + public void testSortPomWithVersion(String version) { SortPomCfg cfg = new SortPomCfg(); - cfg.version = "3.4.1"; + cfg.version = version; FormatterStep step = SortPomStep.create(cfg, TestProvisioner.mavenCentral()); StepHarness.forStep(step).testResource("pom/pom_dirty.xml", "pom/pom_clean_default.xml"); }