int (@NotNull final PyReferenceExpression callReference, @NotNull PyFunction function, @NotNull PyResolveContext resolveContext) { QualifiedResolveResult followed = callReference.followAssignmentsChain(resolveContext); final List<PyExpression> qualifiers = followed.getQualifiers(); final PyExpression firstQualifier = ContainerUtil.getFirstItem(qualifiers); boolean isByInstance = isQualifiedByInstance(function, qualifiers, resolveContext.getTypeEvalContext()); String name = callReference.getName(); final boolean isConstructorCall = PyUtil.isInitOrNewMethod(function) && (!callReference.isQualified() || !PyNames.INIT.equals(name) && !PyNames.NEW.equals(name)); boolean isByClass = firstQualifier != null && isQualifiedByClass(function, firstQualifier, resolveContext.getTypeEvalContext()); return getImplicitArgumentCount(function, function.getModifier(), isConstructorCall, isByInstance, isByClass); }