Skip to content

Commit 8a05134

Browse files
committed
Merge pull request #5169 from Microsoft/fix-simple-uses-of-polymorphic-this-in-services
Fix simple uses of polymorphic this in services
2 parents c05297c + f19a2f5 commit 8a05134

6 files changed

+54
-48
lines changed

src/compiler/checker.ts

+5
Original file line numberDiff line numberDiff line change
@@ -7984,6 +7984,11 @@ namespace ts {
79847984
return true;
79857985
}
79867986
// An instance property must be accessed through an instance of the enclosing class
7987+
if (type.flags & TypeFlags.ThisType) {
7988+
// get the original type -- represented as the type constraint of the 'this' type
7989+
type = getConstraintOfTypeParameter(<TypeParameter>type);
7990+
}
7991+
79877992
// TODO: why is the first part of this check here?
79887993
if (!(getTargetType(type).flags & (TypeFlags.Class | TypeFlags.Interface) && hasBaseType(<InterfaceType>type, enclosingClass))) {
79897994
error(node, Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass));

src/services/services.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -4112,8 +4112,9 @@ namespace ts {
41124112
let useConstructSignatures = callExpression.kind === SyntaxKind.NewExpression || callExpression.expression.kind === SyntaxKind.SuperKeyword;
41134113
let allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures();
41144114

4115-
if (!contains(allSignatures, signature.target || signature)) {
4116-
// Get the first signature if there
4115+
if (!contains(allSignatures, signature.target) && !contains(allSignatures, signature)) {
4116+
// Get the first signature if there is one -- allSignatures may contain
4117+
// either the original signature or its target, so check for either
41174118
signature = allSignatures.length ? allSignatures[0] : undefined;
41184119
}
41194120

tests/cases/fourslash/commentsOverloads.ts

+11-11
Original file line numberDiff line numberDiff line change
@@ -482,8 +482,8 @@ verify.quickInfoIs("(method) c.prop1(a: number): number (+1 overload)", "");
482482
goTo.marker('46');
483483
verify.currentSignatureHelpDocCommentIs("");
484484
verify.currentParameterHelpArgumentDocCommentIs("");
485-
//goTo.marker('46q');
486-
//verify.quickInfoIs("(method) c.prop1(b: string): number (+1 overload)", "");
485+
goTo.marker('46q');
486+
verify.quickInfoIs("(method) c.prop1(b: string): number (+1 overload)", "");
487487

488488
goTo.marker('47');
489489
verify.currentSignatureHelpDocCommentIs("prop2 1");
@@ -494,8 +494,8 @@ verify.quickInfoIs("(method) c.prop2(a: number): number (+1 overload)", "prop2 1
494494
goTo.marker('48');
495495
verify.currentSignatureHelpDocCommentIs("");
496496
verify.currentParameterHelpArgumentDocCommentIs("");
497-
//goTo.marker('48q');
498-
//verify.quickInfoIs("(method) c.prop2(b: string): number (+1 overload)", "");
497+
goTo.marker('48q');
498+
verify.quickInfoIs("(method) c.prop2(b: string): number (+1 overload)", "");
499499

500500
goTo.marker('49');
501501
verify.currentSignatureHelpDocCommentIs("");
@@ -506,8 +506,8 @@ verify.quickInfoIs("(method) c.prop3(a: number): number (+1 overload)", "");
506506
goTo.marker('50');
507507
verify.currentSignatureHelpDocCommentIs("prop3 2");
508508
verify.currentParameterHelpArgumentDocCommentIs("");
509-
//goTo.marker('50q');
510-
//verify.quickInfoIs("(method) c.prop3(b: string): number (+1 overload)", "prop3 2");
509+
goTo.marker('50q');
510+
verify.quickInfoIs("(method) c.prop3(b: string): number (+1 overload)", "prop3 2");
511511

512512
goTo.marker('51');
513513
verify.currentSignatureHelpDocCommentIs("prop4 1");
@@ -518,8 +518,8 @@ verify.quickInfoIs("(method) c.prop4(a: number): number (+1 overload)", "prop4 1
518518
goTo.marker('52');
519519
verify.currentSignatureHelpDocCommentIs("prop4 2");
520520
verify.currentParameterHelpArgumentDocCommentIs("");
521-
//goTo.marker('52q');
522-
//verify.quickInfoIs("(method) c.prop4(b: string): number (+1 overload)", "prop4 2");
521+
goTo.marker('52q');
522+
verify.quickInfoIs("(method) c.prop4(b: string): number (+1 overload)", "prop4 2");
523523

524524
goTo.marker('53');
525525
verify.currentSignatureHelpDocCommentIs("prop5 1");
@@ -530,8 +530,8 @@ verify.quickInfoIs("(method) c.prop5(a: number): number (+1 overload)", "prop5 1
530530
goTo.marker('54');
531531
verify.currentSignatureHelpDocCommentIs("prop5 2");
532532
verify.currentParameterHelpArgumentDocCommentIs("");
533-
//goTo.marker('54q');
534-
//verify.quickInfoIs("(method) c.prop5(b: string): number (+1 overload)", "prop5 2");
533+
goTo.marker('54q');
534+
verify.quickInfoIs("(method) c.prop5(b: string): number (+1 overload)", "prop5 2");
535535

536536
goTo.marker('55');
537537
verify.currentSignatureHelpDocCommentIs("");
@@ -730,4 +730,4 @@ goTo.marker('106');
730730
verify.quickInfoIs("(method) c.prop5(b: string): number (+1 overload)", "prop5 2");
731731

732732
goTo.marker('107');
733-
verify.quickInfoIs("(method) c.prop5(a: number): number (+1 overload)", "prop5 1");
733+
verify.quickInfoIs("(method) c.prop5(a: number): number (+1 overload)", "prop5 1");

tests/cases/fourslash/completionListInstanceProtectedMembers.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@
3131

3232

3333
// Same class, everything is visible
34-
//goTo.marker("1");
35-
//verify.memberListContains('privateMethod');
36-
//verify.memberListContains('privateProperty');
37-
//verify.memberListContains('protectedMethod');
38-
//verify.memberListContains('protectedProperty');
39-
//verify.memberListContains('publicMethod');
40-
//verify.memberListContains('publicProperty');
41-
//verify.memberListContains('protectedOverriddenMethod');
42-
//verify.memberListContains('protectedOverriddenProperty');
34+
goTo.marker("1");
35+
verify.memberListContains('privateMethod');
36+
verify.memberListContains('privateProperty');
37+
verify.memberListContains('protectedMethod');
38+
verify.memberListContains('protectedProperty');
39+
verify.memberListContains('publicMethod');
40+
verify.memberListContains('publicProperty');
41+
verify.memberListContains('protectedOverriddenMethod');
42+
verify.memberListContains('protectedOverriddenProperty');
4343

4444
goTo.marker("2");
4545
verify.memberListContains('privateMethod');
@@ -60,4 +60,4 @@ verify.memberListContains('protectedProperty');
6060
verify.memberListContains('publicMethod');
6161
verify.memberListContains('publicProperty');
6262
verify.not.memberListContains('protectedOverriddenMethod');
63-
verify.not.memberListContains('protectedOverriddenProperty');
63+
verify.not.memberListContains('protectedOverriddenProperty');

tests/cases/fourslash/completionListInstanceProtectedMembers2.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@
3232

3333

3434
// Same class, everything is visible
35-
//goTo.marker("1");
36-
//verify.not.memberListContains('privateMethod');
37-
//verify.not.memberListContains('privateProperty');
38-
//verify.memberListContains('protectedMethod');
39-
//verify.memberListContains('protectedProperty');
40-
//verify.memberListContains('publicMethod');
41-
//verify.memberListContains('publicProperty');
42-
//verify.memberListContains('protectedOverriddenMethod');
43-
//verify.memberListContains('protectedOverriddenProperty');
35+
goTo.marker("1");
36+
verify.not.memberListContains('privateMethod');
37+
verify.not.memberListContains('privateProperty');
38+
verify.memberListContains('protectedMethod');
39+
verify.memberListContains('protectedProperty');
40+
verify.memberListContains('publicMethod');
41+
verify.memberListContains('publicProperty');
42+
verify.memberListContains('protectedOverriddenMethod');
43+
verify.memberListContains('protectedOverriddenProperty');
4444

4545
// Can not access properties on super
4646
goTo.marker("2");

tests/cases/fourslash/completionListProtectedMembers.ts

+16-16
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,25 @@
1818
////var b: Base;
1919
////f./*5*/
2020

21-
//goTo.marker("1");
22-
//verify.memberListContains("y");
23-
//verify.memberListContains("x");
24-
//verify.not.memberListContains("z");
21+
goTo.marker("1");
22+
verify.memberListContains("y");
23+
verify.memberListContains("x");
24+
verify.not.memberListContains("z");
2525

26-
//goTo.marker("2");
27-
//verify.memberListContains("y");
28-
//verify.memberListContains("x");
29-
//verify.memberListContains("z");
26+
goTo.marker("2");
27+
verify.memberListContains("y");
28+
verify.memberListContains("x");
29+
verify.memberListContains("z");
3030

31-
//goTo.marker("3");
32-
//verify.memberListContains("y");
33-
//verify.memberListContains("x");
34-
//verify.not.memberListContains("z");
31+
goTo.marker("3");
32+
verify.memberListContains("y");
33+
verify.memberListContains("x");
34+
verify.not.memberListContains("z");
3535

36-
//goTo.marker("4");
37-
//verify.memberListContains("y");
38-
//verify.memberListContains("x");
39-
//verify.memberListContains("z");
36+
goTo.marker("4");
37+
verify.memberListContains("y");
38+
verify.memberListContains("x");
39+
verify.memberListContains("z");
4040

4141
goTo.marker("5");
4242
verify.not.memberListContains("x");

0 commit comments

Comments
 (0)