diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44a658b464..779b4e6f91 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,19 +41,19 @@ jobs: matrix: kind: [maven, gradle] # Test on the latest Java version once Gradle & Maven support it. - jre: [17, 21, 24] + jre: [21, 24] os: [ubuntu-latest, windows-latest] include: # npm on linux only (crazy slow on windows) - kind: npm - jre: 17 + jre: 21 os: ubuntu-latest - kind: shfmt - jre: 17 + jre: 21 os: ubuntu-latest shfmt-version: v3.8.0 - kind: idea - jre: 17 + jre: 21 os: ubuntu-latest runs-on: ${{ matrix.os }} steps: diff --git a/gradle.properties b/gradle.properties index fdb8a8a788..287fc5f614 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,7 +21,7 @@ artifactIdMaven=spotless-maven-plugin artifactIdGradle=spotless-plugin-gradle # Build requirements -VER_JAVA=17 +VER_JAVA=21 VER_JSR_305=3.0.2 # Dependencies provided by Spotless plugin diff --git a/gradle/java-publish.gradle b/gradle/java-publish.gradle index 80931905ef..8231acef0e 100644 --- a/gradle/java-publish.gradle +++ b/gradle/java-publish.gradle @@ -77,7 +77,7 @@ javadoc { // // Thus, no javadoc warnings. options.addStringOption('Xdoclint:none', '-quiet') - options.addStringOption('source', '17') + options.addStringOption('source', '21') // setup the header options.header javadocInfo // setup links diff --git a/gradle/rewrite.gradle b/gradle/rewrite.gradle index f520ab77eb..88007d020a 100644 --- a/gradle/rewrite.gradle +++ b/gradle/rewrite.gradle @@ -1,7 +1,7 @@ apply plugin: 'org.openrewrite.rewrite' rewrite { - activeRecipe("org.openrewrite.java.migrate.UpgradeToJava17") + activeRecipe("org.openrewrite.java.migrate.UpgradeToJava21") exportDatatables = true failOnDryRunResults = true } diff --git a/lib-extra/src/main/java/com/diffplug/spotless/extra/integration/DiffMessageFormatter.java b/lib-extra/src/main/java/com/diffplug/spotless/extra/integration/DiffMessageFormatter.java index c02c2f2987..790dd945f9 100644 --- a/lib-extra/src/main/java/com/diffplug/spotless/extra/integration/DiffMessageFormatter.java +++ b/lib-extra/src/main/java/com/diffplug/spotless/extra/integration/DiffMessageFormatter.java @@ -201,7 +201,7 @@ private void addFile(String arg) { // ... (more lines that didn't fit) List lines = NEWLINE_SPLITTER.splitToList(arg); if (!lines.isEmpty()) { - addIntendedLine(NORMAL_INDENT, lines.get(0)); + addIntendedLine(NORMAL_INDENT, lines.getFirst()); } for (int i = 1; i < Math.min(MIN_LINES_PER_FILE, lines.size()); ++i) { addIntendedLine(DIFF_INDENT, lines.get(i)); diff --git a/lib/src/compatKtLintApi/java/com/diffplug/spotless/glue/ktlint/compat/KtLintCompatAdapter.java b/lib/src/compatKtLintApi/java/com/diffplug/spotless/glue/ktlint/compat/KtLintCompatAdapter.java index 0fcecb3f6c..8cacdd4506 100644 --- a/lib/src/compatKtLintApi/java/com/diffplug/spotless/glue/ktlint/compat/KtLintCompatAdapter.java +++ b/lib/src/compatKtLintApi/java/com/diffplug/spotless/glue/ktlint/compat/KtLintCompatAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2022-2024 DiffPlug + * Copyright 2022-2025 DiffPlug * * 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 @@ import java.lang.reflect.Field; import java.nio.file.Path; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.util.Map; public interface KtLintCompatAdapter { @@ -30,16 +28,13 @@ String format( Map editorConfigOverrideMap) throws NoSuchFieldException, IllegalAccessException; static void setCodeContent(Object code, String content) { - AccessController.doPrivileged((PrivilegedAction) () -> { - try { - Field contentField = code.getClass().getDeclaredField("content"); - contentField.setAccessible(true); - contentField.set(code, content); - } catch (NoSuchFieldException | IllegalAccessException e) { - // Handle exceptions as needed - throw new RuntimeException("Failed to set content field", e); - } - return null; - }); + try { + Field contentField = code.getClass().getDeclaredField("content"); + contentField.setAccessible(true); + contentField.set(code, content); + } catch (NoSuchFieldException | IllegalAccessException e) { + // Handle exceptions as needed + throw new RuntimeException("Failed to set content field", e); + } } } diff --git a/lib/src/main/java/com/diffplug/spotless/FileSignature.java b/lib/src/main/java/com/diffplug/spotless/FileSignature.java index 9a2ea1c1d8..6869fc6d0a 100644 --- a/lib/src/main/java/com/diffplug/spotless/FileSignature.java +++ b/lib/src/main/java/com/diffplug/spotless/FileSignature.java @@ -140,7 +140,7 @@ public Collection files() { /** Returns the only file in this signature, throwing an exception if there are more or less than 1 file. */ public File getOnlyFile() { if (files.size() == 1) { - return files.iterator().next(); + return files.getFirst(); } else { throw new IllegalArgumentException("Expected one file, but was " + files.size()); } diff --git a/lib/src/main/java/com/diffplug/spotless/FormatterProperties.java b/lib/src/main/java/com/diffplug/spotless/FormatterProperties.java index 00233ef0a8..c8f4762823 100644 --- a/lib/src/main/java/com/diffplug/spotless/FormatterProperties.java +++ b/lib/src/main/java/com/diffplug/spotless/FormatterProperties.java @@ -301,7 +301,7 @@ private Node getSingleProfile(final Node rootNode) throws IllegalArgumentExcepti message += "]%n The formatter can only cope with a single profile per configuration file. Please remove the other profiles."; throw new IllegalArgumentException(message); } - return profiles.iterator().next(); + return profiles.getFirst(); } private List getChildren(final Node node, final String nodeName) { diff --git a/lib/src/main/java/com/diffplug/spotless/Jvm.java b/lib/src/main/java/com/diffplug/spotless/Jvm.java index 40b0b79c1a..03d90333f4 100644 --- a/lib/src/main/java/com/diffplug/spotless/Jvm.java +++ b/lib/src/main/java/com/diffplug/spotless/Jvm.java @@ -289,7 +289,7 @@ private static int[] convert(V versionObject) { throw new IllegalArgumentException("Not a semantic version: %s".formatted(versionObject), e); } } - }; + } } /** diff --git a/lib/src/main/java/com/diffplug/spotless/PaddedCell.java b/lib/src/main/java/com/diffplug/spotless/PaddedCell.java index 5ec7ef1cad..0a5672d0d9 100644 --- a/lib/src/main/java/com/diffplug/spotless/PaddedCell.java +++ b/lib/src/main/java/com/diffplug/spotless/PaddedCell.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2024 DiffPlug + * Copyright 2016-2025 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -152,7 +152,7 @@ public boolean isResolvable() { public String canonical() { // @formatter:off switch (type) { - case CONVERGE: return steps.get(steps.size() - 1); + case CONVERGE: return steps.getLast(); case CYCLE: return Collections.min(steps, Comparator.comparing(String::length).thenComparing(Function.identity())); case DIVERGE: throw new IllegalArgumentException("No canonical form for a diverging result"); default: throw new IllegalArgumentException("Unknown type: " + type); diff --git a/lib/src/main/java/com/diffplug/spotless/biome/BiomeStep.java b/lib/src/main/java/com/diffplug/spotless/biome/BiomeStep.java index 9b580ead51..2587751962 100644 --- a/lib/src/main/java/com/diffplug/spotless/biome/BiomeStep.java +++ b/lib/src/main/java/com/diffplug/spotless/biome/BiomeStep.java @@ -457,32 +457,22 @@ private String resolveFileName(File file) { } var dot = name.lastIndexOf("."); var ext = dot >= 0 ? name.substring(dot + 1) : name; - switch (language) { - case "js?": - return "jsx".equals(ext) || "js".equals(ext) || "mjs".equals(ext) || "cjs".equals(ext) ? name + return switch (language) { + case "js?" -> "jsx".equals(ext) || "js".equals(ext) || "mjs".equals(ext) || "cjs".equals(ext) ? name : "file.js"; - case "ts?": - return "tsx".equals(ext) || "ts".equals(ext) || "mts".equals(ext) || "cts".equals(ext) ? name + case "ts?" -> "tsx".equals(ext) || "ts".equals(ext) || "mts".equals(ext) || "cts".equals(ext) ? name : "file.js"; - case "js": - return "js".equals(ext) || "mjs".equals(ext) || "cjs".equals(ext) ? name : "file.js"; - case "jsx": - return "jsx".equals(ext) ? name : "file.jsx"; - case "ts": - return "ts".equals(ext) || "mts".equals(ext) || "cts".equals(ext) ? name : "file.ts"; - case "tsx": - return "tsx".equals(ext) ? name : "file.tsx"; - case "json": - return "json".equals(ext) ? name : "file.json"; - case "jsonc": - return "jsonc".equals(ext) ? name : "file.jsonc"; - case "css": - return "css".equals(ext) ? name : "file.css"; + case "js" -> "js".equals(ext) || "mjs".equals(ext) || "cjs".equals(ext) ? name : "file.js"; + case "jsx" -> "jsx".equals(ext) ? name : "file.jsx"; + case "ts" -> "ts".equals(ext) || "mts".equals(ext) || "cts".equals(ext) ? name : "file.ts"; + case "tsx" -> "tsx".equals(ext) ? name : "file.tsx"; + case "json" -> "json".equals(ext) ? name : "file.json"; + case "jsonc" -> "jsonc".equals(ext) ? name : "file.jsonc"; + case "css" -> "css".equals(ext) ? name : "file.css"; // so that we can support new languages such as css or yaml when Biome adds // support for them without having to change the code - default: - return "file." + language; - } + default -> "file." + language; + }; } /** diff --git a/lib/src/main/java/com/diffplug/spotless/cpp/CppDefaults.java b/lib/src/main/java/com/diffplug/spotless/cpp/CppDefaults.java index cf31b4a95c..bb90e35717 100644 --- a/lib/src/main/java/com/diffplug/spotless/cpp/CppDefaults.java +++ b/lib/src/main/java/com/diffplug/spotless/cpp/CppDefaults.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 DiffPlug + * Copyright 2016-2025 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,13 +21,13 @@ /** Common utilities for C/C++ */ public class CppDefaults { //Prevent instantiation - private CppDefaults() {}; + private CppDefaults() {} /** - * Default delimiter expression shall cover most valid and common starts of C/C++ declarations and definitions. - * Furthermore it shall not conflict with terms commonly used within license headers. - * Note that the longest match is selected. Hence "using namespace foo" is preferred over "namespace foo". - */ + * Default delimiter expression shall cover most valid and common starts of C/C++ declarations and definitions. + * Furthermore it shall not conflict with terms commonly used within license headers. + * Note that the longest match is selected. Hence "using namespace foo" is preferred over "namespace foo". + */ public static final String DELIMITER_EXPR = Arrays.asList( "#define", "#error", "#if", "#ifdef", "#ifndef", "#include", "#pragma", "#undef", "asm", "class", "namespace", "struct", "typedef", "using namespace", diff --git a/lib/src/main/java/com/diffplug/spotless/java/ImportSorterImpl.java b/lib/src/main/java/com/diffplug/spotless/java/ImportSorterImpl.java index a8df9b0a1d..ef10701a48 100644 --- a/lib/src/main/java/com/diffplug/spotless/java/ImportSorterImpl.java +++ b/lib/src/main/java/com/diffplug/spotless/java/ImportSorterImpl.java @@ -203,8 +203,8 @@ private List mergeMatchingItems() { } } // if there is \n on the end, remove it - if (!template.isEmpty() && template.get(template.size() - 1).equals(ImportSorter.N)) { - template.remove(template.size() - 1); + if (!template.isEmpty() && template.getLast().equals(ImportSorter.N)) { + template.removeLast(); } return template; } diff --git a/lib/src/main/java/com/diffplug/spotless/npm/TimedLogger.java b/lib/src/main/java/com/diffplug/spotless/npm/TimedLogger.java index 537234fcee..a49adc5955 100644 --- a/lib/src/main/java/com/diffplug/spotless/npm/TimedLogger.java +++ b/lib/src/main/java/com/diffplug/spotless/npm/TimedLogger.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 DiffPlug + * Copyright 2023-2025 DiffPlug * * 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 final void close() { } private Object[] paramsForEnd() { - if (params.isEmpty() || !(params.get(params.size() - 1) instanceof Throwable)) { + if (params.isEmpty() || !(params.getLast() instanceof Throwable)) { // if the last element is not a throwable, we can add the duration as the last element return Stream.concat(params.stream(), Stream.of(lazy(this::durationString))).toArray(); } @@ -119,7 +119,7 @@ private Object[] paramsForEnd() { return Stream.concat( params.stream().limit(params.size() - 1), Stream.of(lazy(this::durationString), - params.get(params.size() - 1))) + params.getLast())) .toArray(); } diff --git a/lib/src/main/java/com/diffplug/spotless/rdf/ReflectionHelper.java b/lib/src/main/java/com/diffplug/spotless/rdf/ReflectionHelper.java index 1979f99a1f..7502387a9b 100644 --- a/lib/src/main/java/com/diffplug/spotless/rdf/ReflectionHelper.java +++ b/lib/src/main/java/com/diffplug/spotless/rdf/ReflectionHelper.java @@ -319,7 +319,7 @@ private void callBuilderMethod(Object builder, Method method, String parameterVa "Found more than 1 enum value for name %s, that should never happen".formatted( parameterValueAsString)); } - method.invoke(builder, selectedEnumValueList.get(0)); + method.invoke(builder, selectedEnumValueList.getFirst()); } else if (param.equals(NumberFormat.class)) { method.invoke(builder, new DecimalFormat(parameterValueAsString, DecimalFormatSymbols.getInstance(Locale.US))); } else if (param.equals(Boolean.class) || param.equals(Boolean.TYPE)) { @@ -458,7 +458,7 @@ private Method getBuilderMethod(String optionName) { "More than one builder method found for configuration parameter name: %s".formatted( optionName)); } - Method method = methods.get(0); + Method method = methods.getFirst(); if (method.getParameterCount() != 1) { throw new RuntimeException( "Method with unexpected parameter count %s found for configuration parameter name: %s".formatted( diff --git a/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java b/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java index 01f0fd759e..845fa87a9e 100644 --- a/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java +++ b/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2023 DiffPlug + * Copyright 2016-2025 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -78,17 +78,17 @@ private List format(final List argList) { return argList; } - FormatterToken token = argList.get(0); + FormatterToken token = argList.getFirst(); if (token.getType() == TokenType.SPACE) { - argList.remove(0); + argList.removeFirst(); if (argList.isEmpty()) { return argList; } } - token = argList.get(argList.size() - 1); + token = argList.getLast(); if (token.getType() == TokenType.SPACE) { - argList.remove(argList.size() - 1); + argList.removeLast(); if (argList.isEmpty()) { return argList; } @@ -161,9 +161,9 @@ private List format(final List argList) { indent++; index += insertReturnAndIndent(argList, index + 1, indent); } else if (tokenString.equals(")") && !bracketIndent.isEmpty() && !functionBracket.isEmpty()) { - indent = bracketIndent.remove(bracketIndent.size() - 1); + indent = bracketIndent.removeLast(); index += insertReturnAndIndent(argList, index, indent); - functionBracket.remove(functionBracket.size() - 1); + functionBracket.removeLast(); } else if (tokenString.equals(",")) { index += insertReturnAndIndent(argList, index + 1, indent); } else if (statementDelimiters.contains(tokenString)) { diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java index 9e1738a02e..67612556bd 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java @@ -55,35 +55,18 @@ public enum GradleVersionSupport { final String version; GradleVersionSupport(String version) { - String minVersionForRunningJRE; - switch (Jvm.version()) { + String minVersionForRunningJRE = switch (Jvm.version()) { case 25: // TODO: https://docs.gradle.org/current/userguide/compatibility.html - case 24: - minVersionForRunningJRE = "8.14"; - break; - case 23: - minVersionForRunningJRE = "8.10"; - break; - case 22: - minVersionForRunningJRE = "8.8"; - break; - case 21: - minVersionForRunningJRE = "8.5"; - break; - case 20: - minVersionForRunningJRE = "8.3"; - break; - case 19: - minVersionForRunningJRE = "7.6"; - break; - case 18: - minVersionForRunningJRE = "7.5"; - break; - default: - minVersionForRunningJRE = null; - break; - } + case 24: yield "8.14"; + case 23: yield "8.10"; + case 22: yield "8.8"; + case 21: yield "8.5"; + case 20: yield "8.3"; + case 19: yield "7.6"; + case 18: yield "7.5"; + default: yield null; + }; if (minVersionForRunningJRE != null && GradleVersion.version(minVersionForRunningJRE).compareTo(GradleVersion.version(version)) > 0) { this.version = minVersionForRunningJRE; } else { diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/IdeHookTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/IdeHookTest.java index c38484384f..230d9fe07f 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/IdeHookTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/IdeHookTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2024 DiffPlug + * Copyright 2016-2025 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -70,7 +70,7 @@ private void runWith(boolean configurationCache, String... arguments) throws IOE StringBuilder output = new StringBuilder(); StringBuilder error = new StringBuilder(); try (Writer outputWriter = new StringPrinter(output::append).toWriter(); - Writer errorWriter = new StringPrinter(error::append).toWriter();) { + Writer errorWriter = new StringPrinter(error::append).toWriter()) { gradleRunner(configurationCache) .withArguments(arguments) .forwardStdOutput(outputWriter) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java index b6547204b8..18ce25ec02 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2024 DiffPlug + * Copyright 2016-2025 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -176,15 +176,11 @@ void useJavaCommunityPlugin(String prettierVersion) throws IOException { @ParameterizedTest(name = "{index}: useJavaCommunityPluginFileConfig with prettier {0}") @ValueSource(strings = {PRETTIER_VERSION_2, PRETTIER_VERSION_3}) void useJavaCommunityPluginFileConfig(String prettierVersion) throws IOException { - var prettierPluginJava = ""; - switch (prettierVersion) { - case PRETTIER_VERSION_2: - prettierPluginJava = "2.1.0"; // last version to support v2 - break; - case PRETTIER_VERSION_3: - prettierPluginJava = "2.3.0"; // latest to support v3 - break; - } + var prettierPluginJava = switch (prettierVersion) { + case PRETTIER_VERSION_2 -> "2.1.0"; + case PRETTIER_VERSION_3 -> "2.3.0"; + default -> ""; + }; setFile(".prettierrc.yml").toResource("npm/prettier/config/.prettierrc_java_plugin.yml"); setFile("build.gradle").toLines( "plugins {", diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/SpotlessCheckMojo.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/SpotlessCheckMojo.java index 910a004dfe..df996b68dc 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/SpotlessCheckMojo.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/SpotlessCheckMojo.java @@ -120,7 +120,7 @@ protected void process(String name, Iterable files, Formatter formatter, U .getMessage()); } else if (!lintProblems.isEmpty()) { // Show lints only if there are no formatting violations - Map.Entry firstLintProblem = lintProblems.get(0); + Map.Entry firstLintProblem = lintProblems.getFirst(); File file = firstLintProblem.getKey(); LintState lintState = firstLintProblem.getValue(); String stepName = lintState.getLintsByStep(formatter).keySet().iterator().next(); diff --git a/plugin-maven/src/test/java/com/diffplug/spotless/maven/IdeHookTest.java b/plugin-maven/src/test/java/com/diffplug/spotless/maven/IdeHookTest.java index 68820b2356..b59e76b476 100644 --- a/plugin-maven/src/test/java/com/diffplug/spotless/maven/IdeHookTest.java +++ b/plugin-maven/src/test/java/com/diffplug/spotless/maven/IdeHookTest.java @@ -44,7 +44,6 @@ void before() throws IOException { dirty = setFile("DIRTY.md").toContent("World"); clean = setFile("CLEAN.md").toContent("Mars"); outofbounds = setFile("OUTOFBOUNDS.md").toContent("Mars"); - ; } private void runWith(String... arguments) throws IOException, InterruptedException { diff --git a/testlib/src/test/java/com/diffplug/spotless/PaddedCellTest.java b/testlib/src/test/java/com/diffplug/spotless/PaddedCellTest.java index 2820aadeef..b8bcff57ce 100644 --- a/testlib/src/test/java/com/diffplug/spotless/PaddedCellTest.java +++ b/testlib/src/test/java/com/diffplug/spotless/PaddedCellTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2024 DiffPlug + * Copyright 2016-2025 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -84,16 +84,16 @@ void pingPong() throws IOException { @Test void fourState() throws IOException { - misbehaved(input -> { - // @formatter:off - switch (input) { - case "A": return "B"; - case "B": return "C"; - case "C": return "D"; - default: return "A"; - } + misbehaved(input->{ + // @formatter:off + return switch (input) { + case "A" -> "B"; + case "B" -> "C"; + case "C" -> "D"; + default -> "A"; + }; // @formatter:on - }, "CCC", CYCLE, "A,B,C,D", "A"); + },"CCC",CYCLE,"A,B,C,D","A"); } @Test