PsiElement (@NotNull PsiElement context, @NotNull PyResolveContext resolveContext) { if (myTarget != null) { return myTarget; } PyClass targetClass = null; if (myTypeName != null) { final ParameterizedCachedValueProvider<PyClass, PsiElement> provider = param -> { final PyClass result = PyPsiFacade.getInstance(param.getProject()).createClassByQName(myTypeName, param); return CachedValueProvider.Result.create(result, PsiModificationTracker.MODIFICATION_COUNT); }; targetClass = CachedValuesManager.getManager(context.getProject()).getParameterizedCachedValue(this, RESOLVE, provider, false, context); } final PsiElement resolveTarget = findResolveTarget(context, resolveContext); if (resolveTarget instanceof PyFunction && !myAlwaysResolveToCustomElement) { return resolveTarget; } if (resolveTarget != null || targetClass != null) { if (targetClass == null && resolveTarget instanceof PyClass) { targetClass = (PyClass)resolveTarget; } return PyCustomMemberProvider.getInstance().createPyCustomMemberTarget(this, targetClass, context, resolveTarget, myTypeCallback, myCustomTypeInfo, myResolveToInstance); } return null; }