Skip to content

Commit 14d37fe

Browse files
tboschIgorMinar
authored andcommitted
refactor(core): move NodeType and ProviderType into NodeFlags
Also removes `ng-reflect` attributes for element properties.
1 parent f356041 commit 14d37fe

25 files changed

+327
-341
lines changed

modules/@angular/compiler/src/view_compiler_next/view_compiler.ts

Lines changed: 44 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {ChangeDetectionStrategy, ViewEncapsulation, ɵArgumentType as ArgumentType, ɵBindingType as BindingType, ɵDepFlags as DepFlags, ɵLifecycleHooks as LifecycleHooks, ɵNodeFlags as NodeFlags, ɵProviderType as ProviderType, ɵQueryBindingType as QueryBindingType, ɵQueryValueType as QueryValueType, ɵViewFlags as ViewFlags, ɵelementEventFullName as elementEventFullName} from '@angular/core';
9+
import {ChangeDetectionStrategy, ViewEncapsulation, ɵArgumentType as ArgumentType, ɵBindingType as BindingType, ɵDepFlags as DepFlags, ɵLifecycleHooks as LifecycleHooks, ɵNodeFlags as NodeFlags, ɵQueryBindingType as QueryBindingType, ɵQueryValueType as QueryValueType, ɵViewFlags as ViewFlags, ɵelementEventFullName as elementEventFullName} from '@angular/core';
1010

