Skip to content

Commit 3a4771c

Browse files
committed
TS: Wrap getTypeOfSymbolAtLocation in try/catch
1 parent 202746e commit 3a4771c

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

javascript/extractor/lib/typescript/src/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ function parseSingleFile(filename: string): {ast: ts.SourceFile, code: string} {
243243
}
244244

245245
function handleOpenProjectCommand(command: OpenProjectCommand) {
246+
Error.stackTraceLimit = Infinity;
246247
let tsConfigFilename = String(command.tsConfig);
247248
let tsConfig = ts.readConfigFile(tsConfigFilename, ts.sys.readFile);
248249
let basePath = pathlib.dirname(tsConfigFilename);

javascript/extractor/lib/typescript/src/type_table.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,15 @@ export class TypeTable {
766766
return hash;
767767
}
768768

769+
/** Returns the type of `symbol` or `null` if it could not be computed. */
770+
private tryGetTypeOfSymbol(symbol: ts.Symbol) {
771+
try {
772+
return this.typeChecker.getTypeOfSymbolAtLocation(symbol, this.arbitraryAstNode)
773+
} catch (e) {
774+
return null;
775+
}
776+
}
777+
769778
/**
770779
* Returns a type string consisting of all the members of the given type.
771780
*
@@ -775,7 +784,7 @@ export class TypeTable {
775784
private makeStructuralTypeVector(tag: string, type: ts.ObjectType): string | null {
776785
let hash = tag;
777786
for (let property of type.getProperties()) {
778-
let propertyType = this.typeChecker.getTypeOfSymbolAtLocation(property, this.arbitraryAstNode);
787+
let propertyType = this.tryGetTypeOfSymbol(property);
779788
if (propertyType == null) return null;
780789
let propertyTypeId = this.getId(propertyType, false);
781790
if (propertyTypeId == null) return null;
@@ -882,7 +891,7 @@ export class TypeTable {
882891
let props = this.tryGetProperties(type);
883892
if (props == null) return;
884893
for (let symbol of props) {
885-
let propertyType = this.typeChecker.getTypeOfSymbolAtLocation(symbol, this.arbitraryAstNode);
894+
let propertyType = this.tryGetTypeOfSymbol(symbol);
886895
if (propertyType == null) continue;
887896
let propertyTypeId = this.getId(propertyType, false);
888897
if (propertyTypeId == null) continue;
@@ -938,7 +947,7 @@ export class TypeTable {
938947
}
939948
if (parameters.length === 0) return null;
940949
let restParameter = parameters[parameters.length - 1];
941-
let restParameterType = this.typeChecker.getTypeOfSymbolAtLocation(restParameter, this.arbitraryAstNode);
950+
let restParameterType = this.tryGetTypeOfSymbol(restParameter);
942951
if (restParameterType == null) return null;
943952
let restParameterTypeId = this.getId(restParameterType, false);
944953
if (restParameterTypeId == null) return null;
@@ -961,7 +970,7 @@ export class TypeTable {
961970
}
962971
for (let paramIndex = 0; paramIndex < parameters.length; ++paramIndex) {
963972
let parameter = parameters[paramIndex];
964-
let parameterType = this.typeChecker.getTypeOfSymbolAtLocation(parameter, this.arbitraryAstNode);
973+
let parameterType = this.tryGetTypeOfSymbol(parameter);
965974
if (parameterType == null) {
966975
return null;
967976
}
@@ -1178,7 +1187,7 @@ export class TypeTable {
11781187
stack.push(id);
11791188

11801189
for (let symbol of type.getProperties()) {
1181-
let propertyType: ts.Type = typeTable.typeChecker.getTypeOfSymbolAtLocation(symbol, typeTable.arbitraryAstNode);
1190+
let propertyType = this.tryGetTypeOfSymbol(symbol);
11821191
if (propertyType == null) continue;
11831192
traverseType(propertyType);
11841193
}
@@ -1255,7 +1264,7 @@ export class TypeTable {
12551264
if (objectFlags & ts.ObjectFlags.Anonymous) {
12561265
// Anonymous interface type like `{ x: number }`.
12571266
for (let symbol of type.getProperties()) {
1258-
let propertyType = this.typeChecker.getTypeOfSymbolAtLocation(symbol, this.arbitraryAstNode);
1267+
let propertyType = this.tryGetTypeOfSymbol(symbol);
12591268
if (propertyType == null) continue;
12601269
callback(propertyType);
12611270
}
@@ -1280,7 +1289,7 @@ export class TypeTable {
12801289
private forEachChildTypeOfSignature(signature: ts.Signature, callback: (type: ts.Type) => void): void {
12811290
callback(signature.getReturnType());
12821291
for (let parameter of signature.getParameters()) {
1283-
let paramType = this.typeChecker.getTypeOfSymbolAtLocation(parameter, this.arbitraryAstNode);
1292+
let paramType = this.tryGetTypeOfSymbol(parameter);
12841293
if (paramType == null) continue;
12851294
callback(paramType);
12861295
}

0 commit comments

Comments
 (0)