diff --git a/src/services/services.ts b/src/services/services.ts
index d208eb87e96..9522d3cb3d4 100644
--- a/src/services/services.ts
+++ b/src/services/services.ts
@@ -2764,7 +2764,8 @@ module ts {
if (flags & SymbolFlags.Property) {
if (flags & SymbolFlags.UnionProperty) {
- return forEach(typeInfoResolver.getRootSymbols(symbol), rootSymbol => {
+ // If any of the property includes the declaration of property - the kind is property
+ var unionPropetyKind = forEach(typeInfoResolver.getRootSymbols(symbol), rootSymbol => {
var rootSymbolFlags = rootSymbol.getFlags();
if (rootSymbolFlags & SymbolFlags.Property) {
return ScriptElementKind.memberVariableElement;
@@ -2772,7 +2773,16 @@ module ts {
if (rootSymbolFlags & SymbolFlags.GetAccessor) return ScriptElementKind.memberVariableElement;
if (rootSymbolFlags & SymbolFlags.SetAccessor) return ScriptElementKind.memberVariableElement;
Debug.assert((rootSymbolFlags & SymbolFlags.Method) !== undefined);
- }) || ScriptElementKind.memberFunctionElement;
+ });
+ if (!unionPropetyKind) {
+ // If this was union of all methods, make sure it has call signatures before we call it method
+ var typeOfUnionProperty = typeInfoResolver.getTypeOfSymbol(symbol);
+ if (typeOfUnionProperty.getCallSignatures().length) {
+ return ScriptElementKind.memberFunctionElement;
+ }
+ return ScriptElementKind.memberVariableElement;
+ }
+ return unionPropetyKind;
}
return ScriptElementKind.memberVariableElement;
}
diff --git a/tests/cases/fourslash/completionEntryForUnionMethod.ts b/tests/cases/fourslash/completionEntryForUnionMethod.ts
new file mode 100644
index 00000000000..6eb68342d1f
--- /dev/null
+++ b/tests/cases/fourslash/completionEntryForUnionMethod.ts
@@ -0,0 +1,8 @@
+///
+
+////var y: Array|Array;
+////y.map/**/(
+
+goTo.marker();
+verify.quickInfoIs("(property) map: ((callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | ((callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[])");
+verify.completionListContains('map', "(property) map: ((callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | ((callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[])");
\ No newline at end of file