1111
import {AnimationEntryCompileResult} from '../animation/animation_compiler';
1212
import {CompileDiDependencyMetadata, CompileDirectiveMetadata, CompileDirectiveSummary, CompilePipeSummary, CompileProviderMetadata, CompileTokenMetadata, CompileTypeMetadata, identifierModuleUrl, identifierName, rendererTypeName, tokenReference, viewClassName} from '../compile_metadata';
@@ -136,11 +136,11 @@ class ViewBuilder implements TemplateAstVisitor, LocalResolver, BuiltinConverter
136136
// Note: queries start with id 1 so we can use the number in a Bloom filter!
137137
const queryId = queryIndex + 1;
138138
const bindingType = query.first ? QueryBindingType.First : QueryBindingType.All;
139-
let flags = NodeFlags.HasViewQuery;
139+
let flags = NodeFlags.TypeViewQuery;
140140
if (queryIds.staticQueryIds.has(queryId)) {
141-
flags |= NodeFlags.HasStaticQuery;
141+
flags |= NodeFlags.StaticQuery;
142142
} else {
143-
flags |= NodeFlags.HasDynamicQuery;
143+
flags |= NodeFlags.DynamicQuery;
144144
}
145145
this.nodeDefs.push(() => o.importExpr(createIdentifier(Identifiers.queryDef)).callFn([
146146
o.literal(flags), o.literal(queryId),
@@ -359,7 +359,7 @@ class ViewBuilder implements TemplateAstVisitor, LocalResolver, BuiltinConverter
359359
} {
360360
let flags = NodeFlags.None;
361361
if (ast.hasViewContainer) {
362-
flags |= NodeFlags.HasEmbeddedViews;
362+
flags |= NodeFlags.EmbeddedViews;
363363
}
364364
const usedEvents = new Map<string, [string, string]>();
365365
ast.outputs.forEach((event) => {
@@ -450,14 +450,14 @@ class ViewBuilder implements TemplateAstVisitor, LocalResolver, BuiltinConverter
450450
this.nodeDefs.push(null);
451451

452452
dirAst.directive.queries.forEach((query, queryIndex) => {
453-
let flags = NodeFlags.HasContentQuery;
453+
let flags = NodeFlags.TypeContentQuery;
454454
const queryId = dirAst.contentQueryStartId + queryIndex;
455455
// Note: We only make queries static that query for a single item.
456456
// This is because of backwards compatibility with the old view compiler...
457457
if (queryIds.staticQueryIds.has(queryId) && query.first) {
458-
flags |= NodeFlags.HasStaticQuery;
458+
flags |= NodeFlags.StaticQuery;
459459
} else {
460-
flags |= NodeFlags.HasDynamicQuery;
460+
flags |= NodeFlags.DynamicQuery;
461461
}
462462
const bindingType = query.first ? QueryBindingType.First : QueryBindingType.All;
463463
this.nodeDefs.push(() => o.importExpr(createIdentifier(Identifiers.queryDef)).callFn([
@@ -472,7 +472,7 @@ class ViewBuilder implements TemplateAstVisitor, LocalResolver, BuiltinConverter
472472
// I.e. we only allow queries as children of directives nodes.
473473
const childCount = this.nodeDefs.length - nodeIndex - 1;
474474

475-
let {flags, queryMatchExprs, providerExpr, providerType, depsExpr} =
475+
let {flags, queryMatchExprs, providerExpr, depsExpr} =
476476
this._visitProviderOrDirective(providerAst, queryMatches);
477477

478478
refs.forEach((ref) => {
@@ -484,7 +484,7 @@ class ViewBuilder implements TemplateAstVisitor, LocalResolver, BuiltinConverter
484484
});
485485

486486
if (dirAst.directive.isComponent) {
487-
flags |= NodeFlags.IsComponent;
487+
flags |= NodeFlags.Component;
488488
}
489489

490490
const inputDefs = dirAst.inputs.map((inputAst, inputIndex) => {
@@ -543,16 +543,15 @@ class ViewBuilder implements TemplateAstVisitor, LocalResolver, BuiltinConverter
543543
// reserve the space in the nodeDefs array so we can add children
544544
this.nodeDefs.push(null);
545545

546-
const {flags, queryMatchExprs, providerExpr, providerType, depsExpr} =
546+
const {flags, queryMatchExprs, providerExpr, depsExpr} =
547547
this._visitProviderOrDirective(providerAst, queryMatches);
548548

549549
// providerDef(
550-
// flags: NodeFlags, matchedQueries: [string, QueryValueType][], type: ProviderType, token:
551-
// any,
550+
// flags: NodeFlags, matchedQueries: [string, QueryValueType][], token:any,
552551
// value: any, deps: ([DepFlags, any] | any)[]): NodeDef;
553552
const nodeDef = () => o.importExpr(createIdentifier(Identifiers.providerDef)).callFn([
554553
o.literal(flags), queryMatchExprs.length ? o.literalArr(queryMatchExprs) : o.NULL_EXPR,
555-
o.literal(providerType), tokenExpr(providerAst.token), providerExpr, depsExpr
554+
tokenExpr(providerAst.token), providerExpr, depsExpr
556555
]);
557556
this.nodeDefs[nodeIndex] = nodeDef;
558557
}
@@ -561,7 +560,6 @@ class ViewBuilder implements TemplateAstVisitor, LocalResolver, BuiltinConverter
561560
flags: NodeFlags,
562561
queryMatchExprs: o.Expression[],
563562
providerExpr: o.Expression,
564-
providerType: ProviderType,
565563
depsExpr: o.Expression
566564
} {
567565
let flags = NodeFlags.None;
@@ -587,8 +585,8 @@ class ViewBuilder implements TemplateAstVisitor, LocalResolver, BuiltinConverter
587585
o.literalArr([o.literal(match.queryId), o.literal(QueryValueType.Provider)]));
588586
}
589587
});
590-
const {providerExpr, providerType, depsExpr} = providerDef(providerAst);
591-
return {flags, queryMatchExprs, providerExpr, providerType, depsExpr};
588+
const {providerExpr, depsExpr, flags: providerType} = providerDef(providerAst);
589+
return {flags: flags | providerType, queryMatchExprs, providerExpr, depsExpr};
592590
}
593591

594592
getLocal(name: string): o.Expression {
@@ -768,13 +766,14 @@ class ViewBuilder implements TemplateAstVisitor, LocalResolver, BuiltinConverter
768766
}
769767

770768
function providerDef(providerAst: ProviderAst):
771-
{providerExpr: o.Expression, providerType: ProviderType, depsExpr: o.Expression} {
772-
return providerAst.multiProvider ? multiProviderDef(providerAst.providers) :
773-
singleProviderDef(providerAst.providers[0]);
769+
{providerExpr: o.Expression, flags: NodeFlags, depsExpr: o.Expression} {
770+
return providerAst.multiProvider ?
771+
multiProviderDef(providerAst.providers) :
772+
singleProviderDef(providerAst.providerType, providerAst.providers[0]);
774773
}
775774

776775
function multiProviderDef(providers: CompileProviderMetadata[]):
777-
{providerExpr: o.Expression, providerType: ProviderType, depsExpr: o.Expression} {
776+
{providerExpr: o.Expression, flags: NodeFlags, depsExpr: o.Expression} {
778777
const allDepDefs: o.Expression[] = [];
779778
const allParams: o.FnParam[] = [];
780779
const exprs = providers.map((provider, providerIndex) => {
@@ -795,7 +794,7 @@ function multiProviderDef(providers: CompileProviderMetadata[]):
795794
});
796795
const providerExpr =
797796
o.fn(allParams, [new o.ReturnStatement(o.literalArr(exprs))], o.INFERRED_TYPE);
798-
return {providerExpr, providerType: ProviderType.Factory, depsExpr: o.literalArr(allDepDefs)};
797+
return {providerExpr, flags: NodeFlags.TypeFactoryProvider, depsExpr: o.literalArr(allDepDefs)};
799798

800799
function convertDeps(providerIndex: number, deps: CompileDiDependencyMetadata[]) {
801800
return deps.map((dep, depIndex) => {
@@ -807,30 +806,36 @@ function multiProviderDef(providers: CompileProviderMetadata[]):
807806
}
808807
}
809808

810-
function singleProviderDef(providerMeta: CompileProviderMetadata):
811-
{providerExpr: o.Expression, providerType: ProviderType, depsExpr: o.Expression} {
809+
function singleProviderDef(providerType: ProviderAstType, providerMeta: CompileProviderMetadata):
810+
{providerExpr: o.Expression, flags: NodeFlags, depsExpr: o.Expression} {
812811
let providerExpr: o.Expression;
813-
let providerType: ProviderType;
812+
let flags: NodeFlags;
814813
let deps: CompileDiDependencyMetadata[];
815-
if (providerMeta.useClass) {
814+
if (providerType === ProviderAstType.Directive || providerType === ProviderAstType.Component) {
816815
providerExpr = o.importExpr(providerMeta.useClass);
817-
providerType = ProviderType.Class;
816+
flags = NodeFlags.TypeDirective;
818817
deps = providerMeta.deps || providerMeta.useClass.diDeps;
819-
} else if (providerMeta.useFactory) {
820-
providerExpr = o.importExpr(providerMeta.useFactory);
821-
providerType = ProviderType.Factory;
822-
deps = providerMeta.deps || providerMeta.useFactory.diDeps;
823-
} else if (providerMeta.useExisting) {
824-
providerExpr = o.NULL_EXPR;
825-
providerType = ProviderType.UseExisting;
826-
deps = [{token: providerMeta.useExisting}];
827818
} else {
828-
providerExpr = convertValueToOutputAst(providerMeta.useValue);
829-
providerType = ProviderType.Value;
830-
deps = [];
819+
if (providerMeta.useClass) {
820+
providerExpr = o.importExpr(providerMeta.useClass);
821+
flags = NodeFlags.TypeClassProvider;
822+
deps = providerMeta.deps || providerMeta.useClass.diDeps;
823+
} else if (providerMeta.useFactory) {
824+
providerExpr = o.importExpr(providerMeta.useFactory);
825+
flags = NodeFlags.TypeFactoryProvider;
826+
deps = providerMeta.deps || providerMeta.useFactory.diDeps;
827+
} else if (providerMeta.useExisting) {
828+
providerExpr = o.NULL_EXPR;
829+
flags = NodeFlags.TypeUseExistingProvider;
830+
deps = [{token: providerMeta.useExisting}];
831+
} else {
832+
providerExpr = convertValueToOutputAst(providerMeta.useValue);
833+
flags = NodeFlags.TypeValueProvider;
834+
deps = [];
835+
}
831836
}
832837
const depsExpr = o.literalArr(deps.map(dep => depDef(dep)));
833-
return {providerExpr, providerType, depsExpr};
838+
return {providerExpr, flags, depsExpr};
834839
}
835840

836841
function tokenExpr(tokenMeta: CompileTokenMetadata): o.Expression {

modules/@angular/core/src/codegen_private_exports.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ export {ViewContainer as ɵViewContainer} from './linker/view_container';
2626
export {ViewType as ɵViewType} from './linker/view_type';
2727
export {EMPTY_ARRAY as ɵEMPTY_ARRAY, EMPTY_INLINE_ARRAY as ɵEMPTY_INLINE_ARRAY, EMPTY_MAP as ɵEMPTY_MAP, InlineArray16 as ɵInlineArray16, InlineArray2 as ɵInlineArray2, InlineArray4 as ɵInlineArray4, InlineArray8 as ɵInlineArray8, InlineArrayDynamic as ɵInlineArrayDynamic, ViewUtils as ɵViewUtils, castByValue as ɵcastByValue, checkBinding as ɵcheckBinding, checkBindingChange as ɵcheckBindingChange, checkRenderAttribute as ɵcheckRenderAttribute, checkRenderClass as ɵcheckRenderClass, checkRenderProperty as ɵcheckRenderProperty, checkRenderStyle as ɵcheckRenderStyle, checkRenderText as ɵcheckRenderText, createRenderComponentType as ɵcreateRenderComponentType, createRenderElement as ɵcreateRenderElement, getComponentFactoryViewClass as ɵgetComponentFactoryViewClass, inlineInterpolate as ɵinlineInterpolate, interpolate as ɵinterpolate, noop as ɵnoop, pureProxy1 as ɵpureProxy1, pureProxy10 as ɵpureProxy10, pureProxy2 as ɵpureProxy2, pureProxy3 as ɵpureProxy3, pureProxy4 as ɵpureProxy4, pureProxy5 as ɵpureProxy5, pureProxy6 as ɵpureProxy6, pureProxy7 as ɵpureProxy7, pureProxy8 as ɵpureProxy8, pureProxy9 as ɵpureProxy9, selectOrCreateRenderHostElement as ɵselectOrCreateRenderHostElement, setBindingDebugInfo as ɵsetBindingDebugInfo, setBindingDebugInfoForChanges as ɵsetBindingDebugInfoForChanges, subscribeToRenderElement as ɵsubscribeToRenderElement} from './linker/view_utils';
2828
export {reflector as ɵreflector} from './reflection/reflection';
29-
export {ArgumentType as ɵArgumentType, BindingType as ɵBindingType, DepFlags as ɵDepFlags, NodeFlags as ɵNodeFlags, ProviderType as ɵProviderType, QueryBindingType as ɵQueryBindingType, QueryValueType as ɵQueryValueType, ViewDefinition as ɵViewDefinition, ViewFlags as ɵViewFlags, anchorDef as ɵanchorDef, createComponentFactory as ɵcreateComponentFactory, createRendererTypeV2 as ɵcreateRendererTypeV2, directiveDef as ɵdirectiveDef, elementDef as ɵelementDef, elementEventFullName as ɵelementEventFullName, ngContentDef as ɵngContentDef, nodeValue as ɵnodeValue, pipeDef as ɵpipeDef, providerDef as ɵproviderDef, pureArrayDef as ɵpureArrayDef, pureObjectDef as ɵpureObjectDef, purePipeDef as ɵpurePipeDef, queryDef as ɵqueryDef, textDef as ɵtextDef, unwrapValue as ɵunwrapValue, viewDef as ɵviewDef} from './view/index';
29+
export {ArgumentType as ɵArgumentType, BindingType as ɵBindingType, DepFlags as ɵDepFlags, NodeFlags as ɵNodeFlags, QueryBindingType as ɵQueryBindingType, QueryValueType as ɵQueryValueType, ViewDefinition as ɵViewDefinition, ViewFlags as ɵViewFlags, anchorDef as ɵanchorDef, createComponentFactory as ɵcreateComponentFactory, createRendererTypeV2 as ɵcreateRendererTypeV2, directiveDef as ɵdirectiveDef, elementDef as ɵelementDef, elementEventFullName as ɵelementEventFullName, ngContentDef as ɵngContentDef, nodeValue as ɵnodeValue, pipeDef as ɵpipeDef, providerDef as ɵproviderDef, pureArrayDef as ɵpureArrayDef, pureObjectDef as ɵpureObjectDef, purePipeDef as ɵpurePipeDef, queryDef as ɵqueryDef, textDef as ɵtextDef, unwrapValue as ɵunwrapValue, viewDef as ɵviewDef} from './view/index';

modules/@angular/core/src/view/element.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {isDevMode} from '../application_ref';
1010
import {RendererTypeV2, RendererV2} from '../render/api';
1111
import {SecurityContext} from '../security';
1212

13-
import {BindingDef, BindingType, DebugContext, DisposableFn, ElementData, ElementHandleEventFn, NodeData, NodeDef, NodeFlags, NodeType, OutputDef, OutputType, QueryValueType, Services, ViewData, ViewDefinition, ViewDefinitionFactory, ViewFlags, asElementData, asProviderData} from './types';
13+
import {BindingDef, BindingType, DebugContext, DisposableFn, ElementData, ElementHandleEventFn, NodeData, NodeDef, NodeFlags, OutputDef, OutputType, QueryValueType, Services, ViewData, ViewDefinition, ViewDefinitionFactory, ViewFlags, asElementData, asProviderData} from './types';
1414
import {checkAndUpdateBinding, dispatchEvent, elementEventFullName, filterQueryId, getParentRenderElement, resolveViewDefinition, sliceErrorStack, splitMatchedQueriesDsl, splitNamespace} from './util';
1515

1616
const NOOP: any = () => {};
@@ -22,13 +22,13 @@ export function anchorDef(
2222
if (!handleEvent) {
2323
handleEvent = NOOP;
2424
}
25+
flags |= NodeFlags.TypeElement;
2526
const {matchedQueries, references, matchedQueryIds} = splitMatchedQueriesDsl(matchedQueriesDsl);
2627
// skip the call to sliceErrorStack itself + the call to this function.
2728
const source = isDevMode() ? sliceErrorStack(2, 3) : '';
2829
const template = templateFactory ? resolveViewDefinition(templateFactory) : null;
2930

3031
return {
31-
type: NodeType.Element,
3232
// will bet set by the view definition
3333
index: undefined,
3434
reverseChildIndex: undefined,
@@ -54,7 +54,6 @@ export function anchorDef(
5454
},
5555
provider: undefined,
5656
text: undefined,
57-
pureExpression: undefined,
5857
query: undefined,
5958
ngContent: undefined
6059
};
@@ -126,10 +125,10 @@ export function elementDef(
126125
componentRendererType = null;
127126
}
128127
if (componentView) {
129-
flags |= NodeFlags.HasComponent;
128+
flags |= NodeFlags.ComponentView;
130129
}
130+
flags |= NodeFlags.TypeElement;
131131
return {
132-
type: NodeType.Element,
133132
// will bet set by the view definition
134133
index: undefined,
135134
reverseChildIndex: undefined,
@@ -156,7 +155,6 @@ export function elementDef(
156155
},
157156
provider: undefined,
158157
text: undefined,
159-
pureExpression: undefined,
160158
query: undefined,
161159
ngContent: undefined
162160
};

modules/@angular/core/src/view/ng_content.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {NodeDef, NodeType, ViewData, asElementData} from './types';
9+
import {NodeDef, NodeFlags, ViewData, asElementData} from './types';
1010
import {RenderNodeAction, getParentRenderElement, visitProjectedRenderNodes} from './util';
1111

1212
export function ngContentDef(ngContentIndex: number, index: number): NodeDef {
1313
return {
14-
type: NodeType.NgContent,
1514
// will bet set by the view definition
1615
index: undefined,
1716
reverseChildIndex: undefined,
@@ -20,7 +19,7 @@ export function ngContentDef(ngContentIndex: number, index: number): NodeDef {
2019
bindingIndex: undefined,
2120
outputIndex: undefined,
2221
// regular values
23-
flags: 0,
22+
flags: NodeFlags.TypeNgContent,
2423
childFlags: 0,
2524
childMatchedQueries: 0,
2625
matchedQueries: {},
@@ -32,7 +31,6 @@ export function ngContentDef(ngContentIndex: number, index: number): NodeDef {
3231
element: undefined,
3332
provider: undefined,
3433
text: undefined,
35-
pureExpression: undefined,
3634
query: undefined,
3735
ngContent: {index}
3836
};

0 commit comments

Comments
 (0)