Fixed regression in constructor argument validation.

This commit is contained in:
Eric Traut 2019-03-14 16:44:14 -07:00
parent f0bf4a1f74
commit 4f270b62d7
2 changed files with 12 additions and 5 deletions

View File

@ -1943,9 +1943,16 @@ export class TypeAnalyzer extends ParseTreeWalker {
private _validateConstructorArguments(node: CallExpressionNode, type: ClassType) {
let validatedTypes = false;
const initMethodMember = TypeUtils.lookUpClassMember(type, '__init__', false);
if (initMethodMember && initMethodMember.symbol) {
const initMethodType = TypeUtils.getEffectiveTypeOfMember(initMethodMember);
this._validateCallArguments(node, initMethodType, true);
if (initMethodMember) {
if (initMethodMember.symbol) {
const initMethodType = TypeUtils.getEffectiveTypeOfMember(initMethodMember);
this._validateCallArguments(node, initMethodType, true);
} else {
// If we received a defined result with no symbol, that
// means one of the base classes was an "any" type, so
// we don't know if it has a valid intializer.
}
validatedTypes = true;
}
@ -1961,7 +1968,7 @@ export class TypeAnalyzer extends ParseTreeWalker {
if (!validatedTypes && node.arguments.length > 0) {
this._addError(
`Expected 0 arguments to '${ type.getClassName() }' constructor`, node);
`Expected no arguments to '${ type.getClassName() }' constructor`, node);
}
}

View File

@ -816,7 +816,7 @@ export class TypeAnnotation {
let typeParameters = classType.getTypeParameters();
if (typeArgCount > typeParameters.length) {
if (typeParameters.length === 0) {
diagSink.addErrorWithTextRange(`No type arguments were expected`,
diagSink.addErrorWithTextRange(`Expected no type arguments`,
typeArgs[typeParameters.length].node);
} else {
diagSink.addErrorWithTextRange(