Skip to content

Commit b8923b3

Browse files
committedOct 8, 2014
Support symbol kind for union properties
1 parent d70494f commit b8923b3

File tree

4 files changed

+40
-3
lines changed

4 files changed

+40
-3
lines changed
 

‎src/compiler/checker.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ module ts {
9292
getContextualType: getContextualType,
9393
getFullyQualifiedName: getFullyQualifiedName,
9494
getResolvedSignature: getResolvedSignature,
95-
getEnumMemberValue: getEnumMemberValue
95+
getEnumMemberValue: getEnumMemberValue,
96+
getUnionTypesOfUnionProperty: getUnionTypesOfUnionProperty
9697
};
9798

9899
var undefinedSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "undefined");
@@ -1750,6 +1751,10 @@ module ts {
17501751
return links.type;
17511752
}
17521753

1754+
function getUnionTypesOfUnionProperty(symbol: Symbol): Type[] {
1755+
return (symbol.flags & SymbolFlags.UnionProperty) ? getSymbolLinks(symbol).unionType.types : undefined;
1756+
}
1757+
17531758
function getTypeOfSymbol(symbol: Symbol): Type {
17541759
if (symbol.flags & (SymbolFlags.Variable | SymbolFlags.Property)) {
17551760
return getTypeOfVariableOrParameterOrProperty(symbol);
@@ -3583,7 +3588,8 @@ module ts {
35833588
}
35843589

35853590
function getBestCommonType(types: Type[], contextualType?: Type): Type {
3586-
return contextualType && isSupertypeOfEach(contextualType, types) ? contextualType : getUnionType(types); }
3591+
return contextualType && isSupertypeOfEach(contextualType, types) ? contextualType : getUnionType(types);
3592+
}
35873593

35883594
function isTypeOfObjectLiteral(type: Type): boolean {
35893595
return (type.flags & TypeFlags.Anonymous) && type.symbol && (type.symbol.flags & SymbolFlags.ObjectLiteral) ? true : false;

‎src/compiler/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,8 @@ module ts {
657657
getContextualType(node: Node): Type;
658658
getResolvedSignature(node: CallExpression, candidatesOutArray?: Signature[]): Signature;
659659

660+
getUnionTypesOfUnionProperty(symbol: Symbol): Type[];
661+
660662
// Returns the constant value of this enum member, or 'undefined' if the enum member has a
661663
// computed value.
662664
getEnumMemberValue(node: EnumMember): number;

‎src/services/services.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -2284,8 +2284,16 @@ module ts {
22842284
}
22852285
}
22862286

2287+
function getConcreteSymbol(symbol: Symbol): Symbol {
Has a conversation. Original line has a conversation.
2288+
if (symbol.flags & SymbolFlags.UnionProperty) {
2289+
var types = typeInfoResolver.getUnionTypesOfUnionProperty(symbol);
2290+
symbol = typeInfoResolver.getPropertyOfType(types[0], symbol.name);
Has a conversation. Original line has a conversation.
2291+
}
2292+
return typeInfoResolver.getRootSymbol(symbol);
2293+
}
2294+
22872295
function getSymbolKind(symbol: Symbol): string {
2288-
var flags = typeInfoResolver.getRootSymbol(symbol).getFlags();
2296+
var flags = getConcreteSymbol(symbol).getFlags();
22892297

22902298
if (flags & SymbolFlags.Module) return ScriptElementKind.moduleElement;
22912299
if (flags & SymbolFlags.Class) return ScriptElementKind.classElement;
@@ -2344,6 +2352,7 @@ module ts {
23442352
}
23452353

23462354
function getSymbolModifiers(symbol: Symbol): string {
2355+
symbol = getConcreteSymbol(symbol);
23472356
return symbol && symbol.declarations && symbol.declarations.length > 0
23482357
? getNodeModifiers(symbol.declarations[0])
23492358
: ScriptElementKindModifier.none;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
///<reference path="fourslash.ts" />
2+
3+
////interface One {
4+
//// commonProperty: number;
5+
//// commonFunction(): number;
6+
////}
7+
////
8+
////interface Two {
9+
//// commonProperty: string
10+
//// commonFunction(): number;
11+
////}
12+
////
13+
////var x : One | Two;
14+
////
15+
////x./**/
16+
17+
goTo.marker();
18+
verify.memberListContains("commonProperty", "string | number", undefined, undefined, "property");
19+
verify.memberListContains("commonFunction", "() => number", undefined, undefined, "method");
20+
verify.memberListCount(2);

0 commit comments

Comments
 (0)
Please sign in to comment.