Skip to content

Commit 391fcf3

Browse files
fix: prevent IndexOutOfBoundsException for synthetic parameters in Kotlin suspend functions
1 parent e602a0f commit 391fcf3

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

allure-junit5/src/main/java/io/qameta/allure/junit5/AllureJunit5.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.lang.reflect.Parameter;
2929
import java.util.HashMap;
3030
import java.util.Map;
31+
import java.util.List;
3132
import java.util.Objects;
3233
import java.util.Optional;
3334
import java.util.UUID;
@@ -62,15 +63,20 @@ public void interceptTestTemplateMethod(final Invocation<Void> invocation,
6263
private void sendParameterEvent(final ReflectiveInvocationContext<Method> invocationContext,
6364
final ExtensionContext extensionContext) {
6465
final Parameter[] parameters = invocationContext.getExecutable().getParameters();
65-
for (int i = 0; i < parameters.length; i++) {
66-
final Parameter parameter = parameters[i];
66+
final List<Object> arguments = invocationContext.getArguments();
67+
int argumentIndex = 0;
6768

69+
for (final Parameter parameter : parameters) {
6870
final Class<?> parameterType = parameter.getType();
69-
// Skip default jupiter injectables as TestInfo, TestReporter and TempDirectory
70-
if (parameterType.getCanonicalName().startsWith("org.junit.jupiter.api")) {
71+
72+
// Skip JUnit injectables AND synthetic parameters
73+
if (parameterType.getCanonicalName().startsWith("org.junit.jupiter.api")
74+
|| parameter.isSynthetic()
75+
|| argumentIndex >= arguments.size()) {
7176
continue;
7277
}
73-
final Object value = invocationContext.getArguments().get(i);
78+
79+
final Object value = arguments.get(argumentIndex++);
7480
final Map<String, String> map = new HashMap<>();
7581
map.put(ALLURE_PARAMETER, parameter.getName());
7682
map.put(ALLURE_PARAMETER_VALUE_KEY, ObjectUtils.toString(value));

0 commit comments

Comments
 (0)