chore: remove Breadcrumbs component feature flag - #10031
Merged
Merged
Conversation
The Breadcrumbs component is no longer gated behind an experimental feature flag, so the flag and its plumbing can be removed. Removes the feature flag check from `Breadcrumbs`, the `BreadcrumbsFeatureFlagProvider` and local `ExperimentalFeatureException` classes, the `FeatureFlagProvider` SPI registration, the dedicated `FeatureFlagTest`, the flag-enable extension in `BreadcrumbsModeTest`, and the integration-tests `vaadin-featureflags.properties` entry.
|
sissbruecker
approved these changes
Sep 9, 2026
sissbruecker
added a commit
that referenced
this pull request
Sep 9, 2026
…10058) This PR cherry-picks changes from the original PR #10031 to branch 25.3. --- #### Original PR description > The `Breadcrumbs` component is no longer experimental, so the feature flag that gated it and all of its plumbing can go away. Previously, attaching a `Breadcrumbs` to a UI without `com.vaadin.experimental.breadcrumbsComponent=true` threw at attach time; now the component just works out of the box. > > ## What changed > > - **`Breadcrumbs`**: dropped the `checkFeatureFlag(UI)` call from `onAttach` along with the private helper and the `FeatureFlags` import; removed the "this component is experimental" paragraph from the class Javadoc. > - **Removed `BreadcrumbsFeatureFlagProvider`** and its `META-INF/services/com.vaadin.experimental.FeatureFlagProvider` registration, so the flag no longer shows up in the experimental features list. > - **Removed `ExperimentalFeatureException`**, which existed only to report the disabled flag. > - **Tests**: deleted `FeatureFlagTest` (it only covered enabled/disabled attach behaviour) and dropped the `EnableFeatureFlagExtension` registration from `BreadcrumbsModeTest`, which now exercises the component the way an application will. > - **Integration tests**: deleted `vaadin-featureflags.properties`, which only contained the breadcrumbs flag entry. > > No references to the flag, provider, or exception remain in the repository. > > ## API Changes > > ### com.vaadin.flow.component.breadcrumbs.BreadcrumbsFeatureFlagProvider > > ```java > // Removed > public class BreadcrumbsFeatureFlagProvider implements FeatureFlagProvider > public BreadcrumbsFeatureFlagProvider() > public static final Feature BREADCRUMBS_COMPONENT > public List<Feature> getFeatures() > ``` > > ### com.vaadin.flow.component.breadcrumbs.ExperimentalFeatureException > > ```java > // Removed > public class ExperimentalFeatureException extends RuntimeException > public ExperimentalFeatureException() // no longer thrown; Breadcrumbs is not gated > ``` > > ## Test summary > > | # | Status | What the test verifies | Why it matters | > |---|--------|------------------------|----------------| > | 1 | ✅ | A `Breadcrumbs` can be added to a UI with no feature flag configured and attaches without throwing | This is the whole point of the change — a leftover flag check would break every application on attach | > | 2 | ✅ | Router mode still registers exactly one `AfterNavigationListener` on attach, and manual mode registers none, with no flag enabled | `onAttach` was edited; the listener wiring must survive removal of the flag check | > | 3 | ✅ | Router mode still builds the trail from the route hierarchy (static, dynamic and query-parameter titles) after attach | Guards against the attach path regressing while the flag check was stripped out | > | 4 | ✅ | Detach still unregisters the navigation listener, and `setMode` switching on an attached instance rewires listeners/children | Attach/detach lifecycle is the code path that was touched | > > Tests changed on this branch (no new test methods were added — this change only removes behaviour): > > - `BreadcrumbsModeTest` — the `EnableFeatureFlagExtension` registration was removed, so every existing test in the class now runs against an unflagged environment. `BreadcrumbsModeTest.routerMode_attach_registersExactlyOneAfterNavigationListener` and `BreadcrumbsModeTest.manualMode_attach_doesNotRegisterListener` cover rows 1 and 2; `BreadcrumbsModeTest.routerMode_afterNavigationEvent_buildsTrailFromRouteHierarchy`, `BreadcrumbsModeTest.routerMode_currentViewHasDynamicTitle_usedForLastItem`, `BreadcrumbsModeTest.routerMode_currentItemTitle_resolvedWithQueryParameters` and `BreadcrumbsModeTest.routerMode_ancestorTitle_resolvedWithoutQueryParameters` cover rows 1 and 3; `BreadcrumbsModeTest.routerMode_detach_unregistersListener`, `BreadcrumbsModeTest.setModeRouter_onAttachedManualInstance_registersListenerAndBuildsTrail` and `BreadcrumbsModeTest.setModeManual_onAttachedRouterInstance_unregistersListenerAndClearsTrail` cover row 4. > - `FeatureFlagTest.featureEnabled_attach_doesNotThrow` / `FeatureFlagTest.featureDisabled_attach_throws` — deleted; both asserted behaviour that no longer exists. > > Deliberately untested: that `BreadcrumbsFeatureFlagProvider` is gone from the `FeatureFlagProvider` service registry and that the flag no longer appears in Copilot's experimental features tab — both are absence-of-a-file facts with nothing left to assert against, verified by grep instead. Co-authored-by: totally-not-ai[bot] <290682512+totally-not-ai[bot]@users.noreply.github.com> Co-authored-by: Sascha Ißbrücker <sissbruecker@vaadin.com>
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.



