Releases: square/kotlinpoet
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).
1.13.2
1.13.1
What's Changed
- Fix: Look at canonical names instead of just package names when generating import aliases by @Egorand in #1519
- Fix: Ignore KSP annotation arguments without a value by @rickclephas in #1523
- Fix: Fix arguments handling in KSType.toTypeName() by @ZacSweers in #1529
New Contributors
- @rickclephas made their first contribution in #1523
Full Changelog: 1.13.0...1.13.1
1.13.0
What's Changed
- New: Kotlin 1.8.0.
- New: KSP 1.8.0-1.0.9.
- New: Support context receivers on TypeSpecs + extract ContextReceivable API (#1269).
- New: Optimize
OriginatingElements
andTagMap
implementations (#1270). - New: Auto-generate import aliases for types and members (#1355).
- New: Insert underscores into large decimal literals (#1384).
- New: New factory function
FileSpec.builder(ClassName)
(#1397). - Fix: Fix StackOverflowError when calling
KSTypeArgument.toTypeName()
for a wildcard in a recursive type bound (#1272). - Fix: Fix transitive aliases (#1306).
- Fix: Fix Aliases as TypeArgument (#1321).
- Fix: Don't escape special characters inside raw strings (#1331).
- Fix: Fix KSP interop's output of the annotation parameter value of type Char (#1338).
- Fix: Fix KSP interop's output for primitive arrays (#1340).
- Fix: Avoid emitting public if
shouldEmitPublicModifier
returns false (#1342). - Fix: Fix context receivers being rendered in an incorrect position when on a nullable/suspending
LambdaTypeName
(#1454). - Fix: Do not use
bestGuess
forKClass.asClassName
(#1469). - Fix: Handle fake nested types with platform mapped parents (#1472).
- Fix: Fix
TypeName
equals (#1477). - Fix: Make equals consistent with compareTo for
ClassName
(#1506).
New Contributors
- @popematt made their first contribution in #1272
- @bitPogo made their first contribution in #1306
- @mars885 made their first contribution in #1338
- @sjudd made their first contribution in #1344
- @Sironheart made their first contribution in #1384
- @polarene made their first contribution in #1397
- @DeoTimeTheGithubUser made their first contribution in #1454
- @drawers made their first contribution in #1477
Full Changelog: 1.12.0...1.13.0
1.12.0
What's Changed
- Fix typo in changelog by @WhosNickDoglio in #1228
- Fix doc site list by @ZacSweers in #1231
- Add Java 18 to CI build matrix by @Egorand in #1237
- Run tests on all JDKs but only build on 18 by @Egorand in #1238
- setup-java v3 by @sullis in #1239
- Add support for context-receivers by @DRSchlaubi in #1233
- Resolve enum constants when emitting types by @martinbonnin in #1235
- Update dependencies by @Egorand in #1240
- Properly unwrap KSTypeAlias with an unused type parameter by @Egorand in #1241
- Unwrap nested KSTypeAliases recursively by @Egorand in #1242
- Add support for context receivers @PropertySpec and fix issues with annotations by @seriouslyhypersonic in #1247
- Work around KT-52315 by @ephemient in #1248
- use %N instead of %L for annotation arg names so keywords are handled by @dkilmer in #1249
- Add a test for #1035 by @Egorand in #1250
- Fix KDoc link by @aksh1618 in #1255
- Fix a bug caused by too long return expressions by @zsqw123 in #1256
- Add support for external property getter by @roihershberg in #1260
- Update to Kotlin 1.7 + other deps by @ZacSweers in #1262
- Promote KSP APIs to stable + integrate ABI validator by @ZacSweers in #1263
- Gradle 7.4.2 by @Egorand in #1265
- Add version badge to docs/index.md by @Egorand in #1266
New Contributors
- @WhosNickDoglio made their first contribution in #1228
- @DRSchlaubi made their first contribution in #1233
- @seriouslyhypersonic made their first contribution in #1247
- @ephemient made their first contribution in #1248
- @dkilmer made their first contribution in #1249
- @aksh1618 made their first contribution in #1255
- @zsqw123 made their first contribution in #1256
- @roihershberg made their first contribution in #1260
Full Changelog: 1.11.0...1.12.0
1.11.0
Thanks to @liujingxing and @BoD for contributing to this release.
-
New: Kotlin scripting support in
FileSpec
.val spec = FileSpec.scriptBuilder("Taco") .addStatement("println(%S)", "hello world!") .addKotlinDefaultImports() .build()
Generates a Taco.kts file with the following contents:
println("hello world!")
-
New: Emit trailing commas for multi-line parameters and annotations.
-
New: Add
KSAnnotation.toAnnotationSpec()
. -
New: Add
Unit
andCharSequence
conversions in javapoet-interop. -
New: Add support for default imports in
FileSpec
.- This is particularly oriented at scripting support, but can also be used in non-script files.
-
New: Update to Kotlin 1.6.10.
-
Fix: Fail compilation if you only pass one string to
ClassName
. -
Fix: Inline val property if its getter is inline.
-
Fix: Add
yield
to the list of reserved keywords. -
Fix: Enforce only allowed parameter modifiers in
ParameterSpec
(i.e.crossinline
,vararg
, andnoinline
). -
Fix: Fix
CodeBlock
s in class delegation gettingtoString()
'd instead of participating in code writing. -
Fix: Error when attempting to convert KSP error types (i.e. if
KSType.isError
is true) toTypeName
.
1.10.2
1.10.1
1.10.0
Thanks to @martinbonnin, @idanakav, @goooler, and @anandwana001 for contributing to this release.
- New: Add a new KSP interop artifact. See docs for more details.
- New: Add a new JavaPoet interop artifact. See docs for more details.
- New: Allow copying a
ParameterizedTypeName
with new type arguments via newcopy()
overload. - kotlinx-metadata artifacts have been consolidated to a single
com.squareup:kotlinpoet-metadata
maven artifact. The previouskotlinpoet-metadata-*
subartifacts are no longer published. - New:
TypeNameAliasTag
has been moved to KotlinPoet's main artifact underTypeAliasTag
, for reuse with KSP interop. ImmutableKm*
classes have been removed. They were deemed to be a needless abstraction over the basekotlinx-metadata
Km types. All usages of these should be substituted with their non-immutable base types.- Fix: Fix self-referencing type variables in metadata parsing.
- Fix: Use delicate APIs rather than noisy logging ones when converting annotation mirrors in
AnnotationSpec.get
. - Fix: Update error message when metadata cannot be read to a more actionable one.
- Fix: Avoid escaping already escaped strings.
- Add docs about
kotlin-reflect
usage. - Avoid using kotlin-reflect for looking up
Unit
types where possible. - Test all the way up to JDK 17.
- Update Kotlin to 1.5.31.