All Downloads are FREE. Search and download functionalities are using the official Maven repository.

meta.rendering.helper.kt Maven / Gradle / Ivy

package de.peekandpoke.ultra.mutator.meta.rendering

import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.ParameterizedTypeName
import com.squareup.kotlinpoet.TypeName
import de.peekandpoke.ultra.common.md5
import de.peekandpoke.ultra.meta.model.MType

val MType.mutatorClassName: ClassName get() = typeName.mutatorClassName

val TypeName.mutatorClassName: ClassName
    get() = when (val tn = this) {

        is ParameterizedTypeName -> {
            val hash = tn.hashTypeArguments()
            val raw = tn.rawType

            ClassName(
                packageName = raw.packageName,
                simpleNames = listOf(
                    raw.simpleNames
                        .dropLast(1)
                        .plus(raw.simpleNames.last() + "Mutator_$hash")
                        .joinToString("_")
                )
            )
        }

        is ClassName -> ClassName(
            packageName = tn.packageName,
            simpleNames = listOf(
                tn.simpleNames
                    .dropLast(1)
                    .plus(tn.simpleNames.last() + "Mutator")
                    .joinToString("_")
            )
        )

        else -> error("Cannot create mutator class name for '$tn'")
    }

fun ParameterizedTypeName.hashTypeArguments() = typeArguments.joinToString { it.toString() }.md5()




© 2015 - 2025 Weber Informatics LLC | Privacy Policy