public static boolean isVariableIterable(
     @NotNull ExpressionTypingServices expressionTypingServices,
     @NotNull Project project,
     @NotNull VariableDescriptor variableDescriptor,
     @NotNull JetScope scope) {
   JetExpression expression = JetPsiFactory.createExpression(project, "fake");
   ExpressionReceiver expressionReceiver =
       new ExpressionReceiver(expression, variableDescriptor.getType());
   ExpressionTypingContext context =
       ExpressionTypingContext.newContext(
           expressionTypingServices,
           new HashMap<JetPattern, DataFlowInfo>(),
           new HashMap<JetPattern, List<VariableDescriptor>>(),
           new LabelResolver(),
           new BindingTraceContext(),
           scope,
           DataFlowInfo.EMPTY,
           TypeUtils.NO_EXPECTED_TYPE,
           TypeUtils.NO_EXPECTED_TYPE,
           false);
   return ControlStructureTypingVisitor.checkIterableConvention(expressionReceiver, context)
       != null;
 }
 @Override
 public JetTypeInfo visitIfExpression(
     JetIfExpression expression, ExpressionTypingContext context) {
   return controlStructures.visitIfExpression(expression, context, true);
 }