void (String paramName, PyExpression argument, PsiFile containingFile) { assert argument != null : "Parameter mapped to null argument"; PyCallable callable = null; if (argument instanceof PyReferenceExpression) { final PsiPolyVariantReference reference = ((PyReferenceExpression)argument).getReference(getResolveContext()); PsiElement resolved = reference.resolve(); if (resolved instanceof PyCallable) { callable = (PyCallable)resolved; } else { reportNonCallableArg(resolved, argument); return; } } else if (argument instanceof PyLambdaExpression) { callable = (PyLambdaExpression)argument; } else if (!"doc".equals(paramName)) { reportNonCallableArg(argument, argument); return; } if (callable != null && callable.getContainingFile() != containingFile) { return; } if ("fget".equals(paramName)) { checkGetter(callable, argument); } else if ("fset".equals(paramName)) { checkSetter(callable, argument); } else if ("fdel".equals(paramName)) { checkDeleter(callable, argument); } else if ("doc".equals(paramName)) { PyType type = myTypeEvalContext.getType(argument); if (!(type instanceof PyClassType && myStringClasses.contains(((PyClassType)type).getPyClass()))) { registerProblem(argument, PyPsiBundle.message("INSP.doc.param.should.be.str")); } } }