Releases: square/kotlinpoet
1.17.0
Thanks to @jisungbin, @hfhbd, @evant, @sgjesse, @sebek64 for contributing to this release.
- Change: kotlinx-metadata 0.9.0. Note that the
KotlinClassMetadata.read
is deprecated in 0.9.0 and replaced withreadStrict
(#1830).- Note: we now also provide
lenient
parameters to map to the underlyingreadStrict()
andreadLenient()
calls (#1766). - We have also removed various
Class
/TypeElement
/Metadata
-to-KmClass
APIs from the public API, as these are trivial to write now with kotlinx-metadata's newer APIs and allows us to focus the API surface area of this artifact better (#1891).
- Note: we now also provide
- New: Supertype list wraps to one-per-line if the primary constructor spans multiple lines (#1866).
- New: Extract
MemberSpecHolder
interface for constructs that can holdPropertySpec
s andFunSpec
s and their builders (#1877). - New:
joinToCode
variant which operates on any type, but requires a transform lambda to convert each element into aCodeBlock
(#1874). - New: Support annotation type arguments in
KSAnnotation.toAnnotationSpec()
(#1889). - Fix: Prevent name clashes between a function in class and a function call in current scope (#1850).
- Fix: Fix extension function imports (#1814).
- Fix: Omit implicit modifiers on
FileSpec.scriptBuilder
(#1813). - Fix: Fix trailing newline in
PropertySpec
(#1827). - Fix:
KSAnnotation.toAnnotationSpec
writes varargs in place instead of making them an array to work around a Kotlin issue with OptIn annotations (#1833). - Fix:
MemberName
s without a package are now correctly imported (#1841) - Fix: Throw if primary constructor delegates to other constructors (#1859).
- Fix: Aliased imports with nested class (#1876).
- Fix: Check for error types in
KSType.toClassName()
(#1890). - Fix: Support generating a single import for overloaded
MemberName
s (#1909).
1.16.0
Thanks to @drawers, @rickclephas for contributing to this release.
- New: Kotlin 1.9.22.
- New: KSP 1.9.22-1.0.16.
- New: Add
NameAllocator
API to control keyword pre-allocation (#1803). - Fix: Fix issue with missing suspend modifier in
KSTypeReference.toTypeName
(#1793). - Fix: Honour same-package import aliases (#1794).
- Fix: Always include parameter docs in the type header (#1800).
1.15.3
1.15.2
1.15.1
1.15.0
Thanks to @drawers, @fejesjoco, @takahirom, @martinbonnin, @mcarleio for contributing to this release.
In this release the :kotlinpoet
module has been converted to a Kotlin Multiplatform module (#1654), though for now it only supports the JVM target.
- New: Kotlin 1.9.20.
- New: KSP 1.9.20-1.0.14.
- New: Extract
TypeSpecHolder
interface for constructs that can hold aTypeSpec
and their builders (#1723). - New: Expose relative path from
FileSpec
(#1720). - New: Return the generated path from
FileSpec.writeTo()
. (#1514). - New: Remove default compatibility from unstable types (#1662).
- New: Deprecate
TypeSpec.expectClassBuilder()
andTypeSpec.valueClassBuilder()
(#1589). - New: Add option to convert
KSAnnotation
toAnnotationSpec
while omitting default values (#1538). - New: Add
FileSpec.builder
convenience forMemberName
(#1585). - Fix: Set
DecimalFormatSymbols.minusSign
for consistency across locales (#1658). - Fix: Fix link to incremental KSP in KDoc (#1638).
- Fix: Emit primary constructor KDoc (#1637).
- Change: kotlinx-metadata 0.7.0. This is a breaking change for users of the
:kotlinpoet-metadata
module, as mostFlags
-API extensions have been removed in favor of the now-available first-party versions.
1.14.2
1.14.1
1.14.0
Thanks to @Omico, @drawers, @RBusarow for contributing to this release.
-
New: Kotlin 1.8.21.
-
New: KSP 1.8.21-1.0.11.
-
New: Enable default methods in Java bytecode (#1561).
-
New: Group Kotlin and Renovate updates together in Renovate (#1562).
-
New: Extract trait interface for annotatable constructs and their builders (#1564).
-
New: Extract trait interface for documentable constructs and their builders (#1571).
-
New: Document the usage of
STAR
(#1572). -
New: Add builder for
FunSpec
which accepts aMemberName
(#1574). -
Fix: Omit public modifier on override function or constructor parameters (#1550).
-
Fix: Correct handling of members in various types (#1558).
-
Fix: Function return types now default to
Unit
unless explicitly set (#1559).Previously the default was
null
which behaved likeUnit
for block bodies. When an expression body was produced,
however, no return type would be emitted. This meant that the return type was implicit based on the contents of
the body.With this change, when no return type is specified and an expression body is produced, the return type will be
explicitlyUnit
. Specify the actual return type explicitly to correct the output.Old versions:
val funSpec = FunSpec.builder("foo") .addStatement("return 1") .build()
public fun foo() = 1
This version, incorrect:
val funSpec = FunSpec.builder("foo") .addStatement("return 1") .build()
public fun foo(): Unit = 1 // β
This version, correct:
val funSpec = FunSpec.builder("foo") + .returns(INT) .addStatement("return 1") .build()
public fun foo(): Int = 1 // β
Additionally, as part of this change,
FunSpec.returnType
has changed to be non-nullable. This is a source- and
binary-compatible change, although if you were performing null-checks then new warnings may appear after upgrade. -
Fix: Append nested class names to alias during name lookup (#1568).
-
Fix: Allow PropertySpec with context receivers and without getter or setter (#1575).