From 757d4c33df83d3ec32619b982950ff59ac123886 Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Tue, 14 May 2019 08:36:57 +0100 Subject: [PATCH] refactor(ivy): ngcc - use `.has()` to check Map membership (#25445) Previously we were relying upon the `.get()` method to return `undefined` but it is clearer and safer to always check with `.has()` first. PR Close #25445 --- .../module_with_providers_analyzer.ts | 2 +- .../analysis/private_declarations_analyzer.ts | 6 ++-- .../ngcc/src/host/esm2015_host.ts | 28 ++++++++++++------- .../compiler-cli/ngcc/src/host/esm5_host.ts | 5 ++-- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/packages/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer.ts b/packages/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer.ts index 11894f9d13..6de29258cf 100644 --- a/packages/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer.ts +++ b/packages/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer.ts @@ -63,7 +63,7 @@ export class ModuleWithProvidersAnalyzer { ngModule = {node: dtsNgModule, viaModule: null}; } const dtsFile = dtsFn.getSourceFile(); - const analysis = analyses.get(dtsFile) || []; + const analysis = analyses.has(dtsFile) ? analyses.get(dtsFile) : []; analysis.push({declaration: dtsFn, ngModule}); analyses.set(dtsFile, analysis); } diff --git a/packages/compiler-cli/ngcc/src/analysis/private_declarations_analyzer.ts b/packages/compiler-cli/ngcc/src/analysis/private_declarations_analyzer.ts index 72698b5582..8ca9d7ed3b 100644 --- a/packages/compiler-cli/ngcc/src/analysis/private_declarations_analyzer.ts +++ b/packages/compiler-cli/ngcc/src/analysis/private_declarations_analyzer.ts @@ -49,8 +49,8 @@ export class PrivateDeclarationsAnalyzer { if (exports) { exports.forEach((declaration, exportedName) => { if (hasNameIdentifier(declaration.node)) { - const privateDeclaration = privateDeclarations.get(declaration.node.name); - if (privateDeclaration) { + if (privateDeclarations.has(declaration.node.name)) { + const privateDeclaration = privateDeclarations.get(declaration.node.name) !; if (privateDeclaration.node !== declaration.node) { throw new Error(`${declaration.node.name.text} is declared multiple times.`); } @@ -96,7 +96,7 @@ export class PrivateDeclarationsAnalyzer { return Array.from(privateDeclarations.keys()).map(id => { const from = AbsoluteFsPath.fromSourceFile(id.getSourceFile()); const declaration = privateDeclarations.get(id) !; - const alias = exportAliasDeclarations.get(id) || null; + const alias = exportAliasDeclarations.has(id) ? exportAliasDeclarations.get(id) ! : null; const dtsDeclaration = this.host.getDtsDeclaration(declaration.node); const dtsFrom = dtsDeclaration && AbsoluteFsPath.fromSourceFile(dtsDeclaration.getSourceFile()); diff --git a/packages/compiler-cli/ngcc/src/host/esm2015_host.ts b/packages/compiler-cli/ngcc/src/host/esm2015_host.ts index d65a6f32d6..b30074c49e 100644 --- a/packages/compiler-cli/ngcc/src/host/esm2015_host.ts +++ b/packages/compiler-cli/ngcc/src/host/esm2015_host.ts @@ -366,7 +366,9 @@ export class Esm2015ReflectionHost extends TypeScriptReflectionHost implements N throw new Error( `Cannot get the dts file for a declaration that has no name: ${declaration.getText()} in ${declaration.getSourceFile().fileName}`); } - return this.dtsDeclarationMap.get(declaration.name.text) || null; + return this.dtsDeclarationMap.has(declaration.name.text) ? + this.dtsDeclarationMap.get(declaration.name.text) ! : + null; } /** @@ -419,7 +421,9 @@ export class Esm2015ReflectionHost extends TypeScriptReflectionHost implements N */ protected resolveAliasedClassIdentifier(declaration: ts.Declaration): ts.Identifier|null { this.ensurePreprocessed(declaration.getSourceFile()); - return this.aliasedClassDeclarations.get(declaration) || null; + return this.aliasedClassDeclarations.has(declaration) ? + this.aliasedClassDeclarations.get(declaration) ! : + null; } /** @@ -738,7 +742,8 @@ export class Esm2015ReflectionHost extends TypeScriptReflectionHost implements N helperCall, makeMemberTargetFilter(classSymbol.name)); memberDecorators.forEach((decorators, memberName) => { if (memberName) { - const memberDecorators = memberDecoratorMap.get(memberName) || []; + const memberDecorators = + memberDecoratorMap.has(memberName) ? memberDecoratorMap.get(memberName) ! : []; const coreDecorators = decorators.filter(decorator => this.isFromCore(decorator)); memberDecoratorMap.set(memberName, memberDecorators.concat(coreDecorators)); } @@ -775,7 +780,8 @@ export class Esm2015ReflectionHost extends TypeScriptReflectionHost implements N if (keyName === undefined) { classDecorators.push(decorator); } else { - const decorators = memberDecorators.get(keyName) || []; + const decorators = + memberDecorators.has(keyName) ? memberDecorators.get(keyName) ! : []; decorators.push(decorator); memberDecorators.set(keyName, decorators); } @@ -874,8 +880,8 @@ export class Esm2015ReflectionHost extends TypeScriptReflectionHost implements N const decorator = reflectObjectLiteral(node); // Is the value of the `type` property an identifier? - let typeIdentifier = decorator.get('type'); - if (typeIdentifier) { + if (decorator.has('type')) { + let typeIdentifier = decorator.get('type') !; if (ts.isPropertyAccessExpression(typeIdentifier)) { // the type is in a namespace, e.g. `core.Directive` typeIdentifier = typeIdentifier.name; @@ -1036,8 +1042,8 @@ export class Esm2015ReflectionHost extends TypeScriptReflectionHost implements N */ protected getConstructorParameterDeclarations(classSymbol: ClassSymbol): ts.ParameterDeclaration[]|null { - const constructorSymbol = classSymbol.members && classSymbol.members.get(CONSTRUCTOR); - if (constructorSymbol) { + if (classSymbol.members && classSymbol.members.has(CONSTRUCTOR)) { + const constructorSymbol = classSymbol.members.get(CONSTRUCTOR) !; // For some reason the constructor does not have a `valueDeclaration` ?!? const constructor = constructorSymbol.declarations && constructorSymbol.declarations[0] as ts.ConstructorDeclaration | undefined; @@ -1113,8 +1119,10 @@ export class Esm2015ReflectionHost extends TypeScriptReflectionHost implements N element => ts.isObjectLiteralExpression(element) ? reflectObjectLiteral(element) : null) .map(paramInfo => { - const typeExpression = paramInfo && paramInfo.get('type') || null; - const decoratorInfo = paramInfo && paramInfo.get('decorators') || null; + const typeExpression = + paramInfo && paramInfo.has('type') ? paramInfo.get('type') ! : null; + const decoratorInfo = + paramInfo && paramInfo.has('decorators') ? paramInfo.get('decorators') ! : null; const decorators = decoratorInfo && this.reflectDecorators(decoratorInfo) .filter(decorator => this.isFromCore(decorator)); diff --git a/packages/compiler-cli/ngcc/src/host/esm5_host.ts b/packages/compiler-cli/ngcc/src/host/esm5_host.ts index a2354a40db..6fcfb09baa 100644 --- a/packages/compiler-cli/ngcc/src/host/esm5_host.ts +++ b/packages/compiler-cli/ngcc/src/host/esm5_host.ts @@ -339,8 +339,9 @@ export class Esm5ReflectionHost extends Esm2015ReflectionHost { if (expression && ts.isArrayLiteralExpression(expression)) { const elements = expression.elements; return elements.map(reflectArrayElement).map(paramInfo => { - const typeExpression = paramInfo && paramInfo.get('type') || null; - const decoratorInfo = paramInfo && paramInfo.get('decorators') || null; + const typeExpression = paramInfo && paramInfo.has('type') ? paramInfo.get('type') ! : null; + const decoratorInfo = + paramInfo && paramInfo.has('decorators') ? paramInfo.get('decorators') ! : null; const decorators = decoratorInfo && this.reflectDecorators(decoratorInfo); return {typeExpression, decorators}; });