Skip to content

Commit 2194300

Browse files
Bugfix: Function return value is not resolved correctly, see #70
1 parent 8b2470f commit 2194300

File tree

4 files changed

+47
-27
lines changed

4 files changed

+47
-27
lines changed

bin/typedoc.js

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ var td;
372372
/**
373373
* The version number of TypeDoc.
374374
*/
375-
Application.VERSION = '0.3.0';
375+
Application.VERSION = '0.3.1';
376376
return Application;
377377
})();
378378
td.Application = Application;
@@ -1666,7 +1666,19 @@ var td;
16661666
* @returns The type declaration of the given node.
16671667
*/
16681668
Context.prototype.getTypeAtLocation = function (node) {
1669-
return this.checker.getTypeAtLocation(node);
1669+
try {
1670+
return this.checker.getTypeAtLocation(node);
1671+
}
1672+
catch (error) {
1673+
try {
1674+
if (node.symbol) {
1675+
return this.checker.getDeclaredTypeOfSymbol(node.symbol);
1676+
}
1677+
}
1678+
catch (error) {
1679+
}
1680+
}
1681+
return null;
16701682
};
16711683
/**
16721684
* Return the current logger instance.
@@ -2735,11 +2747,13 @@ var td;
27352747
return convertUnionTypeNode(context, node);
27362748
}
27372749
// Node based type conversions by type flags
2738-
if (type.flags & 512 /* TypeParameter */) {
2739-
return convertTypeParameterNode(context, node);
2740-
}
2741-
else if (type.flags & 48128 /* ObjectType */) {
2742-
return convertTypeReferenceNode(context, node, type);
2750+
if (type) {
2751+
if (type.flags & 512 /* TypeParameter */) {
2752+
return convertTypeParameterNode(context, node);
2753+
}
2754+
else if (type.flags & 48128 /* ObjectType */) {
2755+
return convertTypeReferenceNode(context, node, type);
2756+
}
27432757
}
27442758
}
27452759
// Type conversions by type flags
@@ -3314,13 +3328,11 @@ var td;
33143328
function extractSignatureType(context, node) {
33153329
var checker = context.checker;
33163330
if (node.kind & 129 /* CallSignature */ || node.kind & 145 /* CallExpression */) {
3317-
var type = checker.getTypeAtLocation(node);
3318-
var signatures = checker.getSignaturesOfType(type, 0 /* Call */);
3319-
for (var i = 0, c = signatures.length; i < c; i++) {
3320-
var signature = signatures[i];
3321-
if (signature.declaration == node) {
3322-
return converter.convertType(context, node.type, checker.getReturnTypeOfSignature(signature));
3323-
}
3331+
try {
3332+
var signature = checker.getSignatureFromDeclaration(node);
3333+
return converter.convertType(context, node.type, checker.getReturnTypeOfSignature(signature));
3334+
}
3335+
catch (error) {
33243336
}
33253337
}
33263338
if (node.type) {

src/td/converter/Context.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,17 @@ module td.converter
123123
* @returns The type declaration of the given node.
124124
*/
125125
getTypeAtLocation(node:ts.Node):ts.Type {
126-
return this.checker.getTypeAtLocation(node);
126+
try {
127+
return this.checker.getTypeAtLocation(node);
128+
} catch (error) {
129+
try {
130+
if (node.symbol) {
131+
return this.checker.getDeclaredTypeOfSymbol(node.symbol);
132+
}
133+
} catch (error) {}
134+
}
135+
136+
return null;
127137
}
128138

129139

src/td/converter/converters/convertType.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ module td.converter
3030
}
3131

3232
// Node based type conversions by type flags
33-
if (type.flags & ts.TypeFlags.TypeParameter) {
34-
return convertTypeParameterNode(context, <ts.TypeReferenceNode>node);
35-
} else if (type.flags & ts.TypeFlags.ObjectType) {
36-
return convertTypeReferenceNode(context, <ts.TypeReferenceNode>node, <ts.TypeReference>type);
33+
if (type) {
34+
if (type.flags & ts.TypeFlags.TypeParameter) {
35+
return convertTypeParameterNode(context, <ts.TypeReferenceNode>node);
36+
} else if (type.flags & ts.TypeFlags.ObjectType) {
37+
return convertTypeReferenceNode(context, <ts.TypeReferenceNode>node, <ts.TypeReference>type);
38+
}
3739
}
3840
}
3941

src/td/converter/converters/factories.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -192,14 +192,10 @@ module td.converter
192192
function extractSignatureType(context:Context, node:ts.SignatureDeclaration):models.Type {
193193
var checker = context.checker;
194194
if (node.kind & ts.SyntaxKind.CallSignature || node.kind & ts.SyntaxKind.CallExpression) {
195-
var type = checker.getTypeAtLocation(node);
196-
var signatures = checker.getSignaturesOfType(type, ts.SignatureKind.Call)
197-
for (var i = 0, c = signatures.length; i < c; i++) {
198-
var signature = signatures[i];
199-
if (signature.declaration == node) {
200-
return convertType(context, node.type, checker.getReturnTypeOfSignature(signature));
201-
}
202-
}
195+
try {
196+
var signature = checker.getSignatureFromDeclaration(node);
197+
return convertType(context, node.type, checker.getReturnTypeOfSignature(signature));
198+
} catch (error) {}
203199
}
204200

205201
if (node.type) {

0 commit comments

Comments
 (0)