chore(deps): update dependency dev.zacsweers.metro:dev.zacsweers.metro.gradle.plugin to v0.11.0#252
Merged
renovate[bot] merged 1 commit intomainfrom Feb 25, 2026
Conversation
…o.gradle.plugin to v0.11.0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
0.10.4→0.11.0Release Notes
ZacSweers/metro (dev.zacsweers.metro:dev.zacsweers.metro.gradle.plugin)
v0.11.0Compare Source
2026-02-25
New
Metro now has an informal proposal system inspired by Kotlin KEEPs called MEEPs! Importantly, the
Pin MEEP stands for proposal, not process. It's an informal system for myself and future maintainers to seek broader community input on newer, splashier features and changes to Metro going forward.[MEEP-1826]
@Assistedparameters now rely on matching parameter names.Historically, Dagger/Guice's
@Assistedparameters allowed specifying a custom identifier via@Assisted("some string"), and Metro matched this behavior. However, this is a vestige of Java support, which did not include parameter names in bytecode until Java 8's-parametersflag.Since Metro is in an all-Kotlin world and parameter names are a first-class citizen in Kotlin APIs, Metro is now leveraging that and phasing out support for implicit type matching and custom identifiers.
This means that
@Assistedparameter names in assisted-inject constructors/top-level-functions must match their analogous parameters in@AssistedFactorycreators. No more matching by types, no more disambiguating with@Assisted("customIdentifier").To ease migration to this, this will be rolled out in phases.
@Assisted.valueis soft-deprecated. This is controlled by theassistedIdentifierSeverityGradle DSL option, which is set toWARNby default in this release. This control allows for easy disabling or promotion to error.assistedIdentifierSeveritywill be removed and@Assisted.valuewill be formally deprecated.@Assisted.valuewill be fully deleted and legacy behavior will be unsupported with Metro's first-party annotation.Note that interop annotations are not affected by this change, and any previous Dagger/Guice interop
@Assistedannotation's custom identifiers will still be respected.If you want to completely restore the legacy behavior, you can disable this new mode via
useAssistedParamNamesAsIdentifiersGradle DSL option. Note, however, that this option will eventually be removed.[MEEP-1770] Allow use of
() -> TasProvidertypes.Metro's primary provider type remains
Provider, but as of this release there are a couple of important changes in this space to allow more idiomatic use.Providernow implements() -> Ton supported platfroms (all but Kotlin/JS).enableFunctionProvidersoption to allow use of Kotlin's() -> Thigher order functions. This is disabled by default, but will possibly be promoted to the default behavior in the future. Please share feedback in the linked MEEP.Providersystem.Function0type will be wrapped/unwrapped like otherProviderinterop scenarios do. This limitation is because JS does not allow extending function types.This now allows you to write code like this.
The primary caveat of this new feature is that, if enabled, it essentially prohibits using function types as regular bindings in your graph. If you rely on this behavior, you may need to migrate to something more strongly typed.
[MEEP-1769] Introduce
@GraphPrivateAPI.Up to now, all bindings in graphs are implicitly available to all graph extensions.
Indicates this
@Providesor@Bindsdeclaration shall be private to the graph it's provided in. This means the following:This is a mechanism to enforce that annotated bindings cannot be directly leaked. It may be depended on by any bindings within this graph as an implementation detail or encapsulation.
This is useful for a few situations.
HttpClient.@ForScopeto disambiguate which one you need. By marking each provision in a graph as private, you can trust that parent graph instances are not being accidentally leaked to your extension's scope.This feature is experimental, please share any feedback on the original MEEP.
Misc new stuff
Providerimplement() -> Ton applicable platforms (everything but Kotlin/JS).@ExperimentalMetroApiexperimental annotation to better indicate which APIs are experimental and likely to change.@RequiresIdeSupportexperimental annotation to better indicate which APIs require IDE support.@ExperimentalMetroGradleApiexperimental annotation to better indicate which APIs are experimental and likely to change.@DangerousMetroGradleApiexperimental annotation withERRORseverity to better propagate severity of certain APIs.publicScopedProviderSeverityproperty with a more narrow focus. The previouspublicProviderSeverityis now deprecated and just calls through to this.Enhancements
_assisted context parameter names in top-level function injection.Previously, Metro's IR would run in two passes:
MetroContributioninterfaces.Now, Metro runs in a single pass. Most of Metro's core transformations are run in the first full pass, collects any seen dependency graphs along the way, then they are processed at the end (rather than visit the whole IR tree a second time).
DiagnosticSeveritymetro extension properties to be configurable asmetro.*gradle properties of the same name.ReentrantLock(JVM), a port of the stdlib's Lazy spinlock on (Native), and no-op on web targets.Fixes
@HiddenFromObjCto generated top-level composable classes for native compilations.@Assistedor@Named.@BindingContainerclasses included via@Includeswith concrete type arguments (e.g.,@Includes TypedBindings<Int>). Type parameters are now properly propagated to generated factory classes and substituted during binding resolution.Mapgraph inputs down to graph extensions.Mapinstance not getting reused at injection sites.@Binds-provided bindings from parent graphs.reports/keys-populated-test_Graph_ChildGraph.txtwill now be generated asreports/keys-populated/test/Graph/ChildGraph.txtChanges
enableGraphShardingis now enabled by default. Note this only kicks in (by default) for graphs with 2000+ bindings by default.unusedGraphInputsSeverityis now enabled toWARNseverity by default.2.3.20-RC.Android Studio 2025.3.1.8 Panda 1 Patch 1.8.8via Gradle's not-so-obviousGRADLE_PLUGIN_API_VERSION_ATTRIBUTEAPI.forceEnableFirInIdeandcompilerVersionwith@DangerousMetroGradleApi.generateAssistedFactories,enableTopLevelFunctionInjectionwith@RequiresIdeSupport.generateContributionHintsInFir,supportedHintContributionPlatforms,enableKlibParamsCheck,patchKlibParams, with@ExperimentalMetroGradleApi.enableFullBindingGraphValidation,shrinkUnusedBindings, with@DelicateMetroGradleApi.chunkFieldInits, this will always be enabled in the future.publicProviderSeverity, this now just calls through topublicScopedProviderSeverity.transformProvidersToPrivatedeprecation level toERROR.Contributors
Special thanks to the following contributors for contributing to this release!
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.