2

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

4

2 回答 2

4

Egor上面的答案是正确的。没有办法public在 KotlinPoet 中省略多余的修饰符,这是有充分理由的。

然而,所有这些(在我的情况下是不必要的)警告都让我感到紧张,我必须想办法摆脱它们。我最终想出的是在 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")

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

于 2021-01-22T14:14:13.040 回答
1

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

于 2020-11-23T14:51:28.933 回答