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

Kotlinpoet: Ommitting redundant `public` modifier from generated types and properties

有没有办法从生成的类型和属性中省略多余的 public 修饰符 KotlinPoet 分别是 TypeSpec.BuilderPropertySpec.Builder?

没有,也没有计划支持此类功能。如果您的用例没有显式 public 修饰符很重要,那么一个好的解决方案是 post-使用删除它们的脚本处理输出。

以上是正确的。在 KotlinPoet 中无法省略多余的 public 修饰符,这是有充分理由的。

但是,所有这些(在我的情况下是不必要的)警告让我很紧张,我不得不找到一些方法来摆脱它们。我最终想到的是在 KotlinPoet 生成的文件中抑制它们。

这是 FileSpec.Builder 的扩展,可让您抑制针对特定生成文件的警告。

internal fun FileSpec.Builder.suppressWarningTypes(vararg types: String) {
    if (types.isEmpty()) {
        return
    }

    val format = "%S,".repeat(types.count()).trimEnd(',')
    addAnnotation(
        AnnotationSpec.builder(ClassName("", "Suppress"))
            .addMember(format, *types)
            .build()
    )
}

下面是一个示例,说明如何使用它来消除生成文件中的冗余可见性修饰符警告:

val fileBuilder = FileSpec.builder(myPackageName, myClassName)
fileBuilder.suppressWarningTypes("RedundantVisibilityModifier")

扩展还支持抑制多种警告类型:

fileBuilder.suppressWarningTypes("RedundantVisibilityModifier", "USELESS_CAST")

请注意,我绝不建议您删除生成的代码中所有困扰您的警告! 谨慎使用此代码!