ListGen, Generate Lists From Functions That Have @Listed Annotations!

Welcome to ListGen!

ListGen is a KSP-based library that can generate lists (and also arrays and maps) from your functions that are annotated with @Listed (also @Arrayed and @Mapped).

Usage

First, annotate your functions with your desired output. You can use @Listed to generate listOf , @Arrayed to generate arrayOf and @Mapped for generating mapOf.

All annotations require a name and @Mapped requires a key.

Let’s see it in action:

// can be anywhere (or in any module) in your project
@Listed("mainList")
fun mainModule() = 2

// can be anywhere (or in any module) in your project
@Listed("otherList")
fun helloModule() = "hello!"

// can be anywhere (or in any module) in your project
@Listed("mainList")
fun secondModule() = 3

The code above will generate the following code with correct imports:

// in build/generated/ksp/debug|main/kotlin/com/snaky/ksp/GeneratedLists.kt
val mainList = listOf(mainModule(), secondModule())
val otherList = listOf(helloModule())

// in build/generated/ksp/debug|main/kotlin/com/snaky/ksp/GeneratedMaps.kt
val firstMap = mapOf("key1" to firstMapTest(), "key2" to firstMapTest2())

You can safely use the generated lists, arrays and maps for your needs.

Installation

Add the following to your build.gradle (or build.gradle.kts)

plugins {
    id 'com.google.devtools.ksp' version '1.6.20-1.0.5'
    // the version according to your Kotlin and KSP
}

// to add support for IDE
android {
    kotlin {
        sourceSets.debug {
            kotlin.srcDirs += 'build/generated/ksp/debug/kotlin'
        }
        sourceSets.release {
            kotlin.srcDirs += 'build/generated/ksp/release/kotlin'
        }
    }
}

dependencies {
    implementation "io.github.adibfara.listgen:ksp:1.0.0"
    ksp "io.github.adibfara.listgen:ksp:1.0.0"
}

Learning KSP

If you want to learn more about KSP, most of the documentation of KSP can be found on kotlinlang.org.

Feedback and Bug Reporting

Please let me know what you think about this project by filing a Github issue

Notes

The initial need for this library emerged when I was using Koin in a project. You have to pass your list of modules to Koin and each module is defined somewhere in the project and you’ll have a file containing listOf(module1, module2, module3, ...) which can get ugly (and error-prone).

Using this library to generate that list can help not only the file being ugly, but also help with Open/Closed Principle for your modules.

GitHub

View Github