diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinFunctionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinFunctionUtils.java index 90e84d7ee223..ae0a033e0070 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinFunctionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinFunctionUtils.java @@ -41,7 +41,7 @@ class KotlinFunctionUtils { static Class getReturnType(Method method) { var returnType = getJavaClass(getJvmErasure(getKotlinFunction(method).getReturnType())); - if (Unit.class.equals(returnType)) { + if (Unit.class.getName().equals(returnType.getName())) { return void.class; } return returnType; diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinReflectionUtils.java index 613c2d9944dd..6f877a6c7ee4 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinReflectionUtils.java @@ -78,7 +78,7 @@ public static boolean isKotlinSuspendingFunction(Method method) { if (!method.isSynthetic() && kotlinCoroutineContinuation != null && isKotlinType(method.getDeclaringClass())) { int parameterCount = method.getParameterCount(); return parameterCount > 0 // - && method.getParameterTypes()[parameterCount - 1] == kotlinCoroutineContinuation; + && kotlinCoroutineContinuation.getName().equals(method.getParameterTypes()[parameterCount - 1].getName()); } return false; } @@ -127,8 +127,21 @@ private static Class[] copyWithoutFirst(Class[] values) { @API(status = INTERNAL, since = "6.1") public static boolean isKotlinType(Class clazz) { - return kotlinMetadata != null // - && clazz.getDeclaredAnnotation(kotlinMetadata) != null; + if (kotlinMetadata == null) { + return false; + } + + if (clazz.getClassLoader().equals(kotlinMetadata.getClassLoader())) { + return clazz.getDeclaredAnnotation(kotlinMetadata) != null; + } else { + try { + @SuppressWarnings("unchecked") Class kotlinMetadataFromProperCL = (Class) Class.forName(kotlinMetadata.getName(), false, clazz.getClassLoader()); + return clazz.getDeclaredAnnotation(kotlinMetadataFromProperCL) != null; + } + catch (Exception ignored) { + return false; + } + } } @API(status = INTERNAL, since = "6.1")