Skip to content

Update kotlin#62

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/kotlin
Open

Update kotlin#62
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/kotlin

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate Bot commented Aug 6, 2025

This PR contains the following updates:

Package Change Age Confidence
org.jetbrains.kotlinx:kotlinx-coroutines-play-services 1.7.11.11.0 age confidence
org.jetbrains.kotlinx:kotlinx-datetime 0.7.10.8.0-0.6.x-compat age confidence
org.jetbrains.kotlinx:kotlinx-serialization-core 1.9.01.11.0 age confidence
org.jetbrains.kotlinx:kotlinx-coroutines-test 1.10.21.11.0 age confidence
org.jetbrains.kotlinx:kotlinx-coroutines-core 1.10.21.11.0 age confidence
com.google.devtools.ksp (source) 2.2.0-2.0.22.3.8 age confidence
org.jetbrains.kotlin.plugin.compose 2.2.02.3.21 age confidence
org.jetbrains.kotlin.plugin.serialization 2.2.02.3.21 age confidence
org.jetbrains.kotlin.multiplatform 2.2.02.3.21 age confidence

Release Notes

Kotlin/kotlinx.coroutines (org.jetbrains.kotlinx:kotlinx-coroutines-play-services)

v1.11.0

Compare Source

Restored binary compatibility with 1.10.2 and older versions on Wasm/JS for usages of Promise-related functions (#​4661).

v1.10.2

Compare Source

  • Fixed the kotlinx-coroutines-debug JAR file including the module-info.class file twice, resulting in failures in various tooling (#​4314). Thanks, @​RyuNen344!
  • Fixed Flow.stateIn hanging when the scope is cancelled in advance or the flow is empty (#​4322). Thanks, @​francescotescari!
  • Improved handling of dispatcher failures in .limitedParallelism (#​4330) and during flow collection (#​4272).
  • Fixed runBlocking failing to run its coroutine to completion in some cases if its JVM thread got interrupted (#​4399).
  • Small tweaks, fixes, and documentation improvements.

v1.10.1

Compare Source

  • Fixed binary incompatibility introduced for non-JVM targets in #​4261 (#​4309).

v1.10.0

Compare Source

  • Kotlin was updated to 2.1.0 (#​4284).
  • Introduced Flow.any, Flow.all, and Flow.none (#​4212). Thanks, @​CLOVIS-AI!
  • Reorganized kotlinx-coroutines-debug and kotlinx-coroutines-core code to avoid a split package between the two artifacts (#​4247). Note that directly referencing kotlinx.coroutines.debug.AgentPremain must now be replaced with kotlinx.coroutines.debug.internal.AgentPremain. Thanks, @​sellmair!
  • No longer shade byte-buddy in kotlinx-coroutines-debug, reducing the artifact size and simplifying the build configuration of client code. Thanks, @​sellmair!
  • Fixed NullPointerException when using Java-deserialized kotlinx-coroutines-core exceptions (#​4291). Thanks, @​AlexRiedler!
  • Properly report exceptions thrown by CoroutineDispatcher.dispatch instead of raising internal errors (#​4091). Thanks, @​zuevmaxim!
  • Fixed a bug that delayed scheduling of a Dispatchers.Default or Dispatchers.IO task after a yield() in rare scenarios (#​4248).
  • Fixed a bug that prevented the main() coroutine on Wasm/WASI from executing after a delay() call in some scenarios (#​4239).
  • Fixed scheduling of runBlocking tasks on Kotlin/Native that arrive after the runBlocking block was exited (#​4245).
  • Fixed some terminal Flow operators sometimes resuming without taking cancellation into account (#​4254). Thanks, @​jxdabc!
  • Fixed a bug on the JVM that caused coroutine-bound ThreadLocal values not to get cleaned when using non-CoroutineDispatcher continuation interceptors (#​4296).
  • Small tweaks, fixes, and documentation improvements.

v1.9.0

Compare Source

Features
  • Wasm/WASI target support (#​4064). Thanks, @​igoriakovlev!
  • limitedParallelism now optionally accepts the name of the dispatcher view for easier debugging (#​4023).
  • No longer initialize Dispatchers.IO on the JVM when other standard dispatchers are accessed (#​4166). Thanks, @​metalhead8816!
  • Introduced the Flow<T>.chunked(size: Int): Flow<List<T>> operator that groups emitted values into groups of the given size (#​1290).
  • Closeable dispatchers are instances of AutoCloseable now (#​4123).
Fixes
  • Calling hasNext on a Channel's iterator is idempotent (#​4065). Thanks, @​gitpaxultek!
  • CoroutineScope() created without an explicit dispatcher uses Dispatchers.Default on Native (#​4074). Thanks, @​whyoleg!
  • Fixed a bug that prevented non-Android Dispatchers.Main from initializing when the Firebase dependency is used (#​3914).
  • Ensured a more intuitive ordering of tasks in runBlocking (#​4134).
  • Forbid casting a Mutex to Semaphore (#​4176).
  • Worked around a stack overflow that may occur when calling asDeferred on a Future many times (#​4156).
Deprecations and promotions
  • Advanced the deprecation levels for BroadcastChannel-based API (#​4197).
  • Advanced the deprecation levels for the old kotlinx-coroutines-test API (#​4198).
  • Deprecated Job.cancelFutureOnCompletion (#​4173).
  • Promoted CoroutineDispatcher.limitedParallelism to stable (#​3864).
  • Promoted CoroutineStart.ATOMIC from ExperimentalCoroutinesApi to DelicateCoroutinesApi (#​4169).
  • Promoted CancellableContinuation.resume with an onCancellation lambda to stable, providing extra arguments to the lambda (#​4088).
  • Marked the classes and interfaces that are not supposed to be inherited from with the new InternalForInheritanceCoroutinesApi opt-in (#​3770).
  • Marked the classes and interfaces inheriting from which is not stable with the new ExperimentalForInheritanceCoroutinesApi opt-in (#​3770).
Other
  • Kotlin was updated to 2.0 (#​4137).
  • Reworked the documentation for CoroutineStart and Channel-based API (#​4147, #​4148, #​4167). Thanks, @​globsterg!
  • Simplified the internal implementation of Job (#​4053).
  • Small tweaks, fixes, and documentation improvements.

v1.8.1

Compare Source

  • Remove the @ExperimentalTime annotation from usages of TimeSource (#​4046). Thanks, @​hfhbd!
  • Introduce a workaround for an Android bug that caused an occasional NullPointerException when setting the StateFlow value on old Android devices (#​3820).
  • No longer use kotlin.random.Random as part of Dispatchers.Default and Dispatchers.IO initialization (#​4051).
  • Flow.timeout throws the exception with which the channel was closed (#​4071).
  • Small tweaks and documentation fixes.
Changelog relative to version 1.8.1-Beta
  • Flow.timeout throws the exception with which the channel was closed (#​4071).
  • Small documentation fixes.

v1.8.0

Compare Source

  • Implement the library for the Web Assembly (Wasm) for JavaScript (#​3713). Thanks @​igoriakovlev!
  • Major Kotlin version update: was 1.8.20, became 1.9.21.
  • On Android, ensure that Dispatchers.Main != Dispatchers.Main.immediate (#​3545, #​3963).
  • Fixed a bug that caused Flow operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream (#​4035, #​4038)
  • kotlinx-coroutines-debug is published with the correct Java 9 module info (#​3944).
  • kotlinx-coroutines-debug no longer requires manually setting DebugProbes.enableCoroutineCreationStackTraces to false, it's the default (#​3783).
  • kotlinx-coroutines-test: set the default timeout of runTest to 60 seconds, added the ability to configure it on the JVM with the kotlinx.coroutines.test.default_timeout=10s (#​3800).
  • kotlinx-coroutines-test: fixed a bug that could lead to not all uncaught exceptions being reported after some tests failed (#​3800).
  • delay(Duration) rounds nanoseconds up to whole milliseconds and not down (#​3920). Thanks @​kevincianfarini!
  • Dispatchers.Default and the default thread for background work are guaranteed to use the same context classloader as the object containing it them (#​3832).
  • It is guaranteed that by the time SharedFlow.collect suspends for the first time, it's registered as a subscriber for that SharedFlow (#​3885). Before, it was also true, but not documented.
  • Atomicfu version is updated to 0.23.1, and Kotlin/Native atomic transformations are enabled, reducing the footprint of coroutine-heavy code (#​3954).
  • Added a workaround for miscompilation of withLock on JS (#​3881). Thanks @​CLOVIS-AI!
  • Small tweaks and documentation fixes.
Changelog relative to version 1.8.0-RC2
  • kotlinx-coroutines-debug no longer requires manually setting DebugProbes.enableCoroutineCreationStackTraces to false, it's the default (#​3783).
  • Fixed a bug that caused Flow operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream (#​4035, #​4038)
  • Small documentation fixes.

v1.7.3

Compare Source

  • Disabled the publication of the multiplatform library metadata for the old (1.6 and earlier) KMP Gradle plugin (#​3809).
  • Fixed a bug introduced in 1.7.2 that disabled the coroutine debugger in IDEA (#​3822).

v1.7.2

Compare Source

Bug fixes and improvements
  • Coroutines debugger no longer keeps track of coroutines with empty coroutine context (#​3782).
  • CopyableThreadContextElement now properly copies an element when crossing the coroutine boundary in flowOn (#​3787). Thanks @​wanyingd1996!
  • Coroutine timeouts no longer prevent K/N newSingleThreadContext from closing (#​3768).
  • A non-linearizability in Mutex during tryLock/unlock sequence with owners is fixed (#​3745).
  • Atomicfu version is updated to 0.21.0.
Kotlin/kotlinx-datetime (org.jetbrains.kotlinx:kotlinx-datetime)

v0.8.0-0.6.x-compat

v0.8.0

Breaking changes:

  • Deprecate TimeZone serialization (#​576).

Additions:

  • Add orNull functions for non-throwing construction of datetime entities (#​68).
  • Add parseOrNull extension functions for non-throwing attempts at parsing (#​508).
  • Introduce LocalIsoWeekDate for representing ISO week dates (#​603).
  • Introduce functions for finding the next or previous date with the given day-of-week (#​129).

Tweaks and fixes:

  • Fix bugs in Instant.until and Instant.periodUntil (#​534).
  • Always output seconds in the DateTimeComponents.Formats.RFC_1123 format (#​608).
  • On Kotlin/Native for Windows, whenever DST transitions are turned off by the user, the current system time zone is now fixed-offset (#​575).
Changelog relative to version 0.8.0-rc02

No changes, only the version is increased.

v0.7.1-0.6.x-compat

Kotlin/kotlinx.serialization (org.jetbrains.kotlinx:kotlinx-serialization-core)

v1.11.0

==================

This release is based on Kotlin 2.3.20 and provides new Json exceptions API and some bugfixes and improvements.

Expose Json exceptions structure

To make working with exceptions easier and providing proper error codes in e.g., REST APIs,
classes JsonException, JsonDecodingException, and JsonEncodingException are now public.
They have relevant public properties, such as shortMessage, path, offset, and others.
This API is currently experimental, and we're going to improve it further in the subsequent releases.
See the linked issues for the details: #​1930, #​1877.

Ability to hide user input from exception messages for security/privacy reasons.

Historically, exception messages in kotlinx.serialization often included the input Json itself for debuggability reason.
Such behavior may pose additional challenges for logging, analytics, and other systems, since
a system is not always allowed to store user data due to privacy/security reasons, which imposes additional sanitation logic.
To address this issue, a new property exceptionsWithDebugInfo is added to JsonConfiguration.
Disable it to hide user input from exception messages.
IMPORTANT: This behavior will be enabled by default when this property becomes stable.
See #​2590 for more details.

Bugfixes and improvements

  • CBOR: Relax value range check when decoding numbers (#​3167)
  • Use a specialized writeDecimalLong method for IO stream integrations in Json (#​3152)

v1.10.0

==================

This release is based on Kotlin 2.3.0 and contains all of the changes from 1.10.0-RC.
The only additional change is a fix for ProtoBuf packing of Kotlin unsigned types (#​3079).
Big thanks to KosmX for contributing the fix.

For your convenience, the changelog for 1.10.0-RC is duplicated below:

Stabilization of APIs

kotlinx-serialization 1.10 and subsequent releases will be focused on stabilization of existing APIs.
The following APIs and configuration options are no longer experimental because they're widely used without any known major issues:

  • Json configuration options: decodeEnumsCaseInsensitive, allowTrailingComma, allowComments, and prettyPrintIndent. (#​3100)
  • @EncodeDefault annotation and its modes. (#​3106)
  • JsonUnquotedLiteral constructor function (#​2900)
  • JsonPrimitive constructor function overloads that accept unsigned types. (#​3117)
  • JSON DSL functions on JsonElement with Nothing? overloads. (#​3117)

Readiness for return value checker

Kotlin 2.3.0 introduces a new feature aimed
at helping you to catch bugs related to the accidentally ignored return value of the function.
kotlinx-serialization 1.10.0-RC code is fully marked for this feature, meaning that you
can get warnings for unused function calls like Json.encodeToString(...).
To get the warnings, the feature has to be enabled in your project as described here.

Polymorphism improvements

Polymorphic serialization received a couple of improvements in this release:

New subclassesOfSealed utility to automatically register sealed subclasses serializers in polymorphic modules (#​2201).
Use it in your SerializersModule when configuring a polymorphic hierarchy which contains both abstract and sealed classes.
For example, when root of your hierarchy is an interface, but most of your inheritors are sealed classes.
The new function will register all known sealed subclasses for you, so you don’t need to list them one by one.
This makes writing your SerializerModules much faster and simpler.
Big thanks to Paul de Vrieze for contributing this feature.

Class discriminator conflict check rework (#​3105).
If a payload already contains a property with the same name as the configured discriminator (for example, type),
it is called a class discriminator conflict.
To produce a correct output and allow more inputs to be deserialized at the same time, the following changes were made:

  • Conflicts introduced by JsonNamingStrategy transformations are now detected during serialization as well and will cause SerializationException.
    It also affects non-polymorphic classes.
  • Conflicts from ClassDisciminatorMode.ALL_JSON_OBJECTS and SerializersModuleBuilder.polymorphicDefaultSerializer are also detected.
  • It is allowed to deserialize such a conflicting key for both sealed and open polymorphic hierarchies.
    Previously, it was possible in the sealed hierarchies alone due to missing assertion. See #​1664 for details.

General improvements

  • Add .serialName to MissingFieldException for clearer diagnostics. (#​3114)
  • Generate unique Automatic-Module-Name entries for metadata JARs. (#​3109)
  • Revised ProGuard rules and added R8 tests. (#​3041)
  • CBOR: Improved error message when a byte string/array type mismatch is encountered. (#​3052)

Bugfixes

  • Fix the type in the BIGNUM_NEGATIVE tag name. (#​3090)
  • CBOR: Fix various bugs in the decoder implementation to be more strict and consistent with the specification.
google/ksp (com.google.devtools.ksp)

v2.3.8

Compare Source

What's Changed
  • Enabled new default annotation use-site rules in Kotlin's Analysis API (see KEEP 402) for more information. Note: KSP was already mostly compatible with KEEP 402, so there shouldn't be any visible changes for users. (#​2888)
  • Enabled ksp.project.isolation by default when Gradle isolated projects are enabled (#​2866)
  • Improved getSymbolsWithAnnotation performance by implementing a new PSI-based resolution strategy (#​2816)
Contributors
  • Thanks to @​hugoncosta made and everyone who reported bugs and participated in discussions!

Full Changelog: google/ksp@2.3.7...2.3.8

v2.3.7

Compare Source

What's Changed
  • Bumped Kotlin target language version to 2.3 (#​2821)
  • Fixed crash caused by upstream dependency (#​2856)
  • Fixed support for Gradle Isolated Projects (#​2844)
Contributors
  • Thanks to everyone who reported bugs and participated in discussions!

Full Changelog: google/ksp@2.3.6...2.3.7

v2.3.6

Compare Source

What's Changed

  • Fixed an issue where module recompilation would fail on Windows environments when KSP2 was enabled (#​2774)
  • Resolved an issue where generated Java sources were ignored when using Android Kotlin Multiplatform with IP-compatible paths (#​2744)
  • Fixed a KSP version 2.3.5 CI error exception that does not break build checks (#​2763)
  • Added symbol-processing-api and common-deps to compile dependencies (#​2789)
  • Improved the detection of built-in Kotlin by removing the reliance on KotlinBaseApiPlugin (#​2772)
  • A back-port of a performance optimization in the Intellij / Analysis API (2785 )
  • Added support for nested typealias Kotlin language feature #​2588
  • Exclude jdbc package from log4j to prevent vulnerability issue #​2651

Contributors

Full Changelog: google/ksp@2.3.5...2.3.6

v2.3.5

Compare Source

What's Changed

  • KSPCoreEnvironment.instance_prop leaks memory when used programmatically #​2742
  • Missing first annotation argument when toByte is used #​2672
  • Fix circular dependency between KSP and KAPT in AGP 9.0 #​2743

Contributors

  • Thanks to everyone who reported bugs and participated in discussions!

Full Changelog: google/ksp@2.3.4...2.3.5

v2.3.4

Compare Source

What's Changed
  • KSP ignores sources in Kotlin directory #​2730
  • Avoid recording Java symbol lookups in non-incremental builds #​2728
  • Clean up ThreadLocals when processing is done #​2709
Contributors
  • Thanks to everyone who reported bugs and participated in discussions!

Full Changelog: google/ksp@2.3.3...2.3.4

v2.3.3

Compare Source

What's Changed
  • Migrate away from a deprecated compilerOptions KGP API #​2703
Contributors
  • Thanks to everyone who reported bugs and participated in discussions!

Full Changelog: google/ksp@2.3.2...2.3.3

v2.3.2

Compare Source

What's Changed

Note: This release is a hotfix for a regression introduced in 2.3.1

  • Fixed an issue where KSP incorrectly processed specific nullable annotations from Java interfaces, leading to incorrect nullability in the generated Kotlin code #​2696
  • Fixed a regression introduced in #​2656 that caused runtime failures for projects using AGP 8.8.0 and older due to an incompatible, version-specific type check. #​2694
Contributors

Thanks to everyone who reported bugs and participated in discussions!

Full Changelog: google/ksp@2.3.1...2.3.2

v2.3.1

Compare Source

What's Changed
  • Added support for AGP 9.0 and built-in Kotlin #​2674
  • Fixed a bug in getJvmCheckedException that incorrectly handled nested classes. #​2584
  • Removed incorrect caching for KSValueArgumentLiteImpl that wrongly merged arguments with different parents, origins, or locations #​2677
Contributors

Thanks to everyone who reported bugs and participated in discussions!
Full Changelog: google/ksp@2.3.0...2.3.1

v2.3.0

Compare Source

What's Changed
  • KSP1 has been deprecated #​2657
  • KSP version is no longer tied to the Kotlin compiler version (moving away from the old - format). #​2658
  • KSP is no longer a compiler plugin (like KSP1). It now operates as a more standalone tool built on stable compiler APIs (shared with tools like IntelliJ).
  • KSP now has fewer limitations on the Kotlin version in use and allows the KSP team to provide better compatibility to KGP/AGP/Gradle
  • Read more about KSP2: https://github.com/google/ksp/blob/main/docs/ksp2.md
Reason for 2.3.0 version name:
  • It is independent of Kotlin now
  • We wanted to match the Kotlin language version
  • It is newer than the latest KSP 2.2.20-2.0.4 release.

Full Changelog: google/ksp@2.2.20-2.0.4...2.3.0

v2.2.21-2.0.5

Compare Source

What's Changed
  • A new Gradle property flag was added to mute the warnings about KSP1 usage. You can enable this by setting warn.on.ksp1.usage=false in your gradle.properties file.

Full Changelog: google/ksp@2.2.21-2.0.4...2.2.21-2.0.5

v2.2.21-2.0.4

Compare Source

What's Changed

Full Changelog: google/ksp@2.2.21-RC2-2.0.4...2.2.21-2.0.4

v2.2.20-2.0.4

Compare Source

What's Changed
  • Unable to build on AGP 8.11.1 using KSP 2.2.20-2.0.3 due to class cast exception #​2614

  • Resolver#getJvmCheckedException(KSPropertyAccessor) throws IllegalArgumentException #​2548

  • ClassCastException when building with 2.2.20-2.0.3 #​2598

  • Replace KaFirStopWorldCacheCleaner with no-op implementation #​2626

  • BuildConfig values are not available during annotation process after upgrading ksp from 2.2.10-2.0.2 -> 2.2.20-2.0.3 #​2597

  • Missing Gradle task wiring with 2.2.20-2.0.3 #​2595

  • 2.2.20-2.0.3 + protobufJavalite build errors #​2596

Contributors

Thanks to everyone who reported bugs and participated in discussions!

Full Changelog: google/ksp@2.2.20-2.0.3...2.2.20-2.0.4

v2.2.20-2.0.3

Compare Source

What's Changed
  • Removed usages of deprecated KGP ApiVersion - #​2400
  • Android integration for KSP has moved on to the new Variant API - #​2250
  • Runtime warning was added for projects that opt out of KSP2 - #​2538
  • AGP version against which KSP is compiled has been upgraded - #​2552
Contributors

Thanks to everyone who reported bugs and participated in discussions!

Full Changelog: google/ksp@2.1.21-2.0.2...2.2.20-2.0.3

v2.2.20-2.0.2

Compare Source

What's Changed

Full Changelog: google/ksp@2.2.20-RC2-2.0.2...2.2.20-2.0.2

v2.2.10-2.0.2

Compare Source

What's Changed

Full Changelog: google/ksp@2.2.10-RC2-2.0.2...2.2.10-2.0.2


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • Between 12:00 AM and 03:59 AM (* 0-3 * * *)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot force-pushed the renovate/kotlin branch from 073002a to ba0fd2e Compare August 15, 2025 12:12
@renovate renovate Bot force-pushed the renovate/kotlin branch 2 times, most recently from 0bdb05d to 05fa991 Compare September 14, 2025 15:24
@renovate renovate Bot force-pushed the renovate/kotlin branch from 05fa991 to 31d6a76 Compare October 9, 2025 07:55
@renovate renovate Bot force-pushed the renovate/kotlin branch from 31d6a76 to 27a1e94 Compare October 25, 2025 03:49
@renovate renovate Bot force-pushed the renovate/kotlin branch from 27a1e94 to 67eedbd Compare November 8, 2025 15:48
@renovate renovate Bot force-pushed the renovate/kotlin branch from 67eedbd to bce3f51 Compare November 22, 2025 07:56
@renovate renovate Bot force-pushed the renovate/kotlin branch from bce3f51 to 7b621b5 Compare December 17, 2025 07:55
@renovate renovate Bot force-pushed the renovate/kotlin branch from 7b621b5 to d29f7c4 Compare January 21, 2026 19:30
@renovate renovate Bot force-pushed the renovate/kotlin branch from d29f7c4 to a1078c1 Compare January 29, 2026 03:05
@renovate renovate Bot force-pushed the renovate/kotlin branch from a1078c1 to 4c5eb88 Compare February 6, 2026 04:13
@renovate renovate Bot force-pushed the renovate/kotlin branch from 4c5eb88 to 7458962 Compare February 19, 2026 11:04
@renovate renovate Bot force-pushed the renovate/kotlin branch from 7458962 to e2b5584 Compare March 31, 2026 12:05
@renovate renovate Bot force-pushed the renovate/kotlin branch from e2b5584 to 955ce7e Compare April 15, 2026 13:22
@renovate renovate Bot force-pushed the renovate/kotlin branch 2 times, most recently from c18d1be to 8a9173f Compare May 7, 2026 18:44
@renovate renovate Bot force-pushed the renovate/kotlin branch from 8a9173f to d7defb8 Compare May 8, 2026 19:35
@renovate renovate Bot force-pushed the renovate/kotlin branch from d7defb8 to f83a907 Compare May 14, 2026 12:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants