square / anvil

A Kotlin compiler plugin to make dependency injection with Dagger 2 easier.
Apache License 2.0
1.32k stars 83 forks source link

Support the K2 Compiler #733

Open JoelWilcox opened 1 year ago

JoelWilcox commented 1 year ago

For now this is just a placeholder to track future K2 support, and to document that Anvil is currently incompatible with K2 as folks start testing it out in projects that may be using Anvil.

joshfriend commented 1 year ago

Can the k2 warning be disabled (or shown only once)? It shows up literally thousands of times in build logs when K2 is enabled.

chrisjenx commented 1 year ago

With 1.9.20 out and 2.0 next, is there an ETA for K2 support, as would love to start testing and sending feedback to the KT team.

ZacSweers commented 1 year ago

No ETA currently, we more or less have to get #751 and #704 done first

matejdro commented 6 months ago

K2 seems to be out and stable now. As far as I can see, there is no way of disabling it for Kotlin 2.0? So all Anvil projects are stuck at 1.9 for now.

ZacSweers commented 6 months ago

As far as I can see, there is no way of disabling it for Kotlin 2.0?

You can force language version 1.9 while still using Kotlin 2.0.0.

You can get fairly far with the 2.5.0 betas. I wrote some instructions here: https://www.zacsweers.dev/preparing-for-k2/#anvil. The TL;DR is that yes, projects with component merging will require language version 1.9, but any projects using just factory gen can use KSP instead.

We're working on it, we didn't expect the IR APIs we use to break in 2.0 as they weren't annotated as obsolete in the compiler.

mattinger commented 5 months ago

This is definitely very unfortunate. One of the big boosts to using kotlin 2.0.0 is that the compose compiler is versioned and delivered along with the kotlin compiler. This is going to prevent people from using that new compose compiler alongside of anvil.

Is there any kind of a timeline as to when this support might be available?

ZacSweers commented 5 months ago

@mattinger did you read the post I linked above?

mattinger commented 5 months ago

@ZacSweers I did, but it relies on a beta version of the anvil plugin. That's something we generally don't allow in our builds is any beta plugings or runtime dependencies. So i was curious when a release version of anvil will at least support the workaround.

ZacSweers commented 5 months ago

With all due respect, that just means you're blocked on your internal policy, not anvil.

mattinger commented 5 months ago

That is a fair assessment @ZacSweers , which is why i'm asking if there's an ETA on a release version where the workaround will be applicable. It's a beta09 if i remember correctly, so i would think it won't be far off. The again, it is a build tool, and not something we're distributing, so i might be able to get an exception.

ZacSweers commented 5 months ago

It will be released when it's ready. Out of respect for the many subscribers to this issue and general OSS etiquette, please accept this answer for now. We'll update this thread when there's something to update.

mattinger commented 5 months ago

I was not implying that anyone should rush anything. I was just asking if you did have an ETA so i can make an informed decision on trying to get usage of the beta version approved. If the answer is that there's no current ETA, that's fine.