From 524b7c9954303353b7108a60e87455e70e2c00ed Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 14 Sep 2018 10:47:29 -0700 Subject: [PATCH] Fix resulting issues in compiler --- src/services/utilities.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 40a9936b605..926e50b1e96 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -1648,17 +1648,21 @@ namespace ts { * WARNING: This is an expensive operation and is only intended to be used in refactorings * and code fixes (because those are triggered by explicit user actions). */ - export function getSynthesizedDeepClone(node: T, includeTrivia = true): T { + export function getSynthesizedDeepClone(node: T, includeTrivia?: boolean): T; + export function getSynthesizedDeepClone(node: T | undefined, includeTrivia?: boolean): T | undefined; + export function getSynthesizedDeepClone(node: T | undefined, includeTrivia = true): T | undefined { const clone = node && getSynthesizedDeepCloneWorker(node as NonNullable); if (clone && !includeTrivia) suppressLeadingAndTrailingTrivia(clone); return clone; } - export function getSynthesizedDeepCloneWithRenames(node: T, includeTrivia = true, renameMap?: Map, checker?: TypeChecker, callback?: (originalNode: Node, clone: Node) => any): T { + export function getSynthesizedDeepCloneWithRenames(node: T, includeTrivia?: boolean, renameMap?: Map, checker?: TypeChecker, callback?: (originalNode: Node, clone: Node) => any): T; + export function getSynthesizedDeepCloneWithRenames(node: T | undefined, includeTrivia?: boolean, renameMap?: Map, checker?: TypeChecker, callback?: (originalNode: Node, clone: Node) => any): T | undefined; + export function getSynthesizedDeepCloneWithRenames(node: T | undefined, includeTrivia = true, renameMap?: Map, checker?: TypeChecker, callback?: (originalNode: Node, clone: Node) => any): T | undefined { let clone; - if (node && isIdentifier(node!) && renameMap && checker) { - const symbol = checker.getSymbolAtLocation(node!); + if (node && isIdentifier(node) && renameMap && checker) { + const symbol = checker.getSymbolAtLocation(node); const renameInfo = symbol && renameMap.get(String(getSymbolId(symbol))); if (renameInfo) { @@ -1667,11 +1671,11 @@ namespace ts { } if (!clone) { - clone = node && getSynthesizedDeepCloneWorker(node as NonNullable, renameMap, checker, callback); + clone = node && getSynthesizedDeepCloneWorker(node, renameMap, checker, callback); } if (clone && !includeTrivia) suppressLeadingAndTrailingTrivia(clone); - if (callback && node) callback(node!, clone); + if (callback && node && clone) callback(node, clone); return clone as T; }