Merge pull request #5169 from Microsoft/fix-simple-uses-of-polymorphic-this-in-services

Fix simple uses of polymorphic this in services
This commit is contained in:
Nathan Shively-Sanders 2015-10-12 13:54:50 -07:00
commit 8a051343ff
6 changed files with 54 additions and 48 deletions

View File

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

View File

@ -4112,8 +4112,9 @@ namespace ts {
let useConstructSignatures = callExpression.kind === SyntaxKind.NewExpression || callExpression.expression.kind === SyntaxKind.SuperKeyword;
let allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures();
if (!contains(allSignatures, signature.target || signature)) {
// Get the first signature if there
if (!contains(allSignatures, signature.target) && !contains(allSignatures, signature)) {
// Get the first signature if there is one -- allSignatures may contain
// either the original signature or its target, so check for either
signature = allSignatures.length ? allSignatures[0] : undefined;
}

View File

@ -482,8 +482,8 @@ verify.quickInfoIs("(method) c.prop1(a: number): number (+1 overload)", "");
goTo.marker('46');
verify.currentSignatureHelpDocCommentIs("");
verify.currentParameterHelpArgumentDocCommentIs("");
//goTo.marker('46q');
//verify.quickInfoIs("(method) c.prop1(b: string): number (+1 overload)", "");
goTo.marker('46q');
verify.quickInfoIs("(method) c.prop1(b: string): number (+1 overload)", "");
goTo.marker('47');
verify.currentSignatureHelpDocCommentIs("prop2 1");
@ -494,8 +494,8 @@ verify.quickInfoIs("(method) c.prop2(a: number): number (+1 overload)", "prop2 1
goTo.marker('48');
verify.currentSignatureHelpDocCommentIs("");
verify.currentParameterHelpArgumentDocCommentIs("");
//goTo.marker('48q');
//verify.quickInfoIs("(method) c.prop2(b: string): number (+1 overload)", "");
goTo.marker('48q');
verify.quickInfoIs("(method) c.prop2(b: string): number (+1 overload)", "");
goTo.marker('49');
verify.currentSignatureHelpDocCommentIs("");
@ -506,8 +506,8 @@ verify.quickInfoIs("(method) c.prop3(a: number): number (+1 overload)", "");
goTo.marker('50');
verify.currentSignatureHelpDocCommentIs("prop3 2");
verify.currentParameterHelpArgumentDocCommentIs("");
//goTo.marker('50q');
//verify.quickInfoIs("(method) c.prop3(b: string): number (+1 overload)", "prop3 2");
goTo.marker('50q');
verify.quickInfoIs("(method) c.prop3(b: string): number (+1 overload)", "prop3 2");
goTo.marker('51');
verify.currentSignatureHelpDocCommentIs("prop4 1");
@ -518,8 +518,8 @@ verify.quickInfoIs("(method) c.prop4(a: number): number (+1 overload)", "prop4 1
goTo.marker('52');
verify.currentSignatureHelpDocCommentIs("prop4 2");
verify.currentParameterHelpArgumentDocCommentIs("");
//goTo.marker('52q');
//verify.quickInfoIs("(method) c.prop4(b: string): number (+1 overload)", "prop4 2");
goTo.marker('52q');
verify.quickInfoIs("(method) c.prop4(b: string): number (+1 overload)", "prop4 2");
goTo.marker('53');
verify.currentSignatureHelpDocCommentIs("prop5 1");
@ -530,8 +530,8 @@ verify.quickInfoIs("(method) c.prop5(a: number): number (+1 overload)", "prop5 1
goTo.marker('54');
verify.currentSignatureHelpDocCommentIs("prop5 2");
verify.currentParameterHelpArgumentDocCommentIs("");
//goTo.marker('54q');
//verify.quickInfoIs("(method) c.prop5(b: string): number (+1 overload)", "prop5 2");
goTo.marker('54q');
verify.quickInfoIs("(method) c.prop5(b: string): number (+1 overload)", "prop5 2");
goTo.marker('55');
verify.currentSignatureHelpDocCommentIs("");
@ -730,4 +730,4 @@ goTo.marker('106');
verify.quickInfoIs("(method) c.prop5(b: string): number (+1 overload)", "prop5 2");
goTo.marker('107');
verify.quickInfoIs("(method) c.prop5(a: number): number (+1 overload)", "prop5 1");
verify.quickInfoIs("(method) c.prop5(a: number): number (+1 overload)", "prop5 1");

View File

@ -31,15 +31,15 @@
// Same class, everything is visible
//goTo.marker("1");
//verify.memberListContains('privateMethod');
//verify.memberListContains('privateProperty');
//verify.memberListContains('protectedMethod');
//verify.memberListContains('protectedProperty');
//verify.memberListContains('publicMethod');
//verify.memberListContains('publicProperty');
//verify.memberListContains('protectedOverriddenMethod');
//verify.memberListContains('protectedOverriddenProperty');
goTo.marker("1");
verify.memberListContains('privateMethod');
verify.memberListContains('privateProperty');
verify.memberListContains('protectedMethod');
verify.memberListContains('protectedProperty');
verify.memberListContains('publicMethod');
verify.memberListContains('publicProperty');
verify.memberListContains('protectedOverriddenMethod');
verify.memberListContains('protectedOverriddenProperty');
goTo.marker("2");
verify.memberListContains('privateMethod');
@ -60,4 +60,4 @@ verify.memberListContains('protectedProperty');
verify.memberListContains('publicMethod');
verify.memberListContains('publicProperty');
verify.not.memberListContains('protectedOverriddenMethod');
verify.not.memberListContains('protectedOverriddenProperty');
verify.not.memberListContains('protectedOverriddenProperty');

View File

@ -32,15 +32,15 @@
// Same class, everything is visible
//goTo.marker("1");
//verify.not.memberListContains('privateMethod');
//verify.not.memberListContains('privateProperty');
//verify.memberListContains('protectedMethod');
//verify.memberListContains('protectedProperty');
//verify.memberListContains('publicMethod');
//verify.memberListContains('publicProperty');
//verify.memberListContains('protectedOverriddenMethod');
//verify.memberListContains('protectedOverriddenProperty');
goTo.marker("1");
verify.not.memberListContains('privateMethod');
verify.not.memberListContains('privateProperty');
verify.memberListContains('protectedMethod');
verify.memberListContains('protectedProperty');
verify.memberListContains('publicMethod');
verify.memberListContains('publicProperty');
verify.memberListContains('protectedOverriddenMethod');
verify.memberListContains('protectedOverriddenProperty');
// Can not access properties on super
goTo.marker("2");

View File

@ -18,25 +18,25 @@
////var b: Base;
////f./*5*/
//goTo.marker("1");
//verify.memberListContains("y");
//verify.memberListContains("x");
//verify.not.memberListContains("z");
goTo.marker("1");
verify.memberListContains("y");
verify.memberListContains("x");
verify.not.memberListContains("z");
//goTo.marker("2");
//verify.memberListContains("y");
//verify.memberListContains("x");
//verify.memberListContains("z");
goTo.marker("2");
verify.memberListContains("y");
verify.memberListContains("x");
verify.memberListContains("z");
//goTo.marker("3");
//verify.memberListContains("y");
//verify.memberListContains("x");
//verify.not.memberListContains("z");
goTo.marker("3");
verify.memberListContains("y");
verify.memberListContains("x");
verify.not.memberListContains("z");
//goTo.marker("4");
//verify.memberListContains("y");
//verify.memberListContains("x");
//verify.memberListContains("z");
goTo.marker("4");
verify.memberListContains("y");
verify.memberListContains("x");
verify.memberListContains("z");
goTo.marker("5");
verify.not.memberListContains("x");