Adjust TypeChecker to have separate method for getApparentType

This commit is contained in:
Jason Freeman 2014-08-14 12:53:31 -07:00
parent f4c00455b8
commit 5574b58d64
4 changed files with 9 additions and 8 deletions

View file

@ -91,6 +91,7 @@ module ts {
getSymbolsInScope: getSymbolsInScope, getSymbolsInScope: getSymbolsInScope,
getSymbolInfo: getSymbolInfo, getSymbolInfo: getSymbolInfo,
getTypeOfNode: getTypeOfNode, getTypeOfNode: getTypeOfNode,
getApparentType: getApparentType,
typeToString: typeToString, typeToString: typeToString,
symbolToString: symbolToString, symbolToString: symbolToString,
getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType
@ -6820,9 +6821,9 @@ module ts {
return undefined; return undefined;
} }
function getTypeOfNode(node: Node, apparentType: boolean): Type { function getTypeOfNode(node: Node): Type {
if (isExpression(node)) { if (isExpression(node)) {
return getTypeOfExpression(<Expression>node, apparentType); return getTypeOfExpression(<Expression>node);
} }
if (isTypeNode(node)) { if (isTypeNode(node)) {
if (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.QualifiedName) { if (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.QualifiedName) {
@ -6863,12 +6864,11 @@ module ts {
Debug.fail("Unhandled case in getTypeOfNode"); Debug.fail("Unhandled case in getTypeOfNode");
} }
function getTypeOfExpression(expr: Expression, apparentType: boolean): Type { function getTypeOfExpression(expr: Expression): Type {
if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) { if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) {
expr = expr.parent; expr = expr.parent;
} }
var type = checkExpression(expr); return checkExpression(expr);
return apparentType ? getApparentType(type) : type;
} }
function getAugmentedPropertiesOfApparentType(type: Type): Symbol[]{ function getAugmentedPropertiesOfApparentType(type: Type): Symbol[]{

View file

@ -604,7 +604,8 @@ module ts {
getReturnTypeOfSignature(signature: Signature): Type; getReturnTypeOfSignature(signature: Signature): Type;
getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[];
getSymbolInfo(node: Node): Symbol; getSymbolInfo(node: Node): Symbol;
getTypeOfNode(node: Node, apparentType: boolean): Type; getTypeOfNode(node: Node): Type;
getApparentType(type: Type): ApparentType;
typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string; typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string; symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string;
getAugmentedPropertiesOfApparentType(type: Type): Symbol[]; getAugmentedPropertiesOfApparentType(type: Type): Symbol[];

View file

@ -88,7 +88,7 @@ class TypeWriterWalker {
} }
private getTypeOfNode(node: ts.Node): ts.Type { private getTypeOfNode(node: ts.Node): ts.Type {
var type = this.checker.getTypeOfNode(node, /*apparentType*/ false); var type = this.checker.getTypeOfNode(node);
ts.Debug.assert(type, "type doesn't exist"); ts.Debug.assert(type, "type doesn't exist");
return type; return type;
} }

View file

@ -1693,7 +1693,7 @@ module ts {
// Right of dot member completion list // Right of dot member completion list
if (isRightOfDot) { if (isRightOfDot) {
var type: Type = typeInfoResolver.getTypeOfNode(mappedNode, /*apparentType*/ true); var type: Type = typeInfoResolver.getApparentType(typeInfoResolver.getTypeOfNode(mappedNode));
if (!type) { if (!type) {
return undefined; return undefined;
} }