mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-11-19 23:03:49 +00:00
temporal solution of generating problem
This commit is contained in:
parent
d2e6d2ec80
commit
8215f9d2c6
@ -89,17 +89,17 @@ publishing {
|
||||
}
|
||||
|
||||
if (project.hasProperty("signing.gnupg.keyName")) {
|
||||
apply plugin: 'signing'
|
||||
|
||||
signing {
|
||||
useGpgCmd()
|
||||
|
||||
sign publishing.publications
|
||||
}
|
||||
|
||||
task signAll {
|
||||
tasks.withType(Sign).forEach {
|
||||
dependsOn(it)
|
||||
}
|
||||
}
|
||||
// apply plugin: 'signing'
|
||||
//
|
||||
// signing {
|
||||
// useGpgCmd()
|
||||
//
|
||||
// sign publishing.publications
|
||||
// }
|
||||
//
|
||||
// task signAll {
|
||||
// tasks.withType(Sign).forEach {
|
||||
// dependsOn(it)
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
@ -8,8 +8,13 @@ import com.google.devtools.ksp.processing.Resolver
|
||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
||||
import com.google.devtools.ksp.symbol.KSAnnotated
|
||||
import com.google.devtools.ksp.symbol.KSClassDeclaration
|
||||
import com.google.devtools.ksp.symbol.KSClassifierReference
|
||||
import com.google.devtools.ksp.symbol.KSPropertyDeclaration
|
||||
import com.google.devtools.ksp.symbol.KSReferenceElement
|
||||
import com.google.devtools.ksp.symbol.KSType
|
||||
import com.google.devtools.ksp.symbol.KSTypeAlias
|
||||
import com.google.devtools.ksp.symbol.KSValueArgument
|
||||
import com.google.devtools.ksp.symbol.Nullability
|
||||
import com.squareup.kotlinpoet.AnnotationSpec
|
||||
import com.squareup.kotlinpoet.ClassName
|
||||
import com.squareup.kotlinpoet.CodeBlock
|
||||
@ -18,6 +23,7 @@ import com.squareup.kotlinpoet.FunSpec
|
||||
import com.squareup.kotlinpoet.KModifier
|
||||
import com.squareup.kotlinpoet.ParameterSpec
|
||||
import com.squareup.kotlinpoet.PropertySpec
|
||||
import com.squareup.kotlinpoet.TypeName
|
||||
import com.squareup.kotlinpoet.TypeSpec
|
||||
import com.squareup.kotlinpoet.asTypeName
|
||||
import com.squareup.kotlinpoet.ksp.toAnnotationSpec
|
||||
@ -31,15 +37,32 @@ import java.io.File
|
||||
import kotlin.reflect.KProperty1
|
||||
import kotlin.reflect.full.memberProperties
|
||||
|
||||
private fun KSClassifierReference.quilifiedName(): String = "${qualifier ?.let { "${it.quilifiedName()}." } ?: ""}${referencedName()}"
|
||||
|
||||
class Processor(
|
||||
private val codeGenerator: CodeGenerator
|
||||
) : SymbolProcessor {
|
||||
private val KSPropertyDeclaration.typeName: TypeName
|
||||
get() {
|
||||
return runCatching {
|
||||
type.toTypeName()
|
||||
}.getOrElse {
|
||||
val element = type.element as KSClassifierReference
|
||||
(type.element as KSClassifierReference).let {
|
||||
ClassName(
|
||||
element.qualifier ?.quilifiedName() ?: "",
|
||||
element.referencedName()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@OptIn(KspExperimental::class)
|
||||
override fun process(resolver: Resolver): List<KSAnnotated> {
|
||||
resolver.getSymbolsWithAnnotation(
|
||||
val toRetry = resolver.getSymbolsWithAnnotation(
|
||||
GenerateCRUDModel::class.qualifiedName!!
|
||||
).filterIsInstance<KSClassDeclaration>().forEach { ksClassDeclaration ->
|
||||
val ksFile = ksClassDeclaration.containingFile ?: return@forEach
|
||||
).filterIsInstance<KSClassDeclaration>().filterNot { ksClassDeclaration ->
|
||||
val ksFile = ksClassDeclaration.containingFile ?: return@filterNot false
|
||||
runCatching {
|
||||
FileSpec.builder(
|
||||
ksClassDeclaration.packageName.asString(),
|
||||
"GeneratedModels${ksFile.fileName.removeSuffix(".kt")}"
|
||||
@ -77,9 +100,9 @@ class Processor(
|
||||
primaryConstructor(
|
||||
FunSpec.constructorBuilder().apply {
|
||||
ksClassProperties.forEach {
|
||||
addParameter(it.simpleName.getShortName(), it.type.toTypeName())
|
||||
addParameter(it.simpleName.getShortName(), it.typeName)
|
||||
typeBuilder.addProperty(
|
||||
PropertySpec.builder(it.simpleName.getShortName(), it.type.toTypeName(), KModifier.OVERRIDE).apply {
|
||||
PropertySpec.builder(it.simpleName.getShortName(), it.typeName, KModifier.OVERRIDE).apply {
|
||||
initializer(it.simpleName.getShortName())
|
||||
}.build()
|
||||
)
|
||||
@ -131,12 +154,12 @@ class Processor(
|
||||
FunSpec.constructorBuilder().apply {
|
||||
propertiesToOverrideInRegistered.forEach {
|
||||
addParameter(
|
||||
ParameterSpec.builder(it.simpleName.getShortName(), it.type.toTypeName()).apply {
|
||||
ParameterSpec.builder(it.simpleName.getShortName(), it.typeName).apply {
|
||||
annotations += it.annotations.map { it.toAnnotationSpec() }
|
||||
}.build()
|
||||
)
|
||||
typeBuilder.addProperty(
|
||||
PropertySpec.builder(it.simpleName.getShortName(), it.type.toTypeName(), KModifier.OVERRIDE).apply {
|
||||
PropertySpec.builder(it.simpleName.getShortName(), it.typeName, KModifier.OVERRIDE).apply {
|
||||
initializer(it.simpleName.getShortName())
|
||||
}.build()
|
||||
)
|
||||
@ -164,7 +187,7 @@ class Processor(
|
||||
FunSpec.builder("asRegistered").apply {
|
||||
receiver(ksClassDeclaration.toClassName())
|
||||
(registeredTypesProperties.filter { it.simpleName.asString() !in ksClassPropertiesNames }).forEach {
|
||||
addParameter(it.simpleName.asString(), it.type.toTypeName())
|
||||
addParameter(it.simpleName.asString(), it.typeName)
|
||||
}
|
||||
addCode(
|
||||
CodeBlock.of(
|
||||
@ -186,8 +209,9 @@ class Processor(
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}.isSuccess
|
||||
}.toList()
|
||||
|
||||
return emptyList()
|
||||
return toRetry
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ import kotlinx.serialization.Serializable
|
||||
public data class NewTest(
|
||||
public override val property1: String,
|
||||
public override val property2: Int,
|
||||
public override val parent: ParentTypeId?,
|
||||
) : Test
|
||||
|
||||
@Serializable
|
||||
@ -21,8 +22,10 @@ public data class RegisteredTest(
|
||||
public override val id: TestId,
|
||||
public override val property1: String,
|
||||
public override val property2: Int,
|
||||
public override val parent: ParentTypeId?,
|
||||
) : Test, IRegisteredTest
|
||||
|
||||
public fun Test.asNew(): NewTest = NewTest(property1, property2)
|
||||
public fun Test.asNew(): NewTest = NewTest(property1, property2, parent)
|
||||
|
||||
public fun Test.asRegistered(id: TestId): RegisteredTest = RegisteredTest(id, property1, property2)
|
||||
public fun Test.asRegistered(id: TestId): RegisteredTest = RegisteredTest(id, property1, property2,
|
||||
parent)
|
||||
|
@ -11,10 +11,13 @@ value class TestId(
|
||||
val long: Long
|
||||
)
|
||||
|
||||
typealias ParentTypeId = TestId
|
||||
|
||||
@GenerateCRUDModel(IRegisteredTest::class)
|
||||
sealed interface Test {
|
||||
val property1: String
|
||||
val property2: Int
|
||||
val parent: ParentTypeId?
|
||||
|
||||
@GenerateCRUDModelExcludeOverride
|
||||
val excludedProperty: String
|
||||
|
Loading…
Reference in New Issue
Block a user