标签: kotlinpoet

如何使用 KotlinPoet 获取 PropertySpec 的正确 TypeName

使用 KotlinPoet,为了生成用于向类和构造函数添加属性的 PropertySpec,您需要一个 TypeName 对象。

TypeMirror.asTypeName() KotlinPoet 函数已弃用,因为它并不总是对 Kotlin 类型正确工作。

但我找不到一个关于如何使用 kotlinpoet-metadata API 获取 Kotlin 类(例如 kotlin.String)的正确 TypeName 的示例,正​​如弃用消息所述的那样。

kotlinpoet-metadata API 的文档似乎也完全损坏(转到https://square.github.io/kotlinpoet/interop-kotlinx-metadata/#interop-with-kotlinx-metadata并单击 API 部分下的任何内容)

有谁有如何用一些 kotlinpoet-metadata 代码替换 TypeMirror.asTypeName() 来获取 TypeName 的示例,以便我可以创建 PropertySpec?

kotlin kapt kotlinpoet

8
推荐指数
1
解决办法
1428
查看次数

当我构建应用程序时,如何使用 KotlinPoet 生成代码?(摇篮)

我是 kotlinpoet 的新手,我一直在阅读文档,它似乎是一个很棒的库,但我找不到解决我的问题的示例。

我有一个依赖项lib-domain-0.1.jar,其中有业务对象,例如:

package pe.com.business.domain

data class Person(val id: Int? = null, val name: String? = null)
...
..
package pe.com.business.domain

data class Departament(val id: Int? = null, val direction: String? = null)
...
..
.
Run Code Online (Sandbox Code Playgroud)

我想构建一个新的依赖项,lib-domain-fx-0-1.jar它具有相同的域,但具有 JavaFx 属性(使用 Tornadofx),例如:

package pe.com.business.domainfx
import tornadofx.*

class Person {
  val idProperty = SimpleIntegerProperty()
  var id by idProperty

  val nameProperty = SimpleStringProperty()
  var name by nameProperty
}
...
..
package pe.com.business.domainfx
import tornadofx.*

class Departament {
  val idProperty …
Run Code Online (Sandbox Code Playgroud)

build gradle kotlin kotlinpoet

7
推荐指数
1
解决办法
2657
查看次数

Kotlinpoet:从生成的类型和属性中省略冗余的“public”修饰符

有什么方法可以省略public通过 KotlinPoetTypeSpec.BuilderPropertySpec.Builder分别生成的类型和属性中的冗余修饰符吗?

code-generation kotlin kotlinpoet

6
推荐指数
2
解决办法
1583
查看次数

可为空值的KClass引用

在Kotlin中,当声明为类型获取KClass时,例如String :: class(表示其类型为String的值),是否有一种语法来指示该值可以为空(即表示String?值而不是String) .

上下文是我正在尝试使用KotlinPoet生成Kotlin类,但我创建的所有属性(使用PropertySpec.builder)都不可为空(例如String,当我真正想要的是String?)时.

谢谢你的帮助.

kotlin kotlinpoet

4
推荐指数
2
解决办法
645
查看次数

使用KotlinPoet生成数据类

我想用KotlinPoet生成简单的数据类:

data class User(val id: Int)
Run Code Online (Sandbox Code Playgroud)

我这样做:

val builder = KotlinFile.builder("", "Foo")
val classBuilder = TypeSpec.classBuilder("User").addModifiers(KModifier.DATA)
val ctor = FunSpec.constructorBuilder()
ctor.addParameter("id", Int::class)
classBuilder.primaryConstructor(ctor.build())
builder.addType(classBuilder.build())
builder.build().writeTo(System.out)
Run Code Online (Sandbox Code Playgroud)

但是我得到的是:

data class User(id: Int) {
}
Run Code Online (Sandbox Code Playgroud)

如何val在构造函数参数中添加修饰符?

kotlin kotlinpoet

4
推荐指数
1
解决办法
1084
查看次数

如何通过 kotlinpoet 生成具有自定义界面的类

我想生成一个kotlin类定义,这个类实现了一个自定义接口,目标类定义如下:

data class TemplateState(val data: String) : ContractState {
}
Run Code Online (Sandbox Code Playgroud)

除了界面部分,我使用下面的诗人代码生成它,有人可以帮忙吗?

val file = FileSpec.builder("com.template", "StatesAndContracts")
        .addType(TypeSpec.classBuilder("TemplateState")
                .addModifiers(KModifier.DATA)
                .primaryConstructor(FunSpec.constructorBuilder()
                .addParameter("data", String::class)
                .build())
                .addProperty(PropertySpec.builder("data", String::class)
                .initializer("data")
                .build())
                .build())
        .build()
Run Code Online (Sandbox Code Playgroud)

kotlin kotlinpoet

3
推荐指数
1
解决办法
857
查看次数

如何使用 KotlinPoet 生成“by Lazy”

我想生成这样的代码:

class B private constructor() : A {

    companion object {
        val instance: B by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            B()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用 KotlinPoet:

private fun genCompanionObject() = TypeSpec.companionObjectBuilder()
        .addProperty(PropertySpec.builder("instance", A::class.java).build()).build()
Run Code Online (Sandbox Code Playgroud)

如何生成by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED)我在文档中找不到一些有用的API 。

kotlin kotlinpoet

2
推荐指数
1
解决办法
811
查看次数

如何生成一个类,该类扩展了使用kotlinpoet实现通用接口的类

给定一个像

interface Builder<R> {
    fun build() : R
}
Run Code Online (Sandbox Code Playgroud)

如何生成一个BooBuilder使用kotlinpoet实现此接口的类。

我在文档中找不到创建通用接口(或类)的示例。

我想从什么开始

class BooBuilder(): Builder<Boo> { //...
Run Code Online (Sandbox Code Playgroud)

我明白我应该从

TypeSpec
  .classBuilder("BooBuilder")
  .addSuperinterface( /* I have no idea what to put here */ )
  // add methods
Run Code Online (Sandbox Code Playgroud)

kotlin kotlinpoet

2
推荐指数
1
解决办法
184
查看次数

KotlinPoet - 接口方法没有括号

我使用以下代码使用 KotlinPoet 生成接口

val funspec = FunSpec.builder("test").build()
val interfacespec = TypeSpec.interfaceBuilder("Test").addFunction(funspec).build()
Run Code Online (Sandbox Code Playgroud)

这会生成以下代码:

interface Test {
      fun test() {
      }
}
Run Code Online (Sandbox Code Playgroud)

该函数test()有一个默认实现(有括号)。有没有办法删除默认实现(删除括号)?

kotlin kotlinpoet

2
推荐指数
1
解决办法
380
查看次数

如何在 kotlin 诗人中返回函数

我正在使用 KotlinPoet 进行注释处理,但遇到了问题。我需要在生成的类中返回函数,但我不确定 KotlinPoet 可以做到吗?如果您有一些经验,请帮助我。

我能做的:

fun test(): String = ...
Run Code Online (Sandbox Code Playgroud)

我需要做的

fun test(): () -> String = ...
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlinpoet

1
推荐指数
1
解决办法
1042
查看次数

标签 统计

kotlin ×10

kotlinpoet ×10

android ×1

build ×1

code-generation ×1

gradle ×1

kapt ×1