Releases: square/anvil
Releases · square/anvil
v2.7.0
Changed
- Upgrade Kotlin to
2.2.20 - Upgrade Dagger to
2.57.2 - Constructors for generated
Factorys andMembersInjectors are now private to match changes in Dagger 2.57. This is a breaking change if you relied on the generated constructors and can instead call their staticcreatemethods.
Deprecated
AndroidVariantFilter.androidVariantis now nullable and deprecated. We're no longer guaranteed that the variant will be available when creating the filter, and the base type is slated to be removed in a future release of AGP.
v2.6.1
Changed
- Upgrade Kotlin to
2.2.0 - Update README and ROADMAP docs to note Anvil's deprecation
v2.6.0
Changed
- Upgrade Kotlin to
2.1.21 - Upgrade kotlin-metadata to
2.1.21. This will remain in sync with the Kotlin version for all future releases. - Upgrade KotlinPoet to
2.2.0 - Upgrade Dagger to
2.56.2- This includes updating Anvil's Dagger factory generation code to match changes in Dagger
2.54+for using thedagger.internal.Providertype, which helps prepare for jakarta support. This applies if you use Anvil'sgenerateDaggerFactoriesorgenerateDaggerFactoriesOnlyoptions and is expected to be a breaking change if you have any@Components built using older Dagger versions.
- This includes updating Anvil's Dagger factory generation code to match changes in Dagger
- Development snapshots are now published to the Central Portal Snapshots repository.
v2.5.1
Added
- Documented Anvil's roadmap, see here.
Changed
- Improved incremental compilation support is now enabled by default (#1076). You can still opt-out or temporarily disable this by setting
com.squareup.anvil.trackSourceFiles=falsein yourgradle.propertiesfile. Note that this property will be removed in a future version.
Dependencies
- Upgrade Kotlin to
2.0.21(#1059). Note that while this release targets Kotlin 2.0, the K2 compiler is not yet supported (see the roadmap for more details).
v2.5.0
Anvil now experimentally supports incremental compilation and Gradle's build caching, as of v2.5.0.
This feature is disabled by default. It can be enabled via a Gradle property or the Gradle DSL:
Gradle Properties
# gradle.properties
com.squareup.anvil.trackSourceFiles=true # default is falseGradle DSL
// build.gradle
anvil {
trackSourceFiles = true // default is false
}Removed
- The experimental KSP support from the
2.5.0-betaXXreleases has been removed. For KSP support, use Zac Sweers' fork: https://github.com/ZacSweers/anvil. - Drop Kotlin 1.8 support (#841)
Added
- Incremental compilation and build caching fixes (#836)
- Configuration options can now be set via Gradle properties (#851)
Changed
- Anvil's generated hints are now all generated to the same
anvil.hintpackage, which simplifies hint lookups and better future-proofs future KSP work. Note that this is a user-invisible change, but it will require a one-time recompilation of any Anvil-generated hints. (#975) - Interface merging is now done in the IR backend, improving performance and future compatibility with K2.
@ContributesBindingand@ContributesMultibindinghave been completely reworked to a new implementation that generates one binding dagger module for each contributed binding. While not an ABI-breaking change, this does change the generated code and requires users to re-run Anvil's code gen over any projects contributing bindings in order to be merged with the new implementation.
Deprecated
ClassReference.functionshas been deprecated in favor ofClassReference.memberFunctionsandClassReference.declaredMemberFunctionsClassReference.propertieshas been deprecated in favor ofClassReference.memberPropertiesandClassReference.declaredMemberPropertiesClassName.generateClassName()andClassReference.generateClassName()have been renamed to__.joinSimpleNames()for the sake of clarity. TheClassNameversion has also moved packages, so its new fully qualified name iscom.squareup.anvil.compiler.internal.joinSimpleNames.ClassName.generateClassNameString()has been renamed/moved tocom.squareup.anvil.compiler.internal.generateHintFileName().ContributesBinding.priorityhas been deprecated in favor of the int-value-basedContributesBinding.rank. This allows for more granular prioritization, rather than just the three enum entries thatContributesBinding.Priorityoffered.
Important
IDE auto-replace can auto-replace the enum entry with the corresponding integer, but not the named argument. Automatically-migrated code may wind up with something like priority = RANK_NORMAL. This is an IntelliJ limitation.
Fixed
- don't leak Anvil's annotation artifacts to the target project's compile classpath (#822)
- Gradle configuration caching will no longer be invalidated by changes to
ir-merges.txt(#1045) - The Anvil plugin will no longer cause
KaptGenerateStubsTasktasks to be configured eagerly (#1043) - resolve inherited field-injected generic properties to their substituted type (#1040)
- Resolve generic types when checking Subcomponent factory return types (#1041)
- consider
ignoreQualifierarguments when checking for duplicate bindings (#1033) - incremental compilation is automatically disabled for source sets that perform interface or module merging (#1024)
- include inherited functions in Subcomponent Factory checks (#1038)
- Anvil will now attempt to shorten the names of hint files, generated "merged" subcomponents, and contributed binding modules so that all file names derived from them will have 255 characters or fewer.
- cache generated file paths relative to the build directory (changed from project directory) (#979)
- pass files with only top-level function/property declarations to
CodeGeneratorimplementations (#956) - rename the new int-based priority to
rank, restore the enum topriority(#957) - Fix private targets API use (#961)
- Always generate provider factories for binding modules (#951)
- use the resolved value of
constarguments in propagated annotation arguments (#940) - re-run analysis between an incremental sync and code generation (#943)
- delay
@ContributesSubcomponentgeneration until the last analysis rounds (#946) - Code generated because of a
@Contributes___annotation in a dependency module is now correctly deleted when there is a relevant change in the dependency module. - Nested interfaces and modules can now be contributed to enclosing classes.
- Don't fail the build when a
@Binds-annotated function binds a generic type (#885)- This is a revert of the changes in (#833).
- Binding supertype which is narrower than return type is wrongly allowed by @IlyaGulya in (#833)
- Don't cache the
projectDirorbinaryFileas part ofGeneratedFileCache(#883) - Add restored-from-cache, previously-generated files to analysis results after code generation (#882)
Dependencies
- Update dependency gradle to v8.11.1 (#1072)
- Update dagger to v2.51.1 (#944)
- Upgrade Kotlin to
1.9.24(#891)
Custom Code Generator
- The
GeneratedFileresult type has been deprecated in favor ofGeneratedFileWithSources. This new type allows for precise tracking of the generated files, which in turn drastically improves incremental compilation performance (#693).
Other Notes & Contributions
- @IlyaGulya made their first contribution in (#833)
- @brentwatson made their first contribution in (#1055)
Full Changelog: v2.4.9...v2.5.0
v2.5.0-beta11
v2.5.0-beta10
Deprecated
ClassReference.functionshas been deprecated in favor ofClassReference.memberFunctionsandClassReference.declaredMemberFunctionsClassReference.propertieshas been deprecated in favor ofClassReference.memberPropertiesandClassReference.declaredMemberProperties
Fixed
v2.5.0-beta09
Deprecated
ClassName.generateClassName()andClassReference.generateClassName()have been renamed to__.joinSimpleNames()for the sake of clarity. TheClassNameversion has also moved packages, so its new fully qualified name iscom.squareup.anvil.compiler.internal.joinSimpleNames.ClassName.generateClassNameString()has been renamed/moved tocom.squareup.anvil.compiler.internal.generateHintFileName().
Fixed
- Anvil will now attempt to shorten the names of hint files, generated "merged" subcomponents, and contributed binding modules so that all file names derived from them will have 255 characters or fewer.
v2.5.0-beta08
Changed
- Anvil's generated hints are now all generated to the same
anvil.hintpackage, which simplifies hint lookups and better future-proofs future KSP work. Note that this is a user-invisible change, but it will require a one-time recompilation of any Anvil-generated hints. (#975)
Fixed
v2.5.0-beta07
Fixed
- Another mangled name workaround in KSP (#966)