Skip to content

Commit e1fd6f5

Browse files
committed
[Java8] Add error when types could not be resolved on Java 12+
1 parent 0386fe7 commit e1fd6f5

8 files changed

+16
-14
lines changed

java8/src/main/java/io/cucumber/java8/AbstractGlueDefinition.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.cucumber.java8;
22

33
import io.cucumber.core.backend.ScenarioScoped;
4+
import net.jodah.typetools.TypeResolver;
45

56
import java.lang.reflect.Method;
67
import java.util.ArrayList;
@@ -42,4 +43,18 @@ private Method getAcceptMethod(Class<?> bodyClass) {
4243
}
4344
return acceptMethods.get(0);
4445
}
46+
47+
Class<?>[] resolveRawArguments(Class<?> bodyClass, Class<?> body) {
48+
Class<?>[] rawArguments = TypeResolver.resolveRawArguments(bodyClass, body);
49+
for (Class<?> aClass : rawArguments) {
50+
if (TypeResolver.Unknown.class.equals(aClass)) {
51+
throw new IllegalStateException("" +
52+
"Could resolve the return type of the lambda at " + location.getFileName() + ":" + location.getLineNumber() + "\n" +
53+
"This version of cucumber-java8 is not compatible with Java 12+\n" +
54+
"See: https://github.com/cucumber/cucumber-jvm/issues/1817"
55+
);
56+
}
57+
}
58+
return rawArguments;
59+
}
4560
}

java8/src/main/java/io/cucumber/java8/Java8DataTableCellDefinition.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@
22

33
import io.cucumber.core.backend.DataTableTypeDefinition;
44
import io.cucumber.datatable.DataTableType;
5-
import net.jodah.typetools.TypeResolver;
65

76
final class Java8DataTableCellDefinition extends AbstractDatatableElementTransformerDefinition implements DataTableTypeDefinition {
87

98
private final DataTableType dataTableType;
109

1110
Java8DataTableCellDefinition(String[] emptyPatterns, DataTableCellDefinitionBody<?> body) {
1211
super(body, new Exception().getStackTrace()[3], emptyPatterns);
13-
Class<?> returnType = TypeResolver.resolveRawArguments(DataTableCellDefinitionBody.class, body.getClass())[0];
12+
Class<?> returnType = resolveRawArguments(DataTableCellDefinitionBody.class, body.getClass())[0];
1413
this.dataTableType = new DataTableType(
1514
returnType,
1615
(String cell) -> execute(replaceEmptyPatternsWithEmptyString(cell))

java8/src/main/java/io/cucumber/java8/Java8DataTableDefinition.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import io.cucumber.datatable.DataTable;
55
import io.cucumber.datatable.DataTableType;
66

7-
import static net.jodah.typetools.TypeResolver.resolveRawArguments;
8-
97
final class Java8DataTableDefinition extends AbstractDatatableElementTransformerDefinition implements DataTableTypeDefinition {
108

119
private final DataTableType dataTableType;

java8/src/main/java/io/cucumber/java8/Java8DataTableEntryDefinition.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55

66
import java.util.Map;
77

8-
import static net.jodah.typetools.TypeResolver.resolveRawArguments;
9-
108
final class Java8DataTableEntryDefinition extends AbstractDatatableElementTransformerDefinition implements DataTableTypeDefinition {
119

1210
private final DataTableType dataTableType;

java8/src/main/java/io/cucumber/java8/Java8DataTableRowDefinition.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55

66
import java.util.List;
77

8-
import static net.jodah.typetools.TypeResolver.resolveRawArguments;
9-
108
final class Java8DataTableRowDefinition extends AbstractDatatableElementTransformerDefinition implements DataTableTypeDefinition {
119

1210
private final DataTableType dataTableType;

java8/src/main/java/io/cucumber/java8/Java8DocStringTypeDefinition.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import io.cucumber.core.exception.CucumberException;
55
import io.cucumber.docstring.DocStringType;
66

7-
import static net.jodah.typetools.TypeResolver.resolveRawArguments;
8-
97
final class Java8DocStringTypeDefinition extends AbstractGlueDefinition implements DocStringTypeDefinition {
108

119
private final DocStringType docStringType;

java8/src/main/java/io/cucumber/java8/Java8StepDefinition.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
import static java.util.Objects.requireNonNull;
1111
import static java.util.stream.Collectors.toList;
12-
import static net.jodah.typetools.TypeResolver.resolveRawArguments;
1312

1413
final class Java8StepDefinition extends AbstractGlueDefinition implements StepDefinition {
1514

java8/src/main/java/io/cucumber/java8/LambdaTypeResolver.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@ public Type resolve() {
2626
}
2727

2828
public Type getType() {
29-
if (net.jodah.typetools.TypeResolver.Unknown.class.equals(type)) {
30-
return Object.class;
31-
}
3229
return type;
3330
}
3431

0 commit comments

Comments
 (0)