更新日志¶
未发布¶
感谢 [@IRus][IRus] 为此版本做出贡献。
2025-04-15
- 新增:支持上下文参数 (Context Parameters) (#2094)
版本 2.1.0¶
感谢 @ForteScarlet, @TrevorSStone, @RaoPrashanth, @damianw, @ansehoon1999, @TheMrMilchmann 为此版本做出贡献。
2025-02-25
- 新增:Kotlin 2.1.10。
- 新增:KSP 2.1.10-1.0.30。
- 修复:支持匿名类的委托 (delegates)。(#2034)
- 修复:防止别名导入 (aliased imports) 与现有导入冲突。(#2052)
- 修复:
TypeName.MUTABLE_MAP_ENTRY
现在正确使用MutableEntry
嵌套类名称。(#2061) - 修复:对类型的可空版本和不可空版本使用相同的别名导入。(#2068)
- 修复:如果函数式接口具有父接口,则允许其包含零个方法。(#2075)
版本 2.0.0¶
感谢 @brokenhappy, @tajobe, @niyajali, @ForteScarlet 为此版本做出贡献。
2024-10-23
此版本与 KotlinPoet 1.x 源码和二进制兼容。
此版本最重要的行为变更是,生成的代码中的空格默认不再换行。
KotlinPoet 1.x 过去会在代码行超出长度限制时用换行符替换空格。这通常能改善代码格式,但也可能导致生成的代码出现编译错误。不间断空格可以用 ·
字符标记,但这个功能的易发现性不高。
即使包含空格的代码行超出长度限制,KotlinPoet 2.0 也不再对空格进行换行。新引入的 ♢
字符可用于标记那些可安全换行的空格,这能改善代码格式。·
字符被保留以保持兼容性,但其行为现在等同于普通空格。
- 新增:Kotlin 2.0.10。
- 新增:空格默认不换行。
- 新增:新的
♢
占位符,代表一个可安全换行的空格。 - 新增:添加
KSTypeAlias.toClassName()
。(#1956) - 新增:添加
KSType.toClassNameOrNull()
。(#1956) - 修复:仅包含初始化块 (init block) 的枚举类现在也生成所需的冒号。(#1953)
- 修复:在
KSAnnotation.toAnnotationSpec()
中保留类型别名 (typealiases)。(#1956) - 修复:在
KSType.toClassName()
中保留可空性 (nullability)。(#1956)
版本 1.18.1¶
感谢 @mitasov-ra 为此版本做出贡献。
2024-07-15
- 修复:KT-18706 的解决方法:KotlinPoet 现在生成不带反引号的导入别名 (#1920)。
// before, doesn't compile due to KT-18706
import com.example.one.`$Foo` as `One$Foo`
import com.example.two.`$Foo` as `Two$Foo`
// now, compiles
import com.example.one.`$Foo` as One__Foo
import com.example.two.`$Foo` as Two__Foo
版本 1.18.0¶
感谢 @DanielGronau 为此版本做出贡献。
2024-07-05
- 新增:Kotlin 2.0.0。
- 新增:KSP 2.0.0-1.0.22。
- 新增:将
kotlinpoet-metadata
从预览版升级到稳定版。 - 新增:将
kotlinpoet-metadata
迁移到稳定的org.jetbrains.kotlin:kotlin-metadata-jvm
artifact 进行 Metadata 解析。 - 新增:使
KSAnnotation.toAnnotationSpec()
和KSClassDeclaration.toClassName()
中的枚举项引用更健壮。 - 修复:在
KSTypeReference.toTypeName()
中不要将函数类型的类型别名展开为LambdaTypeName
。 - 修复:避免在
%L
翻译中四舍五入小的 double 和 float 值 (#1927)。 - 修复:修复 KSP2 中的类型别名类型参数解析 (#1929)。
版本 1.17.0¶
感谢 @jisungbin, @hfhbd, @evant, @sgjesse, @sebek64 为此版本做出贡献。
2024-05-24
- 变更:kotlinx-metadata 0.9.0。请注意 0.9.0 中
KotlinClassMetadata.read
已弃用,并由readStrict
替换 (#1830)。 - 注意:我们现在也提供
lenient
参数来映射到底层的readStrict()
和readLenient()
调用 (#1766)。 - 我们还从公共 API 中移除了一些
Class
/TypeElement
/Metadata
到KmClass
的 API,因为这些 API 现在使用 kotlinx-metadata 的新 API 很容易实现,这使我们能够更好地专注于此 artifact 的 API 表面积 (#1891)。 - 新增:如果主构造函数跨越多行,则父类型列表会换行到每行一个 (#1866)。
- 新增:为可以持有
PropertySpec
和FunSpec
及其构建器的构造提取MemberSpecHolder
接口 (#1877)。 - 新增:
joinToCode
变体,它适用于任何类型,但需要一个转换 lambda 将每个元素转换为CodeBlock
(#1874)。 - 新增:在
KSAnnotation.toAnnotationSpec()
中支持注解类型参数 (#1889)。 - 修复:防止类中的函数与当前作用域中的函数调用发生名称冲突 (#1850)。
- 修复:修复扩展函数导入 (#1814)。
- 修复:在
FileSpec.scriptBuilder
上省略隐式修饰符 (#1813)。 - 修复:修复
PropertySpec
中的尾随换行符 (#1827)。 - 修复:
KSAnnotation.toAnnotationSpec
将 varargs 直接写入,而不是将其转换为数组,以解决 Kotlin 中关于OptIn
注解的问题 (#1833)。 - 修复:不带包名的
MemberName
现在可以正确导入 (#1841) - 修复:如果主构造函数委托给其他构造函数,则抛出异常 (#1859)。
- 修复:带有嵌套类的别名导入 (#1876)。
- 修复:在
KSType.toClassName()
中检查错误类型 (#1890)。 - 修复:支持为重载的
MemberName
生成单个导入 (#1909)。
版本 1.16.0¶
感谢 @drawers, @rickclephas 为此版本做出贡献。
2024-01-18
- 新增:Kotlin 1.9.22。
- 新增:KSP 1.9.22-1.0.16。
- 新增:添加
NameAllocator
API 以控制关键字预分配 (#1803)。 - 修复:修复
KSTypeReference.toTypeName
中缺少suspend
修饰符的问题 (#1793)。 - 修复:遵守同包导入别名 (#1794)。
- 修复:始终在类型头中包含参数文档 (#1800)。
版本 1.15.3¶
感谢 @gabrielittner 为此版本做出贡献。
2023-12-04
- 修复:修复
KSTypeReference.toTypeName
中 lambda 的可空性 (#1756)。
版本 1.15.2¶
感谢 @evant 为此版本做出贡献。
2023-11-30
- 新增:Kotlin 1.9.21。
- 新增:KSP 1.9.21-1.0.15。
- 新增:KSP:更精确地表示函数类型 (#1742)。
版本 1.15.1¶
2023-11-19
- 修复:修复由 #1637 引入的回归问题,该问题导致如果类型的主构造函数没有文档,则在类型的 KDoc 中添加多余的换行符 (#1727)。
版本 1.15.0¶
2023-11-18
感谢 @drawers, @fejesjoco, @takahirom, @martinbonnin, @mcarleio 为此版本做出贡献。
在此版本中,:kotlinpoet
模块已转换为 Kotlin Multiplatform 模块 (#1654),尽管目前它仅支持 JVM 目标。重要提示:除非您使用 Gradle 构建,否则现在需要依赖 kotlinpoet-jvm
artifact,而不是 kotlinpoet
- 请参阅下载获取说明。
- 新增:Kotlin 1.9.20。
- 新增:KSP 1.9.20-1.0.14。
- 新增:为可以持有 TypeSpec 及其构建器的构造提取
TypeSpecHolder
接口 (#1723)。 - 新增:从
FileSpec
暴露相对路径 (#1720)。 - 新增:从
FileSpec.writeTo()
返回生成的文件路径。(#1514)。 - 新增:移除不稳定类型的默认兼容性 (#1662)。
- 新增:弃用
TypeSpec.expectClassBuilder()
和TypeSpec.valueClassBuilder()
(#1589)。 - 新增:添加选项以将
KSAnnotation
转换为AnnotationSpec
时省略默认值 (#1538)。 - 新增:添加
FileSpec.builder
以方便使用MemberName
(#1585)。 - 修复:为
DecimalFormatSymbols.minusSign
设置值以确保跨区域设置一致性 (#1658)。 - 修复:修复 KDoc 中到增量 KSP 的链接 (#1638)。
- 修复:发出主构造函数 KDoc (#1637)。
- 变更:kotlinx-metadata 0.7.0。这对
:kotlinpoet-metadata
模块的用户来说是一个破坏性变更,因为大多数Flags
-API 扩展已被移除,转而使用现在可用的一方版本。
版本 1.14.2¶
2023-05-30
- 修复:修复
Annotatable.Builder
中二进制兼容性覆盖中又一个缺失的 API (#1581)。
版本 1.14.1¶
2023-05-29
- 修复:恢复可注解和可文档化构建器的 ABI 稳定性 (#1580)。
版本 1.14.0¶
2023-05-29
感谢 @Omico, @drawers, @RBusarow 为此版本做出贡献。
- 新增:Kotlin 1.8.21。
- 新增:KSP 1.8.21-1.0.11。
- 新增:在 Java 字节码中启用默认方法 (#1561)。
- 新增:在 Renovate 中将 Kotlin 和 Renovate 更新分组在一起 (#1562)。
- 新增:为可注解的构造及其构建器提取特性接口 (#1564)。
- 新增:为可文档化的构造及其构建器提取特性接口 (#1571)。
- 新增:文档记录
STAR
的用法 (#1572)。 - 新增:添加接受
MemberName
的FunSpec
构建器 (#1574)。 - 修复:在重写函数或构造函数参数上省略 public 修饰符 (#1550)。
- 修复:正确处理各种类型中的成员 (#1558)。
-
修复:函数返回类型现在默认为
Unit
,除非显式设置 (#1559)。之前,当
FunSpec
没有指定返回类型并生成表达式体时,不会发出返回类型。然而,从1.14.0
开始,在这种情况下 KotlinPoet 不会将Unit
添加为返回类型。为了纠正生成的输出,您需要指定FunSpec
的实际返回类型。在
1.14.0
之前,如果省略,则不生成返回类型val funSpec = FunSpec.builder("foo") .addStatement("return 1") .build()
public fun foo() = 1
从
1.14.0
开始,如果未另行设置,返回类型默认为Unit
val funSpec = FunSpec.builder("foo") .addStatement("return 1") .build()
public fun foo(): Unit = 1 // ❌
要修复它,请显式定义返回类型
val funSpec = FunSpec.builder("foo") + .returns(INT) .addStatement("return 1") .build()
public fun foo(): Int = 1 // ✅
此外,作为此更改的一部分,
FunSpec.returnType
已更改为不可空。这是一个源码和二进制兼容的更改,但如果您之前进行空检查,则升级后可能会出现新的警告。 -
修复:在名称查找期间将嵌套类名称附加到别名 (#1568)。
- 修复:允许带有上下文接收者且没有 getter 或 setter 的 PropertySpec (#1575)。
版本 1.13.2¶
2023-05-05
感谢 @Squiry 为此版本做出贡献。
- 修复:修复
KSType.toTypeName
以便与别名类型一起工作 (#1534)。
版本 1.13.1¶
2023-04-28
感谢 @rickclephas 为此版本做出贡献。
- 修复:在生成导入别名时,查看规范名称而不是仅查看包名 (#1519)。
- 修复:忽略没有值的 KSP 注解参数 (#1523)。
- 修复:修复
KSType.toTypeName()
中的参数处理 (#1529)。
版本 1.13.0¶
2023-04-06
感谢 @popematt, @bitPogo, @mars885, @sjudd, @Sironheart, @polarene, @DeoTimeTheGithubUser, @drawers 为此版本做出贡献。
- 新增:Kotlin 1.8.0。
- 新增:KSP 1.8.0-1.0.9。
- 新增:支持 TypeSpecs 上的上下文接收者 + 提取 ContextReceivable API (#1269)。
- 新增:优化
OriginatingElements
和TagMap
实现 (#1270)。 - 新增:为类型和成员自动生成导入别名 (#1355)。
- 新增:在大十进制字面量中插入下划线 (#1384)。
- 新增:新的工厂函数
FileSpec.builder(ClassName)
(#1397)。 - 修复:调用
KSTypeArgument.toTypeName()
处理递归类型界限中的通配符时修复 StackOverflowError (#1272)。 - 修复:修复传递性别名 (#1306)。
- 修复:修复 Aliases 作为 TypeArgument (#1321)。
- 修复:不要在原始字符串中转义特殊字符 (#1331)。
- 修复:修复 KSP 互操作输出 Char 类型的注解参数值 (#1338)。
- 修复:修复 KSP 互操作处理原始数组 (#1340)。
- 修复:如果
shouldEmitPublicModifier
返回 false,则避免发出 public 修饰符 (#1342)。 - 修复:修复在可空/挂起
LambdaTypeName
上下文接收者渲染位置不正确的问题 (#1454)。 - 修复:不要对
KClass.asClassName
使用bestGuess
(#1469)。 - 修复:处理带有平台映射父类的假嵌套类型 (#1472)。
- 修复:修复
TypeName
的 equals (#1477)。 - 修复:使
ClassName
的 equals 与 compareTo 一致 (#1506)。
版本 1.12.0¶
2022-06-13
感谢 @WhosNickDoglio, @sullis, @DRSchlaubi, @martinbonnin, @seriouslyhypersonic, @ephemient, @dkilmer, @aksh1618, @zsqw123, @roihershberg 为此版本做出贡献。
- 新增:Kotlin 1.7.0。
- 新增:添加对上下文接收者的支持。
- 新增:添加对外部属性 getter 的支持。
- 新增:
interop-ksp
API 升级到稳定版。 - 修复:发出类型时解析枚举常量。
- 修复:使用 KSP 处理类型别名时,修复类型参数映射。
- 修复:正确解包带有未使用类型参数的
KSTypeAlias
。 - 修复:递归解包嵌套的
KSTypeAlias
。 - 修复:添加对上下文接收者
@PropertySpec
的支持并修复注解问题。 - 修复:将
header
和impl
视为关键字(KT-52315 的解决方法)。 - 修复:对注解参数名称使用
%N
而不是%L
,以便处理关键字。 - 修复:改进长
return
表达式的处理。
版本 1.11.0¶
2022-03-24
感谢 @liujingxing 和 @BoD 为此版本做出贡献。
- 新增:在
FileSpec
中支持 Kotlin 脚本。
val spec = FileSpec.scriptBuilder("Taco")
.addStatement("println(%S)", "hello world!")
.addKotlinDefaultImports()
.build()
生成一个内容如下的 Taco.kts
文件
println("hello world!")
- 新增:对多行参数和注解发出尾随逗号。
- 新增:添加
KSAnnotation.toAnnotationSpec()
。 - 新增:在
javapoet-interop
中添加Unit
和CharSequence
转换。 - 新增:在
FileSpec
中添加对默认导入的支持。 - 这主要面向脚本支持,但也用于非脚本文件。
- 新增:更新到 Kotlin 1.6.10。
- 修复:如果您只向
ClassName
传递一个字符串,则编译失败。 - 修复:如果 val 属性的 getter 是
inline
的,则内联该属性。 - 修复:将
yield
添加到保留关键字列表。 - 修复:在
ParameterSpec
中强制执行只允许的参数修饰符(即crossinline
,vararg
和noinline
)。 - 修复:修复类委托中的
CodeBlock
被toString()
而不是参与代码写入的问题。 - 修复:尝试将 KSP 错误类型(即如果
KSType.isError
为 true)转换为TypeName
时出错。
版本 1.10.2¶
2021-10-22
感谢 @glureau 和 @goooler 为此版本做出贡献。
- 新增:将
AnnotationSpec.get()
切换为使用arrayOf()
语法而不是[]
。 - 修复:不要对长包名的别名导入进行换行。
- 修复:不要在行注释中对类型名进行换行。
- 修复:忽略 Java 的
@Deprecated
注解在注解的合成方法上。
版本 1.10.1¶
2021-09-21
感谢 @evant 为此版本做出贡献。
- 修复:正确生成带有类型参数的 KSP 互操作类型别名。
- 修复:为 KSP 互操作中的
fun KSTypeArgument.toTypeName
添加缺失的默认TypeParameterResolver.EMPTY
参数。
版本 1.10.0¶
2021-09-20
感谢 @martinbonnin, @idanakav, @goooler, 和 @anandwana001 为此版本做出贡献。
- 新增:添加新的 KSP 互操作 artifact。有关更多详细信息,请参阅文档。
- 新增:添加新的 JavaPoet 互操作 artifact。有关更多详细信息,请参阅文档。
- 新增:允许通过新的
copy()
重载复制带有新类型参数的ParameterizedTypeName
。 - kotlinx-metadata artifacts 已整合到一个
com.squareup:kotlinpoet-metadata
Maven artifact 中。之前的kotlinpoet-metadata-*
子 artifact 不再发布。 - 新增:
TypeNameAliasTag
已移至 KotlinPoet 的主 artifact 中,名称为TypeAliasTag
,以便与 KSP 互操作一起重用。 ImmutableKm*
类已被移除。它们被认为是对基础kotlinx-metadata
Km 类型的冗余抽象。所有对此类的使用都应替换为其非不可变的基础类型。- 修复:修复元数据解析中的自引用类型变量。
- 修复:在
AnnotationSpec.get
中转换注解镜像时,使用 delicate API 而不是产生噪声日志的 API。 - 修复:当无法读取元数据时,更新错误消息使其更具可操作性。
- 修复:避免转义已转义的字符串。
- 添加关于
kotlin-reflect
用法的文档。 - 尽可能避免使用 kotlin-reflect 查找
Unit
类型。 - 测试支持到 JDK 17。
- 更新 Kotlin 到 1.5.31。
版本 1.9.0¶
2021-06-22
- 新增:Kotlin 1.5.10。
- 新增:之前弃用的与 Java 反射和 Mirror API 互操作的 API 已恢复弃用状态,并标记了
@DelicateKotlinPoetApi
注解。 - 新增:
CodeBlock.Builder.withIndent
助手函数。 - 新增:允许在
ParameterSpec.Builder
和PropertySpec.Builder
中设置初始化器和默认值后对其进行更改。 - 新增:
MemberName.isExtension
属性,它指示 KotlinPoet 始终导入该成员,即使在同一作用域存在冲突的声明。 - 修复:转义仅包含下划线的成员名称。
- 修复:如果通过
TypeSpec.primaryConstructor
设置了主构造函数,则始终发出空主构造函数。
版本 1.8.0¶
2021-03-29
- 新增:Kotlin 1.4.31。
- 新增:添加
KModifier.VALUE
以支持value class
声明。 - 新增:允许使用自定义
ClassLoader
与ReflectiveClassInspector
。 - 新增:更新到 kotlinx-metadata 0.2.0。
- 修复:确保
ImmutableKmProperty.toMutable()
复制fieldSignature
。 - 修复:防止导入的
MemberName
与当前作用域的成员发生名称冲突。 - 修复:防止类型与同名父类型发生名称冲突。
- 修复:不要为
expect
和external
函数生成空体。 - 修复:不允许
expect
或external
类初始化父类型。 - 修复:不允许在
external
类中调用委托构造函数。 - 修复:允许内联/值类中存在非 public 的主构造函数。
- 修复:允许内联/值类中存在初始化块。
- 修复:省略接口中成员的冗余
abstract
修饰符
版本 1.7.2¶
2020-10-20
- 新增:检测带有
return·
和throw·
前缀的表达式体。 - 修复:省略自定义访问器上的可见性修饰符。
版本 1.7.1¶
2020-10-15
- 修复:1.7.0 版本使用 JDK 11 发布,这在 Gradle 元数据中将
"org.gradle.jvm.version"
设置为"11"
,导致在较早的 Java 版本上无法使用该库(参见 #999)。1.7.1 版本使用 JDK 8 发布,解决了此问题。
版本 1.7.0¶
2020-10-14
- 新增:Kotlin 1.4.10。
- 新增:生成的代码默认与显式 API 模式兼容。
- 新增:除了硬关键字外,也转义软关键字和修饰符关键字。
- 新增:改进枚举常量生成,以获得更清晰的差异。
- 新增:不允许在不可变属性上设置 setter。
- 新增:确保表达式体中有尾随换行符。
- 新增:确保无参数自定义 setter 后有尾随换行符。
- 修复:不要将带有自定义访问器的属性自动转换为主构造函数属性。
- 修复:不允许带有主体的无参数 setter。
- 修复:防止自动换行转义关键字内的空格。
版本 1.6.0¶
2020-05-28
- 新增:弃用 Mirror API 集成。
Mirror API 集成,例如 TypeElement.asClassName()
和 FunSpec.overriding(ExecutableElement)
,在此版本中已被弃用。这些 KotlinPoet API 最常用于注解处理器。由于 kapt 在桩 (stub)(即 Java 文件)上运行注解处理器,许多特定于 Kotlin 的信息在转换过程中丢失,KotlinPoet 无法通过 Mirror API 集成访问这些信息。例如:
- 别名类型,例如
kotlin.String
,被转换为它们的 JVM 表示形式,例如java.lang.String
。 - 类型可空性信息不可访问。
suspend
函数被视为带有额外Continuation
参数的简单函数。
正确的解决方案是切换到 KotlinPoet-metadata 或 KotlinPoet-metadata-specs API,这些 API 从 @Metadata
注解获取特定于 Kotlin 的信息并生成正确的 KotlinPoet Specs。我们未来可能会探索为弃用的 API 添加新的基于元数据的替代方案。
- 新增:Kotlin 1.3.72。
- 新增:改进
MemberName
以支持运算符重载。 - 新增:在
AnnotationSpec
中支持泛型。 - 新增:添加对函数式接口的支持。
- 新增:使更多
FunSpec.Builder
成员公开以方便修改。 - 修复:在嵌套声明中正确传播隐式类型和函数修饰符。
- 修复:正确转义包含
$
字符的类型名称。 - 修复:不要两次发出
LambdaTypeName
注解。 - 修复:在
TypeName.copy()
中保留标签。
版本 1.5.0¶
2020-01-09
KotlinPoet 现在以 JDK8 为目标,这意味着在安装了旧版本 JDK 的机器上执行包含 KotlinPoet 作为依赖项的构建将无法工作。这不会影响 KotlinPoet 生成的代码:只要不使用新版本中引入的任何特性,生成的代码仍然可以针对 JDK6 进行编译。
- 新增:Kotlin 1.3.61。
- 新增:在 KotlinPoet-metadata 中添加处理 FileFacades 的支持。
- 新增:在注解类中添加对嵌套对象和伴生对象的支持。
- 新增:改进不匹配的开放/关闭语句字符的错误消息。
- 新增:可用时,使用注解镜像标记
AnnotationSpec
。 - 新增:从元数据创建
TypeSpec
时包含枚举项上的注解。 - 修复:修复类型的元数据解析。
- 修复:允许文件名是 Kotlin 关键字。
- 修复:正确转义带有反引号的类型别名。
- 修复:允许创建名称可以用反引号转义的
TypeSpec
。 - 修复:正确转义带有反引号的枚举常量名称。
- 修复:发出
TypeSpec
时保持属性和初始化器的正确顺序。注意:此更改后,任何在初始化块之后声明的属性将不会添加到主构造函数中,而是将在TypeSpec
主体中发出。 - 修复:如果类型 KDoc 为空但存在参数 KDoc,则不发出开头的换行符。
- 修复:确保 KotlinPoet-metadata 正确解析包名。
## 版本 1.4.4
2019-11-16
- 修复:在 KotlinPoet-metadata 中支持具体化的内联类型。
版本 1.4.3¶
2019-10-30
- 修复:在 KotlinPoet-metadata 中不要为抽象函数发出桩 (stub)。
版本 1.4.2¶
2019-10-28
- 修复:在 KotlinPoet-metadata 中正确处理抽象元素。
- 修复:在 KotlinPoet-metadata 中正确处理类型别名。
- 修复:正确渲染 KDocs 末尾的 % 符号。
版本 1.4.1¶
2019-10-18
- 新增:为
TypeAliasSpec
添加注解支持。 - 新增:从 Kotlin
Metadata
读取类型注解。 - 新增:引入
ImmutableKmDeclarationContainer
。 - 修复:使用完整包名对
auto-common
进行 shading。 - 修复:支持从 Kotlin
Metadata
读取自指类型变量(例如Asset<A : Asset<A>>
)。
版本 1.4.0¶
2019-09-24
- 新增:此版本引入了新的 KotlinPoet-metadata API,它使得内省 Kotlin 类型并基于该数据构建 KotlinPoet Specs 变得容易。
类型内省的策略由 ClassInspector
驱动,它是一个用于查找给定类的 JVM 信息的基本接口。此接口可选地被 kotlinpoet-metadata-specs
artifact 中的 toTypeSpec()
/toFileSpec()
API 使用,以提供元数据中不存在的类信息(如重写、JVM 修饰符等)。ReflectiveClassInspector
(用于反射)和 ElementsClassInspector
(用于注解处理中的 javax Elements API)中提供了两个包含电池 (batteries-included) 的实现。这些实现通过其各自的 kotlinpoet-classinspector-*
artifact 提供。更多信息请参阅KotlinPoet-metadata-specs README。
在本版本发布时,此 API 处于实验模式,需要通过 KotlinPoetMetadataPreview
注解选择启用。
- 新增:Kotlin 1.3.50。
- 新增:一个新的构造函数,简化
ParameterSpec
实例的创建。 - 新增:新的
ClassName
构造函数。 - 新增:
TypeName
及其子类现在可以存储标签。 - 新增:大多数 Specs 的
toBuilder()
方法添加可选参数。 - 新增:接受
vararg
参数的 Spec 方法的List
重载。 - 新增:
CodeBlock.Builder.clear()
助手方法。 - 新增:
FunSpec.Builder.clearBody()
助手方法。 - 修复:正确转义枚举常量名称。
- 修复:确保 KDoc 和函数体中有尾随换行符。
- 修复:空界限的
TypeVariableName
现在将默认为Any?
。 - 修复:不要为主构造函数发出括号。
- 修复:不再允许简单名称为空的
ClassName
。 - 修复:如果名称包含无法用反引号转义的非法字符,则抛出异常。
版本 1.3.0¶
2019-05-30
- 新增:不在主构造函数中内联注解。
- 新增:发出主构造函数时强制换行。
- 新增:支持将 MemberNames 用作 %N 的参数。
- 新增:添加更多 ClassName 常量:ClassName.STRING, ClassName.LIST 等。
- 新增:添加 ClassName.constructorReference() 和 MemberName.reference()。
- 新增:使 %N 接受 MemberNames。
- 新增:转义导入别名中的空格。
- 新增:转义 ClassNames 中的空格。
- 新增:转义 MemberNames 中的空格。
- 新增:转义包含空格的导入。
- 新增:转义包含空格的包名。
- 新增:使用 2 个空格缩进。
- 新增:注解值仅缩进一层。
- 修复:仅将唯一的源元素传递给 Filer。
- 修复:修复同一包中嵌套在类内部的 MemberNames 错误。
版本 1.2.0¶
2019-03-28
- 新增:添加 writeTo(Filer) 和源元素 API。
- 新增:使 *Spec 类型可标记。
- 新增:使 FunSpec.Builder#addCode 接受 vararg Any?。
- 修复:导入默认包中的成员。
- 修复:在控制流创建方法中添加不换行空格。
- 修复:注解数组类型中忽略了名为“value”的参数。
版本 1.1.0¶
2019-02-28
- 新增:Kotlin 1.3.21。
- 新增:支持使用
%M
和MemberName
类型引用成员。 - 新增:添加扩展,用于从
ClassName
、KClass
和Class
获取MemberName
。 - 新增:允许将
CodeBlock
作为参数传递给%P
。 - 新增:允许对象进行接口委托。
- 修复:不在
toString()
中发出可见空白字符。 - 修复:防止函数签名内部在奇怪的地方换行。
- 修复:val 和属性名之间不换行。
- 修复:允许将行前缀传递给
LineWrapper
,以便在 KDoc 中实现正确的换行。 - 修复:为没有标签的
TypeSpec
Kdoc 添加换行。 - 修复:为其余 Specs 添加换行。
- 修复:修复属性 getter/setters 的 kdoc 格式问题。
- 修复:不包装
FunSpec
中的单行注释。 - 修复:添加不换行的包名。
- 修复:通过预计算
TypeSpec
所有嵌套的简单名称,移除CodeWriter.resolve()
中的 n^2 算法。 - 修复:修复空枚举类别的边缘情况。
- 修复:修复
KType.asTypeName()
中 Nullable 类型参数的处理问题。 - 修复:修复
FileSpec
中长注释换行错误。 - 修复:将主构造函数参数/属性的 KDoc 附加到元素上,而不是在类型头中发出。
版本 1.0.1¶
2019-01-02
- 新增:允许不带常量的枚举。
- 新增:改进 TypeSpec KDoc 的格式。
- 新增:支持 TypeSpec 中的 @property 和 @param KDoc 标签。
- 修复:对 %P 的参数使用预格式化字符串。
版本 1.0.0¶
2018-12-10
- 新增:Kotlin 1.3.11。
- 修复:防止导入语句中的换行。
版本 1.0.0-RC3¶
2018-11-28
- 新增:Kotlin 1.3.10。
- 新增:为字符串模板添加
%P
占位符。 - 新增:添加对接收者 kdoc 的支持。
- 新增:避免将
Unit
作为返回类型发出。 - 新增:添加对空 setter 的支持。
- 新增:添加对内联类的检查。
- 新增:如果属性和变量名是关键字,则进行转义。
- 新增:将
%>
,%<
,%[
,%]
占位符替换为⇥
,⇤
,«
,»
。 - 新增:将
%W
替换为空格,并添加·
作为不换行空格。 - 新增:将
TypeName
改为密封类。 - 新增:文档改进。
- 新增:将
TypeName
修饰符方法替换为copy()
。 - 新增:重命名
WildcardTypeName
的成员,使其与生产者/消费者泛型模型匹配。 - 新增:将
TypeName.nullable
重命名为TypeName.isNullable
。 - 新增:将
LambdaTypeName.suspending
重命名为LambdaTypeName.isSuspending
。 - 新增:将
TypeVariableName.reified
重命名为TypeVariableName.isReified
。 - 修复:仅对具有
Any?
上界的类型发出星投影。 - 修复:折叠具有转义名称的属性。
版本 1.0.0-RC2¶
2018-10-22
- 新增:Kotlin 1.2.71。
- 新增:README 改进。
- 新增:允许在
beginControlFlow()
中使用左花括号和参数。 - 新增:为
ParameterSpec
添加 KDoc,并将其折叠到父级 KDoc 中。 - 新增:支持
PropertySpec
中的TypeVariable
。 - 新增:为
LambdaTypeName
中的注解类型添加括号。 - 新增:改进内联属性的错误消息和文档。
- 新增:允许密封类声明抽象属性。
- 新增:添加
buildCodeBlock()
辅助函数。 - 新增:允许将带有语句的
CodeBlock
用作属性初始化器和默认参数值。 - 新增:将
NameAllocator.clone()
重命名为NameAllocator.copy()
。 - 新增:将
TypeName.asNonNullable()
重命名为TypeName.asNonNull()
。 - 新增:移除
PropertySpec.varBuilder()
(改用mutable()
)。 - 新增:允许导入默认包中的顶级成员。
- 新增:添加重载以将 KDoc 添加到返回类型。
- 修复:创建
TypeName
时区分IntArray
和Array<Int>
。 - 修复:在
plusParameter()
中使用TypeName
代替ClassName
作为参数类型。 - 修复:从
KType
构建TypeName
时保留类型参数的协变/逆变。 - 修复:在将属性与主构造函数参数合并时,不验证修饰符。
- 修复:在格式化字符串中转义 $ 字符。
- 修复:
FileSpec.Builder
空包和子文件夹修复。 - 修复:在参数 KDoc 末尾添加新行。
- 修复:在
toBuilder()
中添加参数 KDoc。
版本 1.0.0-RC1¶
2018-07-16
- 新增:在导入和规范类名中转义关键字。
- 新增:改进
external
支持。 - 新增:
KType
和KTypeParameter
的扩展。 - 新增:添加 builder 方法以简化添加常见的 kotlin.jvm 注解。
- 新增:枚举可以拥有伴生对象。
- 新增:为
TypeSpec#toBuilder()
添加缺失的 primaryConstructor 和 companionObject。 - 新增:使 Kind 中子类型检查的 val 为 public。
- 新增:如果类/属性/函数/变量名包含空格、连字符或其他符号,则自动转义。
- 新增:改进
ParameterizedTypeName
API。 - 新增:添加
WildcardTypeName.STAR
常量。 - 新增:暴露可变的 builder 属性,并将其验证移至构建时。
- 修复:参数列表使用常规缩进。
- 修复:主构造函数中定义的属性上的内联注解。
- 修复:使用
Any?
作为默认类型变量界限。 - 修复:修复导入注解
TypeName
的问题。 - 修复:如果任何主构造函数属性带有 KDoc,则将属性放在新行上。
- 修复:在类型签名中正确发出 where 块。
- 修复:避免主构造函数中的类型名冲突。
- 修复:添加更多界限时,移除隐式的
TypeVariable
界限。 - 修复:合并构造函数参数和属性中的注解和修饰符。
- 修复:将委托构造函数参数与构造函数一起替换。
版本 0.7.0¶
2018-02-16
- 新增:将缩进增加到 4 个空格。
- 新增:将超接口委托为构造函数参数。
- 新增:支持将
PropertySpec
作为CodeBlock
字面量。 - 新增:支持
TypeAliasSpec
的 KDoc。 - 新增:允许在伴生对象中添加初始化块。
- 新增:转义
ParameterSpec
中也是关键字的名称。 - 新增:转义语句中的名称。
- 新增:将 com.squareup.kotlinpoet 设置为自动模块名。
- 新增:支持 suspending lambda 类型。
- 新增:支持带命名的
LambdaTypeName
参数。 - 新增:支持 dynamic 类型。
- 新增:禁止通配符导入。
- 新增:依赖 Kotlin 1.2.21。
- 修复:正确处理匿名类上的超类/接口。
- 修复:修复边界过滤到
Any?
。 - 修复:包装长属性初始化器。
- 修复:修复参数列表的格式和缩进。
版本 0.6.0¶
2017-11-03
- 新增:支持 lambda 扩展。
- 新增:支持导入中的重命名,例如
import bar.Bar as bBar
。 - 新增:支持扩展和内联属性。
- 新增:支持 reified 类型。
- 新增:暴露
LambdaTypeName
内部的封闭类型。 - 新增:依赖 Kotlin 1.1.51。
- 新增:改进了注解的 API 和格式。
- 新增:改进了多平台支持。
- 修复:如果函数和包名是 Kotlin 关键字,则进行转义。
- 修复:正确格式化 WildcardTypeName 的类声明。
版本 0.5.0¶
2017-09-13
- 新增:将
addFun()
重命名为addFunction()
。 - 新增:将
KotlinFile
重命名为FileSpec
。 - 新增:将
KotlinFile.addFileAnnotation()
重命名为addAnnotation()
。 - 新增:将
KotlinFile.addFileComment()
重命名为addComment()
。 - 新增:支持跨平台代码,包括
HEADER
和IMPL
修饰符。 - 新增:支持类型别名的类型变量。
- 新增:支持构造函数委托。
- 新增:支持带名称的伴生对象。
- 新增:依赖 Kotlin 1.1.4-3。
- 修复:当参数多于两个时,每行格式化一个参数。
- 修复:当构造函数体为空时,不发出花括号。
- 修复:当没有主构造函数时,不调用超类构造函数。
- 修复:对函数强制执行正确的修饰符。
版本 0.4.0¶
2017-08-08
- 新增:将 KotlinPoet 的扩展(如
asClassName()
)更改为顶级函数。 - 新增:添加声明点协变/逆变支持。
- 新增:改进单表达式体的处理。
- 新增:支持文件注解。
- 新增:支持从顶级文件导入。
- 新增:接受超类构造函数参数。
- 新增:支持使用
constructor
关键字的主构造函数。 - 修复:不发出 setter 参数类型。
- 修复:在
NameAllocator
中支持 Kotlin 关键字。 - 修复:为主构造函数发出正确的默认参数。
- 修复:将注解用作参数时,正确格式化注解。
- 修复:发出可空类型时识别导入。
- 修复:当超类具有无参数构造函数时,调用超类构造函数。
- 修复:如果所有属性都在主构造函数中声明,则省略类花括号。
- 修复:不发出空的类体。
- 修复:发出声明多个泛型类型约束的正确语法。
- 修复:支持对象、伴生对象和接口上的属性。
- 修复:对 throws 使用
AnnotationSpec
。
版本 0.3.0¶
2017-06-11
- 新增:对象和伴生对象。
- 新增:
TypeAliasSpec
用于创建类型别名。 - 新增:
LambdaTypeName
用于创建 lambda 类型。 - 新增:将属性声明折叠到构造函数参数中。
- 新增:用于创建类型名称的扩展和调用函数:
Runnable::class.asClassName()
。 - 新增:对表达式体的基本支持。
- 新增:对自定义访问器的基本支持。
- 新增:移除
Filer
写入和源元素概念。这些源自javac
注解处理器。 - 修复:生成有效的注解类。
- 修复:对 varargs 使用
KModifier
。 - 修复:对数组类型使用
ParameterizedTypeName
。 - 修复:从
KClass
中提取 Kotlin 名称,而不是 Java 名称。 - 修复:发出有效的类字面量:
Double::class
而不是Double.class
。 - 修复:以预期的顺序发出修饰符。
- 修复:为枚举类和重写成员发出正确的语法。
版本 0.2.0¶
2017-05-21
- 新增:将 API 签名翻转为 (name, type) 而不是 (type, name)。
- 新增:支持可空类型。
- 新增:支持委托属性。
- 新增:扩展函数。
- 新增:支持顶级属性。
- 修复:继承应使用
:
而不是extends
和implements
。 - 修复:使 initializerBlock 发出
init {}
。
版本 0.1.0¶
2017-05-16
- 初次公开发布。