For the complete documentation index, see llms.txt. This page is also available as Markdown.

Verify Generics

Type parameter vs type argument

To undersigned Konsist API let's look at the difference between generic type parameters and generic type arguments:

  1. Type Parameter is the placeholder (like T) you write when creating a class or function (declaration site)

  2. Type Argument is the actual type (like String or Int) you provide when using that class or function (use site)

Simple Examples:

// Example 1: Class
// Here 'T' is a TYPE PARAMETER
class Box<T>(val item: T)

// Here 'String' is a TYPE ARGUMENT
val stringBox = Box<String>("Hello")


// Example 2: Function
// Here 'T' is a TYPE PARAMETER
fun <T> printWithType(item: T) {
    println("Type is: ${item::class.simpleName}")
}

// Here 'String' and 'Int' are TYPE ARGUMENTS
printWithType<String>("Hello")  // prints: Type is: String

Verify Type Parameters

Type parameters can be defined, for example, inside class or function.

Check whether a class's generic type parameter has the name UiState:

Check whether function type parameters has out modifier:

Verify Type Arguments

Check whether a property generic type argument has the name Service:

The flatten() extension method allows to flatten type parameters structure:

  • For a type argument like String, it returns listOf().

  • For a type argument like List<String>, it returns listOf(String).

  • For a type argument like Map<List<String>, Int>, it returns listOf("List, String, Int).

Check if all functions parameters are have generic type argument ending with UIState:

Check all parents have `String` type argument:

Last updated