The
Breadcrumbscomponent is no longer experimental, so the feature flag that gated it and all of its plumbing can go away. Previously, attaching aBreadcrumbsto a UI withoutcom.vaadin.experimental.breadcrumbsComponent=truethrew at attach time; now the component just works out of the box.What changed
Breadcrumbs: dropped thecheckFeatureFlag(UI)call fromonAttachalong with the private helper and theFeatureFlagsimport; removed the "this component is experimental" paragraph from the class Javadoc.BreadcrumbsFeatureFlagProviderand itsMETA-INF/services/com.vaadin.experimental.FeatureFlagProviderregistration, so the flag no longer shows up in the experimental features list.ExperimentalFeatureException, which existed only to report the disabled flag.FeatureFlagTest(it only covered enabled/disabled attach behaviour) and dropped theEnableFeatureFlagExtensionregistration fromBreadcrumbsModeTest, which now exercises the component the way an application will.vaadin-featureflags.properties, which only contained the breadcrumbs flag entry.No references to the flag, provider, or exception remain in the repository.
API Changes
com.vaadin.flow.component.breadcrumbs.BreadcrumbsFeatureFlagProvider
com.vaadin.flow.component.breadcrumbs.ExperimentalFeatureException
Test summary
Breadcrumbscan be added to a UI with no feature flag configured and attaches without throwingAfterNavigationListeneron attach, and manual mode registers none, with no flag enabledonAttachwas edited; the listener wiring must survive removal of the flag checksetModeswitching on an attached instance rewires listeners/childrenTests changed on this branch (no new test methods were added — this change only removes behaviour):
BreadcrumbsModeTest— theEnableFeatureFlagExtensionregistration was removed, so every existing test in the class now runs against an unflagged environment.BreadcrumbsModeTest.routerMode_attach_registersExactlyOneAfterNavigationListenerandBreadcrumbsModeTest.manualMode_attach_doesNotRegisterListenercover rows 1 and 2;BreadcrumbsModeTest.routerMode_afterNavigationEvent_buildsTrailFromRouteHierarchy,BreadcrumbsModeTest.routerMode_currentViewHasDynamicTitle_usedForLastItem,BreadcrumbsModeTest.routerMode_currentItemTitle_resolvedWithQueryParametersandBreadcrumbsModeTest.routerMode_ancestorTitle_resolvedWithoutQueryParameterscover rows 1 and 3;BreadcrumbsModeTest.routerMode_detach_unregistersListener,BreadcrumbsModeTest.setModeRouter_onAttachedManualInstance_registersListenerAndBuildsTrailandBreadcrumbsModeTest.setModeManual_onAttachedRouterInstance_unregistersListenerAndClearsTrailcover row 4.FeatureFlagTest.featureEnabled_attach_doesNotThrow/FeatureFlagTest.featureDisabled_attach_throws— deleted; both asserted behaviour that no longer exists.Deliberately untested: that
BreadcrumbsFeatureFlagProvideris gone from theFeatureFlagProviderservice registry and that the flag no longer appears in Copilot's experimental features tab — both are absence-of-a-file facts with nothing left to assert against, verified by grep instead.