From 2d3f8e2ef8f5938254c3cb328cf3863e04d12957 Mon Sep 17 00:00:00 2001 From: wen Date: Fri, 14 May 2021 16:08:42 +0800 Subject: [PATCH] add update function --- .../java/com/lwjlol/ormkv/demo/UserModel.kt | 2 +- .../annotation/compiler/OrmkvProcessor.kt | 20 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/lwjlol/ormkv/demo/UserModel.kt b/app/src/main/java/com/lwjlol/ormkv/demo/UserModel.kt index a9dc9f8..2d8d398 100644 --- a/app/src/main/java/com/lwjlol/ormkv/demo/UserModel.kt +++ b/app/src/main/java/com/lwjlol/ormkv/demo/UserModel.kt @@ -20,7 +20,7 @@ data class UserModel( @ColumnInfo(defValue = "false") val isMan: Boolean, @ColumnInfo(defValue = "0F", enableReset = false) - private val temperature: Float + val temperature: Float ) { diff --git a/compiler/src/main/java/com/lwjlol/ormkv/annotation/compiler/OrmkvProcessor.kt b/compiler/src/main/java/com/lwjlol/ormkv/annotation/compiler/OrmkvProcessor.kt index 2e2808b..3984440 100644 --- a/compiler/src/main/java/com/lwjlol/ormkv/annotation/compiler/OrmkvProcessor.kt +++ b/compiler/src/main/java/com/lwjlol/ormkv/annotation/compiler/OrmkvProcessor.kt @@ -5,9 +5,6 @@ import com.lwjlol.ormkv.annotation.ColumnInfo import com.lwjlol.ormkv.annotation.Entity import com.lwjlol.ormkv.annotation.Ignore import com.squareup.kotlinpoet.* -import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview -import com.squareup.kotlinpoet.metadata.specs.toTypeSpec -import com.squareup.kotlinpoet.metadata.toImmutableKmClass import java.io.File import javax.annotation.processing.* import javax.lang.model.SourceVersion @@ -87,6 +84,7 @@ class OrmkvProcessor : AbstractProcessor() { val clearCode = StringBuilder() val toStringCode = StringBuilder() val toModelCode = StringBuilder() + val updateCode = StringBuilder() var toModelError = false allMembers.forEachIndexed { _, member -> @@ -192,6 +190,7 @@ class OrmkvProcessor : AbstractProcessor() { ) toStringCode.append("|$propertyName = $$propertyName\n") toModelCode.append("|$propertyName = $propertyName, \n") + updateCode.append("|$propertyName = model.$propertyName\n") if (clear) { if (typeName.toString().contains("String")) { clearCode.append("$propertyName = \"\"\"$defValue\"\"\" \n") @@ -211,8 +210,8 @@ class OrmkvProcessor : AbstractProcessor() { """.trimMargin() ) .build() - ).addToStringFun("return \"\"\"$toStringCode\"\"\".trimMargin()") - + ).addToString("return \"\"\"$toStringCode\"\"\".trimMargin()") + .addUpdate(updateCode.toString().trimMargin(), ClassName(packageName, className)) if (!toModelError) { typeSpec.addToModel(toModelCode.toString(), "$packageName.$className") } @@ -223,7 +222,7 @@ class OrmkvProcessor : AbstractProcessor() { file.writeTo(File(kaptKotlinGeneratedDir, END_FIX)) } - private fun TypeSpec.Builder.addToStringFun(code: String): TypeSpec.Builder { + private fun TypeSpec.Builder.addToString(code: String): TypeSpec.Builder { return addFunction( FunSpec.builder("toString") .returns(String::class) @@ -247,6 +246,15 @@ class OrmkvProcessor : AbstractProcessor() { ) } + private fun TypeSpec.Builder.addUpdate(code: String, typeName: TypeName): TypeSpec.Builder { + return addFunction( + FunSpec.builder("update") + .addParameter(ParameterSpec.builder("model",typeName).build()) + .addCode(code) + .build() + ) + } + companion object { const val KAPT_KOTLIN_GENERATED_OPTION_NAME = "kapt.kotlin.generated" private const val TAG = "OrmkvProcessor"