Skip to content

Commit 70547eb

Browse files
NothingEverHappensthePunderWoman
authored andcommitted
refactor(core): make lView[Injector] non-nullable (#58805)
There actually no cases, where it can be null. Also update all usages. PR Close #58805
1 parent b8a450b commit 70547eb

File tree

8 files changed

+25
-25
lines changed

8 files changed

+25
-25
lines changed

packages/core/src/defer/dom_triggers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ export function registerDomTrigger(
278278
callback: VoidFunction,
279279
type: TriggerType,
280280
) {
281-
const injector = initialLView[INJECTOR]!;
281+
const injector = initialLView[INJECTOR];
282282
const zone = injector.get(NgZone);
283283
function pollDomTrigger() {
284284
// If the initial view was destroyed, we don't need to do anything.

packages/core/src/defer/instructions.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export function ɵɵdefer(
100100
const tView = getTView();
101101
const adjustedIndex = index + HEADER_OFFSET;
102102
const tNode = declareTemplate(lView, tView, index, null, 0, 0);
103-
const injector = lView[INJECTOR]!;
103+
const injector = lView[INJECTOR];
104104

105105
if (tView.firstCreatePass) {
106106
performanceMarkFeature('NgDefer');
@@ -199,7 +199,7 @@ export function ɵɵdeferWhen(rawValue: unknown) {
199199
value === true &&
200200
(renderedState === DeferBlockInternalState.Initial ||
201201
renderedState === DeferBlockState.Placeholder) &&
202-
shouldTriggerWhenOnClient(lView[INJECTOR]!, lDetails, tDetails)
202+
shouldTriggerWhenOnClient(lView[INJECTOR], lDetails, tDetails)
203203
) {
204204
triggerDeferBlock(lView, tNode);
205205
}
@@ -257,7 +257,7 @@ export function ɵɵdeferHydrateWhen(rawValue: unknown) {
257257
hydrateTriggers.set(DeferBlockTrigger.When, null);
258258

259259
if (bindingUpdated(lView, bindingIndex, rawValue)) {
260-
const injector = lView[INJECTOR]!;
260+
const injector = lView[INJECTOR];
261261
if (typeof ngServerMode !== 'undefined' && ngServerMode) {
262262
// We are on the server and SSR for defer blocks is enabled.
263263
triggerDeferBlock(lView, tNode);
@@ -343,7 +343,7 @@ export function ɵɵdeferOnImmediate() {
343343
const lView = getLView();
344344
const tNode = getCurrentTNode()!;
345345
const tView = lView[TVIEW];
346-
const injector = lView[INJECTOR]!;
346+
const injector = lView[INJECTOR];
347347
const tDetails = getTDeferBlockDetails(tView, tNode);
348348
const lDetails = getLDeferBlockDetails(lView, tNode);
349349

@@ -383,7 +383,7 @@ export function ɵɵdeferHydrateOnImmediate() {
383383
const lView = getLView();
384384
const tNode = getCurrentTNode()!;
385385
if (shouldActivateHydrateTrigger(lView, tNode)) {
386-
const injector = lView[INJECTOR]!;
386+
const injector = lView[INJECTOR];
387387
const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
388388
hydrateTriggers.set(DeferBlockTrigger.Immediate, null);
389389

@@ -448,7 +448,7 @@ export function ɵɵdeferOnHover(triggerIndex: number, walkUpTimes?: number) {
448448
const lDetails = getLDeferBlockDetails(lView, tNode);
449449
const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
450450
renderPlaceholder(lView, tNode);
451-
if (shouldTriggerWhenOnClient(lView[INJECTOR]!, lDetails, tDetails)) {
451+
if (shouldTriggerWhenOnClient(lView[INJECTOR], lDetails, tDetails)) {
452452
registerDomTrigger(
453453
lView,
454454
tNode,
@@ -520,7 +520,7 @@ export function ɵɵdeferOnInteraction(triggerIndex: number, walkUpTimes?: numbe
520520
const lDetails = getLDeferBlockDetails(lView, tNode);
521521
const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
522522
renderPlaceholder(lView, tNode);
523-
if (shouldTriggerWhenOnClient(lView[INJECTOR]!, lDetails, tDetails)) {
523+
if (shouldTriggerWhenOnClient(lView[INJECTOR], lDetails, tDetails)) {
524524
registerDomTrigger(
525525
lView,
526526
tNode,
@@ -592,7 +592,7 @@ export function ɵɵdeferOnViewport(triggerIndex: number, walkUpTimes?: number)
592592
const lDetails = getLDeferBlockDetails(lView, tNode);
593593
const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
594594
renderPlaceholder(lView, tNode);
595-
if (shouldTriggerWhenOnClient(lView[INJECTOR]!, lDetails, tDetails)) {
595+
if (shouldTriggerWhenOnClient(lView[INJECTOR], lDetails, tDetails)) {
596596
registerDomTrigger(
597597
lView,
598598
tNode,
@@ -642,7 +642,7 @@ export function ɵɵdeferHydrateOnViewport() {
642642
if (shouldActivateHydrateTrigger(lView, tNode)) {
643643
const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
644644
hydrateTriggers.set(DeferBlockTrigger.Viewport, null);
645-
const injector = lView[INJECTOR]!;
645+
const injector = lView[INJECTOR];
646646

647647
if (typeof ngServerMode !== 'undefined' && ngServerMode) {
648648
// We are on the server and SSR for defer blocks is enabled.

packages/core/src/defer/rendering.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ function applyDeferBlockState(
276276
const tDetails = getTDeferBlockDetails(hostTView, tNode);
277277
const providers = tDetails.providers;
278278
if (providers && providers.length > 0) {
279-
injector = createDeferBlockInjector(hostLView[INJECTOR]!, tDetails, providers);
279+
injector = createDeferBlockInjector(hostLView[INJECTOR], tDetails, providers);
280280
}
281281
}
282282

@@ -400,7 +400,7 @@ function scheduleDeferBlockUpdate(
400400
renderDeferBlockState(nextState, tNode, lContainer);
401401
}
402402
};
403-
return scheduleTimerTrigger(timeout, callback, hostLView[INJECTOR]!);
403+
return scheduleTimerTrigger(timeout, callback, hostLView[INJECTOR]);
404404
}
405405

406406
/**

packages/core/src/defer/triggering.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,13 @@ export function scheduleDelayedTrigger(
7272
) {
7373
const lView = getLView();
7474
const tNode = getCurrentTNode()!;
75-
const injector = lView[INJECTOR]!;
75+
const injector = lView[INJECTOR];
7676
const lDetails = getLDeferBlockDetails(lView, tNode);
7777
const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
7878

7979
renderPlaceholder(lView, tNode);
8080

81-
if (shouldTriggerWhenOnClient(lView[INJECTOR]!, lDetails, tDetails)) {
81+
if (shouldTriggerWhenOnClient(lView[INJECTOR], lDetails, tDetails)) {
8282
// Only trigger the scheduled trigger on the browser
8383
// since we don't want to delay the server response.
8484
const cleanupFn = scheduleFn(() => triggerDeferBlock(lView, tNode), injector);
@@ -100,7 +100,7 @@ export function scheduleDelayedPrefetching(
100100
}
101101

102102
const lView = getLView();
103-
const injector = lView[INJECTOR]!;
103+
const injector = lView[INJECTOR];
104104

105105
// Only trigger the scheduled trigger on the browser
106106
// since we don't want to delay the server response.
@@ -132,7 +132,7 @@ export function scheduleDelayedHydrating(
132132

133133
// Only trigger the scheduled trigger on the browser
134134
// since we don't want to delay the server response.
135-
const injector = lView[INJECTOR]!;
135+
const injector = lView[INJECTOR];
136136
const lDetails = getLDeferBlockDetails(lView, tNode);
137137
const ssrUniqueId = lDetails[SSR_UNIQUE_ID]!;
138138
ngDevMode && assertSsrIdDefined(ssrUniqueId);
@@ -152,7 +152,7 @@ export function scheduleDelayedHydrating(
152152
*/
153153
export function triggerPrefetching(tDetails: TDeferBlockDetails, lView: LView, tNode: TNode) {
154154
const tDeferBlockDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
155-
if (lView[INJECTOR] && shouldTriggerDeferBlock(lView[INJECTOR]!, tDeferBlockDetails)) {
155+
if (lView[INJECTOR] && shouldTriggerDeferBlock(lView[INJECTOR], tDeferBlockDetails)) {
156156
triggerResourceLoading(tDetails, lView, tNode);
157157
}
158158
}
@@ -168,7 +168,7 @@ export function triggerResourceLoading(
168168
lView: LView,
169169
tNode: TNode,
170170
): Promise<unknown> {
171-
const injector = lView[INJECTOR]!;
171+
const injector = lView[INJECTOR];
172172
const tView = lView[TVIEW];
173173

174174
if (tDetails.loadingState !== DeferDependenciesLoadingState.NOT_STARTED) {
@@ -295,7 +295,7 @@ export function triggerResourceLoading(
295295
export function triggerDeferBlock(lView: LView, tNode: TNode) {
296296
const tView = lView[TVIEW];
297297
const lContainer = lView[tNode.index];
298-
const injector = lView[INJECTOR]!;
298+
const injector = lView[INJECTOR];
299299
ngDevMode && assertLContainer(lContainer);
300300

301301
const lDetails = getLDeferBlockDetails(lView, tNode);
@@ -478,7 +478,7 @@ function onDeferBlockCompletion(lDetails: LDeferBlockDetails, callback: VoidFunc
478478
*/
479479
export function shouldActivateHydrateTrigger(lView: LView, tNode: TNode): boolean {
480480
const lDetails = getLDeferBlockDetails(lView, tNode);
481-
const injector = lView[INJECTOR]!;
481+
const injector = lView[INJECTOR];
482482
// TODO(incremental-hydration): ideally, this check should only happen once and then stored on
483483
// LDeferBlockDetails as a flag. This would make subsequent lookups very cheap.
484484
return (

packages/core/src/hydration/annotate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ function serializeLContainer(
357357
// The `+1` is to capture the `<app-root />` element.
358358
numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;
359359

360-
annotateLContainerForHydration(childLView, context, lView[INJECTOR]!);
360+
annotateLContainerForHydration(childLView, context, lView[INJECTOR]);
361361

362362
const componentLView = unwrapLView(childLView[HOST]) as LView<unknown>;
363363

packages/core/src/render3/component_ref.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ function createRootComponentView(
531531
// and passed to the component LView.
532532
let hydrationInfo: DehydratedView | null = null;
533533
if (hostRNode !== null) {
534-
hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]!);
534+
hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]);
535535
}
536536
const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);
537537
const componentView = createLView(

packages/core/src/render3/instructions/render.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export function renderComponent(hostLView: LView, componentHostIdx: number) {
3535
const hostRNode = componentView[HOST];
3636
// Populate an LView with hydration info retrieved from the DOM via TransferState.
3737
if (hostRNode !== null && componentView[HYDRATION] === null) {
38-
componentView[HYDRATION] = retrieveHydrationInfo(hostRNode, componentView[INJECTOR]!);
38+
componentView[HYDRATION] = retrieveHydrationInfo(hostRNode, componentView[INJECTOR]);
3939
}
4040

4141
renderView(componentTView, componentView, componentView[CONTEXT]);

packages/core/src/render3/interfaces/view.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,8 @@ export interface LView<T = unknown> extends Array<any> {
190190
*/
191191
[CONTEXT]: T;
192192

193-
/** An optional Module Injector to be used as fall back after Element Injectors are consulted. */
194-
readonly [INJECTOR]: Injector | null;
193+
/** A Module Injector to be used as fall back after Element Injectors are consulted. */
194+
readonly [INJECTOR]: Injector;
195195

196196
/**
197197
* Contextual data that is shared across multiple instances of `LView` in the same application.

0 commit comments

Comments
 (0)