extractKeywords(GherkinDialect dialect) {
+ return dialect.getStepKeywords().stream()
+ .sorted()
+ .filter(it -> !it.contains(String.valueOf('*')))
+ .filter(it -> !it.matches("^\\d.*")).distinct()
+ .map(keyword -> keyword.replaceAll("[\\s',!\u00AD]", ""))
+ .map(DialectWriter::normalize)
+ .collect(toList());
+ }
+
+ private static String capitalize(String str) {
+ return str.substring(0, 1).toUpperCase() + str.substring(1);
+ }
+
+ static String normalize(CharSequence s) {
+ return Normalizer.normalize(s, Normalizer.Form.NFC);
+ }
+
+ private static String getNormalizedLanguage(GherkinDialect dialect) {
+ return dialect.getLanguage().replaceAll("[\\s-]", "_").toLowerCase();
+ }
+ }
+}
diff --git a/cucumber-java8/src/main/groovy/lambda.java.gsp b/cucumber-java8/src/codegen/resources/templates/lambda.java.ftl
similarity index 67%
rename from cucumber-java8/src/main/groovy/lambda.java.gsp
rename to cucumber-java8/src/codegen/resources/templates/lambda.java.ftl
index e444171858..857a14a153 100644
--- a/cucumber-java8/src/main/groovy/lambda.java.gsp
+++ b/cucumber-java8/src/codegen/resources/templates/lambda.java.ftl
@@ -33,36 +33,52 @@ import org.apiguardian.api.API;
*
* The type of the data table or doc string argument is determined
* by the argument name value. When none is provided cucumber will
- * attempt to transform the data table or doc string to the the
+ * attempt to transform the data table or doc string to the
* type of last argument.
*/
@API(status = API.Status.STABLE)
public interface ${className} extends LambdaGlue {
-<% i18n.stepKeywords.findAll { !it.contains('*') && !it.matches("^\\d.*") }.sort().unique().each { kw -> %>
+ <#list keywords as kw>
+
/**
* Creates a new step definition.
*
* @param expression the cucumber expression
* @param body a lambda expression with no parameters
*/
- default void ${java.text.Normalizer.normalize(kw.replaceAll("[\\s',!]", ""), java.text.Normalizer.Form.NFC)}(String expression, A0 body) {
+ default void ${kw}(String expression, A0 body) {
LambdaGlueRegistry.INSTANCE.get().addStepDefinition(Java8StepDefinition.create(expression, A0.class, body));
}
- <% (1..9).each { arity ->
- def ts = (1..arity).collect { n -> "T"+n }
- def genericSignature = ts.join(",") %>
+ /**
+ * Creates a new step definition.
+ *
+ * @param expression the cucumber expression
+ * @param body a lambda expression with 1 parameter
+ *
+ * @param type of argument 1
+ */
+ default void ${kw}(String expression, A1 body) {
+ LambdaGlueRegistry.INSTANCE.get().addStepDefinition(Java8StepDefinition.create(expression, A1.class, body));
+ }
+
+ <#list 2..9 as arity>
+<#-- TODO: use function or macro for genericSignature ? -->
+ <#assign repeat = arity -1>
/**
* Creates a new step definition.
*
* @param expression the cucumber expression
* @param body a lambda expression with ${arity} parameters
- * <% (1..arity).each { i -> %>
- * @param type of argument ${i} <% } %>
+ *
+ <#list 1..arity as i>
+ * @param type of argument ${i}
+ #list>
*/
- default <${genericSignature}> void ${java.text.Normalizer.normalize(kw.replaceAll("[\\s',!]", ""), java.text.Normalizer.Form.NFC)}(String expression, A${arity}<${genericSignature}> body) {
+ default <<#list 1..repeat as i>T${i},#list>T${arity}> void ${kw}(String expression, A${arity}<<#list 1..repeat as i>T${i},#list>T${arity}> body) {
LambdaGlueRegistry.INSTANCE.get().addStepDefinition(Java8StepDefinition.create(expression, A${arity}.class, body));
}
- <% } %>
-<% } %>
+
+ #list>
+ #list>
}
diff --git a/cucumber-java8/src/main/groovy/generate-interfaces.groovy b/cucumber-java8/src/main/groovy/generate-interfaces.groovy
deleted file mode 100644
index 51856c30b9..0000000000
--- a/cucumber-java8/src/main/groovy/generate-interfaces.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-import groovy.text.SimpleTemplateEngine
-import io.cucumber.gherkin.GherkinDialectProvider
-
-import java.nio.file.Files
-
-SimpleTemplateEngine engine = new SimpleTemplateEngine()
-
-def unsupported = ["em", "en_tx"] // The generated files for Emoij and Texan do not compile.
-GherkinDialectProvider dialectProvider = new GherkinDialectProvider()
-
-dialectProvider.getLanguages().each { language ->
- def dialect = dialectProvider.getDialect(language).get()
- def normalized_language = dialect.language.replaceAll("[\\s-]", "_").toLowerCase()
- if (!unsupported.contains(normalized_language)) {
- def templateSource = new File(project.basedir, "src/main/groovy/lambda.java.gsp").getText()
- def className = "${normalized_language}".capitalize()
- def name = dialect.name + ((dialect.name == dialect.nativeName) ? '' : ' - ' + dialect.nativeName)
- def binding = ["i18n": dialect, "className": className, "language_name": name]
- def template = engine.createTemplate(templateSource).make(binding)
- def file = new File(project.basedir, "target/generated-sources/i18n/java/io/cucumber/java8/${className}.java")
- Files.createDirectories(file.parentFile.toPath())
- file.write(template.toString(), "UTF-8")
- }
-}
diff --git a/pom.xml b/pom.xml
index f86c649e99..4fce3a475f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,14 +19,6 @@
1.8
8
1674814830
-
-
-
- 21.0.1
- 26.0.3
-
-
- 2.5.15
scm:git:git://github.com/cucumber/cucumber-jvm.git