refactor: remove the dead OnCreated* constructor hooks - #316
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Removes the repo-wide generated pattern of parameterless constructors that only invoked partial void OnCreatedIgb*() hooks, keeping constructors only where they perform real initialization (e.g., IgbChat, IgbTabs). This reduces noise across the generated Blazor wrapper/component and event-args types while preserving runtime behavior.
Changes:
- Deleted no-op
OnCreatedIgb*constructor+hook pairs across many generated component and event-args types. - Inlined the previously-implemented
OnCreatedIgbChatandOnCreatedIgbTabslogic directly into the corresponding constructors. - Updated
.github/copilot-instructions.mdto stop advertisingOnCreatedIgb*hooks as the canonical extensibility mechanism.
Reviewed changes
Copilot reviewed 144 out of 144 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/componentsBase/WebInputs/Tabs.cs | Removed the OnCreatedIgbTabs hook implementation (logic moved to constructor). |
| src/componentsBase/WebInputs/Chat.cs | Removed the OnCreatedIgbChat hook implementation (logic moved to constructor). |
| src/components/Blazor/VoidEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/TreeSelectionEventArgsDetail.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/TreeSelectionEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/TreeItemComponentEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/TreeItem.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Tree.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Tooltip.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ToggleButton.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Toast.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/TileManager.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/TileComponentEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/TileChangeStateEventArgsDetail.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/TileChangeStateEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Tile.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ThemeProvider.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Textarea.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Tabs.cs | Inlined EnsureChangeHandled() into the constructor; removed OnCreatedIgbTabs hook declaration. |
| src/components/Blazor/TabComponentEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Tab.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Switch.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Stepper.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Step.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/SplitterResizeEventArgsDetail.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/SplitterResizeEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Splitter.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Snackbar.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/SliderLabel.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/SliderBase.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Slider.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/SelectItemComponentEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/SelectItem.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/SelectHeader.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/SelectGroup.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Select.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Ripple.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/RatingSymbol.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Rating.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/RangeSliderValueEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/RangeSliderValue.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/RangeSlider.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/RadioGroup.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/RadioChangeEventArgsDetail.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/RadioChangeEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Radio.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ProgressBase.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/NumberFormatSpecifier.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/NumberEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/NavDrawerItem.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/NavDrawerHeaderItem.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/NavDrawer.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Navbar.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/MaskInput.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ListItem.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ListHeader.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/List.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/LinearProgress.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/InputBase.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Input.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/IconMeta.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/IconButton.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Icon.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/HighlightNavigation.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Highlight.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/FormatSpecifier.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/FocusOptions.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/FilteringOptions.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ExpansionPanelComponentEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ExpansionPanel.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DropdownItemComponentEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DropdownItem.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DropdownHeader.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DropdownGroup.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Dropdown.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Divider.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Dialog.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DateTimeInputBase.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DateTimeInput.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DateRangeValueEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DateRangeValueDetail.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DateRangeValue.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DateRangePickerResourceStrings.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DateRangePicker.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DateRangeDescriptor.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DatePicker.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/DatePartDeltas.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CustomDateRange.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ComponentValueChangedEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ComponentDateValueChangedEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ComponentDataValueChangedEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ComponentBoolValueChangedEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ComboChangeEventArgsDetail.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ComboChangeEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ComboBoxBaseLike.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Combo.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CircularProgress.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CircularGradient.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Chip.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CheckboxChangeEventArgsDetail.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CheckboxChangeEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CheckboxBase.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Checkbox.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatRenderers.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatRenderContext.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatOptions.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatMessageRenderContext.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatMessageReactionEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatMessageReaction.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatMessageEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatMessageAttachmentEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatMessageAttachment.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatMessage.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatInputRenderContext.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatDraftMessage.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ChatAttachmentRenderContext.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Chat.cs | Inlined options-initialization logic into the constructor; removed OnCreatedIgbChat hook declaration. |
| src/components/Blazor/CarouselSlide.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CarouselIndicator.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Carousel.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CardMedia.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CardHeader.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CardContent.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CardActions.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Card.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CalendarResourceStrings.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CalendarFormatOptions.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/CalendarBase.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Calendar.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ButtonGroup.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ButtonBase.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Button.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/BaseOptionLike.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/BaseComboBox.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/BaseAlertLike.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Banner.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Badge.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Avatar.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ActiveStepChangingEventArgsDetail.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ActiveStepChangingEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ActiveStepChangedEventArgsDetail.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/ActiveStepChangedEventArgs.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| src/components/Blazor/Accordion.cs | Removed no-op OnCreatedIgb* constructor+hook. |
| .github/copilot-instructions.md | Updated contribution guidelines to remove mention of OnCreatedIgb* hooks; fixed list indentation. |
damyanpetev
force-pushed
the
dpetev/ctor-cleanup
branch
from
August 6, 2026 07:22
d7ef219 to
6ff48b3
Compare
damyanpetev
enabled auto-merge (squash)
August 6, 2026 11:26
damyanpetev
disabled auto-merge
August 6, 2026 11:27
damyanpetev
enabled auto-merge (squash)
August 6, 2026 11:27
MayaKirova
approved these changes
Aug 6, 2026
dkamburov
approved these changes
Aug 6, 2026
damyanpetev
added a commit
that referenced
this pull request
Aug 7, 2026
Every generated type overriding SerializeCore declared a `partial void SerializeCoreIgb<X>(RendererSerializer ser)` hook and called it right after `base.SerializeCore(ser)`. Repo-wide that is 141 declarations and 141 call sites with zero implementations -- dead weight on the per-render property serialization path, not just in the declaration list. In 22 types the hook call was the only statement in the override, leaving it forwarding to base and nothing else, so the override goes too. Those types have no serializable properties of their own; the only callers of SerializeCore are the virtual dispatch sites in BaseRendererControl and BaseRendererElement. Follow-up to the `OnCreated*` sweep (#316). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
damyanpetev
added a commit
that referenced
this pull request
Aug 7, 2026
The inbound half of two-way binding called `OnEventUpdating<Prop>(this._field, ref newValue)` to let a partial adjust the value in flight before it was written back and `<Prop>Changed` was invoked. 16 declarations, 16 call sites, zero implementations, so the ref never changed and the call was a no-op on the value written back. Also drops the 16 stray empty statements the generator emitted directly above those call sites -- there are exactly 16 in src/, one per site, so none are left behind. The path is covered by the branch's binding contracts, which assert the inbound write-back for 19 .Bind pairs across 15 components. Follow-up to the `SerializeCoreIgb*` sweep and the `OnCreated*` sweep (#316). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
damyanpetev
added a commit
that referenced
this pull request
Aug 7, 2026
The generator declared one of these beside every property backing field so a partial could rewrite the incoming value in the setter. 538 declarations, but only 46 call sites -- the call was emitted only for reference-typed properties (attached children, event-args details, RenderFragment templates), so 492 of the declarations were unreachable by construction rather than merely unimplemented. 45 of the 46 call sites dispatched to nothing. The 46th, IgbChat.OnOptionsChanging, had the only implementation in the family; its two statements now run inline at the same point in the Options setter, so the normalization is visible where it happens instead of in a partial two files away. With this the generated hook surface is down to the families that are actually used: FindByName* (5 implementations) and OnHandling* (2), plus GetSerializableTabsCollection. Follow-up to the `OnEventUpdating*` and `SerializeCoreIgb*` sweeps and to #316. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
damyanpetev
added a commit
that referenced
this pull request
Aug 7, 2026
Every generated type declared a `FindByName<X>(string name, ref object item)`
hook and an override that tried base, then the hook, then gave up. With the hook
unimplemented the override reduced to `return base.FindByName(name)`, so 135 of
them were forwarding-only and are gone entirely; `FindByName` stays reachable
through the virtual in BaseRendererControl/BaseRendererElement, unchanged for
callers.
The 5 implementations (Accordion, Dropdown, Select, TileManager, Tree) were five
copies of the same ContentItems scan sitting in componentsBase/WebInputs. Each
is now inlined into its own override, replacing the ref-parameter dance with a
direct return:
foreach (var item in ContentItems)
{
if (item.Name == name || item.ContainerId == name)
{
return item;
}
}
IgbTabs keeps its override for the ActualTabsCollection lookup, minus the hook.
Covered by the interop contracts: DropdownTests asserts a {"refType":"name"}
payload resolves to the .NET IgbDropdownItem instance through the inlined path,
and ExpansionPanelTests asserts the same for a self-reference through the base
implementation.
Follow-up to the `On<Prop>Changing`, `OnEventUpdating*` and `SerializeCoreIgb*`
sweeps and to #316.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
damyanpetev
added a commit
that referenced
this pull request
Aug 7, 2026
121 declarations, 121 call sites, 2 implementations. Each event setter wrapped
the hook in an onArgs lambda passed to SetHandler:
this.SetHandler<TArgs>(this.Name, "Opening", value, (args) =>
{
OnHandlingOpening(args);
});
104 of those lambdas contained nothing but the dead hook call. onArgs is an
optional parameter that SetHandler null-checks before invoking, so the argument
is dropped outright rather than left as an empty lambda -- one less closure
allocated per wired event. The other 15 lambdas carry two-way binding write-back
and keep their bodies, minus the hook call.
The 2 implementations become ordinary private methods named for what they do,
called from the same point:
IgbTabs.OnHandlingChange -> SyncSelectedTab
IgbInputBase.OnHandlingInputOcurred -> RaiseValueChanging
Both stay in componentsBase/WebInputs beside the EnsureXHandled helpers they
belong with; only the codegen-hook indirection is gone.
TabsTests asserts the selection sync through SyncSelectedTab. ValueChanging has
no test coverage, so RaiseValueChanging was kept a pure rename with an unchanged
body and call point.
Follow-up to the `FindByName<X>`, `On<Prop>Changing`, `OnEventUpdating*` and
`SerializeCoreIgb*` sweeps and to #316.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
damyanpetev
added a commit
that referenced
this pull request
Aug 7, 2026
Clears the remainder of the hook surface, leaving zero `partial void` members in
src/.
IgbTab.OnIgbTabInitializing / OnIgbTabDisposing: declared and called in
OnInitializedAsync and Dispose, never implemented. Both gone.
IgbTabs.GetSerializableTabsCollection: declared and implemented in the same
generated file, so the partial bought nothing. Its body assigned
ActualTabsCollection unconditionally, which made the caller's read of
_tabsCollection dead:
{ var coll = this._tabsCollection; GetSerializableTabsCollection(ref coll); ser.AddCollectionProp("tabsCollection", coll); }
collapses to
{ ser.AddCollectionProp("tabsCollection", ActualTabsCollection); }
Verified on net8.0 and net10.0: 929 passed, 0 failed.
Follow-up to the `OnHandling<Event>`, `FindByName<X>`, `On<Prop>Changing`,
`OnEventUpdating*` and `SerializeCoreIgb*` sweeps and to #316.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.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.
Summary
Follow-up to #286 - instead of documenting all the ctros, removing the redundant ones (most).
Every generated component and event-args type carried a constructor whose only job was to call a
partial void OnCreatedIgb<Type>()extensibility hook:Across
src/there were 143 such constructors and 143 hook declarations, of which exactly two were ever implemented (IgbTabs,IgbChat). For the other 141 types the constructor was a verbatim re-declaration of the implicit default constructor and the hook compiled away to nothing — pure noise in every file, and a misleading "extension point" that no longer reflects how this repo is maintained.This PR removes the whole pattern.
What changed
OnCreatedIgb*hook declarationIgbChat,IgbTabs)OnCreatedIgbButton()as the canonical hook example.github/copilot-instructions.mdNet effect: 146 files, +7 / -1146, with no behavioural change.
The 141 no-op cases
The removed constructors were all
public Igb<X>() : base()with a singleOnCreatedIgb<X>();statement, so deleting them leaves the compiler-generated public parameterless constructor, which chains to the samebase(). Nothing else in the repo referenced the hooks — .github/copilot-instructions.md was the only non-source mention.One explicit empty parameterless constructor was deliberately left in place:
BlazorPlainObjectAttributein src/componentsBase/BlazorPlainObjectAttribute.cs is not a component, and its constructor carries the documented public API surface for the attribute.IgbChatThe hook lived in src/componentsBase/WebInputs/Chat.cs and existed purely to force the
Optionssetter to run once at construction:That assignment moved into the constructor in src/components/Blazor/Chat.cs.
IgbTabsOnCreatedIgbTabs()wrapped a single call toEnsureChangeHandled(), which is what keeps childIgbTab.Selectedin sync when the consumer has not subscribed toChange. The call moved directly into the constructor in src/components/Blazor/Tabs.cs, ahead of the existing collection-adapter setup, preserving the original ordering.EnsureChangeHandled()stays in src/componentsBase/WebInputs/Tabs.cs — it is a real method on the partial class, not a hook.Verification
dotnet build IgniteUI.Blazor.Lite.slnx— 0 errors. (6732 warnings, all pre-existingBL0005noise from the test project setting[Parameter]s directly.)dotnet test tests/IgniteUI.Blazor.Tests -f net8.0— 881 passed, 0 failed, 22 skipped.grep -r OnCreated src/— no matches.