如下图所示:使用16384进行全局搜索:
发现如下源代码:
function singleProviderDef(ctx, flags, providerType, providerMeta) {
let providerExpr;
let deps;
if (providerType === ProviderAstType.Directive || providerType === ProviderAstType.Component) {
providerExpr = ctx.importExpr(providerMeta.useClass.reference);
flags |= 16384 /* TypeDirective */;
deps = providerMeta.deps || providerMeta.useClass.diDeps;
}
else {
if (providerMeta.useClass) {
providerExpr = ctx.importExpr(providerMeta.useClass.reference);
flags |= 512 /* TypeClassProvider */;
deps = providerMeta.deps || providerMeta.useClass.diDeps;
}
else if (providerMeta.useFactory) {
providerExpr = ctx.importExpr(providerMeta.useFactory.reference);
flags |= 1024 /* TypeFactoryProvider */;
deps = providerMeta.deps || providerMeta.useFactory.diDeps;
}
else if (providerMeta.useExisting) {
providerExpr = NULL_EXPR;
flags |= 2048 /* TypeUseExistingProvider */;
deps = [{ token: providerMeta.useExisting }];
}
else {
providerExpr = convertValueToOutputAst(ctx, providerMeta.useValue);
flags |= 256 /* TypeValueProvider */;
deps = [];
}
}
const depsExpr = literalArr(deps.map(dep => depDef(ctx, dep)));
return { providerExpr, flags, depsExpr };
}
16384:第15位为1:代表简单指令节点类型
100000000000000
1 << 14, 1 左移14位,Type Directive.
component: 1 << 15, 左移15位
而组建指令节点类型,第15位和第16位均为1: 49152
更多Jerry的原创文章,尽在:“汪子熙”: