diff --git a/java8/src/main/java/io/cucumber/java8/AbstractGlueDefinition.java b/java8/src/main/java/io/cucumber/java8/AbstractGlueDefinition.java index 58b2bd0e2e..c9fac5f97a 100644 --- a/java8/src/main/java/io/cucumber/java8/AbstractGlueDefinition.java +++ b/java8/src/main/java/io/cucumber/java8/AbstractGlueDefinition.java @@ -1,6 +1,7 @@ package io.cucumber.java8; import io.cucumber.core.backend.ScenarioScoped; +import net.jodah.typetools.TypeResolver; import java.lang.reflect.Method; import java.util.ArrayList; @@ -42,4 +43,18 @@ private Method getAcceptMethod(Class bodyClass) { } return acceptMethods.get(0); } + + Class[] resolveRawArguments(Class bodyClass, Class body) { + Class[] rawArguments = TypeResolver.resolveRawArguments(bodyClass, body); + for (Class aClass : rawArguments) { + if (TypeResolver.Unknown.class.equals(aClass)) { + throw new IllegalStateException("" + + "Could resolve the return type of the lambda at " + location.getFileName() + ":" + location.getLineNumber() + "\n" + + "This version of cucumber-java8 is not compatible with Java 12+\n" + + "See: https://github.com/cucumber/cucumber-jvm/issues/1817" + ); + } + } + return rawArguments; + } } diff --git a/java8/src/main/java/io/cucumber/java8/Java8DataTableCellDefinition.java b/java8/src/main/java/io/cucumber/java8/Java8DataTableCellDefinition.java index ec0a9bc685..5e8c4a29d0 100644 --- a/java8/src/main/java/io/cucumber/java8/Java8DataTableCellDefinition.java +++ b/java8/src/main/java/io/cucumber/java8/Java8DataTableCellDefinition.java @@ -2,7 +2,6 @@ import io.cucumber.core.backend.DataTableTypeDefinition; import io.cucumber.datatable.DataTableType; -import net.jodah.typetools.TypeResolver; final class Java8DataTableCellDefinition extends AbstractDatatableElementTransformerDefinition implements DataTableTypeDefinition { @@ -10,7 +9,7 @@ final class Java8DataTableCellDefinition extends AbstractDatatableElementTransfo Java8DataTableCellDefinition(String[] emptyPatterns, DataTableCellDefinitionBody body) { super(body, new Exception().getStackTrace()[3], emptyPatterns); - Class returnType = TypeResolver.resolveRawArguments(DataTableCellDefinitionBody.class, body.getClass())[0]; + Class returnType = resolveRawArguments(DataTableCellDefinitionBody.class, body.getClass())[0]; this.dataTableType = new DataTableType( returnType, (String cell) -> execute(replaceEmptyPatternsWithEmptyString(cell)) diff --git a/java8/src/main/java/io/cucumber/java8/Java8DataTableDefinition.java b/java8/src/main/java/io/cucumber/java8/Java8DataTableDefinition.java index ffbcda419c..213a34ffa9 100644 --- a/java8/src/main/java/io/cucumber/java8/Java8DataTableDefinition.java +++ b/java8/src/main/java/io/cucumber/java8/Java8DataTableDefinition.java @@ -4,8 +4,6 @@ import io.cucumber.datatable.DataTable; import io.cucumber.datatable.DataTableType; -import static net.jodah.typetools.TypeResolver.resolveRawArguments; - final class Java8DataTableDefinition extends AbstractDatatableElementTransformerDefinition implements DataTableTypeDefinition { private final DataTableType dataTableType; diff --git a/java8/src/main/java/io/cucumber/java8/Java8DataTableEntryDefinition.java b/java8/src/main/java/io/cucumber/java8/Java8DataTableEntryDefinition.java index 1aa447f8ca..52fdc8378d 100644 --- a/java8/src/main/java/io/cucumber/java8/Java8DataTableEntryDefinition.java +++ b/java8/src/main/java/io/cucumber/java8/Java8DataTableEntryDefinition.java @@ -5,8 +5,6 @@ import java.util.Map; -import static net.jodah.typetools.TypeResolver.resolveRawArguments; - final class Java8DataTableEntryDefinition extends AbstractDatatableElementTransformerDefinition implements DataTableTypeDefinition { private final DataTableType dataTableType; diff --git a/java8/src/main/java/io/cucumber/java8/Java8DataTableRowDefinition.java b/java8/src/main/java/io/cucumber/java8/Java8DataTableRowDefinition.java index e5a40cfa90..00c73f3f56 100644 --- a/java8/src/main/java/io/cucumber/java8/Java8DataTableRowDefinition.java +++ b/java8/src/main/java/io/cucumber/java8/Java8DataTableRowDefinition.java @@ -5,8 +5,6 @@ import java.util.List; -import static net.jodah.typetools.TypeResolver.resolveRawArguments; - final class Java8DataTableRowDefinition extends AbstractDatatableElementTransformerDefinition implements DataTableTypeDefinition { private final DataTableType dataTableType; diff --git a/java8/src/main/java/io/cucumber/java8/Java8DocStringTypeDefinition.java b/java8/src/main/java/io/cucumber/java8/Java8DocStringTypeDefinition.java index 7727cacafe..7c19cbf007 100644 --- a/java8/src/main/java/io/cucumber/java8/Java8DocStringTypeDefinition.java +++ b/java8/src/main/java/io/cucumber/java8/Java8DocStringTypeDefinition.java @@ -4,8 +4,6 @@ import io.cucumber.core.exception.CucumberException; import io.cucumber.docstring.DocStringType; -import static net.jodah.typetools.TypeResolver.resolveRawArguments; - final class Java8DocStringTypeDefinition extends AbstractGlueDefinition implements DocStringTypeDefinition { private final DocStringType docStringType; diff --git a/java8/src/main/java/io/cucumber/java8/Java8StepDefinition.java b/java8/src/main/java/io/cucumber/java8/Java8StepDefinition.java index a5527dd069..c36737d10a 100644 --- a/java8/src/main/java/io/cucumber/java8/Java8StepDefinition.java +++ b/java8/src/main/java/io/cucumber/java8/Java8StepDefinition.java @@ -9,7 +9,6 @@ import static java.util.Objects.requireNonNull; import static java.util.stream.Collectors.toList; -import static net.jodah.typetools.TypeResolver.resolveRawArguments; final class Java8StepDefinition extends AbstractGlueDefinition implements StepDefinition { diff --git a/java8/src/main/java/io/cucumber/java8/LambdaTypeResolver.java b/java8/src/main/java/io/cucumber/java8/LambdaTypeResolver.java index 5db0275b58..a6e13b1d89 100644 --- a/java8/src/main/java/io/cucumber/java8/LambdaTypeResolver.java +++ b/java8/src/main/java/io/cucumber/java8/LambdaTypeResolver.java @@ -26,9 +26,6 @@ public Type resolve() { } public Type getType() { - if (net.jodah.typetools.TypeResolver.Unknown.class.equals(type)) { - return Object.class; - } return type; }