![JAR search and dependency download from the Maven repository](/logo.png)
dev.onenowy.moshipolymorphicadapter.sealed.codegen.api.PreparedAdapter.kt Maven / Gradle / Ivy
package dev.onenowy.moshipolymorphicadapter.sealed.codegen.api
import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.DelicateKotlinPoetApi
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.asClassName
import dev.onenowy.moshipolymorphicadapter.sealed.codegen.kapt.KotlinSealedCodegenProcessor
import kotlinx.metadata.KmClass
import javax.annotation.processing.Messager
import javax.lang.model.element.TypeElement
import javax.tools.Diagnostic
internal data class PreparedAdapter(val fileSpec: FileSpec, val proguardRules: ProguardRules?)
@OptIn(DelicateKotlinPoetApi::class)
internal fun preparedAdapter(
element: TypeElement,
kmClass: KmClass,
sealedSubClasses: List,
generatorTag: List,
messager: Messager,
generatedAnnotation: ClassName?,
generateProguardRules: Boolean
): PreparedAdapter? {
for (subclass in sealedSubClasses) {
if (subclass.typeParameters.isNotEmpty()) {
messager.printMessage(Diagnostic.Kind.ERROR, "Moshi-sealed subtypes cannot be generic.", subclass)
return null
}
}
val adapterName = ClassName.bestGuess(
com.squareup.moshi.Types.generatedJsonAdapterName(
element.asClassName().reflectionName()
)
).simpleName
val targetType = element.asClassName()
val typeSpec = adapterClassSpec(
element,
kmClass,
adapterName,
targetType,
generatorTag,
sealedSubClasses,
messager,
generatedAnnotation
)
typeSpec ?: return null
val fileSpec = FileSpec.builder(targetType.packageName, adapterName)
.addType(typeSpec)
.build()
val proguardRules = if (generateProguardRules) {
ProguardRules(
targetClass = targetType,
adapterName = adapterName,
adapterConstructorParams = listOf(
KotlinSealedCodegenProcessor.moshiClass.asClassName()
.reflectionName()
)
)
} else {
null
}
return PreparedAdapter(fileSpec, proguardRules)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy