void registerNestedSession( InferenceSession session, PsiType returnType, PsiExpression returnExpression) { final PsiSubstitutor callSession = findNestedSubstitutor(((PsiCallExpression) returnExpression).getArgumentList(), null); if (callSession == null) { final InferenceSession inferenceSession = ExpressionCompatibilityConstraint.reduceExpressionCompatibilityConstraint( session, returnExpression, returnType); if (inferenceSession != null && inferenceSession != session) { registerNestedSession(inferenceSession); session.propagateVariables( inferenceSession.getInferenceVariables(), inferenceSession.getRestoreNameSubstitution()); } } }