如何从 gradle 任务生成 Kotlin 的类型?

问题描述 投票:0回答:1

我正在我的一个项目中编写一个gradle任务,这个任务需要编写一个kotlin文件。

def fileSpec = FileSpec.builder(packageName.toLowerCase(), "ModelClass")
                .addType(
                        TypeSpec.classBuilder("Model")
                                .primaryConstructor(
                                        FunSpec.constructorBuilder()
                                                .addParameter("name",String.class )
                                                .build()
                                )
                                .addProperty(
                                        PropertySpec.builder("name", String.class)
                                                .initializer("name")
                                                .build()
                                )
                                .build()
                )
                .build()
        def kotlinFile = new File(dir, "ModelClass.kt")
        kotlinFile.withWriter('UTF-8') {
            writer ->
                fileSpec.writeTo(writer)
        }

任务完成,没有任何错误,但生成的类代码缺少 kotlin 类型。

import java.lang.String

public class Model(
  public val name: String,
)

生成的类从 java.lang 导入 String,而不是 Kotlin Std Lib。我的 gradle 任务是用 groovy 编写的(我必须选择 groovy,因为我的 IDE 总是在自定义 gradle.kts 文件中抱怨“代码洞察不可用”)。我想,我们无法从非 kotlin 文件生成 kotlin 文件,或者可以吗?

groovy jetbrains-ide gradle-plugin gradle-task kotlinpoet
1个回答
0
投票

kotlin.String
在运行时并不真正存在,它会编译为
java.lang.String
,因此当您尝试使用反射访问其类型(即
String::class
)时,您会得到
java.lang.String

最简单的方法是使用 KotlinPoet 定义的

STRING
属性。如果您愿意,您还可以创建自己的
ClassName
ClassName("kotlin", "String")

© www.soinside.com 2019 - 2024. All rights reserved.