diff --git a/CHANGES.md b/CHANGES.md index cc19ae2acc..a431ee8c18 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,8 @@ This document is intended for Spotless developers. We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`). ## [Unreleased] +### Changed +* Bump default ktfmt `0.30` -> `0.31` ([#1118](https://github.com/diffplug/spotless/pull/1118)). ## [2.22.1] - 2022-02-01 ### Changed diff --git a/lib/src/main/java/com/diffplug/spotless/kotlin/KtfmtStep.java b/lib/src/main/java/com/diffplug/spotless/kotlin/KtfmtStep.java index b3ad0041f6..9f3b62dadb 100644 --- a/lib/src/main/java/com/diffplug/spotless/kotlin/KtfmtStep.java +++ b/lib/src/main/java/com/diffplug/spotless/kotlin/KtfmtStep.java @@ -32,7 +32,7 @@ public class KtfmtStep { // prevent direct instantiation private KtfmtStep() {} - private static final String DEFAULT_VERSION = "0.30"; + private static final String DEFAULT_VERSION = "0.31"; static final String NAME = "ktfmt"; static final String PACKAGE = "com.facebook"; static final String MAVEN_COORDINATE = PACKAGE + ":ktfmt:"; @@ -120,18 +120,16 @@ static final class State implements Serializable { FormatterFunc createFormat() throws Exception { ClassLoader classLoader = jarState.getClassLoader(); - Class formatterClazz = classLoader.loadClass(pkg + ".ktfmt.FormatterKt"); return input -> { try { if (style == DEFAULT) { - Method formatterMethod = formatterClazz.getMethod(FORMATTER_METHOD, String.class); - return (String) formatterMethod.invoke(formatterClazz, input); + Method formatterMethod = getFormatterClazz(classLoader).getMethod(FORMATTER_METHOD, String.class); + return (String) formatterMethod.invoke(getFormatterClazz(classLoader), input); } else { - Class formattingOptionsClazz = classLoader.loadClass(pkg + ".ktfmt.FormattingOptions"); - Method formatterMethod = formatterClazz.getMethod(FORMATTER_METHOD, formattingOptionsClazz, + Method formatterMethod = getFormatterClazz(classLoader).getMethod(FORMATTER_METHOD, getFormattingOptionsClazz(classLoader), String.class); Object formattingOptions = getCustomFormattingOptions(classLoader, style); - return (String) formatterMethod.invoke(formatterClazz, formattingOptions, input); + return (String) formatterMethod.invoke(getFormatterClazz(classLoader), formattingOptions, input); } } catch (InvocationTargetException e) { throw ThrowingEx.unwrapCause(e); @@ -146,7 +144,7 @@ private Object getCustomFormattingOptions(ClassLoader classLoader, Style style) try { // ktfmt v0.19 and later - return classLoader.loadClass(pkg + ".ktfmt.FormatterKt").getField(style.getFormat()).get(null); + return getFormatterClazz(classLoader).getField(style.getFormat()).get(null); } catch (NoSuchFieldException ignored) {} // fallback to old, pre-0.19 ktfmt interface. @@ -159,5 +157,25 @@ private Object getCustomFormattingOptions(ClassLoader classLoader, Style style) throw new IllegalStateException("Versions pre-0.19 can only use Default and Dropbox styles"); } } + + private Class getFormatterClazz(ClassLoader classLoader) throws Exception { + Class formatterClazz; + if (BadSemver.version(version) >= BadSemver.version(0, 31)) { + formatterClazz = classLoader.loadClass(pkg + ".ktfmt.format.Formatter"); + } else { + formatterClazz = classLoader.loadClass(pkg + ".ktfmt.FormatterKt"); + } + return formatterClazz; + } + + private Class getFormattingOptionsClazz(ClassLoader classLoader) throws Exception { + Class formattingOptionsClazz; + if (BadSemver.version(version) >= BadSemver.version(0, 31)) { + formattingOptionsClazz = classLoader.loadClass(pkg + ".ktfmt.format.FormattingOptions"); + } else { + formattingOptionsClazz = classLoader.loadClass(pkg + ".ktfmt.FormattingOptions"); + } + return formattingOptionsClazz; + } } } diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index bf3d46dbd6..265b77084f 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -3,6 +3,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`). ## [Unreleased] +### Changed +* Bump default ktfmt `0.30` -> `0.31` ([#1118](https://github.com/diffplug/spotless/pull/1118)). ## [6.2.1] - 2022-02-01 ### Changed diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index 583d5ce426..a506bf17d1 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -3,6 +3,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`). ## [Unreleased] +### Changed +* Bump default ktfmt `0.30` -> `0.31` ([#1118](https://github.com/diffplug/spotless/pull/1118)). ## [2.20.1] - 2022-02-01 * Bump default versions of formatters ([#1095](https://github.com/diffplug/spotless/pull/1095)).