== Why is this an issue?

Kotlin uses the data type `Unit` to represent the absence of a value in a function or an expression.
It corresponds to the type `void` in Java or `unknown` in JavaScript.
While `Void` is available in Kotlin, it is a Java platform type and not equivalent to Java `void` but `java.lang.Void`.

Use `Unit` instead of `Void` because it represents the absence of a value in Kotlin.

=== What is the potential impact?

==== Wrong logic

`Void` is not equivalent to Java `void` but `java.lang.Void`.

==== Unnecessary platform dependency

`Void` is a platform type available only in the Java Runtime Environment.

== How to fix it

Replace `Void` with `Unit`.

=== Code examples

==== Noncompliant code example

[source,kotlin,diff-id=1,diff-type=noncompliant]
----
typealias NoValueFunction = () -> Void // Noncompliant, `Void` used

interface NoValueFunctions {
    fun voidFunction1(): Void // Noncompliant, `Void` used
    fun voidFunction2(): Void // Noncompliant, `Void` used
}
----

==== Compliant solution

[source,kotlin,diff-id=1,diff-type=compliant]
----
typealias NoValueFunction = () -> Unit // Compliant, `Unit` used

interface NoValueFunctions {
    fun unitFunction1(): Unit // Compliant, `Unit` used
    fun unitFunction2() // Compliant, `Unit` used implicitly
}
----

== Resources

=== Documentation

* https://kotlinlang.org/docs/functions.html#single-expression-functions[Kotlin Docs, Unit-returning functions]
