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

internal.util.cache.AnnoCache.kt Maven / Gradle / Ivy

package com.mybatisflex.kotlin.ksp.internal.util.anno

import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.getAnnotationsByType
import com.google.devtools.ksp.symbol.KSClassDeclaration
import com.google.devtools.ksp.symbol.KSPropertyDeclaration
import com.mybatisflex.annotation.Column
import com.mybatisflex.annotation.Table

/*
    此文件用于缓存 KSP 创建的代理注解对象,避免重复创建。
 */

private val columnCache = HashMap()

private val tableCache = HashMap()

/**
 * 从 [KSPropertyDeclaration] 获取可能存在的 [Column] 注解对象。
 *
 * @receiver 要获取 [Column] 注解的 [KSPropertyDeclaration] 。
 * @return [Column] 注解的代理对象,如果没有找到则返回 null。
 */
@OptIn(KspExperimental::class)
val KSPropertyDeclaration.column: Column?
    get() = columnCache[this] ?: getAnnotationsByType(Column::class).firstOrNull()?.also {
        columnCache[this] = it
    }

/**
 * 从 [KSClassDeclaration] 获取 [Table] 注解对象。
 *
 * @receiver 要获取 [Table] 注解的 [KSClassDeclaration] 。
 * @return [Table] 注解的代理对象。
 */
@OptIn(KspExperimental::class)
val KSClassDeclaration.table: Table
    get() = tableCache.getOrPut(this) {
        getAnnotationsByType(Table::class).first()
    }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy