首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Kotlin符号处理(KSP)填充现有列表

如何使用Kotlin符号处理(KSP)填充现有列表
EN

Stack Overflow用户
提问于 2022-06-01 19:26:19
回答 1查看 752关注 0票数 0

我最近一直在玩KSP,并且开发了有趣的功能(例如基于布局id的自动回收视图和视图保持生成器),到目前为止一切都很好。

但是,我现在正在尝试做一些不同于根据我设计的注释创建文件的事情。与创建文件不同,我只想填充一个带有我注释的类/对象的列表。

示例:

ClassA.kt

代码语言:javascript
复制
@MyAnnotation
class ClassA(context: Context): SomeBaseClass(context) {
    override fun baseClassFunction() {
        // custom code goes here
    }
}

ClassB.kt

代码语言:javascript
复制
@MyAnnotation
class ClassB(context: Context): SomeBaseClass(context) {
    override fun baseClassFunction() {
        // custom code goes here
    }
}

MyListAgregator.kt

代码语言:javascript
复制
object MyListAgregator {
    const val classList: List<SomeBaseClass> = mutableListOf()
}

其中,我的自定义KSP将执行以下操作

收集由我的@MyAnnotation

  • Create注释的所有类/对象(通常)--它们的实例具有适当的参数(在本例中只是上下文)--

  • 将每个类/对象添加到MyListAgregator

中的classList

我总是可以到达类集合的要点(步骤1),但对我来说,其余的都是一个完全的谜,并且感觉好像KSP总是希望创建代码,而不是执行它?也许我对后一篇文章的看法是错误的,但我在现有的文档中找不到与此相关的任何内容。

我考虑过的另一种选择,但为了避免任何负面影响(例如,性能),实际上是直接修改MyListAgregator文件,以包括列表中的所有实例,就像我自己编写它们一样。不过,如果可能的话,我仍然倾向于采用前一种选择。

EN

回答 1

Stack Overflow用户

发布于 2022-06-10 18:49:27

首先,您需要建立一个规则集,该规则集将应用于带注释的类( KSP术语表中的符号)。例如,它们必须包含一个参数,该参数必须是一个成员属性,并且类型为Context,并且必须是SomeBaseClass的子类。我建议首先查找正确的继承,然后查找参数计数和类型。

您仍在阅读和浏览所有具有此符号的文件。根据这个规则集进行过滤,您将在第2点使用一组类。

在这里,KSP可以为您提供生成代码的接口。但是,KSP将不允许您编辑源文件,而是根据您的条件生成新的源文件。在这里,您必须编写overriden函数的实现,方法是访问它。

您可以保留输出(步骤2中新生成的类)并生成MyListAggregator对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72467134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档